.
9 |
10 | .list-group {
11 | // No need to set list-style: none; since .list-group-item is block level
12 | margin-bottom: 20px;
13 | padding-left: 0; // reset padding because ul and ol
14 | }
15 |
16 |
17 | // Individual list items
18 | //
19 | // Use on `li`s or `div`s within the `.list-group` parent.
20 |
21 | .list-group-item {
22 | position: relative;
23 | display: block;
24 | padding: 10px 15px;
25 | // Place the border on the list items and negative margin up for better styling
26 | margin-bottom: -1px;
27 | background-color: @list-group-bg;
28 | border: 1px solid @list-group-border;
29 |
30 | // Round the first and last items
31 | &:first-child {
32 | .border-top-radius(@list-group-border-radius);
33 | }
34 | &:last-child {
35 | margin-bottom: 0;
36 | .border-bottom-radius(@list-group-border-radius);
37 | }
38 |
39 | // Align badges within list items
40 | > .badge {
41 | float: right;
42 | }
43 | > .badge + .badge {
44 | margin-right: 5px;
45 | }
46 | }
47 |
48 |
49 | // Linked list items
50 | //
51 | // Use anchor elements instead of `li`s or `div`s to create linked list items.
52 | // Includes an extra `.active` modifier class for showing selected items.
53 |
54 | a.list-group-item {
55 | color: @list-group-link-color;
56 |
57 | .list-group-item-heading {
58 | color: @list-group-link-heading-color;
59 | }
60 |
61 | // Hover state
62 | &:hover,
63 | &:focus {
64 | text-decoration: none;
65 | background-color: @list-group-hover-bg;
66 | }
67 |
68 | // Active class on item itself, not parent
69 | &.active,
70 | &.active:hover,
71 | &.active:focus {
72 | z-index: 2; // Place active items above their siblings for proper border styling
73 | color: @list-group-active-color;
74 | background-color: @list-group-active-bg;
75 | border-color: @list-group-active-border;
76 |
77 | // Force color to inherit for custom content
78 | .list-group-item-heading {
79 | color: inherit;
80 | }
81 | .list-group-item-text {
82 | color: @list-group-active-text-color;
83 | }
84 | }
85 | }
86 |
87 |
88 | // Contextual variants
89 | //
90 | // Add modifier classes to change text and background color on individual items.
91 | // Organizationally, this must come after the `:hover` states.
92 |
93 | .list-group-item-variant(success; @state-success-bg; @state-success-text);
94 | .list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
95 | .list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
96 | .list-group-item-variant(info; @state-info-bg; @state-info-text);
97 |
98 |
99 | // Custom content options
100 | //
101 | // Extra classes for creating well-formatted content within `.list-group-item`s.
102 |
103 | .list-group-item-heading {
104 | margin-top: 0;
105 | margin-bottom: 5px;
106 | }
107 | .list-group-item-text {
108 | margin-bottom: 0;
109 | line-height: 1.3;
110 | }
111 |
--------------------------------------------------------------------------------
/templates/_layouts/default.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{> header }}
6 |
7 |
8 |
Skip to main content
9 |
10 |
11 | {{> nav-main }}
12 |
13 |
14 |
21 |
22 |
23 | {{> old-bs-docs }}
24 |
25 |
26 |
27 |
28 |
50 |
51 |
52 | {{> body }}
53 |
54 |
55 |
56 |
57 |
58 |
60 |
80 |
81 |
82 | {{> footer }}
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/.verbrc.md:
--------------------------------------------------------------------------------
1 | # {%= name %} {%= badge("fury") %}
2 |
3 | > {%= description %}
4 |
5 | #### [See it live →](http://assemble.github.io/boilerplate-bootstrap/)
6 |
7 | * Converts the liquid templates to Handlebars
8 | * Builds the HTML from templates using [Assemble][assemble].
9 | * Swaps out some Bootstrap content with metadata from [_config.yml](./_config.yml).
10 |
11 | ## Quickstart
12 | _You must have [NPM](npmjs.org), [Bower][bower] and [Grunt][grunt] installed globally before you begin._
13 |
14 | #### 1. Download this project
15 | Do _one_ of the following:
16 |
17 | * **[download][download]** this project
18 | * `git clone git://github.com/assemble/boilerplate-bootstrap.git`
19 | * `bower install boilerplate-bootstrap`
20 |
21 | #### 2. Next, install Bootstrap and dependencies
22 | Next, `cd` into the project run the following in the command line:
23 |
24 | ```bash
25 | npm i && git clone git://github.com/twbs/bootstrap.git "vendor/bootstrap" && cd vendor/bootstrap && npm i
26 | ```
27 |
28 | #### 3. Customize [_config.yml](./_config.yml)
29 | Optionally update the metadata and config defaults to how you want them for your project.
30 |
31 |
32 | #### 4. Last, build.
33 | You may now run `grunt` to build the project.
34 |
35 |
36 | ## The "assemble" task
37 | If you haven't used [Assemble][assemble] before, please visit [http://assemble.io/docs](http://assemble.io/docs) to learn how to customize the task.
38 |
39 | ### Overview
40 | In the project's Gruntfile, the example `assemble` task is pre-loaded with paths and options to build the project successfully:
41 |
42 | ```js
43 | assemble: {
44 | options: {
45 | flatten: true,
46 | assets: '<%= site.assets %>',
47 |
48 | // Metadata
49 | site: '<%= site %>',
50 |
51 | // Templates
52 | partials: '<%= site.includes %>',
53 | layoutdir: '<%= site.layouts %>',
54 | layout: '<%= site.layout %>',
55 | },
56 | docs: {
57 | src: ['templates/*.hbs'],
58 | dest: '<%= site.dest %>/'
59 | }
60 | }
61 | ```
62 |
63 | Take a look at [_config.yml](./_config.yml) to see some of the metadata and config data is defined.
64 |
65 |
66 |
67 | ## Author
68 |
69 | {%= contrib("jon") %}
70 |
71 | ## Contributing
72 | In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.
73 |
74 |
75 | ## Release History
76 | * 2013-12-22 v0.2.6 Updated dependencies, Bootstrap paths. A number of updates to gruntfile and config. Adds _config.yml to project root, to make project metadata more customizable from the start.
77 | * 2013-08-03 v0.2.0 Refactored to be awesome.
78 | * 2013-07-16 v0.1.0 First commit.
79 |
80 |
81 | [download]: https://github.com/assemble/boilerplate-bootstrap/archive/master.zip "Download boilerplate-bootstrap"
82 | [helpers]: https://github.com/assemble/handlebars-helpers "Handlebars Helpers"
83 | [assemble]: https://github.com/assemble/assemble/ "Assemble"
84 | [assemble-boilerplates]: https://github.com/assemble/assemble-boilerplates "Assemble Boilerplates"
85 |
86 | [bower]: https://github.com/bower/bower
87 | [grunt]: http://gruntjs.com
88 | [gruntfile]: http://gruntjs.com/sample-gruntfile
89 | [configuring tasks]: http://gruntjs.com/configuring-tasks
90 | [tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets
91 | [files-object]: http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
92 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # boilerplate-bootstrap [](http://badge.fury.io/js/boilerplate-bootstrap)
2 |
3 | > Build Bootstrap with Assemble instead of Jekyll.
4 |
5 | #### [See it live →](http://assemble.github.io/boilerplate-bootstrap/)
6 |
7 | * Converts the liquid templates to Handlebars
8 | * Builds the HTML from templates using [Assemble][assemble].
9 | * Swaps out some Bootstrap content with metadata from [_config.yml](./_config.yml).
10 |
11 | ## Quickstart
12 | _You must have [NPM](npmjs.org), [Bower][bower] and [Grunt][grunt] installed globally before you begin._
13 |
14 | #### 1. Download this project
15 | Do _one_ of the following:
16 |
17 | * **[download][download]** this project
18 | * `git clone git://github.com/assemble/boilerplate-bootstrap.git`
19 | * `bower install boilerplate-bootstrap`
20 |
21 | #### 2. Next, install Bootstrap and dependencies
22 | Next, `cd` into the project run the following in the command line:
23 |
24 | ```bash
25 | npm i && git clone git://github.com/twbs/bootstrap.git "vendor/bootstrap" && cd vendor/bootstrap && npm i
26 | ```
27 |
28 | #### 3. Customize [_config.yml](./_config.yml)
29 | Optionally update the metadata and config defaults to how you want them for your project.
30 |
31 |
32 | #### 4. Last, build.
33 | You may now run `grunt` to build the project.
34 |
35 |
36 | ## The "assemble" task
37 | If you haven't used [Assemble][assemble] before, please visit [http://assemble.io/docs](http://assemble.io/docs) to learn how to customize the task.
38 |
39 | ### Overview
40 | In the project's Gruntfile, the example `assemble` task is pre-loaded with paths and options to build the project successfully:
41 |
42 | ```js
43 | assemble: {
44 | options: {
45 | flatten: true,
46 | assets: '<%= site.assets %>',
47 |
48 | // Metadata
49 | site: '<%= site %>',
50 |
51 | // Templates
52 | partials: '<%= site.includes %>',
53 | layoutdir: '<%= site.layouts %>',
54 | layout: '<%= site.layout %>',
55 | },
56 | docs: {
57 | src: ['templates/*.hbs'],
58 | dest: '<%= site.dest %>/'
59 | }
60 | }
61 | ```
62 |
63 | Take a look at [_config.yml](./_config.yml) to see some of the metadata and config data is defined.
64 |
65 |
66 |
67 | ## Author
68 |
69 |
70 | **Jon Schlinkert**
71 |
72 | + [github/jonschlinkert](https://github.com/jonschlinkert)
73 | + [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
74 |
75 | ## Contributing
76 | In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.
77 |
78 |
79 | ## Release History
80 | * 2013-12-22 v0.2.6 Updated dependencies, Bootstrap paths. A number of updates to gruntfile and config. Adds _config.yml to project root, to make project metadata more customizable from the start.
81 | * 2013-08-03 v0.2.0 Refactored to be awesome.
82 | * 2013-07-16 v0.1.0 First commit.
83 |
84 |
85 | [download]: https://github.com/assemble/boilerplate-bootstrap/archive/master.zip "Download boilerplate-bootstrap"
86 | [helpers]: https://github.com/assemble/handlebars-helpers "Handlebars Helpers"
87 | [assemble]: https://github.com/assemble/assemble/ "Assemble"
88 | [assemble-boilerplates]: https://github.com/assemble/assemble-boilerplates "Assemble Boilerplates"
89 |
90 | [bower]: https://github.com/bower/bower
91 | [grunt]: http://gruntjs.com
92 | [gruntfile]: http://gruntjs.com/sample-gruntfile
93 | [configuring tasks]: http://gruntjs.com/configuring-tasks
94 | [tasks-and-targets]: http://gruntjs.com/configuring-tasks#task-configuration-and-targets
95 | [files-object]: http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
96 |
--------------------------------------------------------------------------------
/theme/bootstrap/popovers.less:
--------------------------------------------------------------------------------
1 | //
2 | // Popovers
3 | // --------------------------------------------------
4 |
5 |
6 | .popover {
7 | position: absolute;
8 | top: 0;
9 | left: 0;
10 | z-index: @zindex-popover;
11 | display: none;
12 | max-width: @popover-max-width;
13 | padding: 1px;
14 | text-align: left; // Reset given new insertion method
15 | background-color: @popover-bg;
16 | background-clip: padding-box;
17 | border: 1px solid @popover-fallback-border-color;
18 | border: 1px solid @popover-border-color;
19 | border-radius: @border-radius-large;
20 | .box-shadow(0 5px 10px rgba(0,0,0,.2));
21 |
22 | // Overrides for proper insertion
23 | white-space: normal;
24 |
25 | // Offset the popover to account for the popover arrow
26 | &.top { margin-top: -10px; }
27 | &.right { margin-left: 10px; }
28 | &.bottom { margin-top: 10px; }
29 | &.left { margin-left: -10px; }
30 | }
31 |
32 | .popover-title {
33 | margin: 0; // reset heading margin
34 | padding: 8px 14px;
35 | font-size: @font-size-base;
36 | font-weight: normal;
37 | line-height: 18px;
38 | background-color: @popover-title-bg;
39 | border-bottom: 1px solid darken(@popover-title-bg, 5%);
40 | border-radius: 5px 5px 0 0;
41 | }
42 |
43 | .popover-content {
44 | padding: 9px 14px;
45 | }
46 |
47 | // Arrows
48 | //
49 | // .arrow is outer, .arrow:after is inner
50 |
51 | .popover .arrow {
52 | &,
53 | &:after {
54 | position: absolute;
55 | display: block;
56 | width: 0;
57 | height: 0;
58 | border-color: transparent;
59 | border-style: solid;
60 | }
61 | }
62 | .popover .arrow {
63 | border-width: @popover-arrow-outer-width;
64 | }
65 | .popover .arrow:after {
66 | border-width: @popover-arrow-width;
67 | content: "";
68 | }
69 |
70 | .popover {
71 | &.top .arrow {
72 | left: 50%;
73 | margin-left: -@popover-arrow-outer-width;
74 | border-bottom-width: 0;
75 | border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback
76 | border-top-color: @popover-arrow-outer-color;
77 | bottom: -@popover-arrow-outer-width;
78 | &:after {
79 | content: " ";
80 | bottom: 1px;
81 | margin-left: -@popover-arrow-width;
82 | border-bottom-width: 0;
83 | border-top-color: @popover-arrow-color;
84 | }
85 | }
86 | &.right .arrow {
87 | top: 50%;
88 | left: -@popover-arrow-outer-width;
89 | margin-top: -@popover-arrow-outer-width;
90 | border-left-width: 0;
91 | border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
92 | border-right-color: @popover-arrow-outer-color;
93 | &:after {
94 | content: " ";
95 | left: 1px;
96 | bottom: -@popover-arrow-width;
97 | border-left-width: 0;
98 | border-right-color: @popover-arrow-color;
99 | }
100 | }
101 | &.bottom .arrow {
102 | left: 50%;
103 | margin-left: -@popover-arrow-outer-width;
104 | border-top-width: 0;
105 | border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback
106 | border-bottom-color: @popover-arrow-outer-color;
107 | top: -@popover-arrow-outer-width;
108 | &:after {
109 | content: " ";
110 | top: 1px;
111 | margin-left: -@popover-arrow-width;
112 | border-top-width: 0;
113 | border-bottom-color: @popover-arrow-color;
114 | }
115 | }
116 |
117 | &.left .arrow {
118 | top: 50%;
119 | right: -@popover-arrow-outer-width;
120 | margin-top: -@popover-arrow-outer-width;
121 | border-right-width: 0;
122 | border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
123 | border-left-color: @popover-arrow-outer-color;
124 | &:after {
125 | content: " ";
126 | right: 1px;
127 | border-right-width: 0;
128 | border-left-color: @popover-arrow-color;
129 | bottom: -@popover-arrow-width;
130 | }
131 | }
132 |
133 | }
134 |
--------------------------------------------------------------------------------
/theme/bootstrap/modals.less:
--------------------------------------------------------------------------------
1 | //
2 | // Modals
3 | // --------------------------------------------------
4 |
5 | // .modal-open - body class for killing the scroll
6 | // .modal - container to scroll within
7 | // .modal-dialog - positioning shell for the actual modal
8 | // .modal-content - actual modal w/ bg and corners and shit
9 |
10 | // Kill the scroll on the body
11 | .modal-open {
12 | overflow: hidden;
13 | }
14 |
15 | // Container that the modal scrolls within
16 | .modal {
17 | display: none;
18 | overflow: auto;
19 | overflow-y: scroll;
20 | position: fixed;
21 | top: 0;
22 | right: 0;
23 | bottom: 0;
24 | left: 0;
25 | z-index: @zindex-modal;
26 | -webkit-overflow-scrolling: touch;
27 |
28 | // Prevent Chrome on Windows from adding a focus outline. For details, see
29 | // https://github.com/twbs/bootstrap/pull/10951.
30 | outline: 0;
31 |
32 | // When fading in the modal, animate it to slide down
33 | &.fade .modal-dialog {
34 | .translate(0, -25%);
35 | .transition-transform(~"0.3s ease-out");
36 | }
37 | &.in .modal-dialog { .translate(0, 0)}
38 | }
39 |
40 | // Shell div to position the modal with bottom padding
41 | .modal-dialog {
42 | position: relative;
43 | width: auto;
44 | margin: 10px;
45 | }
46 |
47 | // Actual modal
48 | .modal-content {
49 | position: relative;
50 | background-color: @modal-content-bg;
51 | border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
52 | border: 1px solid @modal-content-border-color;
53 | border-radius: @border-radius-large;
54 | .box-shadow(0 3px 9px rgba(0,0,0,.5));
55 | background-clip: padding-box;
56 | // Remove focus outline from opened modal
57 | outline: none;
58 | }
59 |
60 | // Modal background
61 | .modal-backdrop {
62 | position: fixed;
63 | top: 0;
64 | right: 0;
65 | bottom: 0;
66 | left: 0;
67 | z-index: @zindex-modal-background;
68 | background-color: @modal-backdrop-bg;
69 | // Fade for backdrop
70 | &.fade { .opacity(0); }
71 | &.in { .opacity(@modal-backdrop-opacity); }
72 | }
73 |
74 | // Modal header
75 | // Top section of the modal w/ title and dismiss
76 | .modal-header {
77 | padding: @modal-title-padding;
78 | border-bottom: 1px solid @modal-header-border-color;
79 | min-height: (@modal-title-padding + @modal-title-line-height);
80 | }
81 | // Close icon
82 | .modal-header .close {
83 | margin-top: -2px;
84 | }
85 |
86 | // Title text within header
87 | .modal-title {
88 | margin: 0;
89 | line-height: @modal-title-line-height;
90 | }
91 |
92 | // Modal body
93 | // Where all modal content resides (sibling of .modal-header and .modal-footer)
94 | .modal-body {
95 | position: relative;
96 | padding: @modal-inner-padding;
97 | }
98 |
99 | // Footer (for actions)
100 | .modal-footer {
101 | margin-top: 15px;
102 | padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;
103 | text-align: right; // right align buttons
104 | border-top: 1px solid @modal-footer-border-color;
105 | &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons
106 |
107 | // Properly space out buttons
108 | .btn + .btn {
109 | margin-left: 5px;
110 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
111 | }
112 | // but override that for button groups
113 | .btn-group .btn + .btn {
114 | margin-left: -1px;
115 | }
116 | // and override it for block buttons as well
117 | .btn-block + .btn-block {
118 | margin-left: 0;
119 | }
120 | }
121 |
122 | // Scale up the modal
123 | @media (min-width: @screen-sm-min) {
124 |
125 | // Automatically set modal's width for larger viewports
126 | .modal-dialog {
127 | width: 600px;
128 | margin: 30px auto;
129 | }
130 | .modal-content {
131 | .box-shadow(0 5px 15px rgba(0,0,0,.5));
132 | }
133 |
134 | // Modal sizes
135 | .modal-sm { width: @modal-sm; }
136 | .modal-lg { width: @modal-lg; }
137 |
138 | }
139 |
--------------------------------------------------------------------------------
/theme/bootstrap/buttons.less:
--------------------------------------------------------------------------------
1 | //
2 | // Buttons
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // --------------------------------------------------
8 |
9 | .btn {
10 | display: inline-block;
11 | margin-bottom: 0; // For input.btn
12 | font-weight: @btn-font-weight;
13 | text-align: center;
14 | vertical-align: middle;
15 | cursor: pointer;
16 | background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
17 | border: 1px solid transparent;
18 | white-space: nowrap;
19 | .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
20 | .user-select(none);
21 |
22 | &:focus {
23 | .tab-focus();
24 | }
25 |
26 | &:hover,
27 | &:focus {
28 | color: @btn-default-color;
29 | text-decoration: none;
30 | }
31 |
32 | &:active,
33 | &.active {
34 | outline: 0;
35 | background-image: none;
36 | .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
37 | }
38 |
39 | &.disabled,
40 | &[disabled],
41 | fieldset[disabled] & {
42 | cursor: not-allowed;
43 | pointer-events: none; // Future-proof disabling of clicks
44 | .opacity(.65);
45 | .box-shadow(none);
46 | }
47 | }
48 |
49 |
50 | // Alternate buttons
51 | // --------------------------------------------------
52 |
53 | .btn-default {
54 | .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
55 | }
56 | .btn-primary {
57 | .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
58 | }
59 | // Success appears as green
60 | .btn-success {
61 | .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
62 | }
63 | // Warning appears as orange
64 | .btn-warning {
65 | .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
66 | }
67 | // Danger and error appear as red
68 | .btn-danger {
69 | .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
70 | }
71 | // Info appears as blue-green
72 | .btn-info {
73 | .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
74 | }
75 |
76 |
77 | // Link buttons
78 | // -------------------------
79 |
80 | // Make a button look and behave like a link
81 | .btn-link {
82 | color: @link-color;
83 | font-weight: normal;
84 | cursor: pointer;
85 | border-radius: 0;
86 |
87 | &,
88 | &:active,
89 | &[disabled],
90 | fieldset[disabled] & {
91 | background-color: transparent;
92 | .box-shadow(none);
93 | }
94 | &,
95 | &:hover,
96 | &:focus,
97 | &:active {
98 | border-color: transparent;
99 | }
100 | &:hover,
101 | &:focus {
102 | color: @link-hover-color;
103 | text-decoration: underline;
104 | background-color: transparent;
105 | }
106 | &[disabled],
107 | fieldset[disabled] & {
108 | &:hover,
109 | &:focus {
110 | color: @btn-link-disabled-color;
111 | text-decoration: none;
112 | }
113 | }
114 | }
115 |
116 |
117 | // Button Sizes
118 | // --------------------------------------------------
119 |
120 | .btn-lg {
121 | // line-height: ensure even-numbered height of button next to large input
122 | .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
123 | }
124 | .btn-sm {
125 | // line-height: ensure proper height of button next to small input
126 | .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
127 | }
128 | .btn-xs {
129 | .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);
130 | }
131 |
132 |
133 | // Block button
134 | // --------------------------------------------------
135 |
136 | .btn-block {
137 | display: block;
138 | width: 100%;
139 | padding-left: 0;
140 | padding-right: 0;
141 | }
142 |
143 | // Vertically space out multiple block buttons
144 | .btn-block + .btn-block {
145 | margin-top: 5px;
146 | }
147 |
148 | // Specificity overrides
149 | input[type="submit"],
150 | input[type="reset"],
151 | input[type="button"] {
152 | &.btn-block {
153 | width: 100%;
154 | }
155 | }
156 |
--------------------------------------------------------------------------------
/theme/bootstrap/input-groups.less:
--------------------------------------------------------------------------------
1 | //
2 | // Input groups
3 | // --------------------------------------------------
4 |
5 | // Base styles
6 | // -------------------------
7 | .input-group {
8 | position: relative; // For dropdowns
9 | display: table;
10 | border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
11 |
12 | // Undo padding and float of grid classes
13 | &[class*="col-"] {
14 | float: none;
15 | padding-left: 0;
16 | padding-right: 0;
17 | }
18 |
19 | .form-control {
20 | // IE9 fubars the placeholder attribute in text inputs and the arrows on
21 | // select elements in input groups. To fix it, we float the input. Details:
22 | // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
23 | float: left;
24 |
25 | width: 100%;
26 | margin-bottom: 0;
27 | }
28 | }
29 |
30 | // Sizing options
31 | //
32 | // Remix the default form control sizing classes into new ones for easier
33 | // manipulation.
34 |
35 | .input-group-lg > .form-control,
36 | .input-group-lg > .input-group-addon,
37 | .input-group-lg > .input-group-btn > .btn { .input-lg(); }
38 | .input-group-sm > .form-control,
39 | .input-group-sm > .input-group-addon,
40 | .input-group-sm > .input-group-btn > .btn { .input-sm(); }
41 |
42 |
43 | // Display as table-cell
44 | // -------------------------
45 | .input-group-addon,
46 | .input-group-btn,
47 | .input-group .form-control {
48 | display: table-cell;
49 |
50 | &:not(:first-child):not(:last-child) {
51 | border-radius: 0;
52 | }
53 | }
54 | // Addon and addon wrapper for buttons
55 | .input-group-addon,
56 | .input-group-btn {
57 | width: 1%;
58 | white-space: nowrap;
59 | vertical-align: middle; // Match the inputs
60 | }
61 |
62 | // Text input groups
63 | // -------------------------
64 | .input-group-addon {
65 | padding: @padding-base-vertical @padding-base-horizontal;
66 | font-size: @font-size-base;
67 | font-weight: normal;
68 | line-height: 1;
69 | color: @input-color;
70 | text-align: center;
71 | background-color: @input-group-addon-bg;
72 | border: 1px solid @input-group-addon-border-color;
73 | border-radius: @border-radius-base;
74 |
75 | // Sizing
76 | &.input-sm {
77 | padding: @padding-small-vertical @padding-small-horizontal;
78 | font-size: @font-size-small;
79 | border-radius: @border-radius-small;
80 | }
81 | &.input-lg {
82 | padding: @padding-large-vertical @padding-large-horizontal;
83 | font-size: @font-size-large;
84 | border-radius: @border-radius-large;
85 | }
86 |
87 | // Nuke default margins from checkboxes and radios to vertically center within.
88 | input[type="radio"],
89 | input[type="checkbox"] {
90 | margin-top: 0;
91 | }
92 | }
93 |
94 | // Reset rounded corners
95 | .input-group .form-control:first-child,
96 | .input-group-addon:first-child,
97 | .input-group-btn:first-child > .btn,
98 | .input-group-btn:first-child > .btn-group > .btn,
99 | .input-group-btn:first-child > .dropdown-toggle,
100 | .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
101 | .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
102 | .border-right-radius(0);
103 | }
104 | .input-group-addon:first-child {
105 | border-right: 0;
106 | }
107 | .input-group .form-control:last-child,
108 | .input-group-addon:last-child,
109 | .input-group-btn:last-child > .btn,
110 | .input-group-btn:last-child > .btn-group > .btn,
111 | .input-group-btn:last-child > .dropdown-toggle,
112 | .input-group-btn:first-child > .btn:not(:first-child),
113 | .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
114 | .border-left-radius(0);
115 | }
116 | .input-group-addon:last-child {
117 | border-left: 0;
118 | }
119 |
120 | // Button input groups
121 | // -------------------------
122 | .input-group-btn {
123 | position: relative;
124 | // Jankily prevent input button groups from wrapping with `white-space` and
125 | // `font-size` in combination with `inline-block` on buttons.
126 | font-size: 0;
127 | white-space: nowrap;
128 |
129 | // Negative margin for spacing, position for bringing hovered/focused/actived
130 | // element above the siblings.
131 | > .btn {
132 | position: relative;
133 | + .btn {
134 | margin-left: -1px;
135 | }
136 | // Bring the "active" button to the front
137 | &:hover,
138 | &:focus,
139 | &:active {
140 | z-index: 2;
141 | }
142 | }
143 |
144 | // Negative margin to only have a 1px border between the two
145 | &:first-child {
146 | > .btn,
147 | > .btn-group {
148 | margin-right: -1px;
149 | }
150 | }
151 | &:last-child {
152 | > .btn,
153 | > .btn-group {
154 | margin-left: -1px;
155 | }
156 | }
157 | }
158 |
--------------------------------------------------------------------------------
/theme/bootstrap/panels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Panels
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .panel {
8 | margin-bottom: @line-height-computed;
9 | background-color: @panel-bg;
10 | border: 1px solid transparent;
11 | border-radius: @panel-border-radius;
12 | .box-shadow(0 1px 1px rgba(0,0,0,.05));
13 | }
14 |
15 | // Panel contents
16 | .panel-body {
17 | padding: @panel-body-padding;
18 | &:extend(.clearfix all);
19 | }
20 |
21 |
22 | // List groups in panels
23 | //
24 | // By default, space out list group content from panel headings to account for
25 | // any kind of custom content between the two.
26 |
27 | .panel {
28 | > .list-group {
29 | margin-bottom: 0;
30 |
31 | .list-group-item {
32 | border-width: 1px 0;
33 |
34 | // Remove border radius for top one
35 | &:first-child {
36 | .border-top-radius(0);
37 | }
38 | // But keep it for the last one
39 | &:last-child {
40 | border-bottom: 0;
41 | }
42 | }
43 | }
44 | }
45 | // Collapse space between when there's no additional content.
46 | .panel-heading + .list-group {
47 | .list-group-item:first-child {
48 | border-top-width: 0;
49 | }
50 | }
51 |
52 |
53 | // Tables in panels
54 | //
55 | // Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
56 | // watch it go full width.
57 |
58 | .panel {
59 | > .table,
60 | > .table-responsive > .table {
61 | margin-bottom: 0;
62 | }
63 | > .panel-body + .table,
64 | > .panel-body + .table-responsive {
65 | border-top: 1px solid @table-border-color;
66 | }
67 | > .table > tbody:first-child th,
68 | > .table > tbody:first-child td {
69 | border-top: 0;
70 | }
71 | > .table-bordered,
72 | > .table-responsive > .table-bordered {
73 | border: 0;
74 | > thead,
75 | > tbody,
76 | > tfoot {
77 | > tr {
78 | > th:first-child,
79 | > td:first-child {
80 | border-left: 0;
81 | }
82 | > th:last-child,
83 | > td:last-child {
84 | border-right: 0;
85 | }
86 |
87 | &:last-child > th,
88 | &:last-child > td {
89 | border-bottom: 0;
90 | }
91 | }
92 | }
93 | }
94 | > .table-responsive {
95 | border: 0;
96 | margin-bottom: 0;
97 | }
98 | > .table-striped,
99 | > .table-responsive > .table-striped {
100 | > tbody > tr:last-child {
101 | td:first-child,
102 | th:first-child {
103 | border-bottom-left-radius: (@panel-border-radius - 1);
104 | }
105 | td:last-child,
106 | th:last-child {
107 | border-bottom-left-radius: (@panel-border-radius - 1);
108 | }
109 | }
110 | }
111 | }
112 |
113 |
114 | // Optional heading
115 | .panel-heading {
116 | padding: 10px 15px;
117 | border-bottom: 1px solid transparent;
118 | .border-top-radius((@panel-border-radius - 1));
119 |
120 | > .dropdown .dropdown-toggle {
121 | color: inherit;
122 | }
123 | }
124 |
125 | // Within heading, strip any `h*` tag of its default margins for spacing.
126 | .panel-title {
127 | margin-top: 0;
128 | margin-bottom: 0;
129 | font-size: ceil((@font-size-base * 1.125));
130 | color: inherit;
131 |
132 | > a {
133 | color: inherit;
134 | }
135 | }
136 |
137 | // Optional footer (stays gray in every modifier class)
138 | .panel-footer {
139 | padding: 10px 15px;
140 | background-color: @panel-footer-bg;
141 | border-top: 1px solid @panel-inner-border;
142 | .border-bottom-radius((@panel-border-radius - 1));
143 | }
144 |
145 |
146 | // Collapsable panels (aka, accordion)
147 | //
148 | // Wrap a series of panels in `.panel-group` to turn them into an accordion with
149 | // the help of our collapse JavaScript plugin.
150 |
151 | .panel-group {
152 | // Tighten up margin so it's only between panels
153 | .panel {
154 | margin-bottom: 0;
155 | border-radius: @panel-border-radius;
156 | overflow: hidden; // crop contents when collapsed
157 | + .panel {
158 | margin-top: 5px;
159 | }
160 | }
161 |
162 | .panel-heading {
163 | border-bottom: 0;
164 | + .panel-collapse .panel-body {
165 | border-top: 1px solid @panel-inner-border;
166 | }
167 | }
168 | .panel-footer {
169 | border-top: 0;
170 | + .panel-collapse .panel-body {
171 | border-bottom: 1px solid @panel-inner-border;
172 | }
173 | }
174 | }
175 |
176 |
177 | // Contextual variations
178 | .panel-default {
179 | .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);
180 | }
181 | .panel-primary {
182 | .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);
183 | }
184 | .panel-success {
185 | .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);
186 | }
187 | .panel-warning {
188 | .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);
189 | }
190 | .panel-danger {
191 | .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);
192 | }
193 | .panel-info {
194 | .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);
195 | }
196 |
--------------------------------------------------------------------------------
/templates/_includes/nav-css.hbs:
--------------------------------------------------------------------------------
1 |
2 | Overview
3 |
11 |
12 |
13 | Grid system
14 |
28 |
29 |
30 | Typography
31 |
40 |
41 |
42 | Code
43 |
48 |
49 |
50 | Tables
51 |
60 |
61 |
62 | Forms
63 |
75 |
76 |
77 | Buttons
78 |
85 |
86 |
87 | Images
88 |
89 |
90 | Helper classes
91 |
103 |
104 |
105 | Responsive utilities
106 |
111 |
112 |
113 | Using LESS
114 |
119 |
120 |
--------------------------------------------------------------------------------
/templates/_data/glyphicons.yml:
--------------------------------------------------------------------------------
1 | # Generated on Wed Dec 18 2013 20:14:37 GMT-0800 (PST)
2 | # **Don't edit this directly!**
3 | # Look at the 'build-glyphicons-data' task in Gruntfile.js
4 |
5 | - glyphicon-asterisk
6 | - glyphicon-plus
7 | - glyphicon-euro
8 | - glyphicon-minus
9 | - glyphicon-cloud
10 | - glyphicon-envelope
11 | - glyphicon-pencil
12 | - glyphicon-glass
13 | - glyphicon-music
14 | - glyphicon-search
15 | - glyphicon-heart
16 | - glyphicon-star
17 | - glyphicon-star-empty
18 | - glyphicon-user
19 | - glyphicon-film
20 | - glyphicon-th-large
21 | - glyphicon-th
22 | - glyphicon-th-list
23 | - glyphicon-ok
24 | - glyphicon-remove
25 | - glyphicon-zoom-in
26 | - glyphicon-zoom-out
27 | - glyphicon-off
28 | - glyphicon-signal
29 | - glyphicon-cog
30 | - glyphicon-trash
31 | - glyphicon-home
32 | - glyphicon-file
33 | - glyphicon-time
34 | - glyphicon-road
35 | - glyphicon-download-alt
36 | - glyphicon-download
37 | - glyphicon-upload
38 | - glyphicon-inbox
39 | - glyphicon-play-circle
40 | - glyphicon-repeat
41 | - glyphicon-refresh
42 | - glyphicon-list-alt
43 | - glyphicon-lock
44 | - glyphicon-flag
45 | - glyphicon-headphones
46 | - glyphicon-volume-off
47 | - glyphicon-volume-down
48 | - glyphicon-volume-up
49 | - glyphicon-qrcode
50 | - glyphicon-barcode
51 | - glyphicon-tag
52 | - glyphicon-tags
53 | - glyphicon-book
54 | - glyphicon-bookmark
55 | - glyphicon-print
56 | - glyphicon-camera
57 | - glyphicon-font
58 | - glyphicon-bold
59 | - glyphicon-italic
60 | - glyphicon-text-height
61 | - glyphicon-text-width
62 | - glyphicon-align-left
63 | - glyphicon-align-center
64 | - glyphicon-align-right
65 | - glyphicon-align-justify
66 | - glyphicon-list
67 | - glyphicon-indent-left
68 | - glyphicon-indent-right
69 | - glyphicon-facetime-video
70 | - glyphicon-picture
71 | - glyphicon-map-marker
72 | - glyphicon-adjust
73 | - glyphicon-tint
74 | - glyphicon-edit
75 | - glyphicon-share
76 | - glyphicon-check
77 | - glyphicon-move
78 | - glyphicon-step-backward
79 | - glyphicon-fast-backward
80 | - glyphicon-backward
81 | - glyphicon-play
82 | - glyphicon-pause
83 | - glyphicon-stop
84 | - glyphicon-forward
85 | - glyphicon-fast-forward
86 | - glyphicon-step-forward
87 | - glyphicon-eject
88 | - glyphicon-chevron-left
89 | - glyphicon-chevron-right
90 | - glyphicon-plus-sign
91 | - glyphicon-minus-sign
92 | - glyphicon-remove-sign
93 | - glyphicon-ok-sign
94 | - glyphicon-question-sign
95 | - glyphicon-info-sign
96 | - glyphicon-screenshot
97 | - glyphicon-remove-circle
98 | - glyphicon-ok-circle
99 | - glyphicon-ban-circle
100 | - glyphicon-arrow-left
101 | - glyphicon-arrow-right
102 | - glyphicon-arrow-up
103 | - glyphicon-arrow-down
104 | - glyphicon-share-alt
105 | - glyphicon-resize-full
106 | - glyphicon-resize-small
107 | - glyphicon-exclamation-sign
108 | - glyphicon-gift
109 | - glyphicon-leaf
110 | - glyphicon-fire
111 | - glyphicon-eye-open
112 | - glyphicon-eye-close
113 | - glyphicon-warning-sign
114 | - glyphicon-plane
115 | - glyphicon-calendar
116 | - glyphicon-random
117 | - glyphicon-comment
118 | - glyphicon-magnet
119 | - glyphicon-chevron-up
120 | - glyphicon-chevron-down
121 | - glyphicon-retweet
122 | - glyphicon-shopping-cart
123 | - glyphicon-folder-close
124 | - glyphicon-folder-open
125 | - glyphicon-resize-vertical
126 | - glyphicon-resize-horizontal
127 | - glyphicon-hdd
128 | - glyphicon-bullhorn
129 | - glyphicon-bell
130 | - glyphicon-certificate
131 | - glyphicon-thumbs-up
132 | - glyphicon-thumbs-down
133 | - glyphicon-hand-right
134 | - glyphicon-hand-left
135 | - glyphicon-hand-up
136 | - glyphicon-hand-down
137 | - glyphicon-circle-arrow-right
138 | - glyphicon-circle-arrow-left
139 | - glyphicon-circle-arrow-up
140 | - glyphicon-circle-arrow-down
141 | - glyphicon-globe
142 | - glyphicon-wrench
143 | - glyphicon-tasks
144 | - glyphicon-filter
145 | - glyphicon-briefcase
146 | - glyphicon-fullscreen
147 | - glyphicon-dashboard
148 | - glyphicon-paperclip
149 | - glyphicon-heart-empty
150 | - glyphicon-link
151 | - glyphicon-phone
152 | - glyphicon-pushpin
153 | - glyphicon-usd
154 | - glyphicon-gbp
155 | - glyphicon-sort
156 | - glyphicon-sort-by-alphabet
157 | - glyphicon-sort-by-alphabet-alt
158 | - glyphicon-sort-by-order
159 | - glyphicon-sort-by-order-alt
160 | - glyphicon-sort-by-attributes
161 | - glyphicon-sort-by-attributes-alt
162 | - glyphicon-unchecked
163 | - glyphicon-expand
164 | - glyphicon-collapse-down
165 | - glyphicon-collapse-up
166 | - glyphicon-log-in
167 | - glyphicon-flash
168 | - glyphicon-log-out
169 | - glyphicon-new-window
170 | - glyphicon-record
171 | - glyphicon-save
172 | - glyphicon-open
173 | - glyphicon-saved
174 | - glyphicon-import
175 | - glyphicon-export
176 | - glyphicon-send
177 | - glyphicon-floppy-disk
178 | - glyphicon-floppy-saved
179 | - glyphicon-floppy-remove
180 | - glyphicon-floppy-save
181 | - glyphicon-floppy-open
182 | - glyphicon-credit-card
183 | - glyphicon-transfer
184 | - glyphicon-cutlery
185 | - glyphicon-header
186 | - glyphicon-compressed
187 | - glyphicon-earphone
188 | - glyphicon-phone-alt
189 | - glyphicon-tower
190 | - glyphicon-stats
191 | - glyphicon-sd-video
192 | - glyphicon-hd-video
193 | - glyphicon-subtitles
194 | - glyphicon-sound-stereo
195 | - glyphicon-sound-dolby
196 | - glyphicon-sound-5-1
197 | - glyphicon-sound-6-1
198 | - glyphicon-sound-7-1
199 | - glyphicon-copyright-mark
200 | - glyphicon-registration-mark
201 | - glyphicon-cloud-download
202 | - glyphicon-cloud-upload
203 | - glyphicon-tree-conifer
204 | - glyphicon-tree-deciduous
205 |
--------------------------------------------------------------------------------
/theme/bootstrap/tables.less:
--------------------------------------------------------------------------------
1 | //
2 | // Tables
3 | // --------------------------------------------------
4 |
5 |
6 | table {
7 | max-width: 100%;
8 | background-color: @table-bg;
9 | }
10 | th {
11 | text-align: left;
12 | }
13 |
14 |
15 | // Baseline styles
16 |
17 | .table {
18 | width: 100%;
19 | margin-bottom: @line-height-computed;
20 | // Cells
21 | > thead,
22 | > tbody,
23 | > tfoot {
24 | > tr {
25 | > th,
26 | > td {
27 | padding: @table-cell-padding;
28 | line-height: @line-height-base;
29 | vertical-align: top;
30 | border-top: 1px solid @table-border-color;
31 | }
32 | }
33 | }
34 | // Bottom align for column headings
35 | > thead > tr > th {
36 | vertical-align: bottom;
37 | border-bottom: 2px solid @table-border-color;
38 | }
39 | // Remove top border from thead by default
40 | > caption + thead,
41 | > colgroup + thead,
42 | > thead:first-child {
43 | > tr:first-child {
44 | > th,
45 | > td {
46 | border-top: 0;
47 | }
48 | }
49 | }
50 | // Account for multiple tbody instances
51 | > tbody + tbody {
52 | border-top: 2px solid @table-border-color;
53 | }
54 |
55 | // Nesting
56 | .table {
57 | background-color: @body-bg;
58 | }
59 | }
60 |
61 |
62 | // Condensed table w/ half padding
63 |
64 | .table-condensed {
65 | > thead,
66 | > tbody,
67 | > tfoot {
68 | > tr {
69 | > th,
70 | > td {
71 | padding: @table-condensed-cell-padding;
72 | }
73 | }
74 | }
75 | }
76 |
77 |
78 | // Bordered version
79 | //
80 | // Add borders all around the table and between all the columns.
81 |
82 | .table-bordered {
83 | border: 1px solid @table-border-color;
84 | > thead,
85 | > tbody,
86 | > tfoot {
87 | > tr {
88 | > th,
89 | > td {
90 | border: 1px solid @table-border-color;
91 | }
92 | }
93 | }
94 | > thead > tr {
95 | > th,
96 | > td {
97 | border-bottom-width: 2px;
98 | }
99 | }
100 | }
101 |
102 |
103 | // Zebra-striping
104 | //
105 | // Default zebra-stripe styles (alternating gray and transparent backgrounds)
106 |
107 | .table-striped {
108 | > tbody > tr:nth-child(odd) {
109 | > td,
110 | > th {
111 | background-color: @table-bg-accent;
112 | }
113 | }
114 | }
115 |
116 |
117 | // Hover effect
118 | //
119 | // Placed here since it has to come after the potential zebra striping
120 |
121 | .table-hover {
122 | > tbody > tr:hover {
123 | > td,
124 | > th {
125 | background-color: @table-bg-hover;
126 | }
127 | }
128 | }
129 |
130 |
131 | // Table cell sizing
132 | //
133 | // Reset default table behavior
134 |
135 | table col[class*="col-"] {
136 | position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
137 | float: none;
138 | display: table-column;
139 | }
140 | table {
141 | td,
142 | th {
143 | &[class*="col-"] {
144 | position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
145 | float: none;
146 | display: table-cell;
147 | }
148 | }
149 | }
150 |
151 |
152 | // Table backgrounds
153 | //
154 | // Exact selectors below required to override `.table-striped` and prevent
155 | // inheritance to nested tables.
156 |
157 | // Generate the contextual variants
158 | .table-row-variant(active; @table-bg-active);
159 | .table-row-variant(success; @state-success-bg);
160 | .table-row-variant(warning; @state-warning-bg);
161 | .table-row-variant(danger; @state-danger-bg);
162 | .table-row-variant(info; @state-info-bg);
163 |
164 |
165 | // Responsive tables
166 | //
167 | // Wrap your tables in `.table-responsive` and we'll make them mobile friendly
168 | // by enabling horizontal scrolling. Only applies <768px. Everything above that
169 | // will display normally.
170 |
171 | @media (max-width: @screen-xs-max) {
172 | .table-responsive {
173 | width: 100%;
174 | margin-bottom: (@line-height-computed * 0.75);
175 | overflow-y: hidden;
176 | overflow-x: scroll;
177 | -ms-overflow-style: -ms-autohiding-scrollbar;
178 | border: 1px solid @table-border-color;
179 | -webkit-overflow-scrolling: touch;
180 |
181 | // Tighten up spacing
182 | > .table {
183 | margin-bottom: 0;
184 |
185 | // Ensure the content doesn't wrap
186 | > thead,
187 | > tbody,
188 | > tfoot {
189 | > tr {
190 | > th,
191 | > td {
192 | white-space: nowrap;
193 | }
194 | }
195 | }
196 | }
197 |
198 | // Special overrides for the bordered tables
199 | > .table-bordered {
200 | border: 0;
201 |
202 | // Nuke the appropriate borders so that the parent can handle them
203 | > thead,
204 | > tbody,
205 | > tfoot {
206 | > tr {
207 | > th:first-child,
208 | > td:first-child {
209 | border-left: 0;
210 | }
211 | > th:last-child,
212 | > td:last-child {
213 | border-right: 0;
214 | }
215 | }
216 | }
217 |
218 | // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
219 | // chances are there will be only one `tr` in a `thead` and that would
220 | // remove the border altogether.
221 | > tbody,
222 | > tfoot {
223 | > tr:last-child {
224 | > th,
225 | > td {
226 | border-bottom: 0;
227 | }
228 | }
229 | }
230 |
231 | }
232 | }
233 | }
234 |
--------------------------------------------------------------------------------
/templates/_includes/nav-components.hbs:
--------------------------------------------------------------------------------
1 |
2 | Glyphicons
3 |
8 |
9 |
10 | Dropdowns
11 |
17 |
18 |
19 | Button groups
20 |
28 |
29 |
30 | Button dropdowns
31 |
37 |
38 |
39 | Input groups
40 |
48 |
49 |
50 | Navs
51 |
58 |
59 |
60 | Navbar
61 |
73 |
74 |
Breadcrumbs
75 |
76 | Pagination
77 |
81 |
82 |
Labels
83 |
Badges
84 |
Jumbotron
85 |
Page header
86 |
87 | Thumbnails
88 |
92 |
93 |
94 | Alerts
95 |
100 |
101 |
102 | Progress bars
103 |
110 |
111 |
112 | Media object
113 |
117 |
118 |
119 | List group
120 |
127 |
128 |
129 | Panels
130 |
137 |
138 |
Wells
139 |
--------------------------------------------------------------------------------
/theme/bootstrap/dropdowns.less:
--------------------------------------------------------------------------------
1 | //
2 | // Dropdown menus
3 | // --------------------------------------------------
4 |
5 |
6 | // Dropdown arrow/caret
7 | .caret {
8 | display: inline-block;
9 | width: 0;
10 | height: 0;
11 | margin-left: 2px;
12 | vertical-align: middle;
13 | border-top: @caret-width-base solid;
14 | border-right: @caret-width-base solid transparent;
15 | border-left: @caret-width-base solid transparent;
16 | }
17 |
18 | // The dropdown wrapper (div)
19 | .dropdown {
20 | position: relative;
21 | }
22 |
23 | // Prevent the focus on the dropdown toggle when closing dropdowns
24 | .dropdown-toggle:focus {
25 | outline: 0;
26 | }
27 |
28 | // The dropdown menu (ul)
29 | .dropdown-menu {
30 | position: absolute;
31 | top: 100%;
32 | left: 0;
33 | z-index: @zindex-dropdown;
34 | display: none; // none by default, but block on "open" of the menu
35 | float: left;
36 | min-width: 160px;
37 | padding: 5px 0;
38 | margin: 2px 0 0; // override default ul
39 | list-style: none;
40 | font-size: @font-size-base;
41 | background-color: @dropdown-bg;
42 | border: 1px solid @dropdown-fallback-border; // IE8 fallback
43 | border: 1px solid @dropdown-border;
44 | border-radius: @border-radius-base;
45 | .box-shadow(0 6px 12px rgba(0,0,0,.175));
46 | background-clip: padding-box;
47 |
48 | // Aligns the dropdown menu to right
49 | //
50 | // Deprecated as of 3.1 in favor of `.dropdown-menu-[dir]`
51 | &.pull-right {
52 | right: 0;
53 | left: auto;
54 | }
55 |
56 | // Dividers (basically an hr) within the dropdown
57 | .divider {
58 | .nav-divider(@dropdown-divider-bg);
59 | }
60 |
61 | // Links within the dropdown menu
62 | > li > a {
63 | display: block;
64 | padding: 3px 20px;
65 | clear: both;
66 | font-weight: normal;
67 | line-height: @line-height-base;
68 | color: @dropdown-link-color;
69 | white-space: nowrap; // prevent links from randomly breaking onto new lines
70 | }
71 | }
72 |
73 | // Hover/Focus state
74 | .dropdown-menu > li > a {
75 | &:hover,
76 | &:focus {
77 | text-decoration: none;
78 | color: @dropdown-link-hover-color;
79 | background-color: @dropdown-link-hover-bg;
80 | }
81 | }
82 |
83 | // Active state
84 | .dropdown-menu > .active > a {
85 | &,
86 | &:hover,
87 | &:focus {
88 | color: @dropdown-link-active-color;
89 | text-decoration: none;
90 | outline: 0;
91 | background-color: @dropdown-link-active-bg;
92 | }
93 | }
94 |
95 | // Disabled state
96 | //
97 | // Gray out text and ensure the hover/focus state remains gray
98 |
99 | .dropdown-menu > .disabled > a {
100 | &,
101 | &:hover,
102 | &:focus {
103 | color: @dropdown-link-disabled-color;
104 | }
105 | }
106 | // Nuke hover/focus effects
107 | .dropdown-menu > .disabled > a {
108 | &:hover,
109 | &:focus {
110 | text-decoration: none;
111 | background-color: transparent;
112 | background-image: none; // Remove CSS gradient
113 | .reset-filter();
114 | cursor: not-allowed;
115 | }
116 | }
117 |
118 | // Open state for the dropdown
119 | .open {
120 | // Show the menu
121 | > .dropdown-menu {
122 | display: block;
123 | }
124 |
125 | // Remove the outline when :focus is triggered
126 | > a {
127 | outline: 0;
128 | }
129 | }
130 |
131 | // Menu positioning
132 | //
133 | // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
134 | // menu with the parent.
135 | .dropdown-menu-right {
136 | left: auto; // Reset the default from `.dropdown-menu`
137 | right: 0;
138 | }
139 | // With v3, we enabled auto-flipping if you have a dropdown within a right
140 | // aligned nav component. To enable the undoing of that, we provide an override
141 | // to restore the default dropdown menu alignment.
142 | //
143 | // This is only for left-aligning a dropdown menu within a `.navbar-right` or
144 | // `.pull-right` nav component.
145 | .dropdown-menu-left {
146 | left: 0;
147 | right: auto;
148 | }
149 |
150 | // Dropdown section headers
151 | .dropdown-header {
152 | display: block;
153 | padding: 3px 20px;
154 | font-size: @font-size-small;
155 | line-height: @line-height-base;
156 | color: @dropdown-header-color;
157 | }
158 |
159 | // Backdrop to catch body clicks on mobile, etc.
160 | .dropdown-backdrop {
161 | position: fixed;
162 | left: 0;
163 | right: 0;
164 | bottom: 0;
165 | top: 0;
166 | z-index: (@zindex-dropdown - 10);
167 | }
168 |
169 | // Right aligned dropdowns
170 | .pull-right > .dropdown-menu {
171 | right: 0;
172 | left: auto;
173 | }
174 |
175 | // Allow for dropdowns to go bottom up (aka, dropup-menu)
176 | //
177 | // Just add .dropup after the standard .dropdown class and you're set, bro.
178 | // TODO: abstract this so that the navbar fixed styles are not placed here?
179 |
180 | .dropup,
181 | .navbar-fixed-bottom .dropdown {
182 | // Reverse the caret
183 | .caret {
184 | border-top: 0;
185 | border-bottom: @caret-width-base solid;
186 | content: "";
187 | }
188 | // Different positioning for bottom up menu
189 | .dropdown-menu {
190 | top: auto;
191 | bottom: 100%;
192 | margin-bottom: 1px;
193 | }
194 | }
195 |
196 |
197 | // Component alignment
198 | //
199 | // Reiterate per navbar.less and the modified component alignment there.
200 |
201 | @media (min-width: @grid-float-breakpoint) {
202 | .navbar-right {
203 | .dropdown-menu {
204 | .dropdown-menu-right();
205 | }
206 | // Necessary for overrides of the default right aligned menu.
207 | // Will remove come v4 in all likelihood.
208 | .dropdown-menu-left {
209 | .dropdown-menu-left();
210 | }
211 | }
212 | }
213 |
214 |
--------------------------------------------------------------------------------
/theme/bootstrap/carousel.less:
--------------------------------------------------------------------------------
1 | //
2 | // Carousel
3 | // --------------------------------------------------
4 |
5 |
6 | // Wrapper for the slide container and indicators
7 | .carousel {
8 | position: relative;
9 | }
10 |
11 | .carousel-inner {
12 | position: relative;
13 | overflow: hidden;
14 | width: 100%;
15 |
16 | > .item {
17 | display: none;
18 | position: relative;
19 | .transition(.6s ease-in-out left);
20 |
21 | // Account for jankitude on images
22 | > img,
23 | > a > img {
24 | .img-responsive();
25 | line-height: 1;
26 | }
27 | }
28 |
29 | > .active,
30 | > .next,
31 | > .prev { display: block; }
32 |
33 | > .active {
34 | left: 0;
35 | }
36 |
37 | > .next,
38 | > .prev {
39 | position: absolute;
40 | top: 0;
41 | width: 100%;
42 | }
43 |
44 | > .next {
45 | left: 100%;
46 | }
47 | > .prev {
48 | left: -100%;
49 | }
50 | > .next.left,
51 | > .prev.right {
52 | left: 0;
53 | }
54 |
55 | > .active.left {
56 | left: -100%;
57 | }
58 | > .active.right {
59 | left: 100%;
60 | }
61 |
62 | }
63 |
64 | // Left/right controls for nav
65 | // ---------------------------
66 |
67 | .carousel-control {
68 | position: absolute;
69 | top: 0;
70 | left: 0;
71 | bottom: 0;
72 | width: @carousel-control-width;
73 | .opacity(@carousel-control-opacity);
74 | font-size: @carousel-control-font-size;
75 | color: @carousel-control-color;
76 | text-align: center;
77 | text-shadow: @carousel-text-shadow;
78 | // We can't have this transition here because WebKit cancels the carousel
79 | // animation if you trip this while in the middle of another animation.
80 |
81 | // Set gradients for backgrounds
82 | &.left {
83 | #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
84 | }
85 | &.right {
86 | left: auto;
87 | right: 0;
88 | #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
89 | }
90 |
91 | // Hover/focus state
92 | &:hover,
93 | &:focus {
94 | outline: none;
95 | color: @carousel-control-color;
96 | text-decoration: none;
97 | .opacity(.9);
98 | }
99 |
100 | // Toggles
101 | .icon-prev,
102 | .icon-next,
103 | .glyphicon-chevron-left,
104 | .glyphicon-chevron-right {
105 | position: absolute;
106 | top: 50%;
107 | z-index: 5;
108 | display: inline-block;
109 | }
110 | .icon-prev,
111 | .glyphicon-chevron-left {
112 | left: 50%;
113 | }
114 | .icon-next,
115 | .glyphicon-chevron-right {
116 | right: 50%;
117 | }
118 | .icon-prev,
119 | .icon-next {
120 | width: 20px;
121 | height: 20px;
122 | margin-top: -10px;
123 | margin-left: -10px;
124 | font-family: serif;
125 | }
126 |
127 | .icon-prev {
128 | &:before {
129 | content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
130 | }
131 | }
132 | .icon-next {
133 | &:before {
134 | content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
135 | }
136 | }
137 | }
138 |
139 | // Optional indicator pips
140 | //
141 | // Add an unordered list with the following class and add a list item for each
142 | // slide your carousel holds.
143 |
144 | .carousel-indicators {
145 | position: absolute;
146 | bottom: 10px;
147 | left: 50%;
148 | z-index: 15;
149 | width: 60%;
150 | margin-left: -30%;
151 | padding-left: 0;
152 | list-style: none;
153 | text-align: center;
154 |
155 | li {
156 | display: inline-block;
157 | width: 10px;
158 | height: 10px;
159 | margin: 1px;
160 | text-indent: -999px;
161 | border: 1px solid @carousel-indicator-border-color;
162 | border-radius: 10px;
163 | cursor: pointer;
164 |
165 | // IE8-9 hack for event handling
166 | //
167 | // Internet Explorer 8-9 does not support clicks on elements without a set
168 | // `background-color`. We cannot use `filter` since that's not viewed as a
169 | // background color by the browser. Thus, a hack is needed.
170 | //
171 | // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
172 | // set alpha transparency for the best results possible.
173 | background-color: #000 \9; // IE8
174 | background-color: rgba(0,0,0,0); // IE9
175 | }
176 | .active {
177 | margin: 0;
178 | width: 12px;
179 | height: 12px;
180 | background-color: @carousel-indicator-active-bg;
181 | }
182 | }
183 |
184 | // Optional captions
185 | // -----------------------------
186 | // Hidden by default for smaller viewports
187 | .carousel-caption {
188 | position: absolute;
189 | left: 15%;
190 | right: 15%;
191 | bottom: 20px;
192 | z-index: 10;
193 | padding-top: 20px;
194 | padding-bottom: 20px;
195 | color: @carousel-caption-color;
196 | text-align: center;
197 | text-shadow: @carousel-text-shadow;
198 | & .btn {
199 | text-shadow: none; // No shadow for button elements in carousel-caption
200 | }
201 | }
202 |
203 |
204 | // Scale up controls for tablets and up
205 | @media screen and (min-width: @screen-sm-min) {
206 |
207 | // Scale up the controls a smidge
208 | .carousel-control {
209 | .glyphicons-chevron-left,
210 | .glyphicons-chevron-right,
211 | .icon-prev,
212 | .icon-next {
213 | width: 30px;
214 | height: 30px;
215 | margin-top: -15px;
216 | margin-left: -15px;
217 | font-size: 30px;
218 | }
219 | }
220 |
221 | // Show and left align the captions
222 | .carousel-caption {
223 | left: 20%;
224 | right: 20%;
225 | padding-bottom: 30px;
226 | }
227 |
228 | // Move up the indicators
229 | .carousel-indicators {
230 | bottom: 20px;
231 | }
232 | }
233 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | /*
2 | * assemble-bootstrap
3 | * http://github.com/assemble/assemble-bootstrap
4 | *
5 | * Copyright (c) 2013 Jon Schlinkert
6 | * MIT License
7 | */
8 | "use strict";
9 |
10 | module.exports = function(grunt) {
11 |
12 | var pretty = require('pretty');
13 | var vendor = grunt.file.readJSON('.bowerrc').directory;
14 | if(!grunt.file.exists(vendor + '/bootstrap/_config.yml')) {
15 | grunt.fail.fatal('>> Please run "bower install" before continuing.');
16 | }
17 |
18 | // Project configuration.
19 | grunt.initConfig({
20 |
21 | // Project metadata
22 | pkg : grunt.file.readJSON('package.json'),
23 | site : grunt.file.readYAML('_config.yml'),
24 | vendor: vendor,
25 |
26 | // Convenience
27 | bootstrap: '<%= vendor %>/bootstrap',
28 |
29 | // Run Bootstrap's own Gruntfile.
30 | subgrunt: {
31 | test: {
32 | options: {task: 'test'},
33 | src: ['<%= bootstrap %>']
34 | },
35 | js: {
36 | options: {task: 'concat'},
37 | src: ['<%= bootstrap %>']
38 | },
39 | css: {
40 | options: {task: 'less'},
41 | src: ['<%= bootstrap %>']
42 | },
43 | dist: {
44 | options: {task: 'dist'},
45 | src: ['<%= bootstrap %>']
46 | },
47 | all: {
48 | options: {task: 'default'},
49 | src: ['<%= bootstrap %>']
50 | }
51 | },
52 |
53 | // Regex for refactor task.
54 | replacements: require('./tasks/replacements'),
55 |
56 | // Refactor Liquid to Handlebars so we can
57 | // build with Assemble instead of Jekyll
58 | frep: {
59 | bootstrap: {
60 | options: {
61 | replacements: '<%= replacements.bootstrap %>'
62 | },
63 | files: [
64 | {expand: true, cwd: '<%= bootstrap %>', src: ['*.html', '_layouts/*.html', '_includes/*.html'], dest: 'templates/', ext: '.hbs'}
65 | ]
66 | },
67 | examples: {
68 | options: {
69 | replacements: '<%= replacements.examples %>'
70 | },
71 | files: [
72 | {expand: true, filter: 'isFile', cwd: '<%= bootstrap %>/examples', src: ['{*,**}/*.html'], dest: '<%= site.dest %>/examples/'}
73 | ]
74 | }
75 | },
76 |
77 | assemble: {
78 | options: {
79 | flatten: true,
80 | assets: '<%= site.assets %>',
81 | data: '<%= site.data %>/*.{json,yml}',
82 |
83 | // Metadata
84 | site: '<%= site %>',
85 |
86 | // Templates
87 | partials: '<%= site.includes %>',
88 | layoutdir: '<%= site.layouts %>',
89 | layout: '<%= site.layout %>',
90 | },
91 | site: {
92 | src: ['templates/*.hbs'],
93 | dest: '<%= site.dest %>/'
94 | }
95 | },
96 |
97 |
98 | // Compile LESS to CSS
99 | less: {
100 | options: {
101 | paths: [
102 | '<%= site.theme %>',
103 | '<%= site.theme %>/bootstrap',
104 | '<%= site.theme %>/components',
105 | '<%= site.theme %>/utils'
106 | ],
107 | },
108 | site: {
109 | src: ['<%= site.theme %>/site.less'],
110 | dest: '<%= site.assets %>/css/site.css'
111 | }
112 | },
113 |
114 |
115 | copy: {
116 | vendor: {
117 | files: {
118 | '<%= site.assets %>/js/highlight.js': ['<%= vendor %>/highlightjs/highlight.pack.js'],
119 | '<%= site.assets %>/css/github.css': ['<%= vendor %>/highlightjs/styles/github.css']
120 | }
121 | },
122 | assets: {
123 | files: [
124 | {expand: true, cwd: '<%= bootstrap %>/examples', src: ['**/*.css', '**/*.{jpg,png,gif}'], dest: '<%= site.dest %>/examples/'},
125 | {expand: true, cwd: '<%= bootstrap %>/docs-assets', src: ['**'], dest: '<%= site.assets %>/'},
126 | {expand: true, cwd: '<%= bootstrap %>/_data', src: ['**'], dest: '<%= site.data %>/'},
127 | {expand: true, cwd: '<%= bootstrap %>/dist', src: ['**'], dest: '<%= site.assets %>/'},
128 | ]
129 | },
130 | update: {
131 | files: [
132 | {expand: true, cwd: '<%= bootstrap %>/less', src: ['*', '!{var*,mix*,util*}'], dest: '<%= site.theme %>/bootstrap/'},
133 | {expand: true, cwd: '<%= bootstrap %>/less', src: ['{util*,mix*}.less'], dest: '<%= site.theme %>/utils'},
134 | {expand: true, cwd: '<%= bootstrap %>/less', src: ['variables.less'], dest: '<%= site.theme %>/'},
135 | ]
136 | }
137 | },
138 |
139 | clean: {
140 | dist: ['<%= site.dest %>/**/*', '!<%= site.dest %>/.{git,gitignore}'],
141 | update: ['<%= site.theme %>/bootstrap/{var*,mix*,util*}.less']
142 | }
143 | });
144 |
145 | grunt.config.set('site.description', 'Generated by http://assemble.io');
146 |
147 | // These plugins provide necessary tasks.
148 | grunt.loadNpmTasks('assemble');
149 | grunt.loadNpmTasks('assemble-less');
150 | grunt.loadNpmTasks('grunt-contrib-clean');
151 | grunt.loadNpmTasks('grunt-contrib-copy');
152 | grunt.loadNpmTasks('grunt-frep');
153 | grunt.loadNpmTasks('grunt-sync-pkg');
154 | grunt.loadNpmTasks('grunt-verb');
155 |
156 | // Load local "Subgrunt" task to run Bootstrap's Gruntfile.
157 | grunt.loadTasks('tasks');
158 |
159 | // Tests task.
160 | grunt.registerTask('test', ['subgrunt:test']);
161 |
162 | grunt.registerTask('dev', ['clean', 'frep', 'assemble']);
163 |
164 | grunt.registerTask('update', ['copy:update', 'clean:update']);
165 |
166 | // Default task to be run with the "grunt" command.
167 | grunt.registerTask('default', [
168 | 'clean',
169 | 'subgrunt:js',
170 | 'subgrunt:css',
171 | 'copy',
172 | 'frep',
173 | 'assemble',
174 | 'less',
175 | 'sync'
176 | ]);
177 | };
178 |
--------------------------------------------------------------------------------
/theme/bootstrap/button-groups.less:
--------------------------------------------------------------------------------
1 | //
2 | // Button groups
3 | // --------------------------------------------------
4 |
5 | // Make the div behave like a button
6 | .btn-group,
7 | .btn-group-vertical {
8 | position: relative;
9 | display: inline-block;
10 | vertical-align: middle; // match .btn alignment given font-size hack above
11 | > .btn {
12 | position: relative;
13 | float: left;
14 | // Bring the "active" button to the front
15 | &:hover,
16 | &:focus,
17 | &:active,
18 | &.active {
19 | z-index: 2;
20 | }
21 | &:focus {
22 | // Remove focus outline when dropdown JS adds it after closing the menu
23 | outline: none;
24 | }
25 | }
26 | }
27 |
28 | // Prevent double borders when buttons are next to each other
29 | .btn-group {
30 | .btn + .btn,
31 | .btn + .btn-group,
32 | .btn-group + .btn,
33 | .btn-group + .btn-group {
34 | margin-left: -1px;
35 | }
36 | }
37 |
38 | // Optional: Group multiple button groups together for a toolbar
39 | .btn-toolbar {
40 | margin-left: -5px; // Offset the first child's margin
41 | &:extend(.clearfix all);
42 |
43 | .btn-group,
44 | .input-group {
45 | float: left;
46 | }
47 | > .btn,
48 | > .btn-group,
49 | > .input-group {
50 | margin-left: 5px;
51 | }
52 | }
53 |
54 | .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
55 | border-radius: 0;
56 | }
57 |
58 | // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
59 | .btn-group > .btn:first-child {
60 | margin-left: 0;
61 | &:not(:last-child):not(.dropdown-toggle) {
62 | .border-right-radius(0);
63 | }
64 | }
65 | // Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
66 | .btn-group > .btn:last-child:not(:first-child),
67 | .btn-group > .dropdown-toggle:not(:first-child) {
68 | .border-left-radius(0);
69 | }
70 |
71 | // Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
72 | .btn-group > .btn-group {
73 | float: left;
74 | }
75 | .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
76 | border-radius: 0;
77 | }
78 | .btn-group > .btn-group:first-child {
79 | > .btn:last-child,
80 | > .dropdown-toggle {
81 | .border-right-radius(0);
82 | }
83 | }
84 | .btn-group > .btn-group:last-child > .btn:first-child {
85 | .border-left-radius(0);
86 | }
87 |
88 | // On active and open, don't show outline
89 | .btn-group .dropdown-toggle:active,
90 | .btn-group.open .dropdown-toggle {
91 | outline: 0;
92 | }
93 |
94 |
95 | // Sizing
96 | //
97 | // Remix the default button sizing classes into new ones for easier manipulation.
98 |
99 | .btn-group-xs > .btn { .btn-xs(); }
100 | .btn-group-sm > .btn { .btn-sm(); }
101 | .btn-group-lg > .btn { .btn-lg(); }
102 |
103 |
104 | // Split button dropdowns
105 | // ----------------------
106 |
107 | // Give the line between buttons some depth
108 | .btn-group > .btn + .dropdown-toggle {
109 | padding-left: 8px;
110 | padding-right: 8px;
111 | }
112 | .btn-group > .btn-lg + .dropdown-toggle {
113 | padding-left: 12px;
114 | padding-right: 12px;
115 | }
116 |
117 | // The clickable button for toggling the menu
118 | // Remove the gradient and set the same inset shadow as the :active state
119 | .btn-group.open .dropdown-toggle {
120 | .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
121 |
122 | // Show no shadow for `.btn-link` since it has no other button styles.
123 | &.btn-link {
124 | .box-shadow(none);
125 | }
126 | }
127 |
128 |
129 | // Reposition the caret
130 | .btn .caret {
131 | margin-left: 0;
132 | }
133 | // Carets in other button sizes
134 | .btn-lg .caret {
135 | border-width: @caret-width-large @caret-width-large 0;
136 | border-bottom-width: 0;
137 | }
138 | // Upside down carets for .dropup
139 | .dropup .btn-lg .caret {
140 | border-width: 0 @caret-width-large @caret-width-large;
141 | }
142 |
143 |
144 | // Vertical button groups
145 | // ----------------------
146 |
147 | .btn-group-vertical {
148 | > .btn,
149 | > .btn-group,
150 | > .btn-group > .btn {
151 | display: block;
152 | float: none;
153 | width: 100%;
154 | max-width: 100%;
155 | }
156 |
157 | // Clear floats so dropdown menus can be properly placed
158 | > .btn-group {
159 | &:extend(.clearfix all);
160 | > .btn {
161 | float: none;
162 | }
163 | }
164 |
165 | > .btn + .btn,
166 | > .btn + .btn-group,
167 | > .btn-group + .btn,
168 | > .btn-group + .btn-group {
169 | margin-top: -1px;
170 | margin-left: 0;
171 | }
172 | }
173 |
174 | .btn-group-vertical > .btn {
175 | &:not(:first-child):not(:last-child) {
176 | border-radius: 0;
177 | }
178 | &:first-child:not(:last-child) {
179 | border-top-right-radius: @border-radius-base;
180 | .border-bottom-radius(0);
181 | }
182 | &:last-child:not(:first-child) {
183 | border-bottom-left-radius: @border-radius-base;
184 | .border-top-radius(0);
185 | }
186 | }
187 | .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
188 | border-radius: 0;
189 | }
190 | .btn-group-vertical > .btn-group:first-child:not(:last-child) {
191 | > .btn:last-child,
192 | > .dropdown-toggle {
193 | .border-bottom-radius(0);
194 | }
195 | }
196 | .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
197 | .border-top-radius(0);
198 | }
199 |
200 |
201 |
202 | // Justified button groups
203 | // ----------------------
204 |
205 | .btn-group-justified {
206 | display: table;
207 | width: 100%;
208 | table-layout: fixed;
209 | border-collapse: separate;
210 | > .btn,
211 | > .btn-group {
212 | float: none;
213 | display: table-cell;
214 | width: 1%;
215 | }
216 | > .btn-group .btn {
217 | width: 100%;
218 | }
219 | }
220 |
221 |
222 | // Checkbox and radio options
223 | [data-toggle="buttons"] > .btn > input[type="radio"],
224 | [data-toggle="buttons"] > .btn > input[type="checkbox"] {
225 | display: none;
226 | }
227 |
--------------------------------------------------------------------------------
/theme/bootstrap/navs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Navs
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | // --------------------------------------------------
8 |
9 | .nav {
10 | margin-bottom: 0;
11 | padding-left: 0; // Override default ul/ol
12 | list-style: none;
13 | &:extend(.clearfix all);
14 |
15 | > li {
16 | position: relative;
17 | display: block;
18 |
19 | > a {
20 | position: relative;
21 | display: block;
22 | padding: @nav-link-padding;
23 | &:hover,
24 | &:focus {
25 | text-decoration: none;
26 | background-color: @nav-link-hover-bg;
27 | }
28 | }
29 |
30 | // Disabled state sets text to gray and nukes hover/tab effects
31 | &.disabled > a {
32 | color: @nav-disabled-link-color;
33 |
34 | &:hover,
35 | &:focus {
36 | color: @nav-disabled-link-hover-color;
37 | text-decoration: none;
38 | background-color: transparent;
39 | cursor: not-allowed;
40 | }
41 | }
42 | }
43 |
44 | // Open dropdowns
45 | .open > a {
46 | &,
47 | &:hover,
48 | &:focus {
49 | background-color: @nav-link-hover-bg;
50 | border-color: @link-color;
51 | }
52 | }
53 |
54 | // Nav dividers (deprecated with v3.0.1)
55 | //
56 | // This should have been removed in v3 with the dropping of `.nav-list`, but
57 | // we missed it. We don't currently support this anywhere, but in the interest
58 | // of maintaining backward compatibility in case you use it, it's deprecated.
59 | .nav-divider {
60 | .nav-divider();
61 | }
62 |
63 | // Prevent IE8 from misplacing imgs
64 | //
65 | // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
66 | > li > a > img {
67 | max-width: none;
68 | }
69 | }
70 |
71 |
72 | // Tabs
73 | // -------------------------
74 |
75 | // Give the tabs something to sit on
76 | .nav-tabs {
77 | border-bottom: 1px solid @nav-tabs-border-color;
78 | > li {
79 | float: left;
80 | // Make the list-items overlay the bottom border
81 | margin-bottom: -1px;
82 |
83 | // Actual tabs (as links)
84 | > a {
85 | margin-right: 2px;
86 | line-height: @line-height-base;
87 | border: 1px solid transparent;
88 | border-radius: @border-radius-base @border-radius-base 0 0;
89 | &:hover {
90 | border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
91 | }
92 | }
93 |
94 | // Active state, and its :hover to override normal :hover
95 | &.active > a {
96 | &,
97 | &:hover,
98 | &:focus {
99 | color: @nav-tabs-active-link-hover-color;
100 | background-color: @nav-tabs-active-link-hover-bg;
101 | border: 1px solid @nav-tabs-active-link-hover-border-color;
102 | border-bottom-color: transparent;
103 | cursor: default;
104 | }
105 | }
106 | }
107 | // pulling this in mainly for less shorthand
108 | &.nav-justified {
109 | .nav-justified();
110 | .nav-tabs-justified();
111 | }
112 | }
113 |
114 |
115 | // Pills
116 | // -------------------------
117 | .nav-pills {
118 | > li {
119 | float: left;
120 |
121 | // Links rendered as pills
122 | > a {
123 | border-radius: @nav-pills-border-radius;
124 | }
125 | + li {
126 | margin-left: 2px;
127 | }
128 |
129 | // Active state
130 | &.active > a {
131 | &,
132 | &:hover,
133 | &:focus {
134 | color: @nav-pills-active-link-hover-color;
135 | background-color: @nav-pills-active-link-hover-bg;
136 | }
137 | }
138 | }
139 | }
140 |
141 |
142 | // Stacked pills
143 | .nav-stacked {
144 | > li {
145 | float: none;
146 | + li {
147 | margin-top: 2px;
148 | margin-left: 0; // no need for this gap between nav items
149 | }
150 | }
151 | }
152 |
153 |
154 | // Nav variations
155 | // --------------------------------------------------
156 |
157 | // Justified nav links
158 | // -------------------------
159 |
160 | .nav-justified {
161 | width: 100%;
162 |
163 | > li {
164 | float: none;
165 | > a {
166 | text-align: center;
167 | margin-bottom: 5px;
168 | }
169 | }
170 |
171 | > .dropdown .dropdown-menu {
172 | top: auto;
173 | left: auto;
174 | }
175 |
176 | @media (min-width: @screen-sm-min) {
177 | > li {
178 | display: table-cell;
179 | width: 1%;
180 | > a {
181 | margin-bottom: 0;
182 | }
183 | }
184 | }
185 | }
186 |
187 | // Move borders to anchors instead of bottom of list
188 | //
189 | // Mixin for adding on top the shared `.nav-justified` styles for our tabs
190 | .nav-tabs-justified {
191 | border-bottom: 0;
192 |
193 | > li > a {
194 | // Override margin from .nav-tabs
195 | margin-right: 0;
196 | border-radius: @border-radius-base;
197 | }
198 |
199 | > .active > a,
200 | > .active > a:hover,
201 | > .active > a:focus {
202 | border: 1px solid @nav-tabs-justified-link-border-color;
203 | }
204 |
205 | @media (min-width: @screen-sm-min) {
206 | > li > a {
207 | border-bottom: 1px solid @nav-tabs-justified-link-border-color;
208 | border-radius: @border-radius-base @border-radius-base 0 0;
209 | }
210 | > .active > a,
211 | > .active > a:hover,
212 | > .active > a:focus {
213 | border-bottom-color: @nav-tabs-justified-active-link-border-color;
214 | }
215 | }
216 | }
217 |
218 |
219 | // Tabbable tabs
220 | // -------------------------
221 |
222 | // Hide tabbable panes to start, show them when `.active`
223 | .tab-content {
224 | > .tab-pane {
225 | display: none;
226 | }
227 | > .active {
228 | display: block;
229 | }
230 | }
231 |
232 |
233 | // Dropdowns
234 | // -------------------------
235 |
236 | // Specific dropdowns
237 | .nav-tabs .dropdown-menu {
238 | // make dropdown border overlap tab border
239 | margin-top: -1px;
240 | // Remove the top rounded corners here since there is a hard edge above the menu
241 | .border-top-radius(0);
242 | }
243 |
--------------------------------------------------------------------------------
/templates/about.hbs:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default.hbs
3 | title: About
4 | slug: about
5 | lead: "Learn about the history of Bootstrap, meet the core team, and check out the ever-growing community resources."
6 | base_url: "../"
7 | ---
8 |
9 |
10 |
12 |
13 |
16 |
Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.
17 |
Bootstrap was created at Twitter in mid-2010 by @mdo and @fat . Prior to being an open-sourced framework, Bootstrap was known as Twitter Blueprint . A few months into development, Twitter held its first Hack Week and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.
18 |
Originally released on Friday, August 19, 2011 , we've since had over twenty releases , including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.
19 |
20 |
21 |
22 |
24 |
25 |
28 |
Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community.
29 |
59 |
Get involved with Bootstrap development by opening an issue or submitting a pull request. Read our contributing guidelines for information on how we develop.
60 |
61 |
62 |
63 |
65 |
66 |
69 |
Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.
70 |
75 |
You can also follow @twbootstrap on Twitter for the latest gossip and awesome music videos.
76 |
77 |
78 |
79 |
81 |
82 |
85 |
Community members have translated Bootstrap's documentation into various langauges. None are officially supported and may not always be up to date.
86 |
93 |
Have another language to add, or perhaps a different or better translation? Let us know by opening an issue .
94 |
95 |
--------------------------------------------------------------------------------
/tasks/replacements.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Replacement patterns for converting Bootstrap's liquid templates to Handlebars.
3 | * Copyright (c) 2013 Jon Schlinkert
4 | * Licensed under the MIT license.
5 | */
6 |
7 | module.exports = {
8 | examples: [
9 | {
10 | // Fix example assets
11 | pattern: /(..\/..\/(dist|docs-assets)\/)/g,
12 | replacement: '../../assets/'
13 | }
14 | ],
15 | bootstrap: [
16 |
17 | /**
18 | * Layouts
19 | */
20 |
21 | {
22 | // Replace {{content}} tag with {{> body }} partial
23 | pattern: /(?:\{\{\s*content\s*\}\})/g,
24 | replacement: '{{> body }}'
25 | },
26 | {
27 | // Append `.html` ext to layouts defined in YFM
28 | pattern: /(---\s*layout:.*)/g,
29 | replacement: '$1.hbs'
30 | },
31 | {
32 | // Remove `page.` variable
33 | pattern: /({%|{{)\s*?page\./g,
34 | replacement: '$1 '
35 | },
36 |
37 |
38 | /**
39 | * Navigation
40 | */
41 |
42 | {
43 | /**
44 | * Replace liquid tags in nav anchors with Handlebars helpers.
45 | * @example:
46 | * From: {% if page.slug == "getting-started" %} class="active"{% endif %}
47 | * To: {{#is basename "getting-started"}} class="active"{{/is}}
48 | */
49 | pattern: /({%\s*?if\s*?)(page\..+?)(\s*?==\s*?)(.*?)(\s*?%})(.*?)({% endif %})/gi,
50 | replacement: '{{#is $2$4}}$6{{/is}}'
51 | },
52 | {
53 | // Replace liquid {% if/elseif %} navigation blocks with Handlebars {{#is/unless}}
54 | pattern: /({%\s*)\b(.*)\b\s(\b(.*)\b\.(.*)\s==\s)(.*\s*)(\s*?%})(\s.*)(\s*)({(%|\{)\s*\b(.*)\b)\s(.*)(?:\.html)(\s*%})(\s*)/g,
55 | replacement: '{{#is slug $6}}$8$9{{> $13 }}$15{{/is}}$15'
56 | },
57 | {
58 | /**
59 | * Replace liquid tags in footer.html with Handlebars helpers.
60 | * @example:
61 | * From:
62 | * {% if page.slug == "customize" %}
63 | *
64 | * ...
65 | *
66 | * {% endif %}
67 | * To:
68 | * {{#is slug == "customize" }}
69 | *
70 | * ...
71 | *
72 | * {{/is}}
73 | */
74 | pattern: /({%\s*?if\s*?)(page\..+?)(\s*?==\s*?)(.*?)(\s*?%})([\s\S]*?)({% endif %})/gi,
75 | replacement: '{{#is $2$4}}$6{{/is}}'
76 | },
77 | {
78 | // Clean up any remaining {% endif %}'s
79 | pattern: /(?:\n\s*?{%\s*endif\s*%})/g,
80 | replacement: ''
81 | },
82 | {
83 | pattern: /\{% comment %}/g,
84 | replacement: '{{#comment}}'
85 | },
86 | {
87 | pattern: /\{% endcomment %}/g,
88 | replacement: '{{/comment}}'
89 | },
90 | {
91 | pattern: /({% for iconClassName .+ %})([\s\S]+)({% endfor %})/,
92 | replacement: function(a, b, c, d) {
93 | b = '{{#each glyphicons}}\n';
94 | c = [
95 | '
',
96 | ' ',
97 | ' glyphicon {{.}} ',
98 | ' \n'
99 | ].join('\n');
100 | d = '{{/each}}\n';
101 | return b + c + d;
102 | }
103 | },
104 |
105 |
106 | /**
107 | * Tags
108 | */
109 |
110 | {
111 | // Replace liquid includes with Handlebars partials
112 | pattern: /(\{%\s*include\s*)(|(?:.*)+)(?:\.html\s*%\})/g,
113 | replacement: '{{> $2 }}'
114 | },
115 | {
116 | // Strip 'page' path from tag variables
117 | pattern: /(\{\{\s*page\.)(.*)(?:\}\})/g,
118 | replacement: '{{ $2}}'
119 | },
120 | {
121 | // Remove leftover "page" variables
122 | pattern: /\b(is )(?:page\.)\b/g,
123 | replacement: '$1'
124 | },
125 | {
126 | // Replace "{{ base_url }}/dist" and "{{ base_url }}/assets" with "{{ assets }}"
127 | pattern: /(?:\{\{\s*base_url\s*\}\}(assets|dist|docs-assets))/g,
128 | replacement: '{{ assets }}'
129 | },
130 | {
131 | // Replace "{{ base_url }}/dist" and "{{ base_url }}/assets" with "{{ assets }}"
132 | pattern: /(\{\{ base_url \}\}2\.3\.2)/g,
133 | replacement: 'http://getbootstrap.com/2.3.2'
134 | },
135 | {
136 | // Replace "{{ base_url }}/dist" and "{{ base_url }}/assets" with "{{ assets }}"
137 | pattern: /(href=")(\{\{[ ]?base_url[ ]?\}\})[\/]?(|.*)[ ]?"/g,
138 | replacement: 'href="./$3.html\"'
139 | },
140 | {
141 | pattern: /\{%\s?(else|else if)\s?%}/g,
142 | replacement: '{{ else }}'
143 | },
144 | {
145 | // cleanup from previous regex
146 | pattern: /.\/.html/g,
147 | replacement: 'index.html'
148 | },
149 | {
150 | // Replace liquid filter with {{now}} helper
151 | pattern: /site\.time \| date\:/g,
152 | replacement: 'now'
153 | },
154 |
155 |
156 | /**
157 | * Code blocks and syntax highlighting
158 | */
159 |
160 | {
161 | // highlight.js doesn't support line numbers, so convert the
162 | // language definition to just "html"
163 | pattern: /html linenos/g,
164 | replacement: 'html'
165 | },
166 | {
167 | // Identify the language definitions after the first code
168 | // fence (```) for each highlighted code block.
169 | pattern: /(\{%\s*)\s*(?:highlight)\s*(bash|js|html|css|less)\s*(%\})/g,
170 | replacement: '\n{{#markdown}}\n```$2'
171 | },
172 | {
173 | pattern: /(\{%\s*endhighlight\s*%\})/g,
174 | replacement: '```\n{{/markdown}}\n'
175 | },
176 | {
177 | // Fix example assets
178 | pattern: /"..\/examples/g,
179 | replacement: '"examples'
180 | },
181 |
182 |
183 | /**
184 | * Add script and link tags for highlight.js
185 | */
186 | {
187 | // Find the holder.js script tag, then just add it back
188 | // with highlight.js directly afterwards
189 | pattern: /(
<\/script>)/g,
190 | replacement: '$1\n