├── client ├── .gitattributes ├── app │ ├── .buildignore │ ├── images │ │ └── yeoman.png │ ├── styles │ │ ├── partials │ │ │ └── _signup.scss │ │ ├── main.scss │ │ └── _variables.scss │ ├── scripts │ │ ├── app.js │ │ └── controllers │ │ │ └── main.js │ ├── views │ │ └── main.html │ ├── index.html │ └── .htaccess ├── .bowerrc ├── .gitignore ├── .travis.yml ├── .jshintrc ├── .editorconfig ├── test │ ├── spec │ │ └── controllers │ │ │ └── main.js │ ├── .jshintrc │ └── karma.conf.js ├── bower.json ├── package.json └── Gruntfile.js ├── AWS lambda functions ├── .gitignore └── dropbox-s3-sync │ ├── .npmignore │ ├── .gitignore │ ├── event.json │ ├── config │ ├── config.js │ └── env │ │ └── all.js │ ├── template.html │ ├── Gruntfile.js │ ├── package.json │ ├── inputs.txt │ └── index.js ├── lambda_file_sync.jpg ├── .gitignore ├── server ├── config │ ├── config.js │ └── env │ │ └── all.js ├── routes │ └── index.js ├── routes.js ├── bin │ └── www ├── package.json ├── dropbox │ ├── index.js │ └── dropbox.js ├── aws │ ├── index.js │ └── aws.js └── app.js └── README.md /client/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /client/app/.buildignore: -------------------------------------------------------------------------------- 1 | *.coffee -------------------------------------------------------------------------------- /AWS lambda functions/.gitignore: -------------------------------------------------------------------------------- 1 | link-scraper 2 | -------------------------------------------------------------------------------- /client/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/.npmignore: -------------------------------------------------------------------------------- 1 | event.json 2 | Gruntfile.js 3 | dist 4 | *.iml -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .tmp 4 | .sass-cache 5 | bower_components 6 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | config/env/development.js 4 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/event.json: -------------------------------------------------------------------------------- 1 | { 2 | "webpage": "http://www.morrissey-solo.com/" 3 | } -------------------------------------------------------------------------------- /lambda_file_sync.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aidancasey/S3DropboxFileSync/HEAD/lambda_file_sync.jpg -------------------------------------------------------------------------------- /client/app/images/yeoman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aidancasey/S3DropboxFileSync/HEAD/client/app/images/yeoman.png -------------------------------------------------------------------------------- /client/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '0.10' 4 | before_script: 5 | - 'npm install -g bower grunt-cli' 6 | - 'bower install' 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | .idea 4 | .tmp 5 | .sass-cache 6 | client/bower_components 7 | client/node_modules/ 8 | server/node_modules/ 9 | server/config/env/development.js 10 | -------------------------------------------------------------------------------- /client/app/styles/partials/_signup.scss: -------------------------------------------------------------------------------- 1 | .signup-container{ 2 | margin-top: 5em; 3 | } 4 | 5 | .signup-header{ 6 | text-align: center; 7 | color: $gray-light; 8 | margin-bottom: 1em; 9 | } -------------------------------------------------------------------------------- /server/config/config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var _ = require('lodash'); 4 | 5 | /** 6 | * Load environment configuration 7 | */ 8 | module.exports = _.merge( 9 | require('./env/all.js'), 10 | require('./env/' + process.env.NODE_ENV + '.js') || {}); -------------------------------------------------------------------------------- /server/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function (req, res) { 6 | res.render('index', { title: 'Express' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /server/routes.js: -------------------------------------------------------------------------------- 1 | module.exports = function (app) { 2 | var dropbox = require('./dropbox'); 3 | var aws = require('./aws'); 4 | 5 | app.use('/api/dropbox', require('./dropbox')(app)); 6 | app.use('/api/upload', require('./aws')(app)); 7 | 8 | } 9 | 10 | -------------------------------------------------------------------------------- /server/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var debug = require('debug')('server'); 3 | var app = require('../app'); 4 | 5 | app.set('port', process.env.PORT || 3000); 6 | 7 | var server = app.listen(app.get('port'), function() { 8 | debug('Express server listening on port ' + server.address().port); 9 | }); 10 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/config/config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var _ = require('lodash'); 4 | 5 | /** 6 | * Load environment configuration 7 | */ 8 | //module.exports = _.merge( 9 | // require('./env/all.js'), 10 | // require('./env/' + process.env.NODE_ENV + '.js') || {}); 11 | 12 | module.exports = _.merge( 13 | require('./env/all.js'), 14 | require('./env/development.js') || {}); -------------------------------------------------------------------------------- /server/config/env/all.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | dropbox :{appKey : "ADD YOUR OWN KEY", 5 | appSecret : "ADD YOUR OWN SECRET"}, 6 | 7 | aws:{ accessKey:"ADD YOUR OWN KEY" , 8 | secretKey : "ADD YOUR OWN SECRET", 9 | tokenBucket :"NAME OF THE S3 BUCKET TO STORE BEARER TOKEN", 10 | fileUploadBucket :"NAME OF THE S3 BUCKET TO STORE BEARER TOKEN", 11 | } 12 | }; -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |15 | Generated {{time}} 16 |
17 | 18 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/config/env/all.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | dropbox :{appKey : "ADD YOUR OWN KEY", 5 | appSecret : "ADD YOUR OWN SECRET"}, 6 | 7 | aws:{accessKey:"ADD YOUR OWN KEY" , 8 | secretKey : "ADD YOUR OWN SECRET", 9 | tokenBucket :"NAME OF THE S3 BUCKET TO STORE BEARER TOKEN", 10 | fileUploadBucket :"NAME OF THE S3 BUCKET TO STORE BEARER TOKEN" 11 | } 12 | }; -------------------------------------------------------------------------------- /client/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 2, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "undef": true, 16 | "unused": true, 17 | "strict": true, 18 | "trailing": true, 19 | "smarttabs": true, 20 | "globals": { 21 | "angular": false 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /client/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # Change these settings to your own preference 11 | indent_style = space 12 | indent_size = 2 13 | 14 | # We recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/Gruntfile.js: -------------------------------------------------------------------------------- 1 | var grunt = require('grunt'); 2 | grunt.loadNpmTasks('grunt-aws-lambda'); 3 | 4 | grunt.initConfig({ 5 | lambda_invoke: { 6 | default: { 7 | } 8 | }, 9 | lambda_deploy: { 10 | default: { 11 | options : { 12 | region : "eu-west-1", 13 | timeout :25 14 | }, 15 | function: 'dropbox-s3-sync' 16 | } 17 | }, 18 | lambda_package: { 19 | default: { 20 | } 21 | } 22 | }); 23 | 24 | grunt.registerTask('deploy', ['lambda_package', 'lambda_deploy']); -------------------------------------------------------------------------------- /client/test/spec/controllers/main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('Controller: MainCtrl', function () { 4 | 5 | // load the controller's module 6 | beforeEach(module('clientApp')); 7 | 8 | var MainCtrl, 9 | scope; 10 | 11 | // Initialize the controller and a mock scope 12 | beforeEach(inject(function ($controller, $rootScope) { 13 | scope = $rootScope.$new(); 14 | MainCtrl = $controller('MainCtrl', { 15 | $scope: scope 16 | }); 17 | })); 18 | 19 | it('should attach a list of awesomeThings to the scope', function () { 20 | expect(scope.awesomeThings.length).toBe(3); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /client/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "angular": "^1.3.0", 6 | "json3": "^3.3.0", 7 | "es5-shim": "^4.0.0", 8 | "bootstrap-sass-official": "^3.2.0", 9 | "angular-animate": "^1.3.0", 10 | "angular-aria": "^1.3.0", 11 | "angular-cookies": "^1.3.0", 12 | "angular-messages": "^1.3.0", 13 | "angular-resource": "^1.3.0", 14 | "angular-route": "^1.3.0", 15 | "angular-sanitize": "^1.3.0", 16 | "angular-touch": "^1.3.0", 17 | "ng-file-upload": "~2.0.4" 18 | }, 19 | "devDependencies": { 20 | "angular-mocks": "~1.3.0", 21 | "angular-scenario": "~1.3.0" 22 | }, 23 | "appPath": "app" 24 | } 25 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "NODE_ENV=production nodemon ./bin/www", 7 | "test": "NODE_ENV=development nodemon ./bin/www" 8 | }, 9 | "dependencies": { 10 | "express": "~4.9.0", 11 | "body-parser": "~1.8.1", 12 | "cookie-parser": "~1.3.3", 13 | "morgan": "~1.3.0", 14 | "serve-favicon": "~2.1.3", 15 | "debug": "~2.0.0", 16 | "crypto": "0.0.3", 17 | "url": "~0.10.1", 18 | "request": "~2.49.0", 19 | "dropbox": "~0.10.3", 20 | "path": "~0.4.9", 21 | "q": "~1.1.2", 22 | "lodash": "~2.4.1", 23 | "aws-sdk": "~2.0.31", 24 | "connect-busboy": "0.0.2" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /client/app/scripts/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @ngdoc overview 5 | * @name clientApp 6 | * @description 7 | * # clientApp 8 | * 9 | * Main module of the application. 10 | */ 11 | angular 12 | .module('clientApp', [ 13 | 'ngAnimate', 14 | 'ngAria', 15 | 'ngCookies', 16 | 'ngMessages', 17 | 'ngResource', 18 | 'ngRoute', 19 | 'ngSanitize', 20 | 'ngTouch', 21 | 'angularFileUpload' 22 | ]) 23 | .config(function ($routeProvider) { 24 | $routeProvider 25 | .when('/', { 26 | templateUrl: 'views/main.html', 27 | controller: 'MainCtrl' 28 | }) 29 | .otherwise({ 30 | redirectTo: '/' 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /client/test/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 2, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "globals": { 22 | "after": false, 23 | "afterEach": false, 24 | "angular": false, 25 | "before": false, 26 | "beforeEach": false, 27 | "browser": false, 28 | "describe": false, 29 | "expect": false, 30 | "inject": false, 31 | "it": false, 32 | "jasmine": false, 33 | "spyOn": false 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /server/dropbox/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function(app) { 4 | var router = require('express').Router(), 5 | dropbox = require('./dropbox'); 6 | 7 | 8 | 9 | router.get('/authorise', function(req, res, next) { 10 | dropbox.authenticate(req, res); 11 | }); 12 | 13 | 14 | router.get('/callback', function(req, res, next) { 15 | dropbox.getBearerToken(req, res) 16 | .then(function (token) { 17 | aws.storeToken(token) 18 | }) 19 | .then(function () { 20 | res.send(200); 21 | }) 22 | .catch(function (error) { 23 | console.log(error); 24 | res.send(error); 25 | }) 26 | }); 27 | 28 | 29 | return router; 30 | }; 31 | 32 | 33 | -------------------------------------------------------------------------------- /AWS lambda functions/dropbox-s3-sync/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dropbox-s3-sync", 3 | "version": "1.0.0", 4 | "description": "AWS Lambda function to sync objects from an S# bucket to Dropbox", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "AWS Lamdba", 11 | "Dropbox" 12 | ], 13 | "dependencies": { 14 | "lodash": "~2.4.1", 15 | "q": "~1.1.2", 16 | "dropbox": "~0.10.3" 17 | }, 18 | "devDependencies": { 19 | "grunt": "0.4.*", 20 | "grunt-aws-lambda": "0.2.0", 21 | "aws-sdk": "2.0.23" 22 | }, 23 | "bundledDependencies": [ 24 | "lodash", 25 | "q", 26 | "dropbox" 27 | ], 28 | "author": "Aidan Casey", 29 | "license": "BSD-2-Clause" 30 | } 31 | -------------------------------------------------------------------------------- /client/app/views/main.html: -------------------------------------------------------------------------------- 1 |Step 1, Authorise this app to use your Dropbox Account
2 | 3 |Step 2 , Upload it
4 |`, ``, and ``.
59 | $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default;
60 | $font-family-base: $font-family-sans-serif !default;
61 |
62 | $font-size-base: 14px !default;
63 | $font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px
64 | $font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px
65 |
66 | $font-size-h1: floor(($font-size-base * 2.6)) !default; // ~36px
67 | $font-size-h2: floor(($font-size-base * 2.15)) !default; // ~30px
68 | $font-size-h3: ceil(($font-size-base * 1.7)) !default; // ~24px
69 | $font-size-h4: ceil(($font-size-base * 1.25)) !default; // ~18px
70 | $font-size-h5: $font-size-base !default;
71 | $font-size-h6: ceil(($font-size-base * 0.85)) !default; // ~12px
72 |
73 | //** Unit-less `line-height` for use in components like buttons.
74 | $line-height-base: 1.428571429 !default; // 20/14
75 | //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
76 | $line-height-computed: floor(($font-size-base * $line-height-base)) !default; // ~20px
77 |
78 | //** By default, this inherits from the ``.
79 | $headings-font-family: inherit !default;
80 | $headings-font-weight: 500 !default;
81 | $headings-line-height: 1.1 !default;
82 | $headings-color: inherit !default;
83 |
84 |
85 | //== Iconography
86 | //
87 | //## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
88 |
89 | //** Load fonts from this directory.
90 |
91 | // [converter] Asset helpers such as Sprockets and Node.js Mincer do not resolve relative paths
92 | $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
93 |
94 | //** File name for all font files.
95 | $icon-font-name: "glyphicons-halflings-regular" !default;
96 | //** Element ID within SVG icon file.
97 | $icon-font-svg-id: "glyphicons_halflingsregular" !default;
98 |
99 |
100 | //== Components
101 | //
102 | //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
103 |
104 | $padding-base-vertical: 6px !default;
105 | $padding-base-horizontal: 12px !default;
106 |
107 | $padding-large-vertical: 10px !default;
108 | $padding-large-horizontal: 16px !default;
109 |
110 | $padding-small-vertical: 5px !default;
111 | $padding-small-horizontal: 10px !default;
112 |
113 | $padding-xs-vertical: 1px !default;
114 | $padding-xs-horizontal: 5px !default;
115 |
116 | $line-height-large: 1.33 !default;
117 | $line-height-small: 1.5 !default;
118 |
119 | $border-radius-base: 4px !default;
120 | $border-radius-large: 6px !default;
121 | $border-radius-small: 3px !default;
122 |
123 | //** Global color for active items (e.g., navs or dropdowns).
124 | $component-active-color: #fff !default;
125 | //** Global background color for active items (e.g., navs or dropdowns).
126 | $component-active-bg: $brand-primary !default;
127 |
128 | //** Width of the `border` for generating carets that indicator dropdowns.
129 | $caret-width-base: 4px !default;
130 | //** Carets increase slightly in size for larger components.
131 | $caret-width-large: 5px !default;
132 |
133 |
134 | //== Tables
135 | //
136 | //## Customizes the `.table` component with basic values, each used across all table variations.
137 |
138 | //** Padding for ``s and ` `s.
139 | $table-cell-padding: 8px !default;
140 | //** Padding for cells in `.table-condensed`.
141 | $table-condensed-cell-padding: 5px !default;
142 |
143 | //** Default background color used for all tables.
144 | $table-bg: transparent !default;
145 | //** Background color used for `.table-striped`.
146 | $table-bg-accent: #f9f9f9 !default;
147 | //** Background color used for `.table-hover`.
148 | $table-bg-hover: #f5f5f5 !default;
149 | $table-bg-active: $table-bg-hover !default;
150 |
151 | //** Border color for table and cell borders.
152 | $table-border-color: #ddd !default;
153 |
154 |
155 | //== Buttons
156 | //
157 | //## For each of Bootstrap's buttons, define text, background and border color.
158 |
159 | $btn-font-weight: normal !default;
160 |
161 | $btn-default-color: #333 !default;
162 | $btn-default-bg: #fff !default;
163 | $btn-default-border: #ccc !default;
164 |
165 | $btn-primary-color: #fff !default;
166 | $btn-primary-bg: $brand-primary !default;
167 | $btn-primary-border: darken($btn-primary-bg, 5%) !default;
168 |
169 | $btn-success-color: #fff !default;
170 | $btn-success-bg: $brand-success !default;
171 | $btn-success-border: darken($btn-success-bg, 5%) !default;
172 |
173 | $btn-info-color: #fff !default;
174 | $btn-info-bg: $brand-info !default;
175 | $btn-info-border: darken($btn-info-bg, 5%) !default;
176 |
177 | $btn-warning-color: #fff !default;
178 | $btn-warning-bg: $brand-warning !default;
179 | $btn-warning-border: darken($btn-warning-bg, 5%) !default;
180 |
181 | $btn-danger-color: #fff !default;
182 | $btn-danger-bg: $brand-danger !default;
183 | $btn-danger-border: darken($btn-danger-bg, 5%) !default;
184 |
185 | $btn-link-disabled-color: $gray-light !default;
186 |
187 |
188 | //== Forms
189 | //
190 | //##
191 |
192 | //** `` background color
193 | $input-bg: #fff !default;
194 | //** `` background color
195 | $input-bg-disabled: $gray-lighter !default;
196 |
197 | //** Text color for ``s
198 | $input-color: $gray !default;
199 | //** `` border color
200 | $input-border: #ccc !default;
201 |
202 | // TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
203 | //** Default `.form-control` border radius
204 | $input-border-radius: $border-radius-base !default;
205 | //** Large `.form-control` border radius
206 | $input-border-radius-large: $border-radius-large !default;
207 | //** Small `.form-control` border radius
208 | $input-border-radius-small: $border-radius-small !default;
209 |
210 | //** Border color for inputs on focus
211 | $input-border-focus: #66afe9 !default;
212 |
213 | //** Placeholder text color
214 | $input-color-placeholder: #999 !default;
215 |
216 | //** Default `.form-control` height
217 | $input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
218 | //** Large `.form-control` height
219 | $input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
220 | //** Small `.form-control` height
221 | $input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
222 |
223 | $legend-color: $gray-dark !default;
224 | $legend-border-color: #e5e5e5 !default;
225 |
226 | //** Background color for textual input addons
227 | $input-group-addon-bg: $gray-lighter !default;
228 | //** Border color for textual input addons
229 | $input-group-addon-border-color: $input-border !default;
230 |
231 | //** Disabled cursor for form controls and buttons.
232 | $cursor-disabled: not-allowed !default;
233 |
234 |
235 | //== Dropdowns
236 | //
237 | //## Dropdown menu container and contents.
238 |
239 | //** Background for the dropdown menu.
240 | $dropdown-bg: #fff !default;
241 | //** Dropdown menu `border-color`.
242 | $dropdown-border: rgba(0,0,0,.15) !default;
243 | //** Dropdown menu `border-color` **for IE8**.
244 | $dropdown-fallback-border: #ccc !default;
245 | //** Divider color for between dropdown items.
246 | $dropdown-divider-bg: #e5e5e5 !default;
247 |
248 | //** Dropdown link text color.
249 | $dropdown-link-color: $gray-dark !default;
250 | //** Hover color for dropdown links.
251 | $dropdown-link-hover-color: darken($gray-dark, 5%) !default;
252 | //** Hover background for dropdown links.
253 | $dropdown-link-hover-bg: #f5f5f5 !default;
254 |
255 | //** Active dropdown menu item text color.
256 | $dropdown-link-active-color: $component-active-color !default;
257 | //** Active dropdown menu item background color.
258 | $dropdown-link-active-bg: $component-active-bg !default;
259 |
260 | //** Disabled dropdown menu item background color.
261 | $dropdown-link-disabled-color: $gray-light !default;
262 |
263 | //** Text color for headers within dropdown menus.
264 | $dropdown-header-color: $gray-light !default;
265 |
266 | //** Deprecated `$dropdown-caret-color` as of v3.1.0
267 | $dropdown-caret-color: #000 !default;
268 |
269 |
270 | //-- Z-index master list
271 | //
272 | // Warning: Avoid customizing these values. They're used for a bird's eye view
273 | // of components dependent on the z-axis and are designed to all work together.
274 | //
275 | // Note: These variables are not generated into the Customizer.
276 |
277 | $zindex-navbar: 1000 !default;
278 | $zindex-dropdown: 1000 !default;
279 | $zindex-popover: 1060 !default;
280 | $zindex-tooltip: 1070 !default;
281 | $zindex-navbar-fixed: 1030 !default;
282 | $zindex-modal: 1040 !default;
283 |
284 |
285 | //== Media queries breakpoints
286 | //
287 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes.
288 |
289 | // Extra small screen / phone
290 | //** Deprecated `$screen-xs` as of v3.0.1
291 | $screen-xs: 480px !default;
292 | //** Deprecated `$screen-xs-min` as of v3.2.0
293 | $screen-xs-min: $screen-xs !default;
294 | //** Deprecated `$screen-phone` as of v3.0.1
295 | $screen-phone: $screen-xs-min !default;
296 |
297 | // Small screen / tablet
298 | //** Deprecated `$screen-sm` as of v3.0.1
299 | $screen-sm: 768px !default;
300 | $screen-sm-min: $screen-sm !default;
301 | //** Deprecated `$screen-tablet` as of v3.0.1
302 | $screen-tablet: $screen-sm-min !default;
303 |
304 | // Medium screen / desktop
305 | //** Deprecated `$screen-md` as of v3.0.1
306 | $screen-md: 992px !default;
307 | $screen-md-min: $screen-md !default;
308 | //** Deprecated `$screen-desktop` as of v3.0.1
309 | $screen-desktop: $screen-md-min !default;
310 |
311 | // Large screen / wide desktop
312 | //** Deprecated `$screen-lg` as of v3.0.1
313 | $screen-lg: 1200px !default;
314 | $screen-lg-min: $screen-lg !default;
315 | //** Deprecated `$screen-lg-desktop` as of v3.0.1
316 | $screen-lg-desktop: $screen-lg-min !default;
317 |
318 | // So media queries don't overlap when required, provide a maximum
319 | $screen-xs-max: ($screen-sm-min - 1) !default;
320 | $screen-sm-max: ($screen-md-min - 1) !default;
321 | $screen-md-max: ($screen-lg-min - 1) !default;
322 |
323 |
324 | //== Grid system
325 | //
326 | //## Define your custom responsive grid.
327 |
328 | //** Number of columns in the grid.
329 | $grid-columns: 12 !default;
330 | //** Padding between columns. Gets divided in half for the left and right.
331 | $grid-gutter-width: 30px !default;
332 | // Navbar collapse
333 | //** Point at which the navbar becomes uncollapsed.
334 | $grid-float-breakpoint: $screen-sm-min !default;
335 | //** Point at which the navbar begins collapsing.
336 | $grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
337 |
338 |
339 | //== Container sizes
340 | //
341 | //## Define the maximum width of `.container` for different screen sizes.
342 |
343 | // Small screen / tablet
344 | $container-tablet: (720px + $grid-gutter-width) !default;
345 | //** For `$screen-sm-min` and up.
346 | $container-sm: $container-tablet !default;
347 |
348 | // Medium screen / desktop
349 | $container-desktop: (940px + $grid-gutter-width) !default;
350 | //** For `$screen-md-min` and up.
351 | $container-md: $container-desktop !default;
352 |
353 | // Large screen / wide desktop
354 | $container-large-desktop: (1140px + $grid-gutter-width) !default;
355 | //** For `$screen-lg-min` and up.
356 | $container-lg: $container-large-desktop !default;
357 |
358 |
359 | //== Navbar
360 | //
361 | //##
362 |
363 | // Basics of a navbar
364 | $navbar-height: 50px !default;
365 | $navbar-margin-bottom: $line-height-computed !default;
366 | $navbar-border-radius: $border-radius-base !default;
367 | $navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;
368 | $navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
369 | $navbar-collapse-max-height: 340px !default;
370 |
371 | $navbar-default-color: #777 !default;
372 | $navbar-default-bg: #f8f8f8 !default;
373 | $navbar-default-border: darken($navbar-default-bg, 6.5%) !default;
374 |
375 | // Navbar links
376 | $navbar-default-link-color: #777 !default;
377 | $navbar-default-link-hover-color: #333 !default;
378 | $navbar-default-link-hover-bg: transparent !default;
379 | $navbar-default-link-active-color: #555 !default;
380 | $navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default;
381 | $navbar-default-link-disabled-color: #ccc !default;
382 | $navbar-default-link-disabled-bg: transparent !default;
383 |
384 | // Navbar brand label
385 | $navbar-default-brand-color: $navbar-default-link-color !default;
386 | $navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;
387 | $navbar-default-brand-hover-bg: transparent !default;
388 |
389 | // Navbar toggle
390 | $navbar-default-toggle-hover-bg: #ddd !default;
391 | $navbar-default-toggle-icon-bar-bg: #888 !default;
392 | $navbar-default-toggle-border-color: #ddd !default;
393 |
394 |
395 | // Inverted navbar
396 | // Reset inverted navbar basics
397 | $navbar-inverse-color: lighten($gray-light, 15%) !default;
398 | $navbar-inverse-bg: #222 !default;
399 | $navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;
400 |
401 | // Inverted navbar links
402 | $navbar-inverse-link-color: lighten($gray-light, 15%) !default;
403 | $navbar-inverse-link-hover-color: #fff !default;
404 | $navbar-inverse-link-hover-bg: transparent !default;
405 | $navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;
406 | $navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default;
407 | $navbar-inverse-link-disabled-color: #444 !default;
408 | $navbar-inverse-link-disabled-bg: transparent !default;
409 |
410 | // Inverted navbar brand label
411 | $navbar-inverse-brand-color: $navbar-inverse-link-color !default;
412 | $navbar-inverse-brand-hover-color: #fff !default;
413 | $navbar-inverse-brand-hover-bg: transparent !default;
414 |
415 | // Inverted navbar toggle
416 | $navbar-inverse-toggle-hover-bg: #333 !default;
417 | $navbar-inverse-toggle-icon-bar-bg: #fff !default;
418 | $navbar-inverse-toggle-border-color: #333 !default;
419 |
420 |
421 | //== Navs
422 | //
423 | //##
424 |
425 | //=== Shared nav styles
426 | $nav-link-padding: 10px 15px !default;
427 | $nav-link-hover-bg: $gray-lighter !default;
428 |
429 | $nav-disabled-link-color: $gray-light !default;
430 | $nav-disabled-link-hover-color: $gray-light !default;
431 |
432 | //== Tabs
433 | $nav-tabs-border-color: #ddd !default;
434 |
435 | $nav-tabs-link-hover-border-color: $gray-lighter !default;
436 |
437 | $nav-tabs-active-link-hover-bg: $body-bg !default;
438 | $nav-tabs-active-link-hover-color: $gray !default;
439 | $nav-tabs-active-link-hover-border-color: #ddd !default;
440 |
441 | $nav-tabs-justified-link-border-color: #ddd !default;
442 | $nav-tabs-justified-active-link-border-color: $body-bg !default;
443 |
444 | //== Pills
445 | $nav-pills-border-radius: $border-radius-base !default;
446 | $nav-pills-active-link-hover-bg: $component-active-bg !default;
447 | $nav-pills-active-link-hover-color: $component-active-color !default;
448 |
449 |
450 | //== Pagination
451 | //
452 | //##
453 |
454 | $pagination-color: $link-color !default;
455 | $pagination-bg: #fff !default;
456 | $pagination-border: #ddd !default;
457 |
458 | $pagination-hover-color: $link-hover-color !default;
459 | $pagination-hover-bg: $gray-lighter !default;
460 | $pagination-hover-border: #ddd !default;
461 |
462 | $pagination-active-color: #fff !default;
463 | $pagination-active-bg: $brand-primary !default;
464 | $pagination-active-border: $brand-primary !default;
465 |
466 | $pagination-disabled-color: $gray-light !default;
467 | $pagination-disabled-bg: #fff !default;
468 | $pagination-disabled-border: #ddd !default;
469 |
470 |
471 | //== Pager
472 | //
473 | //##
474 |
475 | $pager-bg: $pagination-bg !default;
476 | $pager-border: $pagination-border !default;
477 | $pager-border-radius: 15px !default;
478 |
479 | $pager-hover-bg: $pagination-hover-bg !default;
480 |
481 | $pager-active-bg: $pagination-active-bg !default;
482 | $pager-active-color: $pagination-active-color !default;
483 |
484 | $pager-disabled-color: $pagination-disabled-color !default;
485 |
486 |
487 | //== Jumbotron
488 | //
489 | //##
490 |
491 | $jumbotron-padding: 30px !default;
492 | $jumbotron-color: inherit !default;
493 | $jumbotron-bg: $gray-lighter !default;
494 | $jumbotron-heading-color: inherit !default;
495 | $jumbotron-font-size: ceil(($font-size-base * 1.5)) !default;
496 |
497 |
498 | //== Form states and alerts
499 | //
500 | //## Define colors for form feedback states and, by default, alerts.
501 |
502 | $state-success-text: #3c763d !default;
503 | $state-success-bg: #dff0d8 !default;
504 | $state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default;
505 |
506 | $state-info-text: #31708f !default;
507 | $state-info-bg: #d9edf7 !default;
508 | $state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default;
509 |
510 | $state-warning-text: #8a6d3b !default;
511 | $state-warning-bg: #fcf8e3 !default;
512 | $state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default;
513 |
514 | $state-danger-text: #a94442 !default;
515 | $state-danger-bg: #f2dede !default;
516 | $state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default;
517 |
518 |
519 | //== Tooltips
520 | //
521 | //##
522 |
523 | //** Tooltip max width
524 | $tooltip-max-width: 200px !default;
525 | //** Tooltip text color
526 | $tooltip-color: #fff !default;
527 | //** Tooltip background color
528 | $tooltip-bg: #000 !default;
529 | $tooltip-opacity: .9 !default;
530 |
531 | //** Tooltip arrow width
532 | $tooltip-arrow-width: 5px !default;
533 | //** Tooltip arrow color
534 | $tooltip-arrow-color: $tooltip-bg !default;
535 |
536 |
537 | //== Popovers
538 | //
539 | //##
540 |
541 | //** Popover body background color
542 | $popover-bg: #fff !default;
543 | //** Popover maximum width
544 | $popover-max-width: 276px !default;
545 | //** Popover border color
546 | $popover-border-color: rgba(0,0,0,.2) !default;
547 | //** Popover fallback border color
548 | $popover-fallback-border-color: #ccc !default;
549 |
550 | //** Popover title background color
551 | $popover-title-bg: darken($popover-bg, 3%) !default;
552 |
553 | //** Popover arrow width
554 | $popover-arrow-width: 10px !default;
555 | //** Popover arrow color
556 | $popover-arrow-color: $popover-bg !default;
557 |
558 | //** Popover outer arrow width
559 | $popover-arrow-outer-width: ($popover-arrow-width + 1) !default;
560 | //** Popover outer arrow color
561 | $popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default;
562 | //** Popover outer arrow fallback color
563 | $popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default;
564 |
565 |
566 | //== Labels
567 | //
568 | //##
569 |
570 | //** Default label background color
571 | $label-default-bg: $gray-light !default;
572 | //** Primary label background color
573 | $label-primary-bg: $brand-primary !default;
574 | //** Success label background color
575 | $label-success-bg: $brand-success !default;
576 | //** Info label background color
577 | $label-info-bg: $brand-info !default;
578 | //** Warning label background color
579 | $label-warning-bg: $brand-warning !default;
580 | //** Danger label background color
581 | $label-danger-bg: $brand-danger !default;
582 |
583 | //** Default label text color
584 | $label-color: #fff !default;
585 | //** Default text color of a linked label
586 | $label-link-hover-color: #fff !default;
587 |
588 |
589 | //== Modals
590 | //
591 | //##
592 |
593 | //** Padding applied to the modal body
594 | $modal-inner-padding: 15px !default;
595 |
596 | //** Padding applied to the modal title
597 | $modal-title-padding: 15px !default;
598 | //** Modal title line-height
599 | $modal-title-line-height: $line-height-base !default;
600 |
601 | //** Background color of modal content area
602 | $modal-content-bg: #fff !default;
603 | //** Modal content border color
604 | $modal-content-border-color: rgba(0,0,0,.2) !default;
605 | //** Modal content border color **for IE8**
606 | $modal-content-fallback-border-color: #999 !default;
607 |
608 | //** Modal backdrop background color
609 | $modal-backdrop-bg: #000 !default;
610 | //** Modal backdrop opacity
611 | $modal-backdrop-opacity: .5 !default;
612 | //** Modal header border color
613 | $modal-header-border-color: #e5e5e5 !default;
614 | //** Modal footer border color
615 | $modal-footer-border-color: $modal-header-border-color !default;
616 |
617 | $modal-lg: 900px !default;
618 | $modal-md: 600px !default;
619 | $modal-sm: 300px !default;
620 |
621 |
622 | //== Alerts
623 | //
624 | //## Define alert colors, border radius, and padding.
625 |
626 | $alert-padding: 15px !default;
627 | $alert-border-radius: $border-radius-base !default;
628 | $alert-link-font-weight: bold !default;
629 |
630 | $alert-success-bg: $state-success-bg !default;
631 | $alert-success-text: $state-success-text !default;
632 | $alert-success-border: $state-success-border !default;
633 |
634 | $alert-info-bg: $state-info-bg !default;
635 | $alert-info-text: $state-info-text !default;
636 | $alert-info-border: $state-info-border !default;
637 |
638 | $alert-warning-bg: $state-warning-bg !default;
639 | $alert-warning-text: $state-warning-text !default;
640 | $alert-warning-border: $state-warning-border !default;
641 |
642 | $alert-danger-bg: $state-danger-bg !default;
643 | $alert-danger-text: $state-danger-text !default;
644 | $alert-danger-border: $state-danger-border !default;
645 |
646 |
647 | //== Progress bars
648 | //
649 | //##
650 |
651 | //** Background color of the whole progress component
652 | $progress-bg: #f5f5f5 !default;
653 | //** Progress bar text color
654 | $progress-bar-color: #fff !default;
655 | //** Variable for setting rounded corners on progress bar.
656 | $progress-border-radius: $border-radius-base !default;
657 |
658 | //** Default progress bar color
659 | $progress-bar-bg: $brand-primary !default;
660 | //** Success progress bar color
661 | $progress-bar-success-bg: $brand-success !default;
662 | //** Warning progress bar color
663 | $progress-bar-warning-bg: $brand-warning !default;
664 | //** Danger progress bar color
665 | $progress-bar-danger-bg: $brand-danger !default;
666 | //** Info progress bar color
667 | $progress-bar-info-bg: $brand-info !default;
668 |
669 |
670 | //== List group
671 | //
672 | //##
673 |
674 | //** Background color on `.list-group-item`
675 | $list-group-bg: #fff !default;
676 | //** `.list-group-item` border color
677 | $list-group-border: #ddd !default;
678 | //** List group border radius
679 | $list-group-border-radius: $border-radius-base !default;
680 |
681 | //** Background color of single list items on hover
682 | $list-group-hover-bg: #f5f5f5 !default;
683 | //** Text color of active list items
684 | $list-group-active-color: $component-active-color !default;
685 | //** Background color of active list items
686 | $list-group-active-bg: $component-active-bg !default;
687 | //** Border color of active list elements
688 | $list-group-active-border: $list-group-active-bg !default;
689 | //** Text color for content within active list items
690 | $list-group-active-text-color: lighten($list-group-active-bg, 40%) !default;
691 |
692 | //** Text color of disabled list items
693 | $list-group-disabled-color: $gray-light !default;
694 | //** Background color of disabled list items
695 | $list-group-disabled-bg: $gray-lighter !default;
696 | //** Text color for content within disabled list items
697 | $list-group-disabled-text-color: $list-group-disabled-color !default;
698 |
699 | $list-group-link-color: #555 !default;
700 | $list-group-link-hover-color: $list-group-link-color !default;
701 | $list-group-link-heading-color: #333 !default;
702 |
703 |
704 | //== Panels
705 | //
706 | //##
707 |
708 | $panel-bg: #fff !default;
709 | $panel-body-padding: 15px !default;
710 | $panel-heading-padding: 10px 15px !default;
711 | $panel-footer-padding: $panel-heading-padding !default;
712 | $panel-border-radius: $border-radius-base !default;
713 |
714 | //** Border color for elements within panels
715 | $panel-inner-border: #ddd !default;
716 | $panel-footer-bg: #f5f5f5 !default;
717 |
718 | $panel-default-text: $gray-dark !default;
719 | $panel-default-border: #ddd !default;
720 | $panel-default-heading-bg: #f5f5f5 !default;
721 |
722 | $panel-primary-text: #fff !default;
723 | $panel-primary-border: $brand-primary !default;
724 | $panel-primary-heading-bg: $brand-primary !default;
725 |
726 | $panel-success-text: $state-success-text !default;
727 | $panel-success-border: $state-success-border !default;
728 | $panel-success-heading-bg: $state-success-bg !default;
729 |
730 | $panel-info-text: $state-info-text !default;
731 | $panel-info-border: $state-info-border !default;
732 | $panel-info-heading-bg: $state-info-bg !default;
733 |
734 | $panel-warning-text: $state-warning-text !default;
735 | $panel-warning-border: $state-warning-border !default;
736 | $panel-warning-heading-bg: $state-warning-bg !default;
737 |
738 | $panel-danger-text: $state-danger-text !default;
739 | $panel-danger-border: $state-danger-border !default;
740 | $panel-danger-heading-bg: $state-danger-bg !default;
741 |
742 |
743 | //== Thumbnails
744 | //
745 | //##
746 |
747 | //** Padding around the thumbnail image
748 | $thumbnail-padding: 4px !default;
749 | //** Thumbnail background color
750 | $thumbnail-bg: $body-bg !default;
751 | //** Thumbnail border color
752 | $thumbnail-border: #ddd !default;
753 | //** Thumbnail border radius
754 | $thumbnail-border-radius: $border-radius-base !default;
755 |
756 | //** Custom text color for thumbnail captions
757 | $thumbnail-caption-color: $text-color !default;
758 | //** Padding around the thumbnail caption
759 | $thumbnail-caption-padding: 9px !default;
760 |
761 |
762 | //== Wells
763 | //
764 | //##
765 |
766 | $well-bg: #f5f5f5 !default;
767 | $well-border: darken($well-bg, 7%) !default;
768 |
769 |
770 | //== Badges
771 | //
772 | //##
773 |
774 | $badge-color: #fff !default;
775 | //** Linked badge text color on hover
776 | $badge-link-hover-color: #fff !default;
777 | $badge-bg: $gray-light !default;
778 |
779 | //** Badge text color in active nav link
780 | $badge-active-color: $link-color !default;
781 | //** Badge background color in active nav link
782 | $badge-active-bg: #fff !default;
783 |
784 | $badge-font-weight: bold !default;
785 | $badge-line-height: 1 !default;
786 | $badge-border-radius: 10px !default;
787 |
788 |
789 | //== Breadcrumbs
790 | //
791 | //##
792 |
793 | $breadcrumb-padding-vertical: 8px !default;
794 | $breadcrumb-padding-horizontal: 15px !default;
795 | //** Breadcrumb background color
796 | $breadcrumb-bg: #f5f5f5 !default;
797 | //** Breadcrumb text color
798 | $breadcrumb-color: #ccc !default;
799 | //** Text color of current page in the breadcrumb
800 | $breadcrumb-active-color: $gray-light !default;
801 | //** Textual separator for between breadcrumb elements
802 | $breadcrumb-separator: "/" !default;
803 |
804 |
805 | //== Carousel
806 | //
807 | //##
808 |
809 | $carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default;
810 |
811 | $carousel-control-color: #fff !default;
812 | $carousel-control-width: 15% !default;
813 | $carousel-control-opacity: .5 !default;
814 | $carousel-control-font-size: 20px !default;
815 |
816 | $carousel-indicator-active-bg: #fff !default;
817 | $carousel-indicator-border-color: #fff !default;
818 |
819 | $carousel-caption-color: #fff !default;
820 |
821 |
822 | //== Close
823 | //
824 | //##
825 |
826 | $close-font-weight: bold !default;
827 | $close-color: #000 !default;
828 | $close-text-shadow: 0 1px 0 #fff !default;
829 |
830 |
831 | //== Code
832 | //
833 | //##
834 |
835 | $code-color: #c7254e !default;
836 | $code-bg: #f9f2f4 !default;
837 |
838 | $kbd-color: #fff !default;
839 | $kbd-bg: #333 !default;
840 |
841 | $pre-bg: #f5f5f5 !default;
842 | $pre-color: $gray-dark !default;
843 | $pre-border-color: #ccc !default;
844 | $pre-scrollable-max-height: 340px !default;
845 |
846 |
847 | //== Type
848 | //
849 | //##
850 |
851 | //** Horizontal offset for forms and lists.
852 | $component-offset-horizontal: 180px !default;
853 | //** Text muted color
854 | $text-muted: $gray-light !default;
855 | //** Abbreviations and acronyms border color
856 | $abbr-border-color: $gray-light !default;
857 | //** Headings small color
858 | $headings-small-color: $gray-light !default;
859 | //** Blockquote small color
860 | $blockquote-small-color: $gray-light !default;
861 | //** Blockquote font size
862 | $blockquote-font-size: ($font-size-base * 1.25) !default;
863 | //** Blockquote border color
864 | $blockquote-border-color: $gray-lighter !default;
865 | //** Page header border color
866 | $page-header-border-color: $gray-lighter !default;
867 | //** Width of horizontal description list titles
868 | $dl-horizontal-offset: $component-offset-horizontal !default;
869 | //** Horizontal line color.
870 | $hr-border: $gray-lighter !default;
871 |
--------------------------------------------------------------------------------