├── README.md ├── css ├── bff.css ├── bff.min.css ├── bootstrap-theme.css ├── bootstrap-theme.css.map ├── bootstrap-theme.min.css ├── bootstrap.css ├── bootstrap.css.map ├── bootstrap.min.css ├── foundation.css ├── foundation.min.css └── normalize.css ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff ├── humans.txt ├── img └── .gitkeep ├── index.html ├── js ├── affix.js ├── alert.js ├── bff.js ├── bootstrap.js ├── bootstrap.min.js ├── button.js ├── carousel.js ├── collapse.js ├── dropdown.js ├── foundation.abide.js ├── foundation.accordion.js ├── foundation.alert.js ├── foundation.clearing.js ├── foundation.dropdown.js ├── foundation.equalizer.js ├── foundation.interchange.js ├── foundation.joyride.js ├── foundation.js ├── foundation.magellan.js ├── foundation.min.js ├── foundation.offcanvas.js ├── foundation.orbit.js ├── foundation.reveal.js ├── foundation.slider.js ├── foundation.tab.js ├── foundation.tooltip.js ├── foundation.topbar.js ├── modal.js ├── popover.js ├── scrollspy.js ├── tab.js ├── tooltip.js ├── transition.js └── vendor │ ├── fastclick.js │ ├── jquery.cookie.js │ ├── jquery.js │ ├── modernizr.js │ └── placeholder.js └── robots.txt /README.md: -------------------------------------------------------------------------------- 1 | Bootstrap Foundation Five 2 | === 3 | 4 | Bootstrap Foundation Five is a collaboration project between bootstrap and zurb foundation that merges the two projects together. The most popular front-end framework for developing responsive, mobile first projects on the web. The most advanced responsive front-end framework in the world. Together at last. Best friends. 5 | 6 | Features 7 | === 8 | Designed for everyone, everywhere. 9 | Bootstrap Foundation Five makes front-end web development faster and easier. It's made for folks of all skill levels, devices of all shapes, and projects of all sizes. 10 | 11 | Fast Click 12 | === 13 | We’ve integrated fastclick.js so your mobile users have a snappier experience. 14 | 15 | GPU Acceleration 16 | === 17 | Animation will perform significantly better and sleeker. 18 | 19 | 20 | Off Canvas 21 | === 22 | Off Canvas provides a powerful way to build navigation into screens. 23 | 24 | Improved Forms 25 | === 26 | It's super easy to code up forms, inline labels and other components. 27 | 28 | Preprocessors 29 | === 30 | In addition to vanilla CSS, Bootstrap Foundatino Five includes support for the two most popular CSS preprocessors, Less and Sass. 31 | 32 | One framework, every device. 33 | === 34 | Bootstrap Foundation Five easily and efficiently scales your project with one code base, from phones to tablets to desktops. 35 | 36 | Comprehensive docs 37 | === 38 | With Bootstrap, you get extensive and beautiful documentation with hundreds of live examples, code snippets, and more. 39 | 40 | 41 | 42 | The MIT License (MIT) 43 | === 44 | The MIT License (MIT) 45 | 46 | Copyright (c) 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | 66 | 67 | -------------------------------------------------------------------------------- /css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.0 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined in IE 8/9. 28 | */ 29 | 30 | article, 31 | aside, 32 | details, 33 | figcaption, 34 | figure, 35 | footer, 36 | header, 37 | hgroup, 38 | main, 39 | nav, 40 | section, 41 | summary { 42 | display: block; 43 | } 44 | 45 | /** 46 | * 1. Correct `inline-block` display not defined in IE 8/9. 47 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 48 | */ 49 | 50 | audio, 51 | canvas, 52 | progress, 53 | video { 54 | display: inline-block; /* 1 */ 55 | vertical-align: baseline; /* 2 */ 56 | } 57 | 58 | /** 59 | * Prevent modern browsers from displaying `audio` without controls. 60 | * Remove excess height in iOS 5 devices. 61 | */ 62 | 63 | audio:not([controls]) { 64 | display: none; 65 | height: 0; 66 | } 67 | 68 | /** 69 | * Address `[hidden]` styling not present in IE 8/9. 70 | * Hide the `template` element in IE, Safari, and Firefox < 22. 71 | */ 72 | 73 | [hidden], 74 | template { 75 | display: none; 76 | } 77 | 78 | /* Links 79 | ========================================================================== */ 80 | 81 | /** 82 | * Remove the gray background color from active links in IE 10. 83 | */ 84 | 85 | a { 86 | background: transparent; 87 | } 88 | 89 | /** 90 | * Improve readability when focused and also mouse hovered in all browsers. 91 | */ 92 | 93 | a:active, 94 | a:hover { 95 | outline: 0; 96 | } 97 | 98 | /* Text-level semantics 99 | ========================================================================== */ 100 | 101 | /** 102 | * Address styling not present in IE 8/9, Safari 5, and Chrome. 103 | */ 104 | 105 | abbr[title] { 106 | border-bottom: 1px dotted; 107 | } 108 | 109 | /** 110 | * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. 111 | */ 112 | 113 | b, 114 | strong { 115 | font-weight: bold; 116 | } 117 | 118 | /** 119 | * Address styling not present in Safari 5 and Chrome. 120 | */ 121 | 122 | dfn { 123 | font-style: italic; 124 | } 125 | 126 | /** 127 | * Address variable `h1` font-size and margin within `section` and `article` 128 | * contexts in Firefox 4+, Safari 5, and Chrome. 129 | */ 130 | 131 | h1 { 132 | font-size: 2em; 133 | margin: 0.67em 0; 134 | } 135 | 136 | /** 137 | * Address styling not present in IE 8/9. 138 | */ 139 | 140 | mark { 141 | background: #ff0; 142 | color: #000; 143 | } 144 | 145 | /** 146 | * Address inconsistent and variable font size in all browsers. 147 | */ 148 | 149 | small { 150 | font-size: 80%; 151 | } 152 | 153 | /** 154 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 155 | */ 156 | 157 | sub, 158 | sup { 159 | font-size: 75%; 160 | line-height: 0; 161 | position: relative; 162 | vertical-align: baseline; 163 | } 164 | 165 | sup { 166 | top: -0.5em; 167 | } 168 | 169 | sub { 170 | bottom: -0.25em; 171 | } 172 | 173 | /* Embedded content 174 | ========================================================================== */ 175 | 176 | /** 177 | * Remove border when inside `a` element in IE 8/9. 178 | */ 179 | 180 | img { 181 | border: 0; 182 | } 183 | 184 | /** 185 | * Correct overflow displayed oddly in IE 9. 186 | */ 187 | 188 | svg:not(:root) { 189 | overflow: hidden; 190 | } 191 | 192 | /* Grouping content 193 | ========================================================================== */ 194 | 195 | /** 196 | * Address margin not present in IE 8/9 and Safari 5. 197 | */ 198 | 199 | figure { 200 | margin: 1em 40px; 201 | } 202 | 203 | /** 204 | * Address differences between Firefox and other browsers. 205 | */ 206 | 207 | hr { 208 | -moz-box-sizing: content-box; 209 | box-sizing: content-box; 210 | height: 0; 211 | } 212 | 213 | /** 214 | * Contain overflow in all browsers. 215 | */ 216 | 217 | pre { 218 | overflow: auto; 219 | } 220 | 221 | /** 222 | * Address odd `em`-unit font size rendering in all browsers. 223 | */ 224 | 225 | code, 226 | kbd, 227 | pre, 228 | samp { 229 | font-family: monospace, monospace; 230 | font-size: 1em; 231 | } 232 | 233 | /* Forms 234 | ========================================================================== */ 235 | 236 | /** 237 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 238 | * styling of `select`, unless a `border` property is set. 239 | */ 240 | 241 | /** 242 | * 1. Correct color not being inherited. 243 | * Known issue: affects color of disabled elements. 244 | * 2. Correct font properties not being inherited. 245 | * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. 246 | */ 247 | 248 | button, 249 | input, 250 | optgroup, 251 | select, 252 | textarea { 253 | color: inherit; /* 1 */ 254 | font: inherit; /* 2 */ 255 | margin: 0; /* 3 */ 256 | } 257 | 258 | /** 259 | * Address `overflow` set to `hidden` in IE 8/9/10. 260 | */ 261 | 262 | button { 263 | overflow: visible; 264 | } 265 | 266 | /** 267 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 268 | * All other form control elements do not inherit `text-transform` values. 269 | * Correct `button` style inheritance in Firefox, IE 8+, and Opera 270 | * Correct `select` style inheritance in Firefox. 271 | */ 272 | 273 | button, 274 | select { 275 | text-transform: none; 276 | } 277 | 278 | /** 279 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 280 | * and `video` controls. 281 | * 2. Correct inability to style clickable `input` types in iOS. 282 | * 3. Improve usability and consistency of cursor style between image-type 283 | * `input` and others. 284 | */ 285 | 286 | button, 287 | html input[type="button"], /* 1 */ 288 | input[type="reset"], 289 | input[type="submit"] { 290 | -webkit-appearance: button; /* 2 */ 291 | cursor: pointer; /* 3 */ 292 | } 293 | 294 | /** 295 | * Re-set default cursor for disabled elements. 296 | */ 297 | 298 | button[disabled], 299 | html input[disabled] { 300 | cursor: default; 301 | } 302 | 303 | /** 304 | * Remove inner padding and border in Firefox 4+. 305 | */ 306 | 307 | button::-moz-focus-inner, 308 | input::-moz-focus-inner { 309 | border: 0; 310 | padding: 0; 311 | } 312 | 313 | /** 314 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 315 | * the UA stylesheet. 316 | */ 317 | 318 | input { 319 | line-height: normal; 320 | } 321 | 322 | /** 323 | * It's recommended that you don't attempt to style these elements. 324 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 325 | * 326 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 327 | * 2. Remove excess padding in IE 8/9/10. 328 | */ 329 | 330 | input[type="checkbox"], 331 | input[type="radio"] { 332 | box-sizing: border-box; /* 1 */ 333 | padding: 0; /* 2 */ 334 | } 335 | 336 | /** 337 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 338 | * `font-size` values of the `input`, it causes the cursor style of the 339 | * decrement button to change from `default` to `text`. 340 | */ 341 | 342 | input[type="number"]::-webkit-inner-spin-button, 343 | input[type="number"]::-webkit-outer-spin-button { 344 | height: auto; 345 | } 346 | 347 | /** 348 | * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 349 | * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome 350 | * (include `-moz` to future-proof). 351 | */ 352 | 353 | input[type="search"] { 354 | -webkit-appearance: textfield; /* 1 */ 355 | -moz-box-sizing: content-box; 356 | -webkit-box-sizing: content-box; /* 2 */ 357 | box-sizing: content-box; 358 | } 359 | 360 | /** 361 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 362 | * Safari (but not Chrome) clips the cancel button when the search input has 363 | * padding (and `textfield` appearance). 364 | */ 365 | 366 | input[type="search"]::-webkit-search-cancel-button, 367 | input[type="search"]::-webkit-search-decoration { 368 | -webkit-appearance: none; 369 | } 370 | 371 | /** 372 | * Define consistent border, margin, and padding. 373 | */ 374 | 375 | fieldset { 376 | border: 1px solid #c0c0c0; 377 | margin: 0 2px; 378 | padding: 0.35em 0.625em 0.75em; 379 | } 380 | 381 | /** 382 | * 1. Correct `color` not being inherited in IE 8/9. 383 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 384 | */ 385 | 386 | legend { 387 | border: 0; /* 1 */ 388 | padding: 0; /* 2 */ 389 | } 390 | 391 | /** 392 | * Remove default vertical scrollbar in IE 8/9. 393 | */ 394 | 395 | textarea { 396 | overflow: auto; 397 | } 398 | 399 | /** 400 | * Don't inherit the `font-weight` (applied by a rule above). 401 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 402 | */ 403 | 404 | optgroup { 405 | font-weight: bold; 406 | } 407 | 408 | /* Tables 409 | ========================================================================== */ 410 | 411 | /** 412 | * Remove most spacing between table cells. 413 | */ 414 | 415 | table { 416 | border-collapse: collapse; 417 | border-spacing: 0; 418 | } 419 | 420 | td, 421 | th { 422 | padding: 0; 423 | } 424 | -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootstrapfoundationfive/bff/db95f428668fa18ee13a81f0fa694d7bf7e4af20/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootstrapfoundationfive/bff/db95f428668fa18ee13a81f0fa694d7bf7e4af20/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootstrapfoundationfive/bff/db95f428668fa18ee13a81f0fa694d7bf7e4af20/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /humans.txt: -------------------------------------------------------------------------------- 1 | /* Foundation was made by ZURB, an interaction design and design strategy firm in Campbell, CA */ 2 | /* humanstxt.org */ 3 | 4 | /* SITE */ 5 | Standards: HTML5, CSS3, YOLO, SWAG 6 | Components: jQuery, Orbit, Reveal, BootstrapFoundationFive 7 | Software: Sublime, Git, Sass, Syss, LiveJournal 8 | -------------------------------------------------------------------------------- /img/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | BFF | Welcome 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |

Welcome to BootstrapFoundationFive (BFF)

15 |
16 |
17 | 18 |
19 |
20 |
Here’s your basic grid:
21 | 22 | 23 |
24 |
25 |
26 |

This is a twelve column section in a row. Each of these includes a div.panel element so you can see where the columns are - it's not required at all for the grid.

27 |
28 |
29 |
30 |
31 |
32 |
33 |

Six columns

34 |
35 |
36 |
37 |
38 |

Six columns

39 |
40 |
41 |
42 |
43 |
44 |
45 |

Four columns

46 |
47 |
48 |
49 |
50 |

Four columns

51 |
52 |
53 |
54 |
55 |

Four columns

56 |
57 |
58 |
59 | 60 |
61 | 62 |
We bet you’ll need forms somewhere:
63 |
64 |
65 |
66 | 67 | 68 |
69 |
70 |
71 |
72 | 73 | 74 |
75 |
76 | 77 | 78 |
79 |
80 |
81 | 82 |
83 | 84 |
85 |
86 | .com 87 |
88 |
89 |
90 |
91 | 92 | 94 |
95 |

Forms

96 | 97 |

Basic example

98 |

Individual form controls automatically receive some global styling. All textual <input>, <textarea>, and <select> elements with .form-control are set to width: 100%; by default. Wrap labels and controls in .form-group for optimum spacing.

99 |
100 | 101 |
102 | 103 | 104 |
105 |
106 | 107 | 108 |
109 |
110 | 111 | 112 |

Example block-level help text here.

113 |
114 |
115 | 118 |
119 | 120 | 121 |
122 | 123 |
124 |
125 | 126 |
127 |

Sidebar HTML

128 | 134 | 135 |

Unordered

136 |

A list of items in which the order does not explicitly matter.

137 |
138 |
    139 |
  • Lorem ipsum dolor sit amet
  • 140 |
  • Consectetur adipiscing elit
  • 141 |
  • Integer molestie lorem at massa
  • 142 |
  • Facilisis in pretium nisl aliquet
  • 143 |
  • Nulla volutpat aliquam velit 144 |
      145 |
    • Phasellus iaculis neque
    • 146 |
    • Purus sodales ultricies
    • 147 |
    • Vestibulum laoreet porttitor sem
    • 148 |
    • Ac tristique libero volutpat at
    • 149 |
    150 |
  • 151 |
  • Faucibus porta lacus fringilla vel
  • 152 |
  • Aenean sit amet erat nunc
  • 153 |
  • Eget porttitor lorem
  • 154 |
155 |
156 | 157 | 158 |
159 | 160 |
161 | 162 | 163 | 164 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /js/affix.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: affix.js v3.1.1 3 | * http://getbootstrap.com/javascript/#affix 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // AFFIX CLASS DEFINITION 14 | // ====================== 15 | 16 | var Affix = function (element, options) { 17 | this.options = $.extend({}, Affix.DEFAULTS, options) 18 | this.$window = $(window) 19 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) 20 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) 21 | 22 | this.$element = $(element) 23 | this.affixed = 24 | this.unpin = 25 | this.pinnedOffset = null 26 | 27 | this.checkPosition() 28 | } 29 | 30 | Affix.RESET = 'affix affix-top affix-bottom' 31 | 32 | Affix.DEFAULTS = { 33 | offset: 0 34 | } 35 | 36 | Affix.prototype.getPinnedOffset = function () { 37 | if (this.pinnedOffset) return this.pinnedOffset 38 | this.$element.removeClass(Affix.RESET).addClass('affix') 39 | var scrollTop = this.$window.scrollTop() 40 | var position = this.$element.offset() 41 | return (this.pinnedOffset = position.top - scrollTop) 42 | } 43 | 44 | Affix.prototype.checkPositionWithEventLoop = function () { 45 | setTimeout($.proxy(this.checkPosition, this), 1) 46 | } 47 | 48 | Affix.prototype.checkPosition = function () { 49 | if (!this.$element.is(':visible')) return 50 | 51 | var scrollHeight = $(document).height() 52 | var scrollTop = this.$window.scrollTop() 53 | var position = this.$element.offset() 54 | var offset = this.options.offset 55 | var offsetTop = offset.top 56 | var offsetBottom = offset.bottom 57 | 58 | if (this.affixed == 'top') position.top += scrollTop 59 | 60 | if (typeof offset != 'object') offsetBottom = offsetTop = offset 61 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) 62 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) 63 | 64 | var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : 65 | offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : 66 | offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false 67 | 68 | if (this.affixed === affix) return 69 | if (this.unpin) this.$element.css('top', '') 70 | 71 | var affixType = 'affix' + (affix ? '-' + affix : '') 72 | var e = $.Event(affixType + '.bs.affix') 73 | 74 | this.$element.trigger(e) 75 | 76 | if (e.isDefaultPrevented()) return 77 | 78 | this.affixed = affix 79 | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null 80 | 81 | this.$element 82 | .removeClass(Affix.RESET) 83 | .addClass(affixType) 84 | .trigger($.Event(affixType.replace('affix', 'affixed'))) 85 | 86 | if (affix == 'bottom') { 87 | this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() }) 88 | } 89 | } 90 | 91 | 92 | // AFFIX PLUGIN DEFINITION 93 | // ======================= 94 | 95 | var old = $.fn.affix 96 | 97 | $.fn.affix = function (option) { 98 | return this.each(function () { 99 | var $this = $(this) 100 | var data = $this.data('bs.affix') 101 | var options = typeof option == 'object' && option 102 | 103 | if (!data) $this.data('bs.affix', (data = new Affix(this, options))) 104 | if (typeof option == 'string') data[option]() 105 | }) 106 | } 107 | 108 | $.fn.affix.Constructor = Affix 109 | 110 | 111 | // AFFIX NO CONFLICT 112 | // ================= 113 | 114 | $.fn.affix.noConflict = function () { 115 | $.fn.affix = old 116 | return this 117 | } 118 | 119 | 120 | // AFFIX DATA-API 121 | // ============== 122 | 123 | $(window).on('load', function () { 124 | $('[data-spy="affix"]').each(function () { 125 | var $spy = $(this) 126 | var data = $spy.data() 127 | 128 | data.offset = data.offset || {} 129 | 130 | if (data.offsetBottom) data.offset.bottom = data.offsetBottom 131 | if (data.offsetTop) data.offset.top = data.offsetTop 132 | 133 | $spy.affix(data) 134 | }) 135 | }) 136 | 137 | }(jQuery); 138 | -------------------------------------------------------------------------------- /js/alert.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: alert.js v3.1.1 3 | * http://getbootstrap.com/javascript/#alerts 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // ALERT CLASS DEFINITION 14 | // ====================== 15 | 16 | var dismiss = '[data-dismiss="alert"]' 17 | var Alert = function (el) { 18 | $(el).on('click', dismiss, this.close) 19 | } 20 | 21 | Alert.prototype.close = function (e) { 22 | var $this = $(this) 23 | var selector = $this.attr('data-target') 24 | 25 | if (!selector) { 26 | selector = $this.attr('href') 27 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 28 | } 29 | 30 | var $parent = $(selector) 31 | 32 | if (e) e.preventDefault() 33 | 34 | if (!$parent.length) { 35 | $parent = $this.hasClass('alert') ? $this : $this.parent() 36 | } 37 | 38 | $parent.trigger(e = $.Event('close.bs.alert')) 39 | 40 | if (e.isDefaultPrevented()) return 41 | 42 | $parent.removeClass('in') 43 | 44 | function removeElement() { 45 | $parent.trigger('closed.bs.alert').remove() 46 | } 47 | 48 | $.support.transition && $parent.hasClass('fade') ? 49 | $parent 50 | .one($.support.transition.end, removeElement) 51 | .emulateTransitionEnd(150) : 52 | removeElement() 53 | } 54 | 55 | 56 | // ALERT PLUGIN DEFINITION 57 | // ======================= 58 | 59 | var old = $.fn.alert 60 | 61 | $.fn.alert = function (option) { 62 | return this.each(function () { 63 | var $this = $(this) 64 | var data = $this.data('bs.alert') 65 | 66 | if (!data) $this.data('bs.alert', (data = new Alert(this))) 67 | if (typeof option == 'string') data[option].call($this) 68 | }) 69 | } 70 | 71 | $.fn.alert.Constructor = Alert 72 | 73 | 74 | // ALERT NO CONFLICT 75 | // ================= 76 | 77 | $.fn.alert.noConflict = function () { 78 | $.fn.alert = old 79 | return this 80 | } 81 | 82 | 83 | // ALERT DATA-API 84 | // ============== 85 | 86 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 87 | 88 | }(jQuery); 89 | -------------------------------------------------------------------------------- /js/button.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: button.js v3.1.1 3 | * http://getbootstrap.com/javascript/#buttons 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // BUTTON PUBLIC CLASS DEFINITION 14 | // ============================== 15 | 16 | var Button = function (element, options) { 17 | this.$element = $(element) 18 | this.options = $.extend({}, Button.DEFAULTS, options) 19 | this.isLoading = false 20 | } 21 | 22 | Button.DEFAULTS = { 23 | loadingText: 'loading...' 24 | } 25 | 26 | Button.prototype.setState = function (state) { 27 | var d = 'disabled' 28 | var $el = this.$element 29 | var val = $el.is('input') ? 'val' : 'html' 30 | var data = $el.data() 31 | 32 | state = state + 'Text' 33 | 34 | if (!data.resetText) $el.data('resetText', $el[val]()) 35 | 36 | $el[val](data[state] || this.options[state]) 37 | 38 | // push to event loop to allow forms to submit 39 | setTimeout($.proxy(function () { 40 | if (state == 'loadingText') { 41 | this.isLoading = true 42 | $el.addClass(d).attr(d, d) 43 | } else if (this.isLoading) { 44 | this.isLoading = false 45 | $el.removeClass(d).removeAttr(d) 46 | } 47 | }, this), 0) 48 | } 49 | 50 | Button.prototype.toggle = function () { 51 | var changed = true 52 | var $parent = this.$element.closest('[data-toggle="buttons"]') 53 | 54 | if ($parent.length) { 55 | var $input = this.$element.find('input') 56 | if ($input.prop('type') == 'radio') { 57 | if ($input.prop('checked') && this.$element.hasClass('active')) changed = false 58 | else $parent.find('.active').removeClass('active') 59 | } 60 | if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') 61 | } 62 | 63 | if (changed) this.$element.toggleClass('active') 64 | } 65 | 66 | 67 | // BUTTON PLUGIN DEFINITION 68 | // ======================== 69 | 70 | var old = $.fn.button 71 | 72 | $.fn.button = function (option) { 73 | return this.each(function () { 74 | var $this = $(this) 75 | var data = $this.data('bs.button') 76 | var options = typeof option == 'object' && option 77 | 78 | if (!data) $this.data('bs.button', (data = new Button(this, options))) 79 | 80 | if (option == 'toggle') data.toggle() 81 | else if (option) data.setState(option) 82 | }) 83 | } 84 | 85 | $.fn.button.Constructor = Button 86 | 87 | 88 | // BUTTON NO CONFLICT 89 | // ================== 90 | 91 | $.fn.button.noConflict = function () { 92 | $.fn.button = old 93 | return this 94 | } 95 | 96 | 97 | // BUTTON DATA-API 98 | // =============== 99 | 100 | $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { 101 | var $btn = $(e.target) 102 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') 103 | $btn.button('toggle') 104 | e.preventDefault() 105 | }) 106 | 107 | }(jQuery); 108 | -------------------------------------------------------------------------------- /js/carousel.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: carousel.js v3.1.1 3 | * http://getbootstrap.com/javascript/#carousel 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // CAROUSEL CLASS DEFINITION 14 | // ========================= 15 | 16 | var Carousel = function (element, options) { 17 | this.$element = $(element) 18 | this.$indicators = this.$element.find('.carousel-indicators') 19 | this.options = options 20 | this.paused = 21 | this.sliding = 22 | this.interval = 23 | this.$active = 24 | this.$items = null 25 | 26 | this.options.pause == 'hover' && this.$element 27 | .on('mouseenter', $.proxy(this.pause, this)) 28 | .on('mouseleave', $.proxy(this.cycle, this)) 29 | } 30 | 31 | Carousel.DEFAULTS = { 32 | interval: 5000, 33 | pause: 'hover', 34 | wrap: true 35 | } 36 | 37 | Carousel.prototype.cycle = function (e) { 38 | e || (this.paused = false) 39 | 40 | this.interval && clearInterval(this.interval) 41 | 42 | this.options.interval 43 | && !this.paused 44 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 45 | 46 | return this 47 | } 48 | 49 | Carousel.prototype.getActiveIndex = function () { 50 | this.$active = this.$element.find('.item.active') 51 | this.$items = this.$active.parent().children() 52 | 53 | return this.$items.index(this.$active) 54 | } 55 | 56 | Carousel.prototype.to = function (pos) { 57 | var that = this 58 | var activeIndex = this.getActiveIndex() 59 | 60 | if (pos > (this.$items.length - 1) || pos < 0) return 61 | 62 | if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) 63 | if (activeIndex == pos) return this.pause().cycle() 64 | 65 | return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) 66 | } 67 | 68 | Carousel.prototype.pause = function (e) { 69 | e || (this.paused = true) 70 | 71 | if (this.$element.find('.next, .prev').length && $.support.transition) { 72 | this.$element.trigger($.support.transition.end) 73 | this.cycle(true) 74 | } 75 | 76 | this.interval = clearInterval(this.interval) 77 | 78 | return this 79 | } 80 | 81 | Carousel.prototype.next = function () { 82 | if (this.sliding) return 83 | return this.slide('next') 84 | } 85 | 86 | Carousel.prototype.prev = function () { 87 | if (this.sliding) return 88 | return this.slide('prev') 89 | } 90 | 91 | Carousel.prototype.slide = function (type, next) { 92 | var $active = this.$element.find('.item.active') 93 | var $next = next || $active[type]() 94 | var isCycling = this.interval 95 | var direction = type == 'next' ? 'left' : 'right' 96 | var fallback = type == 'next' ? 'first' : 'last' 97 | var that = this 98 | 99 | if (!$next.length) { 100 | if (!this.options.wrap) return 101 | $next = this.$element.find('.item')[fallback]() 102 | } 103 | 104 | if ($next.hasClass('active')) return this.sliding = false 105 | 106 | var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) 107 | this.$element.trigger(e) 108 | if (e.isDefaultPrevented()) return 109 | 110 | this.sliding = true 111 | 112 | isCycling && this.pause() 113 | 114 | if (this.$indicators.length) { 115 | this.$indicators.find('.active').removeClass('active') 116 | this.$element.one('slid.bs.carousel', function () { 117 | var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) 118 | $nextIndicator && $nextIndicator.addClass('active') 119 | }) 120 | } 121 | 122 | if ($.support.transition && this.$element.hasClass('slide')) { 123 | $next.addClass(type) 124 | $next[0].offsetWidth // force reflow 125 | $active.addClass(direction) 126 | $next.addClass(direction) 127 | $active 128 | .one($.support.transition.end, function () { 129 | $next.removeClass([type, direction].join(' ')).addClass('active') 130 | $active.removeClass(['active', direction].join(' ')) 131 | that.sliding = false 132 | setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) 133 | }) 134 | .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) 135 | } else { 136 | $active.removeClass('active') 137 | $next.addClass('active') 138 | this.sliding = false 139 | this.$element.trigger('slid.bs.carousel') 140 | } 141 | 142 | isCycling && this.cycle() 143 | 144 | return this 145 | } 146 | 147 | 148 | // CAROUSEL PLUGIN DEFINITION 149 | // ========================== 150 | 151 | var old = $.fn.carousel 152 | 153 | $.fn.carousel = function (option) { 154 | return this.each(function () { 155 | var $this = $(this) 156 | var data = $this.data('bs.carousel') 157 | var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) 158 | var action = typeof option == 'string' ? option : options.slide 159 | 160 | if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) 161 | if (typeof option == 'number') data.to(option) 162 | else if (action) data[action]() 163 | else if (options.interval) data.pause().cycle() 164 | }) 165 | } 166 | 167 | $.fn.carousel.Constructor = Carousel 168 | 169 | 170 | // CAROUSEL NO CONFLICT 171 | // ==================== 172 | 173 | $.fn.carousel.noConflict = function () { 174 | $.fn.carousel = old 175 | return this 176 | } 177 | 178 | 179 | // CAROUSEL DATA-API 180 | // ================= 181 | 182 | $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { 183 | var $this = $(this), href 184 | var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 185 | var options = $.extend({}, $target.data(), $this.data()) 186 | var slideIndex = $this.attr('data-slide-to') 187 | if (slideIndex) options.interval = false 188 | 189 | $target.carousel(options) 190 | 191 | if (slideIndex = $this.attr('data-slide-to')) { 192 | $target.data('bs.carousel').to(slideIndex) 193 | } 194 | 195 | e.preventDefault() 196 | }) 197 | 198 | $(window).on('load', function () { 199 | $('[data-ride="carousel"]').each(function () { 200 | var $carousel = $(this) 201 | $carousel.carousel($carousel.data()) 202 | }) 203 | }) 204 | 205 | }(jQuery); 206 | -------------------------------------------------------------------------------- /js/collapse.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: collapse.js v3.1.1 3 | * http://getbootstrap.com/javascript/#collapse 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // COLLAPSE PUBLIC CLASS DEFINITION 14 | // ================================ 15 | 16 | var Collapse = function (element, options) { 17 | this.$element = $(element) 18 | this.options = $.extend({}, Collapse.DEFAULTS, options) 19 | this.transitioning = null 20 | 21 | if (this.options.parent) this.$parent = $(this.options.parent) 22 | if (this.options.toggle) this.toggle() 23 | } 24 | 25 | Collapse.DEFAULTS = { 26 | toggle: true 27 | } 28 | 29 | Collapse.prototype.dimension = function () { 30 | var hasWidth = this.$element.hasClass('width') 31 | return hasWidth ? 'width' : 'height' 32 | } 33 | 34 | Collapse.prototype.show = function () { 35 | if (this.transitioning || this.$element.hasClass('in')) return 36 | 37 | var startEvent = $.Event('show.bs.collapse') 38 | this.$element.trigger(startEvent) 39 | if (startEvent.isDefaultPrevented()) return 40 | 41 | var actives = this.$parent && this.$parent.find('> .panel > .in') 42 | 43 | if (actives && actives.length) { 44 | var hasData = actives.data('bs.collapse') 45 | if (hasData && hasData.transitioning) return 46 | actives.collapse('hide') 47 | hasData || actives.data('bs.collapse', null) 48 | } 49 | 50 | var dimension = this.dimension() 51 | 52 | this.$element 53 | .removeClass('collapse') 54 | .addClass('collapsing') 55 | [dimension](0) 56 | 57 | this.transitioning = 1 58 | 59 | var complete = function () { 60 | this.$element 61 | .removeClass('collapsing') 62 | .addClass('collapse in') 63 | [dimension]('auto') 64 | this.transitioning = 0 65 | this.$element.trigger('shown.bs.collapse') 66 | } 67 | 68 | if (!$.support.transition) return complete.call(this) 69 | 70 | var scrollSize = $.camelCase(['scroll', dimension].join('-')) 71 | 72 | this.$element 73 | .one($.support.transition.end, $.proxy(complete, this)) 74 | .emulateTransitionEnd(350) 75 | [dimension](this.$element[0][scrollSize]) 76 | } 77 | 78 | Collapse.prototype.hide = function () { 79 | if (this.transitioning || !this.$element.hasClass('in')) return 80 | 81 | var startEvent = $.Event('hide.bs.collapse') 82 | this.$element.trigger(startEvent) 83 | if (startEvent.isDefaultPrevented()) return 84 | 85 | var dimension = this.dimension() 86 | 87 | this.$element 88 | [dimension](this.$element[dimension]()) 89 | [0].offsetHeight 90 | 91 | this.$element 92 | .addClass('collapsing') 93 | .removeClass('collapse') 94 | .removeClass('in') 95 | 96 | this.transitioning = 1 97 | 98 | var complete = function () { 99 | this.transitioning = 0 100 | this.$element 101 | .trigger('hidden.bs.collapse') 102 | .removeClass('collapsing') 103 | .addClass('collapse') 104 | } 105 | 106 | if (!$.support.transition) return complete.call(this) 107 | 108 | this.$element 109 | [dimension](0) 110 | .one($.support.transition.end, $.proxy(complete, this)) 111 | .emulateTransitionEnd(350) 112 | } 113 | 114 | Collapse.prototype.toggle = function () { 115 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 116 | } 117 | 118 | 119 | // COLLAPSE PLUGIN DEFINITION 120 | // ========================== 121 | 122 | var old = $.fn.collapse 123 | 124 | $.fn.collapse = function (option) { 125 | return this.each(function () { 126 | var $this = $(this) 127 | var data = $this.data('bs.collapse') 128 | var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) 129 | 130 | if (!data && options.toggle && option == 'show') option = !option 131 | if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) 132 | if (typeof option == 'string') data[option]() 133 | }) 134 | } 135 | 136 | $.fn.collapse.Constructor = Collapse 137 | 138 | 139 | // COLLAPSE NO CONFLICT 140 | // ==================== 141 | 142 | $.fn.collapse.noConflict = function () { 143 | $.fn.collapse = old 144 | return this 145 | } 146 | 147 | 148 | // COLLAPSE DATA-API 149 | // ================= 150 | 151 | $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { 152 | var $this = $(this), href 153 | var target = $this.attr('data-target') 154 | || e.preventDefault() 155 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 156 | var $target = $(target) 157 | var data = $target.data('bs.collapse') 158 | var option = data ? 'toggle' : $this.data() 159 | var parent = $this.attr('data-parent') 160 | var $parent = parent && $(parent) 161 | 162 | if (!data || !data.transitioning) { 163 | if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') 164 | $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') 165 | } 166 | 167 | $target.collapse(option) 168 | }) 169 | 170 | }(jQuery); 171 | -------------------------------------------------------------------------------- /js/dropdown.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: dropdown.js v3.1.1 3 | * http://getbootstrap.com/javascript/#dropdowns 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // DROPDOWN CLASS DEFINITION 14 | // ========================= 15 | 16 | var backdrop = '.dropdown-backdrop' 17 | var toggle = '[data-toggle=dropdown]' 18 | var Dropdown = function (element) { 19 | $(element).on('click.bs.dropdown', this.toggle) 20 | } 21 | 22 | Dropdown.prototype.toggle = function (e) { 23 | var $this = $(this) 24 | 25 | if ($this.is('.disabled, :disabled')) return 26 | 27 | var $parent = getParent($this) 28 | var isActive = $parent.hasClass('open') 29 | 30 | clearMenus() 31 | 32 | if (!isActive) { 33 | if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { 34 | // if mobile we use a backdrop because click events don't delegate 35 | $('