├── .gitignore ├── .gitmodules ├── .versions ├── CHANGELOG.md ├── README.md ├── bootstrap-configurator.js ├── distributed-configuration.js ├── module-definitions.js ├── package.js ├── test ├── README.md └── full-include │ ├── .meteor │ ├── .finished-upgraders │ ├── .gitignore │ ├── .id │ ├── cordova-plugins │ ├── packages │ ├── platforms │ ├── release │ └── versions │ ├── client │ └── lib │ │ ├── custom.bootstrap.import.less │ │ ├── custom.bootstrap.json │ │ ├── custom.bootstrap.less │ │ └── custom.bootstrap.mixins.import.less │ ├── full-include.html │ └── packages │ └── nemo64:bootstrap ├── upgrade ├── 3.3.5-upgrade.patch └── upgrade-3.3.4-3.3.5.sh └── versions.json /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .build* 3 | smart.lock 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nemo64/meteor-bootstrap/5aa763fe4b784a3336fe01aaff46b692f78e148a/.gitmodules -------------------------------------------------------------------------------- /.versions: -------------------------------------------------------------------------------- 1 | jquery@1.11.3_2 2 | meteor@1.1.6 3 | nemo64:bootstrap@3.3.5_1 4 | nemo64:bootstrap-data@3.3.5 5 | underscore@1.0.3 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 3.3.5_2 2 | ######16 July 2015 3 | 4 | Uncouple tooltip.less from popover. 5 | 6 | ### 3.3.5_1 7 | ######4 July 2015 8 | 9 | Republish so Readme updates are available on Atmosphere. 10 | 11 | ### 3.3.5 12 | ######3 July 2015 13 | 14 | Update Bootstrap to latest upstream version 3.3.5. 15 | 16 | - e5c2607 Update README.md 17 | - 0292d8e Bump version to 3.3.5 18 | - 618b33c Create tool for fixing upgrade error 19 | 20 | ### 3.3.4_2 21 | ######11 April 2015 22 | 23 | Adjust source of the auto-generated `custom.bootstrap.json` file, which previously 24 | could cause errors due to the compnent load sequence diverging from the upstream 25 | Bootstrap. 26 | 27 | - 1d60760 bump version 28 | - a1ce591 fix bootstrap load sequence 29 | - 324bb63 Update README.md 30 | 31 | 32 | ### 3.3.4_1 33 | ######30 March 2015 34 | 35 | Update Bootstrap to latest upstream version 3.3.4. 36 | 37 | **Note:** Upstream changes in Bootstrap from 3.3.1 to 3.3.4 cause Meteor to error 38 | on parsing non-existant LESS variables. See https://github.com/Nemo64/meteor-bootstrap/issues/42 39 | 40 | - 1340a69 Merge pull request #41 from emgee3/master 41 | - 3f6c950 bump version 42 | - 14351ea Update README.md 43 | 44 | 45 | ### Previously 46 | 47 | - c950760 (tag: v3.1.1) adjustments for new version 48 | - d746f23 Merge pull request #26 from cwohlman/master 49 | - c69f1ad Bump versions 50 | - ea5ae2a Merge pull request #19 from ericpedia/master 51 | - c7fa969 Fix tiny typos in readme 52 | - 6aac174 (tag: v3.3.0_1) removed .gitignore file as it sometimes causes problems 53 | - 539e16e (tag: v3.3.0) updated version and added missing responsive-embed module 54 | - 3324e16 added basic test page 55 | - 4db1fbf bumped versions 56 | - b8f3e0e Merge branch 'master' of github.com:Nemo64/meteor-bootstrap 57 | - b39aa6c (tag: v3.2.3) now fixed version 58 | - eab316d set versions 59 | - d95599b removed package from here 60 | - 8117a85 exported package 61 | - 9b388cf cleanup after package splitting 62 | - f436b87 package splitting 63 | - 2731bd9 Merge branch 'master' of github.com:Nemo64/meteor-bootstrap 64 | - 27cb90a Update README.md 65 | - f43210e bump version 66 | - dd99b23 Merge pull request #7 from tanis2000/master 67 | - 64bfc64 Fixes https://github.com/Nemo64/meteor-bootstrap/issues/5 68 | - c3b026c Merge branch 'master' of github.com:Nemo64/meteor-bootstrap 69 | - 7c7a47c Update README.md 70 | - 9fbc6e1 Update README.md 71 | - 6a9cef7 Update README.md 72 | - 08d1d1e Update README.md 73 | - 31dea8f (tag: v3.2.0-1) fixed colon 74 | - bcc8b17 fixed simicolon on in the end, fixes #1 75 | - 5329055 Update README.md 76 | - c6fae0d (tag: v3.2.0) build around meteor limitation for packages 77 | - 140bde9 updated package.js 78 | - e5a29bc Update README.md 79 | - 1ef4b18 publish script that resets the location hack 80 | - dfbf158 rename of module.js 81 | - 5da0ca5 rewrote readme 82 | - 3fe0910 removed location file from ignore 83 | - ae5d797 version that works with 0.9 84 | - 72adf6d moved to 0.9 and finally made ready for release 85 | - 3ba6c8b fixed dependencies 86 | - 8920199 updated bootstrap and now using sub repository 87 | - 9d2ff70 Merge branch 'master' of github.com:Nemo64/bootstrap3-less 88 | - 88dc55a added font path to import file 89 | - 0bf02c1 Update README.md 90 | - d46e6c1 aligned json file booleans 91 | - 0b67f98 custom... not costum 92 | - d36ad29 instructions for the json file 93 | - 483cbf9 bootstrap.json way 94 | - 177e416 Merge pull request #16 from AJ-Acevedo/master 95 | - a1254c3 Cleaned up the README 96 | - b8dc108 fixed example variable not there at @import time 97 | - cbec661 Change maintainer to @simison 98 | - dedf6f5 remove update old script from gitignore 99 | - 5c812c4 (tag: v0.1.9) Pump up smart.json ver, indents from tabs to 2 spaces (meteor style) 100 | - d2dd8a5 Merge pull request #14 from Nemo64/import.less 101 | - 0a06ddb Fix for bootstrap 3.1 and advanced usage examples 102 | - b6433bf fixed icon font path 103 | - 15602fe fixed the order of the js files and created a full bootstra.import.less file 104 | - d157459 using now the >0.7.1 method of using .import.less instead of .lessimport 105 | - a52ec0f update.sh now updates the package.js as well 106 | - 6ccc986 automatic update script added 107 | - 104425b update to 3.1.1 108 | - 48b6db4 (tag: v0.1.8) Used vendor version, not from github. 109 | - 75af717 (tag: v0.1.7) version number 110 | - 21e4abe file renaming 111 | - 6267563 (tag: v0.1.6) gitignore 112 | - ac80d80 cleaning 113 | - c7e43ed Update to 3.0.3 114 | - 5074432 (tag: v0.1.5) Bump version number 115 | - 36c9302 Merge pull request #8 from onengo/master 116 | - 88337b4 Use local fonts instead of CDN. 117 | - 23ec918 (tag: v0.1.4) Merge branch 'master' of github.com:eprochasson/bootstrap3-less 118 | - f779e47 Add jQuery+Less dependency, bump version number 119 | - 595b73f Merge pull request #6 from Pent/master 120 | - f125bc7 added error message that indicates if jquery is unavailable 121 | - 84277eb Merge pull request #5 from zeroasterisk/master 122 | - 109a192 updated 123 | - 14f38af (tag: v0.1.3) bump version number 124 | - c6f57df Use CDN for fonts, should fix issue #3 125 | - f062164 (tag: v0.1.2) Merge pull request #4 from zeroasterisk/master 126 | - 868bc0d version to 0.1.2 127 | - 871660c updated to the latest from bootstrap.master (including a few bugfixes Ive been waiting on) 128 | - 82d3e32 (tag: v0.1.1) bump version number 129 | - 4058e14 Merge pull request #2 from zeroasterisk/master 130 | - 3cb7a55 Update README.md 131 | - e8834f0 Update README.md 132 | - 9f40ebd correction for bootstrap imports 133 | - 8bf3005 correction for bootstrap imports 134 | - c504048 updated to latest bootstrap (update script) 135 | - f9d14d5 (tag: v0.1.0) Update README 136 | - b00ba3a wth 137 | - caad321 cleaning 138 | - 077bc1f Bootstrap 3 final. Bump version number 139 | - 961090b Should fix issue #1 140 | - 4f5a044 remove js file 141 | - 3e6bd0b (tag: v0.0.2) bump version number 142 | - a05b38c fixed package.js 143 | - 22bfcc6 (tag: v0.0.1) Add README 144 | - 729b933 First commit 145 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #*Meteor Compatibility* 2 | `nemo64:bootstrap` does not work with Meteor 1.2+. [`huttonr/bootstrap3`](https://github.com/huttonr/bootstrap3) is a another similar package that works also with 1.2. 3 | 4 | Bootstrap for Meteor 5 | ==================== 6 | 7 | This package integrates bootstrap into meteor and lets you configure what parts you need. 8 | 9 | How to install 10 | -------------- 11 | 12 | 1. execute `meteor add nemo64:bootstrap less` 13 | 2. create an empty `custom.bootstrap.json` file somewhere in your project. (`/client/lib/custom.bootstrap.json` for example) 14 | 3. start meteor and then edit the file you just created (see [custom.bootstrap.json](#custombootstrapjson)). 15 | 4. (optional) edit `custom.bootstrap.import.less` which now appeared next to the json file 16 | 17 | `custom.bootstrap.json` 18 | --------------------- 19 | This file is to configure which bootstrap parts you need in your project. Set those you like to `true`! 20 | If the file is empty, it will be filled for with the following content: 21 | 22 | ```JSON 23 | { 24 | "modules" : { 25 | "normalize" : true, 26 | "print" : false, 27 | "glyphicons" : false, 28 | 29 | "scaffolding" : false, 30 | "type" : false, 31 | "code" : false, 32 | "grid" : false, 33 | "tables" : false, 34 | "forms" : false, 35 | "buttons" : false, 36 | 37 | "component-animations" : false, 38 | "dropdowns" : false, 39 | "button-groups" : false, 40 | "input-groups" : false, 41 | "navs" : false, 42 | "navbar" : false, 43 | "breadcrumbs" : false, 44 | "pagination" : false, 45 | "pager" : false, 46 | "labels" : false, 47 | 48 | "badges" : false, 49 | "jumbotron" : false, 50 | "thumbnails" : false, 51 | "alerts" : false, 52 | "progress-bars" : false, 53 | "media" : false, 54 | "list-group" : false, 55 | "panels" : false, 56 | "responsive-embed" : false, 57 | "wells" : false, 58 | "close" : false, 59 | 60 | "modals" : false, 61 | "tooltip" : false, 62 | "popovers" : false, 63 | "carousel" : false, 64 | 65 | "affix" : false, 66 | "alert" : false, 67 | "button" : false, 68 | "collapse" : false, 69 | "scrollspy" : false, 70 | "tab" : false, 71 | "transition" : false, 72 | 73 | "utilities" : false, 74 | "responsive-utilities" : false 75 | } 76 | } 77 | ``` 78 | 79 | Upgrading 80 | --------- 81 | 82 | After upgrading using `meteor update`, you may get an error stating: 83 | 84 | ``` 85 | While building the application: 86 | client/lib/custom.bootstrap.less:1629:18: Less compiler error: ... 87 | ``` 88 | 89 | This is due to the upstream Bootstrap library introducing LESS variables that your project is not aware of. The quickest fix is to execute the following script from within your project: 90 | 91 | ``` 92 | curl https://raw.githubusercontent.com/Nemo64/meteor-bootstrap/master/upgrade/upgrade-3.3.4-3.3.5.sh | /bin/bash 93 | ``` 94 | 95 | Alternately, you can manually apply this [patch](https://github.com/Nemo64/meteor-bootstrap/blob/master/upgrade/3.3.5-upgrade.patch) to `custom.bootstrap.less`: 96 | 97 | 98 | Contribution 99 | ------- 100 | 101 | Contributions are always welcome. I'm also searching for collaborators becuase I'm currently not actively deveolping with meteor. If you area interested, write me at git@marco.zone 102 | 103 | License 104 | ------- 105 | 106 | This package is licensed with the MIT license. 107 | Also, look at the [Bootstrap license](https://github.com/twbs/bootstrap/blob/v3.2.0/LICENSE). 108 | 109 | Origin 110 | ------ 111 | 112 | This package is based on and inspired by the [bootstrap3-less](https://github.com/simison/bootstrap3-less) package. I created a new repository because it takes a completely different approach now which is also incompatible. 113 | -------------------------------------------------------------------------------- /bootstrap-configurator.js: -------------------------------------------------------------------------------- 1 | var fs = Npm.require('fs'); 2 | var path = Npm.require('path'); 3 | 4 | var createLessFile = function (path, content) { 5 | fs.writeFileSync(path, content.join('\n'), { encoding: 'utf8' }); 6 | }; 7 | 8 | var getAsset = function (filename) { 9 | return BootstrapData(filename); 10 | }; 11 | 12 | var getLessContent = function (filename) { 13 | var content = getAsset(filename); 14 | return '\n\n// @import "' + filename + '"\n' 15 | + content.replace(/@import\s*["']([^"]+)["'];?/g, function (statement, importFile) { 16 | return getLessContent(path.join(path.dirname(filename), importFile)); 17 | }); 18 | }; 19 | 20 | var handler = function (compileStep, isLiterate) { 21 | var jsonPath = compileStep._fullInputPath; 22 | 23 | // read the configuration of the project 24 | var userConfiguration = compileStep.read().toString('utf8'); 25 | 26 | // if empty (and only then) write distributed configuration 27 | if (userConfiguration === '') { 28 | userConfiguration = distributedConfiguration; 29 | fs.writeFileSync(jsonPath, userConfiguration); 30 | } 31 | 32 | // parse configuration 33 | try { 34 | userConfiguration = JSON.parse(userConfiguration); 35 | } catch (e) { 36 | compileStep.error({ 37 | message: e.message, 38 | sourcePath: compileStep.inputPath 39 | }); 40 | return; 41 | } 42 | 43 | // configuration 44 | var moduleConfiguration = userConfiguration.modules || {}; 45 | 46 | // these variables contain the files that need to be included 47 | var js = {}; // set of required js files 48 | var less = {}; // set of required less files 49 | 50 | // read module configuration to find out which js/less files are needed 51 | var allModulesOk = _.every(moduleConfiguration, function (enabled, module) { 52 | 53 | var moduleDefinition = moduleDefinitions[module]; 54 | if (moduleDefinition == null) { 55 | compileStep.error({ 56 | message: "The module '" + module + "' does not exist.", 57 | sourcePath: compileStep.inputPath 58 | }); 59 | return false; // break 60 | } 61 | 62 | if (! enabled) { 63 | return true; // continue 64 | } 65 | 66 | _.each(moduleDefinition.less || [], function (file) { 67 | less[file] = file; 68 | }); 69 | _.each(moduleDefinition.js || [], function (file) { 70 | js[file] = file; 71 | }); 72 | 73 | return true; 74 | }); 75 | 76 | if (! allModulesOk) { 77 | return; 78 | } 79 | 80 | // add javascripts 81 | for (var jsPath in js) { 82 | var file = getAsset(jsPath); 83 | compileStep.addJavaScript({ 84 | path: jsPath, 85 | data: file, 86 | sourcePath: jsPath, 87 | bare: true // they are already wrapped (tiny optimisation) 88 | }); 89 | } 90 | 91 | // filenames 92 | var mixinsLessFile = jsonPath.replace(/json$/i, 'mixins.import.less') 93 | var importLessFile = jsonPath.replace(/json$/i, 'import.less'); 94 | var outputLessFile = jsonPath.replace(/json$/i, 'less'); 95 | 96 | createLessFile(mixinsLessFile, [ 97 | "// THIS FILE IS GENERATED, DO NOT MODIFY IT!", 98 | "// These are the mixins bootstrap provides", 99 | "// They are included here so you can use them in your less files too,", 100 | "// However: you should @import \"" + path.basename(importLessFile) + "\" instead of this", 101 | getLessContent('bootstrap/less/mixins.less') 102 | ]); 103 | 104 | // create the file that can be modified 105 | if (! fs.existsSync(importLessFile)) { 106 | createLessFile(importLessFile, [ 107 | "// This File is for you to modify!", 108 | "// It won't be overwritten as long as it exists.", 109 | "// You may include this file into your less files to benefit from", 110 | "// mixins and variables that bootstrap provides.", 111 | '', 112 | '@import "' + path.basename(mixinsLessFile) + '";', 113 | getLessContent('bootstrap/less/variables.less') 114 | ]); 115 | } 116 | 117 | var ROOT_PATH = process.env.ROOT_PATH || ''; 118 | 119 | // create the file that finally includes bootstrap 120 | var bootstrapContent = [ 121 | "// THIS FILE IS GENERATED, DO NOT MODIFY IT!", 122 | "// It includes the bootstrap modules configured in " + compileStep.inputPath + ".", 123 | "// You may need to use 'meteor add less' if the styles are not loaded.", 124 | '', 125 | "// If it throws errors your bootstrap.import.less is probably invalid.", 126 | "// To fix that remove that file and then recover your changes.", 127 | '', 128 | '@import "' + path.basename(importLessFile) + '";', 129 | '@icon-font-path: "' + ROOT_PATH + '/packages/nemo64_bootstrap-data/bootstrap/fonts/' + '";' 130 | ]; 131 | _.each(less, function (lessPath) { 132 | bootstrapContent.push(getLessContent('' + lessPath)); 133 | }); 134 | createLessFile(outputLessFile, bootstrapContent); 135 | }; 136 | 137 | Plugin.registerSourceHandler('bootstrap.json', {archMatching: 'web'}, handler); 138 | -------------------------------------------------------------------------------- /distributed-configuration.js: -------------------------------------------------------------------------------- 1 | distributedConfiguration = [ 2 | '{', 3 | ' "modules" : {', 4 | ' "normalize" : true,', 5 | ' "print" : false,', 6 | ' "glyphicons" : false,', 7 | '', 8 | ' "scaffolding" : false,', 9 | ' "type" : false,', 10 | ' "code" : false,', 11 | ' "grid" : false,', 12 | ' "tables" : false,', 13 | ' "forms" : false,', 14 | ' "buttons" : false,', 15 | '', 16 | ' "component-animations" : false,', 17 | ' "dropdowns" : false,', 18 | ' "button-groups" : false,', 19 | ' "input-groups" : false,', 20 | ' "navs" : false,', 21 | ' "navbar" : false,', 22 | ' "breadcrumbs" : false,', 23 | ' "pagination" : false,', 24 | ' "pager" : false,', 25 | ' "labels" : false,', 26 | '', 27 | ' "badges" : false,', 28 | ' "jumbotron" : false,', 29 | ' "thumbnails" : false,', 30 | ' "alerts" : false,', 31 | ' "progress-bars" : false,', 32 | ' "media" : false,', 33 | ' "list-group" : false,', 34 | ' "panels" : false,', 35 | ' "responsive-embed" : false,', 36 | ' "wells" : false,', 37 | ' "close" : false,', 38 | '', 39 | ' "modals" : false,', 40 | ' "tooltip" : false,', 41 | ' "popovers" : false,', 42 | ' "carousel" : false,', 43 | '', 44 | ' "affix" : false,', 45 | ' "alert" : false,', 46 | ' "button" : false,', 47 | ' "collapse" : false,', 48 | ' "scrollspy" : false,', 49 | ' "tab" : false,', 50 | ' "transition" : false,', 51 | '', 52 | ' "utilities" : false,', 53 | ' "responsive-utilities" : false', 54 | ' }', 55 | '}' 56 | ].join('\n'); 57 | -------------------------------------------------------------------------------- /module-definitions.js: -------------------------------------------------------------------------------- 1 | moduleDefinitions = { 2 | "variables":{less:["bootstrap/less/variables.less"]}, 3 | "mixins":{less:["bootstrap/less/mixins.less"]}, 4 | 5 | "normalize":{less:["bootstrap/less/normalize.less"]}, 6 | "print":{less:["bootstrap/less/print.less"]}, 7 | 8 | "scaffolding":{less:["bootstrap/less/scaffolding.less"]}, 9 | "type":{less:["bootstrap/less/type.less"]}, 10 | "code":{less:["bootstrap/less/code.less"]}, 11 | "grid":{less:["bootstrap/less/grid.less"]}, 12 | "tables":{less:["bootstrap/less/tables.less"]}, 13 | "forms":{less:["bootstrap/less/forms.less"]}, 14 | "buttons":{less:["bootstrap/less/buttons.less"]}, 15 | 16 | "glyphicons":{less:["bootstrap/less/glyphicons.less"]}, 17 | "button-groups":{less:["bootstrap/less/button-groups.less"]}, 18 | "input-groups":{less:["bootstrap/less/input-groups.less"]}, 19 | "navs":{less:["bootstrap/less/navs.less"]}, 20 | "navbar":{ 21 | less:["bootstrap/less/utilities.less","bootstrap/less/forms.less","bootstrap/less/navs.less","bootstrap/less/navbar.less"], 22 | js:["bootstrap/js/transition.js","bootstrap/js/collapse.js"] 23 | }, 24 | "breadcrumbs":{less:["bootstrap/less/breadcrumbs.less"]}, 25 | "pagination":{less:["bootstrap/less/pagination.less"]}, 26 | "pager":{less:["bootstrap/less/pager.less"]}, 27 | "labels":{less:["bootstrap/less/labels.less"]}, 28 | "badges":{less:["bootstrap/less/badges.less"]}, 29 | "jumbotron":{less:["bootstrap/less/jumbotron.less"]}, 30 | "thumbnails":{less:["bootstrap/less/thumbnails.less"]}, 31 | "alerts":{less:["bootstrap/less/alerts.less"]}, 32 | "progress-bars":{less:["bootstrap/less/progress-bars.less"]}, 33 | "media":{less:["bootstrap/less/media.less"]}, 34 | "list-group":{less:["bootstrap/less/list-group.less"]}, 35 | "panels":{less:["bootstrap/less/panels.less"]}, 36 | "responsive-embed":{less:["bootstrap/less/responsive-embed.less"]}, 37 | "wells":{less:["bootstrap/less/wells.less"]}, 38 | "close":{less:["bootstrap/less/close.less"]}, 39 | 40 | "component-animations":{ 41 | less:["bootstrap/less/component-animations.less"], 42 | js:["bootstrap/js/transition.js"] 43 | }, 44 | "dropdowns":{ 45 | less:["bootstrap/less/dropdowns.less"], 46 | js:["bootstrap/js/dropdown.js"] 47 | }, 48 | "modals":{ 49 | less:["bootstrap/less/modals.less"], 50 | js:["bootstrap/js/transition.js", "bootstrap/js/modal.js"] 51 | }, 52 | "tooltip":{ 53 | less:["bootstrap/less/tooltip.less"], 54 | js:["bootstrap/js/tooltip.js"] 55 | }, 56 | "popovers":{ 57 | less:["bootstrap/less/popovers.less"], 58 | js:["bootstrap/js/transition.js","bootstrap/js/tooltip.js","bootstrap/js/popover.js"] 59 | }, 60 | "carousel":{ 61 | less:["bootstrap/less/carousel.less"], 62 | js:["bootstrap/js/transition.js", "bootstrap/js/carousel.js"] 63 | }, 64 | 65 | "affix":{js:["bootstrap/js/affix.js"]}, 66 | "alert":{js:["bootstrap/js/alert.js"]}, 67 | "button":{js:["bootstrap/js/button.js"]}, 68 | "collapse":{js:["bootstrap/js/transition.js","bootstrap/js/collapse.js"]}, 69 | "scrollspy":{js:["bootstrap/js/scrollspy.js"]}, 70 | "tab":{js:["bootstrap/js/tab.js"]}, 71 | "transition":{js:["bootstrap/js/transition.js"]}, 72 | 73 | "utilities":{less:["bootstrap/less/utilities.less"]}, 74 | "responsive-utilities":{less:["bootstrap/less/responsive-utilities.less"]} 75 | }; 76 | -------------------------------------------------------------------------------- /package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: "nemo64:bootstrap", 3 | summary: "Highly configurable bootstrap integration.", 4 | version: "3.3.5_3", 5 | git: "https://github.com/Nemo64/meteor-bootstrap" 6 | }); 7 | 8 | var pluginOptions = { 9 | name: 'bootstrap-configurator', 10 | use: [ 11 | 'underscore@1.0.2', 12 | 'nemo64:bootstrap-data@3.3.5' 13 | ], 14 | sources: [ 15 | 'module-definitions.js', 16 | 'distributed-configuration.js', 17 | 'bootstrap-configurator.js' 18 | ], 19 | npmDependencies: {} 20 | }; 21 | 22 | Package._transitional_registerBuildPlugin(pluginOptions); 23 | 24 | Package.on_use(function (api) { 25 | api.versionsFrom("METEOR@0.9.2.2"); 26 | api.use([ 27 | 'jquery', 28 | 'nemo64:bootstrap-data@3.3.5' 29 | ], 'client'); 30 | }); 31 | -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | It is hard to test if this package works becuase of the many configuration possibilities. 2 | Here I at least try if all modules are working. 3 | Just jun `meteor` in the full-include folter and visit the site. If all is working than you're good to go. 4 | 5 | You can generate the test html from the official bootstrap documentation with 6 | ```JavaScript 7 | var $sections = $('.bs-docs-section'); 8 | $sections.children('p, .bs-callout, .highlight, .zero-clipboard').remove(); 9 | $sections.find('.bs-example').each(function () { 10 | $(this).children().insertAfter(this); 11 | }).remove(); 12 | ``` 13 | 14 | After that just copy the main column into the test html -------------------------------------------------------------------------------- /test/full-include/.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | -------------------------------------------------------------------------------- /test/full-include/.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | local 2 | -------------------------------------------------------------------------------- /test/full-include/.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | 1jjk577oi3wcl1jhppey 8 | -------------------------------------------------------------------------------- /test/full-include/.meteor/cordova-plugins: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /test/full-include/.meteor/packages: -------------------------------------------------------------------------------- 1 | # Meteor packages used by this project, one per line. 2 | # 3 | # 'meteor add' and 'meteor remove' will edit this file for you, 4 | # but you can also edit it by hand. 5 | 6 | meteor-platform 7 | autopublish 8 | insecure 9 | nemo64:bootstrap 10 | less 11 | 12 | -------------------------------------------------------------------------------- /test/full-include/.meteor/platforms: -------------------------------------------------------------------------------- 1 | server 2 | browser 3 | -------------------------------------------------------------------------------- /test/full-include/.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.0 2 | -------------------------------------------------------------------------------- /test/full-include/.meteor/versions: -------------------------------------------------------------------------------- 1 | application-configuration@1.0.3 2 | autopublish@1.0.1 3 | autoupdate@1.1.3 4 | base64@1.0.1 5 | binary-heap@1.0.1 6 | blaze-tools@1.0.1 7 | blaze@2.0.3 8 | boilerplate-generator@1.0.1 9 | callback-hook@1.0.1 10 | check@1.0.2 11 | ctl-helper@1.0.4 12 | ctl@1.0.2 13 | ddp@1.0.11 14 | deps@1.0.5 15 | ejson@1.0.4 16 | fastclick@1.0.1 17 | follower-livedata@1.0.2 18 | geojson-utils@1.0.1 19 | html-tools@1.0.2 20 | htmljs@1.0.2 21 | http@1.0.8 22 | id-map@1.0.1 23 | insecure@1.0.1 24 | jquery@1.0.1 25 | json@1.0.1 26 | launch-screen@1.0.0 27 | less@1.0.11 28 | livedata@1.0.11 29 | logging@1.0.5 30 | meteor-platform@1.2.0 31 | meteor@1.1.3 32 | minifiers@1.1.2 33 | minimongo@1.0.5 34 | mobile-status-bar@1.0.1 35 | mongo@1.0.8 36 | nemo64:bootstrap-data@3.3.0_1 37 | nemo64:bootstrap@3.3.0_1 38 | observe-sequence@1.0.3 39 | ordered-dict@1.0.1 40 | random@1.0.1 41 | reactive-dict@1.0.4 42 | reactive-var@1.0.3 43 | reload@1.1.1 44 | retry@1.0.1 45 | routepolicy@1.0.2 46 | session@1.0.4 47 | spacebars-compiler@1.0.3 48 | spacebars@1.0.3 49 | templating@1.0.9 50 | tracker@1.0.3 51 | ui@1.0.4 52 | underscore@1.0.1 53 | url@1.0.2 54 | webapp-hashing@1.0.1 55 | webapp@1.1.4 56 | -------------------------------------------------------------------------------- /test/full-include/client/lib/custom.bootstrap.import.less: -------------------------------------------------------------------------------- 1 | // This File is for you to modify! 2 | // It won't be overwritten as long as it exists. 3 | // You may include this file into your less files to benefit from 4 | // mixins and variables that bootstrap provides. 5 | 6 | @import "custom.bootstrap.mixins.import.less"; 7 | 8 | 9 | // @import "bootstrap/less/variables.less" 10 | // 11 | // Variables 12 | // -------------------------------------------------- 13 | 14 | 15 | //== Colors 16 | // 17 | //## Gray and brand colors for use across Bootstrap. 18 | 19 | @gray-base: #000; 20 | @gray-darker: lighten(@gray-base, 13.5%); // #222 21 | @gray-dark: lighten(@gray-base, 20%); // #333 22 | @gray: lighten(@gray-base, 33.5%); // #555 23 | @gray-light: lighten(@gray-base, 46.7%); // #777 24 | @gray-lighter: lighten(@gray-base, 93.5%); // #eee 25 | 26 | @brand-primary: #428bca; 27 | @brand-success: #5cb85c; 28 | @brand-info: #5bc0de; 29 | @brand-warning: #f0ad4e; 30 | @brand-danger: #d9534f; 31 | 32 | 33 | //== Scaffolding 34 | // 35 | //## Settings for some of the most global styles. 36 | 37 | //** Background color for ``. 38 | @body-bg: #fff; 39 | //** Global text color on ``. 40 | @text-color: @gray-dark; 41 | 42 | //** Global textual link color. 43 | @link-color: @brand-primary; 44 | //** Link hover color set via `darken()` function. 45 | @link-hover-color: darken(@link-color, 15%); 46 | //** Link hover decoration. 47 | @link-hover-decoration: underline; 48 | 49 | 50 | //== Typography 51 | // 52 | //## Font, line-height, and color for body text, headings, and more. 53 | 54 | @font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; 55 | @font-family-serif: Georgia, "Times New Roman", Times, serif; 56 | //** Default monospace fonts for ``, ``, and `
`.
 57 | @font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
 58 | @font-family-base:        @font-family-sans-serif;
 59 | 
 60 | @font-size-base:          14px;
 61 | @font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
 62 | @font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
 63 | 
 64 | @font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
 65 | @font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
 66 | @font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
 67 | @font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
 68 | @font-size-h5:            @font-size-base;
 69 | @font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
 70 | 
 71 | //** Unit-less `line-height` for use in components like buttons.
 72 | @line-height-base:        1.428571429; // 20/14
 73 | //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
 74 | @line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
 75 | 
 76 | //** By default, this inherits from the ``.
 77 | @headings-font-family:    inherit;
 78 | @headings-font-weight:    500;
 79 | @headings-line-height:    1.1;
 80 | @headings-color:          inherit;
 81 | 
 82 | 
 83 | //== Iconography
 84 | //
 85 | //## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
 86 | 
 87 | //** Load fonts from this directory.
 88 | @icon-font-path:          "../fonts/";
 89 | //** File name for all font files.
 90 | @icon-font-name:          "glyphicons-halflings-regular";
 91 | //** Element ID within SVG icon file.
 92 | @icon-font-svg-id:        "glyphicons_halflingsregular";
 93 | 
 94 | 
 95 | //== Components
 96 | //
 97 | //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
 98 | 
 99 | @padding-base-vertical:     6px;
100 | @padding-base-horizontal:   12px;
101 | 
102 | @padding-large-vertical:    10px;
103 | @padding-large-horizontal:  16px;
104 | 
105 | @padding-small-vertical:    5px;
106 | @padding-small-horizontal:  10px;
107 | 
108 | @padding-xs-vertical:       1px;
109 | @padding-xs-horizontal:     5px;
110 | 
111 | @line-height-large:         1.33;
112 | @line-height-small:         1.5;
113 | 
114 | @border-radius-base:        4px;
115 | @border-radius-large:       6px;
116 | @border-radius-small:       3px;
117 | 
118 | //** Global color for active items (e.g., navs or dropdowns).
119 | @component-active-color:    #fff;
120 | //** Global background color for active items (e.g., navs or dropdowns).
121 | @component-active-bg:       @brand-primary;
122 | 
123 | //** Width of the `border` for generating carets that indicator dropdowns.
124 | @caret-width-base:          4px;
125 | //** Carets increase slightly in size for larger components.
126 | @caret-width-large:         5px;
127 | 
128 | 
129 | //== Tables
130 | //
131 | //## Customizes the `.table` component with basic values, each used across all table variations.
132 | 
133 | //** Padding for ``s and ``s.
134 | @table-cell-padding:            8px;
135 | //** Padding for cells in `.table-condensed`.
136 | @table-condensed-cell-padding:  5px;
137 | 
138 | //** Default background color used for all tables.
139 | @table-bg:                      transparent;
140 | //** Background color used for `.table-striped`.
141 | @table-bg-accent:               #f9f9f9;
142 | //** Background color used for `.table-hover`.
143 | @table-bg-hover:                #f5f5f5;
144 | @table-bg-active:               @table-bg-hover;
145 | 
146 | //** Border color for table and cell borders.
147 | @table-border-color:            #ddd;
148 | 
149 | 
150 | //== Buttons
151 | //
152 | //## For each of Bootstrap's buttons, define text, background and border color.
153 | 
154 | @btn-font-weight:                normal;
155 | 
156 | @btn-default-color:              #333;
157 | @btn-default-bg:                 #fff;
158 | @btn-default-border:             #ccc;
159 | 
160 | @btn-primary-color:              #fff;
161 | @btn-primary-bg:                 @brand-primary;
162 | @btn-primary-border:             darken(@btn-primary-bg, 5%);
163 | 
164 | @btn-success-color:              #fff;
165 | @btn-success-bg:                 @brand-success;
166 | @btn-success-border:             darken(@btn-success-bg, 5%);
167 | 
168 | @btn-info-color:                 #fff;
169 | @btn-info-bg:                    @brand-info;
170 | @btn-info-border:                darken(@btn-info-bg, 5%);
171 | 
172 | @btn-warning-color:              #fff;
173 | @btn-warning-bg:                 @brand-warning;
174 | @btn-warning-border:             darken(@btn-warning-bg, 5%);
175 | 
176 | @btn-danger-color:               #fff;
177 | @btn-danger-bg:                  @brand-danger;
178 | @btn-danger-border:              darken(@btn-danger-bg, 5%);
179 | 
180 | @btn-link-disabled-color:        @gray-light;
181 | 
182 | 
183 | //== Forms
184 | //
185 | //##
186 | 
187 | //** `` background color
188 | @input-bg:                       #fff;
189 | //** `` background color
190 | @input-bg-disabled:              @gray-lighter;
191 | 
192 | //** Text color for ``s
193 | @input-color:                    @gray;
194 | //** `` border color
195 | @input-border:                   #ccc;
196 | 
197 | // TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
198 | //** Default `.form-control` border radius
199 | @input-border-radius:            @border-radius-base;
200 | //** Large `.form-control` border radius
201 | @input-border-radius-large:      @border-radius-large;
202 | //** Small `.form-control` border radius
203 | @input-border-radius-small:      @border-radius-small;
204 | 
205 | //** Border color for inputs on focus
206 | @input-border-focus:             #66afe9;
207 | 
208 | //** Placeholder text color
209 | @input-color-placeholder:        #999;
210 | 
211 | //** Default `.form-control` height
212 | @input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
213 | //** Large `.form-control` height
214 | @input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
215 | //** Small `.form-control` height
216 | @input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
217 | 
218 | @legend-color:                   @gray-dark;
219 | @legend-border-color:            #e5e5e5;
220 | 
221 | //** Background color for textual input addons
222 | @input-group-addon-bg:           @gray-lighter;
223 | //** Border color for textual input addons
224 | @input-group-addon-border-color: @input-border;
225 | 
226 | //** Disabled cursor for form controls and buttons.
227 | @cursor-disabled:                not-allowed;
228 | 
229 | 
230 | //== Dropdowns
231 | //
232 | //## Dropdown menu container and contents.
233 | 
234 | //** Background for the dropdown menu.
235 | @dropdown-bg:                    #fff;
236 | //** Dropdown menu `border-color`.
237 | @dropdown-border:                rgba(0,0,0,.15);
238 | //** Dropdown menu `border-color` **for IE8**.
239 | @dropdown-fallback-border:       #ccc;
240 | //** Divider color for between dropdown items.
241 | @dropdown-divider-bg:            #e5e5e5;
242 | 
243 | //** Dropdown link text color.
244 | @dropdown-link-color:            @gray-dark;
245 | //** Hover color for dropdown links.
246 | @dropdown-link-hover-color:      darken(@gray-dark, 5%);
247 | //** Hover background for dropdown links.
248 | @dropdown-link-hover-bg:         #f5f5f5;
249 | 
250 | //** Active dropdown menu item text color.
251 | @dropdown-link-active-color:     @component-active-color;
252 | //** Active dropdown menu item background color.
253 | @dropdown-link-active-bg:        @component-active-bg;
254 | 
255 | //** Disabled dropdown menu item background color.
256 | @dropdown-link-disabled-color:   @gray-light;
257 | 
258 | //** Text color for headers within dropdown menus.
259 | @dropdown-header-color:          @gray-light;
260 | 
261 | //** Deprecated `@dropdown-caret-color` as of v3.1.0
262 | @dropdown-caret-color:           #000;
263 | 
264 | 
265 | //-- Z-index master list
266 | //
267 | // Warning: Avoid customizing these values. They're used for a bird's eye view
268 | // of components dependent on the z-axis and are designed to all work together.
269 | //
270 | // Note: These variables are not generated into the Customizer.
271 | 
272 | @zindex-navbar:            1000;
273 | @zindex-dropdown:          1000;
274 | @zindex-popover:           1060;
275 | @zindex-tooltip:           1070;
276 | @zindex-navbar-fixed:      1030;
277 | @zindex-modal:             1040;
278 | 
279 | 
280 | //== Media queries breakpoints
281 | //
282 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes.
283 | 
284 | // Extra small screen / phone
285 | //** Deprecated `@screen-xs` as of v3.0.1
286 | @screen-xs:                  480px;
287 | //** Deprecated `@screen-xs-min` as of v3.2.0
288 | @screen-xs-min:              @screen-xs;
289 | //** Deprecated `@screen-phone` as of v3.0.1
290 | @screen-phone:               @screen-xs-min;
291 | 
292 | // Small screen / tablet
293 | //** Deprecated `@screen-sm` as of v3.0.1
294 | @screen-sm:                  768px;
295 | @screen-sm-min:              @screen-sm;
296 | //** Deprecated `@screen-tablet` as of v3.0.1
297 | @screen-tablet:              @screen-sm-min;
298 | 
299 | // Medium screen / desktop
300 | //** Deprecated `@screen-md` as of v3.0.1
301 | @screen-md:                  992px;
302 | @screen-md-min:              @screen-md;
303 | //** Deprecated `@screen-desktop` as of v3.0.1
304 | @screen-desktop:             @screen-md-min;
305 | 
306 | // Large screen / wide desktop
307 | //** Deprecated `@screen-lg` as of v3.0.1
308 | @screen-lg:                  1200px;
309 | @screen-lg-min:              @screen-lg;
310 | //** Deprecated `@screen-lg-desktop` as of v3.0.1
311 | @screen-lg-desktop:          @screen-lg-min;
312 | 
313 | // So media queries don't overlap when required, provide a maximum
314 | @screen-xs-max:              (@screen-sm-min - 1);
315 | @screen-sm-max:              (@screen-md-min - 1);
316 | @screen-md-max:              (@screen-lg-min - 1);
317 | 
318 | 
319 | //== Grid system
320 | //
321 | //## Define your custom responsive grid.
322 | 
323 | //** Number of columns in the grid.
324 | @grid-columns:              12;
325 | //** Padding between columns. Gets divided in half for the left and right.
326 | @grid-gutter-width:         30px;
327 | // Navbar collapse
328 | //** Point at which the navbar becomes uncollapsed.
329 | @grid-float-breakpoint:     @screen-sm-min;
330 | //** Point at which the navbar begins collapsing.
331 | @grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
332 | 
333 | 
334 | //== Container sizes
335 | //
336 | //## Define the maximum width of `.container` for different screen sizes.
337 | 
338 | // Small screen / tablet
339 | @container-tablet:             (720px + @grid-gutter-width);
340 | //** For `@screen-sm-min` and up.
341 | @container-sm:                 @container-tablet;
342 | 
343 | // Medium screen / desktop
344 | @container-desktop:            (940px + @grid-gutter-width);
345 | //** For `@screen-md-min` and up.
346 | @container-md:                 @container-desktop;
347 | 
348 | // Large screen / wide desktop
349 | @container-large-desktop:      (1140px + @grid-gutter-width);
350 | //** For `@screen-lg-min` and up.
351 | @container-lg:                 @container-large-desktop;
352 | 
353 | 
354 | //== Navbar
355 | //
356 | //##
357 | 
358 | // Basics of a navbar
359 | @navbar-height:                    50px;
360 | @navbar-margin-bottom:             @line-height-computed;
361 | @navbar-border-radius:             @border-radius-base;
362 | @navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
363 | @navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
364 | @navbar-collapse-max-height:       340px;
365 | 
366 | @navbar-default-color:             #777;
367 | @navbar-default-bg:                #f8f8f8;
368 | @navbar-default-border:            darken(@navbar-default-bg, 6.5%);
369 | 
370 | // Navbar links
371 | @navbar-default-link-color:                #777;
372 | @navbar-default-link-hover-color:          #333;
373 | @navbar-default-link-hover-bg:             transparent;
374 | @navbar-default-link-active-color:         #555;
375 | @navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
376 | @navbar-default-link-disabled-color:       #ccc;
377 | @navbar-default-link-disabled-bg:          transparent;
378 | 
379 | // Navbar brand label
380 | @navbar-default-brand-color:               @navbar-default-link-color;
381 | @navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
382 | @navbar-default-brand-hover-bg:            transparent;
383 | 
384 | // Navbar toggle
385 | @navbar-default-toggle-hover-bg:           #ddd;
386 | @navbar-default-toggle-icon-bar-bg:        #888;
387 | @navbar-default-toggle-border-color:       #ddd;
388 | 
389 | 
390 | // Inverted navbar
391 | // Reset inverted navbar basics
392 | @navbar-inverse-color:                      lighten(@gray-light, 15%);
393 | @navbar-inverse-bg:                         #222;
394 | @navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
395 | 
396 | // Inverted navbar links
397 | @navbar-inverse-link-color:                 lighten(@gray-light, 15%);
398 | @navbar-inverse-link-hover-color:           #fff;
399 | @navbar-inverse-link-hover-bg:              transparent;
400 | @navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
401 | @navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
402 | @navbar-inverse-link-disabled-color:        #444;
403 | @navbar-inverse-link-disabled-bg:           transparent;
404 | 
405 | // Inverted navbar brand label
406 | @navbar-inverse-brand-color:                @navbar-inverse-link-color;
407 | @navbar-inverse-brand-hover-color:          #fff;
408 | @navbar-inverse-brand-hover-bg:             transparent;
409 | 
410 | // Inverted navbar toggle
411 | @navbar-inverse-toggle-hover-bg:            #333;
412 | @navbar-inverse-toggle-icon-bar-bg:         #fff;
413 | @navbar-inverse-toggle-border-color:        #333;
414 | 
415 | 
416 | //== Navs
417 | //
418 | //##
419 | 
420 | //=== Shared nav styles
421 | @nav-link-padding:                          10px 15px;
422 | @nav-link-hover-bg:                         @gray-lighter;
423 | 
424 | @nav-disabled-link-color:                   @gray-light;
425 | @nav-disabled-link-hover-color:             @gray-light;
426 | 
427 | //== Tabs
428 | @nav-tabs-border-color:                     #ddd;
429 | 
430 | @nav-tabs-link-hover-border-color:          @gray-lighter;
431 | 
432 | @nav-tabs-active-link-hover-bg:             @body-bg;
433 | @nav-tabs-active-link-hover-color:          @gray;
434 | @nav-tabs-active-link-hover-border-color:   #ddd;
435 | 
436 | @nav-tabs-justified-link-border-color:            #ddd;
437 | @nav-tabs-justified-active-link-border-color:     @body-bg;
438 | 
439 | //== Pills
440 | @nav-pills-border-radius:                   @border-radius-base;
441 | @nav-pills-active-link-hover-bg:            @component-active-bg;
442 | @nav-pills-active-link-hover-color:         @component-active-color;
443 | 
444 | 
445 | //== Pagination
446 | //
447 | //##
448 | 
449 | @pagination-color:                     @link-color;
450 | @pagination-bg:                        #fff;
451 | @pagination-border:                    #ddd;
452 | 
453 | @pagination-hover-color:               @link-hover-color;
454 | @pagination-hover-bg:                  @gray-lighter;
455 | @pagination-hover-border:              #ddd;
456 | 
457 | @pagination-active-color:              #fff;
458 | @pagination-active-bg:                 @brand-primary;
459 | @pagination-active-border:             @brand-primary;
460 | 
461 | @pagination-disabled-color:            @gray-light;
462 | @pagination-disabled-bg:               #fff;
463 | @pagination-disabled-border:           #ddd;
464 | 
465 | 
466 | //== Pager
467 | //
468 | //##
469 | 
470 | @pager-bg:                             @pagination-bg;
471 | @pager-border:                         @pagination-border;
472 | @pager-border-radius:                  15px;
473 | 
474 | @pager-hover-bg:                       @pagination-hover-bg;
475 | 
476 | @pager-active-bg:                      @pagination-active-bg;
477 | @pager-active-color:                   @pagination-active-color;
478 | 
479 | @pager-disabled-color:                 @pagination-disabled-color;
480 | 
481 | 
482 | //== Jumbotron
483 | //
484 | //##
485 | 
486 | @jumbotron-padding:              30px;
487 | @jumbotron-color:                inherit;
488 | @jumbotron-bg:                   @gray-lighter;
489 | @jumbotron-heading-color:        inherit;
490 | @jumbotron-font-size:            ceil((@font-size-base * 1.5));
491 | 
492 | 
493 | //== Form states and alerts
494 | //
495 | //## Define colors for form feedback states and, by default, alerts.
496 | 
497 | @state-success-text:             #3c763d;
498 | @state-success-bg:               #dff0d8;
499 | @state-success-border:           darken(spin(@state-success-bg, -10), 5%);
500 | 
501 | @state-info-text:                #31708f;
502 | @state-info-bg:                  #d9edf7;
503 | @state-info-border:              darken(spin(@state-info-bg, -10), 7%);
504 | 
505 | @state-warning-text:             #8a6d3b;
506 | @state-warning-bg:               #fcf8e3;
507 | @state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
508 | 
509 | @state-danger-text:              #a94442;
510 | @state-danger-bg:                #f2dede;
511 | @state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
512 | 
513 | 
514 | //== Tooltips
515 | //
516 | //##
517 | 
518 | //** Tooltip max width
519 | @tooltip-max-width:           200px;
520 | //** Tooltip text color
521 | @tooltip-color:               #fff;
522 | //** Tooltip background color
523 | @tooltip-bg:                  #000;
524 | @tooltip-opacity:             .9;
525 | 
526 | //** Tooltip arrow width
527 | @tooltip-arrow-width:         5px;
528 | //** Tooltip arrow color
529 | @tooltip-arrow-color:         @tooltip-bg;
530 | 
531 | 
532 | //== Popovers
533 | //
534 | //##
535 | 
536 | //** Popover body background color
537 | @popover-bg:                          #fff;
538 | //** Popover maximum width
539 | @popover-max-width:                   276px;
540 | //** Popover border color
541 | @popover-border-color:                rgba(0,0,0,.2);
542 | //** Popover fallback border color
543 | @popover-fallback-border-color:       #ccc;
544 | 
545 | //** Popover title background color
546 | @popover-title-bg:                    darken(@popover-bg, 3%);
547 | 
548 | //** Popover arrow width
549 | @popover-arrow-width:                 10px;
550 | //** Popover arrow color
551 | @popover-arrow-color:                 @popover-bg;
552 | 
553 | //** Popover outer arrow width
554 | @popover-arrow-outer-width:           (@popover-arrow-width + 1);
555 | //** Popover outer arrow color
556 | @popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
557 | //** Popover outer arrow fallback color
558 | @popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
559 | 
560 | 
561 | //== Labels
562 | //
563 | //##
564 | 
565 | //** Default label background color
566 | @label-default-bg:            @gray-light;
567 | //** Primary label background color
568 | @label-primary-bg:            @brand-primary;
569 | //** Success label background color
570 | @label-success-bg:            @brand-success;
571 | //** Info label background color
572 | @label-info-bg:               @brand-info;
573 | //** Warning label background color
574 | @label-warning-bg:            @brand-warning;
575 | //** Danger label background color
576 | @label-danger-bg:             @brand-danger;
577 | 
578 | //** Default label text color
579 | @label-color:                 #fff;
580 | //** Default text color of a linked label
581 | @label-link-hover-color:      #fff;
582 | 
583 | 
584 | //== Modals
585 | //
586 | //##
587 | 
588 | //** Padding applied to the modal body
589 | @modal-inner-padding:         15px;
590 | 
591 | //** Padding applied to the modal title
592 | @modal-title-padding:         15px;
593 | //** Modal title line-height
594 | @modal-title-line-height:     @line-height-base;
595 | 
596 | //** Background color of modal content area
597 | @modal-content-bg:                             #fff;
598 | //** Modal content border color
599 | @modal-content-border-color:                   rgba(0,0,0,.2);
600 | //** Modal content border color **for IE8**
601 | @modal-content-fallback-border-color:          #999;
602 | 
603 | //** Modal backdrop background color
604 | @modal-backdrop-bg:           #000;
605 | //** Modal backdrop opacity
606 | @modal-backdrop-opacity:      .5;
607 | //** Modal header border color
608 | @modal-header-border-color:   #e5e5e5;
609 | //** Modal footer border color
610 | @modal-footer-border-color:   @modal-header-border-color;
611 | 
612 | @modal-lg:                    900px;
613 | @modal-md:                    600px;
614 | @modal-sm:                    300px;
615 | 
616 | 
617 | //== Alerts
618 | //
619 | //## Define alert colors, border radius, and padding.
620 | 
621 | @alert-padding:               15px;
622 | @alert-border-radius:         @border-radius-base;
623 | @alert-link-font-weight:      bold;
624 | 
625 | @alert-success-bg:            @state-success-bg;
626 | @alert-success-text:          @state-success-text;
627 | @alert-success-border:        @state-success-border;
628 | 
629 | @alert-info-bg:               @state-info-bg;
630 | @alert-info-text:             @state-info-text;
631 | @alert-info-border:           @state-info-border;
632 | 
633 | @alert-warning-bg:            @state-warning-bg;
634 | @alert-warning-text:          @state-warning-text;
635 | @alert-warning-border:        @state-warning-border;
636 | 
637 | @alert-danger-bg:             @state-danger-bg;
638 | @alert-danger-text:           @state-danger-text;
639 | @alert-danger-border:         @state-danger-border;
640 | 
641 | 
642 | //== Progress bars
643 | //
644 | //##
645 | 
646 | //** Background color of the whole progress component
647 | @progress-bg:                 #f5f5f5;
648 | //** Progress bar text color
649 | @progress-bar-color:          #fff;
650 | //** Variable for setting rounded corners on progress bar.
651 | @progress-border-radius:      @border-radius-base;
652 | 
653 | //** Default progress bar color
654 | @progress-bar-bg:             @brand-primary;
655 | //** Success progress bar color
656 | @progress-bar-success-bg:     @brand-success;
657 | //** Warning progress bar color
658 | @progress-bar-warning-bg:     @brand-warning;
659 | //** Danger progress bar color
660 | @progress-bar-danger-bg:      @brand-danger;
661 | //** Info progress bar color
662 | @progress-bar-info-bg:        @brand-info;
663 | 
664 | 
665 | //== List group
666 | //
667 | //##
668 | 
669 | //** Background color on `.list-group-item`
670 | @list-group-bg:                 #fff;
671 | //** `.list-group-item` border color
672 | @list-group-border:             #ddd;
673 | //** List group border radius
674 | @list-group-border-radius:      @border-radius-base;
675 | 
676 | //** Background color of single list items on hover
677 | @list-group-hover-bg:           #f5f5f5;
678 | //** Text color of active list items
679 | @list-group-active-color:       @component-active-color;
680 | //** Background color of active list items
681 | @list-group-active-bg:          @component-active-bg;
682 | //** Border color of active list elements
683 | @list-group-active-border:      @list-group-active-bg;
684 | //** Text color for content within active list items
685 | @list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
686 | 
687 | //** Text color of disabled list items
688 | @list-group-disabled-color:      @gray-light;
689 | //** Background color of disabled list items
690 | @list-group-disabled-bg:         @gray-lighter;
691 | //** Text color for content within disabled list items
692 | @list-group-disabled-text-color: @list-group-disabled-color;
693 | 
694 | @list-group-link-color:         #555;
695 | @list-group-link-hover-color:   @list-group-link-color;
696 | @list-group-link-heading-color: #333;
697 | 
698 | 
699 | //== Panels
700 | //
701 | //##
702 | 
703 | @panel-bg:                    #fff;
704 | @panel-body-padding:          15px;
705 | @panel-heading-padding:       10px 15px;
706 | @panel-footer-padding:        @panel-heading-padding;
707 | @panel-border-radius:         @border-radius-base;
708 | 
709 | //** Border color for elements within panels
710 | @panel-inner-border:          #ddd;
711 | @panel-footer-bg:             #f5f5f5;
712 | 
713 | @panel-default-text:          @gray-dark;
714 | @panel-default-border:        #ddd;
715 | @panel-default-heading-bg:    #f5f5f5;
716 | 
717 | @panel-primary-text:          #fff;
718 | @panel-primary-border:        @brand-primary;
719 | @panel-primary-heading-bg:    @brand-primary;
720 | 
721 | @panel-success-text:          @state-success-text;
722 | @panel-success-border:        @state-success-border;
723 | @panel-success-heading-bg:    @state-success-bg;
724 | 
725 | @panel-info-text:             @state-info-text;
726 | @panel-info-border:           @state-info-border;
727 | @panel-info-heading-bg:       @state-info-bg;
728 | 
729 | @panel-warning-text:          @state-warning-text;
730 | @panel-warning-border:        @state-warning-border;
731 | @panel-warning-heading-bg:    @state-warning-bg;
732 | 
733 | @panel-danger-text:           @state-danger-text;
734 | @panel-danger-border:         @state-danger-border;
735 | @panel-danger-heading-bg:     @state-danger-bg;
736 | 
737 | 
738 | //== Thumbnails
739 | //
740 | //##
741 | 
742 | //** Padding around the thumbnail image
743 | @thumbnail-padding:           4px;
744 | //** Thumbnail background color
745 | @thumbnail-bg:                @body-bg;
746 | //** Thumbnail border color
747 | @thumbnail-border:            #ddd;
748 | //** Thumbnail border radius
749 | @thumbnail-border-radius:     @border-radius-base;
750 | 
751 | //** Custom text color for thumbnail captions
752 | @thumbnail-caption-color:     @text-color;
753 | //** Padding around the thumbnail caption
754 | @thumbnail-caption-padding:   9px;
755 | 
756 | 
757 | //== Wells
758 | //
759 | //##
760 | 
761 | @well-bg:                     #f5f5f5;
762 | @well-border:                 darken(@well-bg, 7%);
763 | 
764 | 
765 | //== Badges
766 | //
767 | //##
768 | 
769 | @badge-color:                 #fff;
770 | //** Linked badge text color on hover
771 | @badge-link-hover-color:      #fff;
772 | @badge-bg:                    @gray-light;
773 | 
774 | //** Badge text color in active nav link
775 | @badge-active-color:          @link-color;
776 | //** Badge background color in active nav link
777 | @badge-active-bg:             #fff;
778 | 
779 | @badge-font-weight:           bold;
780 | @badge-line-height:           1;
781 | @badge-border-radius:         10px;
782 | 
783 | 
784 | //== Breadcrumbs
785 | //
786 | //##
787 | 
788 | @breadcrumb-padding-vertical:   8px;
789 | @breadcrumb-padding-horizontal: 15px;
790 | //** Breadcrumb background color
791 | @breadcrumb-bg:                 #f5f5f5;
792 | //** Breadcrumb text color
793 | @breadcrumb-color:              #ccc;
794 | //** Text color of current page in the breadcrumb
795 | @breadcrumb-active-color:       @gray-light;
796 | //** Textual separator for between breadcrumb elements
797 | @breadcrumb-separator:          "/";
798 | 
799 | 
800 | //== Carousel
801 | //
802 | //##
803 | 
804 | @carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
805 | 
806 | @carousel-control-color:                      #fff;
807 | @carousel-control-width:                      15%;
808 | @carousel-control-opacity:                    .5;
809 | @carousel-control-font-size:                  20px;
810 | 
811 | @carousel-indicator-active-bg:                #fff;
812 | @carousel-indicator-border-color:             #fff;
813 | 
814 | @carousel-caption-color:                      #fff;
815 | 
816 | 
817 | //== Close
818 | //
819 | //##
820 | 
821 | @close-font-weight:           bold;
822 | @close-color:                 #000;
823 | @close-text-shadow:           0 1px 0 #fff;
824 | 
825 | 
826 | //== Code
827 | //
828 | //##
829 | 
830 | @code-color:                  #c7254e;
831 | @code-bg:                     #f9f2f4;
832 | 
833 | @kbd-color:                   #fff;
834 | @kbd-bg:                      #333;
835 | 
836 | @pre-bg:                      #f5f5f5;
837 | @pre-color:                   @gray-dark;
838 | @pre-border-color:            #ccc;
839 | @pre-scrollable-max-height:   340px;
840 | 
841 | 
842 | //== Type
843 | //
844 | //##
845 | 
846 | //** Horizontal offset for forms and lists.
847 | @component-offset-horizontal: 180px;
848 | //** Text muted color
849 | @text-muted:                  @gray-light;
850 | //** Abbreviations and acronyms border color
851 | @abbr-border-color:           @gray-light;
852 | //** Headings small color
853 | @headings-small-color:        @gray-light;
854 | //** Blockquote small color
855 | @blockquote-small-color:      @gray-light;
856 | //** Blockquote font size
857 | @blockquote-font-size:        (@font-size-base * 1.25);
858 | //** Blockquote border color
859 | @blockquote-border-color:     @gray-lighter;
860 | //** Page header border color
861 | @page-header-border-color:    @gray-lighter;
862 | //** Width of horizontal description list titles
863 | @dl-horizontal-offset:        @component-offset-horizontal;
864 | //** Horizontal line color.
865 | @hr-border:                   @gray-lighter;
866 | 


--------------------------------------------------------------------------------
/test/full-include/client/lib/custom.bootstrap.json:
--------------------------------------------------------------------------------
 1 | {"modules": {
 2 |   "normalize":            true,
 3 |   "print":                true,
 4 | 
 5 |   "scaffolding":          true,
 6 |   "type":                 true,
 7 |   "code":                 true,
 8 |   "grid":                 true,
 9 |   "tables":               true,
10 |   "forms":                true,
11 |   "buttons":              true,
12 | 
13 |   "glyphicons":           true,
14 |   "button-groups":        true,
15 |   "input-groups":         true,
16 |   "navs":                 true,
17 |   "navbar":               true,
18 |   "breadcrumbs":          true,
19 |   "pagination":           true,
20 |   "pager":                true,
21 |   "labels":               true,
22 |   "badges":               true,
23 |   "jumbotron":            true,
24 |   "thumbnails":           true,
25 |   "alerts":               true,
26 |   "progress-bars":        true,
27 |   "media":                true,
28 |   "list-group":           true,
29 |   "panels":               true,
30 |   "responsive-embed":     true,
31 |   "wells":                true,
32 |   "close":                true,
33 | 
34 |   "component-animations": true,
35 |   "dropdowns":            true,
36 |   "modals":               true,
37 |   "tooltip":              true,
38 |   "popovers":             true,
39 |   "carousel":             true,
40 |   
41 |   "affix":                true,
42 |   "alert":                true,
43 |   "button":               true,
44 |   "collapse":             true,
45 |   "scrollspy":            true,
46 |   "tab":                  true,
47 |   "transition":           true,
48 | 
49 |   "utilities":            true,
50 |   "responsive-utilities": true
51 | }}


--------------------------------------------------------------------------------
/test/full-include/client/lib/custom.bootstrap.mixins.import.less:
--------------------------------------------------------------------------------
   1 | // THIS FILE IS GENERATED, DO NOT MODIFY IT!
   2 | // These are the mixins bootstrap provides
   3 | // They are included here so you can use them in your less files too,
   4 | // However: you should @import "custom.bootstrap.import.less" instead of this
   5 | 
   6 | 
   7 | // @import "bootstrap/less/mixins.less"
   8 | // Mixins
   9 | // --------------------------------------------------
  10 | 
  11 | // Utilities
  12 | 
  13 | 
  14 | // @import "bootstrap/less/mixins/hide-text.less"
  15 | // CSS image replacement
  16 | //
  17 | // Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
  18 | // mixins being reused as classes with the same name, this doesn't hold up. As
  19 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
  20 | //
  21 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
  22 | 
  23 | // Deprecated as of v3.0.1 (will be removed in v4)
  24 | .hide-text() {
  25 |   font: ~"0/0" a;
  26 |   color: transparent;
  27 |   text-shadow: none;
  28 |   background-color: transparent;
  29 |   border: 0;
  30 | }
  31 | 
  32 | // New mixin to use as of v3.0.1
  33 | .text-hide() {
  34 |   .hide-text();
  35 | }
  36 | 
  37 | 
  38 | 
  39 | // @import "bootstrap/less/mixins/opacity.less"
  40 | // Opacity
  41 | 
  42 | .opacity(@opacity) {
  43 |   opacity: @opacity;
  44 |   // IE8 filter
  45 |   @opacity-ie: (@opacity * 100);
  46 |   filter: ~"alpha(opacity=@{opacity-ie})";
  47 | }
  48 | 
  49 | 
  50 | 
  51 | // @import "bootstrap/less/mixins/image.less"
  52 | // Image Mixins
  53 | // - Responsive image
  54 | // - Retina image
  55 | 
  56 | 
  57 | // Responsive image
  58 | //
  59 | // Keep images from scaling beyond the width of their parents.
  60 | .img-responsive(@display: block) {
  61 |   display: @display;
  62 |   max-width: 100%; // Part 1: Set a maximum relative to the parent
  63 |   height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
  64 | }
  65 | 
  66 | 
  67 | // Retina image
  68 | //
  69 | // Short retina mixin for setting background-image and -size. Note that the
  70 | // spelling of `min--moz-device-pixel-ratio` is intentional.
  71 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
  72 |   background-image: url("@{file-1x}");
  73 | 
  74 |   @media
  75 |   only screen and (-webkit-min-device-pixel-ratio: 2),
  76 |   only screen and (   min--moz-device-pixel-ratio: 2),
  77 |   only screen and (     -o-min-device-pixel-ratio: 2/1),
  78 |   only screen and (        min-device-pixel-ratio: 2),
  79 |   only screen and (                min-resolution: 192dpi),
  80 |   only screen and (                min-resolution: 2dppx) {
  81 |     background-image: url("@{file-2x}");
  82 |     background-size: @width-1x @height-1x;
  83 |   }
  84 | }
  85 | 
  86 | 
  87 | 
  88 | // @import "bootstrap/less/mixins/labels.less"
  89 | // Labels
  90 | 
  91 | .label-variant(@color) {
  92 |   background-color: @color;
  93 | 
  94 |   &[href] {
  95 |     &:hover,
  96 |     &:focus {
  97 |       background-color: darken(@color, 10%);
  98 |     }
  99 |   }
 100 | }
 101 | 
 102 | 
 103 | 
 104 | // @import "bootstrap/less/mixins/reset-filter.less"
 105 | // Reset filters for IE
 106 | //
 107 | // When you need to remove a gradient background, do not forget to use this to reset
 108 | // the IE filter for IE9 and below.
 109 | 
 110 | .reset-filter() {
 111 |   filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
 112 | }
 113 | 
 114 | 
 115 | 
 116 | // @import "bootstrap/less/mixins/resize.less"
 117 | // Resize anything
 118 | 
 119 | .resizable(@direction) {
 120 |   resize: @direction; // Options: horizontal, vertical, both
 121 |   overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
 122 | }
 123 | 
 124 | 
 125 | 
 126 | // @import "bootstrap/less/mixins/responsive-visibility.less"
 127 | // Responsive utilities
 128 | 
 129 | //
 130 | // More easily include all the states for responsive-utilities.less.
 131 | .responsive-visibility() {
 132 |   display: block !important;
 133 |   table&  { display: table; }
 134 |   tr&     { display: table-row !important; }
 135 |   th&,
 136 |   td&     { display: table-cell !important; }
 137 | }
 138 | 
 139 | .responsive-invisibility() {
 140 |   display: none !important;
 141 | }
 142 | 
 143 | 
 144 | 
 145 | // @import "bootstrap/less/mixins/size.less"
 146 | // Sizing shortcuts
 147 | 
 148 | .size(@width; @height) {
 149 |   width: @width;
 150 |   height: @height;
 151 | }
 152 | 
 153 | .square(@size) {
 154 |   .size(@size; @size);
 155 | }
 156 | 
 157 | 
 158 | 
 159 | // @import "bootstrap/less/mixins/tab-focus.less"
 160 | // WebKit-style focus
 161 | 
 162 | .tab-focus() {
 163 |   // Default
 164 |   outline: thin dotted;
 165 |   // WebKit
 166 |   outline: 5px auto -webkit-focus-ring-color;
 167 |   outline-offset: -2px;
 168 | }
 169 | 
 170 | 
 171 | 
 172 | // @import "bootstrap/less/mixins/text-emphasis.less"
 173 | // Typography
 174 | 
 175 | .text-emphasis-variant(@color) {
 176 |   color: @color;
 177 |   a&:hover {
 178 |     color: darken(@color, 10%);
 179 |   }
 180 | }
 181 | 
 182 | 
 183 | 
 184 | // @import "bootstrap/less/mixins/text-overflow.less"
 185 | // Text overflow
 186 | // Requires inline-block or block for proper styling
 187 | 
 188 | .text-overflow() {
 189 |   overflow: hidden;
 190 |   text-overflow: ellipsis;
 191 |   white-space: nowrap;
 192 | }
 193 | 
 194 | 
 195 | 
 196 | // @import "bootstrap/less/mixins/vendor-prefixes.less"
 197 | // Vendor Prefixes
 198 | //
 199 | // All vendor mixins are deprecated as of v3.2.0 due to the introduction of
 200 | // Autoprefixer in our Gruntfile. They will be removed in v4.
 201 | 
 202 | // - Animations
 203 | // - Backface visibility
 204 | // - Box shadow
 205 | // - Box sizing
 206 | // - Content columns
 207 | // - Hyphens
 208 | // - Placeholder text
 209 | // - Transformations
 210 | // - Transitions
 211 | // - User Select
 212 | 
 213 | 
 214 | // Animations
 215 | .animation(@animation) {
 216 |   -webkit-animation: @animation;
 217 |        -o-animation: @animation;
 218 |           animation: @animation;
 219 | }
 220 | .animation-name(@name) {
 221 |   -webkit-animation-name: @name;
 222 |           animation-name: @name;
 223 | }
 224 | .animation-duration(@duration) {
 225 |   -webkit-animation-duration: @duration;
 226 |           animation-duration: @duration;
 227 | }
 228 | .animation-timing-function(@timing-function) {
 229 |   -webkit-animation-timing-function: @timing-function;
 230 |           animation-timing-function: @timing-function;
 231 | }
 232 | .animation-delay(@delay) {
 233 |   -webkit-animation-delay: @delay;
 234 |           animation-delay: @delay;
 235 | }
 236 | .animation-iteration-count(@iteration-count) {
 237 |   -webkit-animation-iteration-count: @iteration-count;
 238 |           animation-iteration-count: @iteration-count;
 239 | }
 240 | .animation-direction(@direction) {
 241 |   -webkit-animation-direction: @direction;
 242 |           animation-direction: @direction;
 243 | }
 244 | .animation-fill-mode(@fill-mode) {
 245 |   -webkit-animation-fill-mode: @fill-mode;
 246 |           animation-fill-mode: @fill-mode;
 247 | }
 248 | 
 249 | // Backface visibility
 250 | // Prevent browsers from flickering when using CSS 3D transforms.
 251 | // Default value is `visible`, but can be changed to `hidden`
 252 | 
 253 | .backface-visibility(@visibility){
 254 |   -webkit-backface-visibility: @visibility;
 255 |      -moz-backface-visibility: @visibility;
 256 |           backface-visibility: @visibility;
 257 | }
 258 | 
 259 | // Drop shadows
 260 | //
 261 | // Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
 262 | // supported browsers that have box shadow capabilities now support it.
 263 | 
 264 | .box-shadow(@shadow) {
 265 |   -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
 266 |           box-shadow: @shadow;
 267 | }
 268 | 
 269 | // Box sizing
 270 | .box-sizing(@boxmodel) {
 271 |   -webkit-box-sizing: @boxmodel;
 272 |      -moz-box-sizing: @boxmodel;
 273 |           box-sizing: @boxmodel;
 274 | }
 275 | 
 276 | // CSS3 Content Columns
 277 | .content-columns(@column-count; @column-gap: @grid-gutter-width) {
 278 |   -webkit-column-count: @column-count;
 279 |      -moz-column-count: @column-count;
 280 |           column-count: @column-count;
 281 |   -webkit-column-gap: @column-gap;
 282 |      -moz-column-gap: @column-gap;
 283 |           column-gap: @column-gap;
 284 | }
 285 | 
 286 | // Optional hyphenation
 287 | .hyphens(@mode: auto) {
 288 |   word-wrap: break-word;
 289 |   -webkit-hyphens: @mode;
 290 |      -moz-hyphens: @mode;
 291 |       -ms-hyphens: @mode; // IE10+
 292 |        -o-hyphens: @mode;
 293 |           hyphens: @mode;
 294 | }
 295 | 
 296 | // Placeholder text
 297 | .placeholder(@color: @input-color-placeholder) {
 298 |   // Firefox
 299 |   &::-moz-placeholder {
 300 |     color: @color;
 301 |     opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526
 302 |   }
 303 |   &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
 304 |   &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome
 305 | }
 306 | 
 307 | // Transformations
 308 | .scale(@ratio) {
 309 |   -webkit-transform: scale(@ratio);
 310 |       -ms-transform: scale(@ratio); // IE9 only
 311 |        -o-transform: scale(@ratio);
 312 |           transform: scale(@ratio);
 313 | }
 314 | .scale(@ratioX; @ratioY) {
 315 |   -webkit-transform: scale(@ratioX, @ratioY);
 316 |       -ms-transform: scale(@ratioX, @ratioY); // IE9 only
 317 |        -o-transform: scale(@ratioX, @ratioY);
 318 |           transform: scale(@ratioX, @ratioY);
 319 | }
 320 | .scaleX(@ratio) {
 321 |   -webkit-transform: scaleX(@ratio);
 322 |       -ms-transform: scaleX(@ratio); // IE9 only
 323 |        -o-transform: scaleX(@ratio);
 324 |           transform: scaleX(@ratio);
 325 | }
 326 | .scaleY(@ratio) {
 327 |   -webkit-transform: scaleY(@ratio);
 328 |       -ms-transform: scaleY(@ratio); // IE9 only
 329 |        -o-transform: scaleY(@ratio);
 330 |           transform: scaleY(@ratio);
 331 | }
 332 | .skew(@x; @y) {
 333 |   -webkit-transform: skewX(@x) skewY(@y);
 334 |       -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
 335 |        -o-transform: skewX(@x) skewY(@y);
 336 |           transform: skewX(@x) skewY(@y);
 337 | }
 338 | .translate(@x; @y) {
 339 |   -webkit-transform: translate(@x, @y);
 340 |       -ms-transform: translate(@x, @y); // IE9 only
 341 |        -o-transform: translate(@x, @y);
 342 |           transform: translate(@x, @y);
 343 | }
 344 | .translate3d(@x; @y; @z) {
 345 |   -webkit-transform: translate3d(@x, @y, @z);
 346 |           transform: translate3d(@x, @y, @z);
 347 | }
 348 | .rotate(@degrees) {
 349 |   -webkit-transform: rotate(@degrees);
 350 |       -ms-transform: rotate(@degrees); // IE9 only
 351 |        -o-transform: rotate(@degrees);
 352 |           transform: rotate(@degrees);
 353 | }
 354 | .rotateX(@degrees) {
 355 |   -webkit-transform: rotateX(@degrees);
 356 |       -ms-transform: rotateX(@degrees); // IE9 only
 357 |        -o-transform: rotateX(@degrees);
 358 |           transform: rotateX(@degrees);
 359 | }
 360 | .rotateY(@degrees) {
 361 |   -webkit-transform: rotateY(@degrees);
 362 |       -ms-transform: rotateY(@degrees); // IE9 only
 363 |        -o-transform: rotateY(@degrees);
 364 |           transform: rotateY(@degrees);
 365 | }
 366 | .perspective(@perspective) {
 367 |   -webkit-perspective: @perspective;
 368 |      -moz-perspective: @perspective;
 369 |           perspective: @perspective;
 370 | }
 371 | .perspective-origin(@perspective) {
 372 |   -webkit-perspective-origin: @perspective;
 373 |      -moz-perspective-origin: @perspective;
 374 |           perspective-origin: @perspective;
 375 | }
 376 | .transform-origin(@origin) {
 377 |   -webkit-transform-origin: @origin;
 378 |      -moz-transform-origin: @origin;
 379 |       -ms-transform-origin: @origin; // IE9 only
 380 |           transform-origin: @origin;
 381 | }
 382 | 
 383 | 
 384 | // Transitions
 385 | 
 386 | .transition(@transition) {
 387 |   -webkit-transition: @transition;
 388 |        -o-transition: @transition;
 389 |           transition: @transition;
 390 | }
 391 | .transition-property(@transition-property) {
 392 |   -webkit-transition-property: @transition-property;
 393 |           transition-property: @transition-property;
 394 | }
 395 | .transition-delay(@transition-delay) {
 396 |   -webkit-transition-delay: @transition-delay;
 397 |           transition-delay: @transition-delay;
 398 | }
 399 | .transition-duration(@transition-duration) {
 400 |   -webkit-transition-duration: @transition-duration;
 401 |           transition-duration: @transition-duration;
 402 | }
 403 | .transition-timing-function(@timing-function) {
 404 |   -webkit-transition-timing-function: @timing-function;
 405 |           transition-timing-function: @timing-function;
 406 | }
 407 | .transition-transform(@transition) {
 408 |   -webkit-transition: -webkit-transform @transition;
 409 |      -moz-transition: -moz-transform @transition;
 410 |        -o-transition: -o-transform @transition;
 411 |           transition: transform @transition;
 412 | }
 413 | 
 414 | 
 415 | // User select
 416 | // For selecting text on the page
 417 | 
 418 | .user-select(@select) {
 419 |   -webkit-user-select: @select;
 420 |      -moz-user-select: @select;
 421 |       -ms-user-select: @select; // IE10+
 422 |           user-select: @select;
 423 | }
 424 | 
 425 | 
 426 | // Components
 427 | 
 428 | 
 429 | // @import "bootstrap/less/mixins/alerts.less"
 430 | // Alerts
 431 | 
 432 | .alert-variant(@background; @border; @text-color) {
 433 |   background-color: @background;
 434 |   border-color: @border;
 435 |   color: @text-color;
 436 | 
 437 |   hr {
 438 |     border-top-color: darken(@border, 5%);
 439 |   }
 440 |   .alert-link {
 441 |     color: darken(@text-color, 10%);
 442 |   }
 443 | }
 444 | 
 445 | 
 446 | 
 447 | // @import "bootstrap/less/mixins/buttons.less"
 448 | // Button variants
 449 | //
 450 | // Easily pump out default styles, as well as :hover, :focus, :active,
 451 | // and disabled options for all buttons
 452 | 
 453 | .button-variant(@color; @background; @border) {
 454 |   color: @color;
 455 |   background-color: @background;
 456 |   border-color: @border;
 457 | 
 458 |   &:hover,
 459 |   &:focus,
 460 |   &.focus,
 461 |   &:active,
 462 |   &.active,
 463 |   .open > .dropdown-toggle& {
 464 |     color: @color;
 465 |     background-color: darken(@background, 10%);
 466 |         border-color: darken(@border, 12%);
 467 |   }
 468 |   &:active,
 469 |   &.active,
 470 |   .open > .dropdown-toggle& {
 471 |     background-image: none;
 472 |   }
 473 |   &.disabled,
 474 |   &[disabled],
 475 |   fieldset[disabled] & {
 476 |     &,
 477 |     &:hover,
 478 |     &:focus,
 479 |     &.focus,
 480 |     &:active,
 481 |     &.active {
 482 |       background-color: @background;
 483 |           border-color: @border;
 484 |     }
 485 |   }
 486 | 
 487 |   .badge {
 488 |     color: @background;
 489 |     background-color: @color;
 490 |   }
 491 | }
 492 | 
 493 | // Button sizes
 494 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
 495 |   padding: @padding-vertical @padding-horizontal;
 496 |   font-size: @font-size;
 497 |   line-height: @line-height;
 498 |   border-radius: @border-radius;
 499 | }
 500 | 
 501 | 
 502 | 
 503 | // @import "bootstrap/less/mixins/panels.less"
 504 | // Panels
 505 | 
 506 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
 507 |   border-color: @border;
 508 | 
 509 |   & > .panel-heading {
 510 |     color: @heading-text-color;
 511 |     background-color: @heading-bg-color;
 512 |     border-color: @heading-border;
 513 | 
 514 |     + .panel-collapse > .panel-body {
 515 |       border-top-color: @border;
 516 |     }
 517 |     .badge {
 518 |       color: @heading-bg-color;
 519 |       background-color: @heading-text-color;
 520 |     }
 521 |   }
 522 |   & > .panel-footer {
 523 |     + .panel-collapse > .panel-body {
 524 |       border-bottom-color: @border;
 525 |     }
 526 |   }
 527 | }
 528 | 
 529 | 
 530 | 
 531 | // @import "bootstrap/less/mixins/pagination.less"
 532 | // Pagination
 533 | 
 534 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {
 535 |   > li {
 536 |     > a,
 537 |     > span {
 538 |       padding: @padding-vertical @padding-horizontal;
 539 |       font-size: @font-size;
 540 |     }
 541 |     &:first-child {
 542 |       > a,
 543 |       > span {
 544 |         .border-left-radius(@border-radius);
 545 |       }
 546 |     }
 547 |     &:last-child {
 548 |       > a,
 549 |       > span {
 550 |         .border-right-radius(@border-radius);
 551 |       }
 552 |     }
 553 |   }
 554 | }
 555 | 
 556 | 
 557 | 
 558 | // @import "bootstrap/less/mixins/list-group.less"
 559 | // List Groups
 560 | 
 561 | .list-group-item-variant(@state; @background; @color) {
 562 |   .list-group-item-@{state} {
 563 |     color: @color;
 564 |     background-color: @background;
 565 | 
 566 |     a& {
 567 |       color: @color;
 568 | 
 569 |       .list-group-item-heading {
 570 |         color: inherit;
 571 |       }
 572 | 
 573 |       &:hover,
 574 |       &:focus {
 575 |         color: @color;
 576 |         background-color: darken(@background, 5%);
 577 |       }
 578 |       &.active,
 579 |       &.active:hover,
 580 |       &.active:focus {
 581 |         color: #fff;
 582 |         background-color: @color;
 583 |         border-color: @color;
 584 |       }
 585 |     }
 586 |   }
 587 | }
 588 | 
 589 | 
 590 | 
 591 | // @import "bootstrap/less/mixins/nav-divider.less"
 592 | // Horizontal dividers
 593 | //
 594 | // Dividers (basically an hr) within dropdowns and nav lists
 595 | 
 596 | .nav-divider(@color: #e5e5e5) {
 597 |   height: 1px;
 598 |   margin: ((@line-height-computed / 2) - 1) 0;
 599 |   overflow: hidden;
 600 |   background-color: @color;
 601 | }
 602 | 
 603 | 
 604 | 
 605 | // @import "bootstrap/less/mixins/forms.less"
 606 | // Form validation states
 607 | //
 608 | // Used in forms.less to generate the form validation CSS for warnings, errors,
 609 | // and successes.
 610 | 
 611 | .form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
 612 |   // Color the label and help text
 613 |   .help-block,
 614 |   .control-label,
 615 |   .radio,
 616 |   .checkbox,
 617 |   .radio-inline,
 618 |   .checkbox-inline,
 619 |   &.radio label,
 620 |   &.checkbox label,
 621 |   &.radio-inline label,
 622 |   &.checkbox-inline label  {
 623 |     color: @text-color;
 624 |   }
 625 |   // Set the border and box shadow on specific inputs to match
 626 |   .form-control {
 627 |     border-color: @border-color;
 628 |     .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
 629 |     &:focus {
 630 |       border-color: darken(@border-color, 10%);
 631 |       @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
 632 |       .box-shadow(@shadow);
 633 |     }
 634 |   }
 635 |   // Set validation states also for addons
 636 |   .input-group-addon {
 637 |     color: @text-color;
 638 |     border-color: @border-color;
 639 |     background-color: @background-color;
 640 |   }
 641 |   // Optional feedback icon
 642 |   .form-control-feedback {
 643 |     color: @text-color;
 644 |   }
 645 | }
 646 | 
 647 | 
 648 | // Form control focus state
 649 | //
 650 | // Generate a customized focus state and for any input with the specified color,
 651 | // which defaults to the `@input-border-focus` variable.
 652 | //
 653 | // We highly encourage you to not customize the default value, but instead use
 654 | // this to tweak colors on an as-needed basis. This aesthetic change is based on
 655 | // WebKit's default styles, but applicable to a wider range of browsers. Its
 656 | // usability and accessibility should be taken into account with any change.
 657 | //
 658 | // Example usage: change the default blue border and shadow to white for better
 659 | // contrast against a dark gray background.
 660 | .form-control-focus(@color: @input-border-focus) {
 661 |   @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
 662 |   &:focus {
 663 |     border-color: @color;
 664 |     outline: 0;
 665 |     .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
 666 |   }
 667 | }
 668 | 
 669 | // Form control sizing
 670 | //
 671 | // Relative text size, padding, and border-radii changes for form controls. For
 672 | // horizontal sizing, wrap controls in the predefined grid classes. `