ispmail-on-rails 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +61 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +41 -0
  8. data/Rakefile +6 -0
  9. data/app/assets/images/.keep +0 -0
  10. data/app/assets/javascripts/application.js +25 -0
  11. data/app/assets/javascripts/virtual_aliases.coffee +3 -0
  12. data/app/assets/javascripts/virtual_domains.coffee +3 -0
  13. data/app/assets/javascripts/virtual_users.coffee +3 -0
  14. data/app/assets/stylesheets/_settings.scss +566 -0
  15. data/app/assets/stylesheets/application.css +21 -0
  16. data/app/assets/stylesheets/clearance.scss +6 -0
  17. data/app/assets/stylesheets/foundation_and_overrides.scss +51 -0
  18. data/app/assets/stylesheets/virtual_aliases.scss +3 -0
  19. data/app/assets/stylesheets/virtual_domains.scss +3 -0
  20. data/app/assets/stylesheets/virtual_users.scss +3 -0
  21. data/app/controllers/api/base_controller.rb +90 -0
  22. data/app/controllers/api/virtual_aliases_controller.rb +12 -0
  23. data/app/controllers/api/virtual_domains_controller.rb +15 -0
  24. data/app/controllers/api/virtual_users_controller.rb +15 -0
  25. data/app/controllers/application_controller.rb +9 -0
  26. data/app/controllers/concerns/.keep +0 -0
  27. data/app/controllers/virtual_aliases_controller.rb +6 -0
  28. data/app/controllers/virtual_domains_controller.rb +6 -0
  29. data/app/controllers/virtual_users_controller.rb +6 -0
  30. data/app/helpers/application_helper.rb +33 -0
  31. data/app/helpers/virtual_aliases_helper.rb +2 -0
  32. data/app/helpers/virtual_domains_helper.rb +2 -0
  33. data/app/helpers/virtual_users_helper.rb +2 -0
  34. data/app/mailers/.keep +0 -0
  35. data/app/models/.keep +0 -0
  36. data/app/models/concerns/.keep +0 -0
  37. data/app/models/user.rb +3 -0
  38. data/app/models/virtual_alias.rb +16 -0
  39. data/app/models/virtual_domain.rb +22 -0
  40. data/app/models/virtual_user.rb +35 -0
  41. data/app/validators/domain_name_validator.rb +21 -0
  42. data/app/validators/password_validator.rb +10 -0
  43. data/app/views/api/virtual_aliases/index.json.jbuilder +6 -0
  44. data/app/views/api/virtual_aliases/show.json.jbuilder +6 -0
  45. data/app/views/api/virtual_domains/index.json.jbuilder +4 -0
  46. data/app/views/api/virtual_domains/show.json.jbuilder +4 -0
  47. data/app/views/api/virtual_users/index.json.jbuilder +5 -0
  48. data/app/views/api/virtual_users/show.json.jbuilder +5 -0
  49. data/app/views/application/_heading.html.erb +12 -0
  50. data/app/views/clearance_mailer/change_password.html.erb +8 -0
  51. data/app/views/clearance_mailer/change_password.text.erb +5 -0
  52. data/app/views/layouts/application.html.erb +41 -0
  53. data/app/views/passwords/create.html.erb +3 -0
  54. data/app/views/passwords/edit.html.erb +18 -0
  55. data/app/views/passwords/new.html.erb +16 -0
  56. data/app/views/sessions/_form.html.erb +22 -0
  57. data/app/views/sessions/new.html.erb +6 -0
  58. data/app/views/users/_form.html.erb +9 -0
  59. data/app/views/users/new.html.erb +15 -0
  60. data/app/views/virtual_aliases/index.html.erb +58 -0
  61. data/app/views/virtual_domains/index.html.erb +56 -0
  62. data/app/views/virtual_users/_password_form.html.erb +23 -0
  63. data/app/views/virtual_users/index.html.erb +57 -0
  64. data/bin/bundle +3 -0
  65. data/bin/console +14 -0
  66. data/bin/rails +9 -0
  67. data/bin/rake +9 -0
  68. data/bin/setup +29 -0
  69. data/bin/spring +15 -0
  70. data/config.ru +4 -0
  71. data/config/application.rb +30 -0
  72. data/config/boot.rb +3 -0
  73. data/config/database.yml +31 -0
  74. data/config/environment.rb +5 -0
  75. data/config/environments/development.rb +42 -0
  76. data/config/environments/production.rb +82 -0
  77. data/config/environments/test.rb +43 -0
  78. data/config/initializers/assets.rb +11 -0
  79. data/config/initializers/backtrace_silencers.rb +7 -0
  80. data/config/initializers/clearance.rb +4 -0
  81. data/config/initializers/cookies_serializer.rb +3 -0
  82. data/config/initializers/filter_parameter_logging.rb +4 -0
  83. data/config/initializers/inflections.rb +16 -0
  84. data/config/initializers/mime_types.rb +4 -0
  85. data/config/initializers/session_store.rb +3 -0
  86. data/config/initializers/wrap_parameters.rb +14 -0
  87. data/config/locales/clearance.en.yml +59 -0
  88. data/config/locales/en.yml +23 -0
  89. data/config/routes.rb +74 -0
  90. data/config/secrets.yml +22 -0
  91. data/db/development.sqlite3 +0 -0
  92. data/db/migrate/20160321130230_create_virtual_domains.rb +13 -0
  93. data/db/migrate/20160321130250_create_virtual_users.rb +16 -0
  94. data/db/migrate/20160321130353_create_virtual_aliases.rb +15 -0
  95. data/db/migrate/20160321133546_create_users.rb +14 -0
  96. data/db/schema.rb +59 -0
  97. data/db/seeds.rb +8 -0
  98. data/ispmail-on-rails.gemspec +25 -0
  99. data/lib/assets/.keep +0 -0
  100. data/lib/ispmail/on/rails.rb +9 -0
  101. data/lib/ispmail/on/rails/version.rb +7 -0
  102. data/lib/tasks/.keep +0 -0
  103. data/log/.keep +0 -0
  104. data/public/404.html +67 -0
  105. data/public/422.html +67 -0
  106. data/public/500.html +66 -0
  107. data/public/favicon.ico +0 -0
  108. data/public/robots.txt +5 -0
  109. data/tmp/.keep +0 -0
  110. data/vendor/assets/javascripts/.keep +0 -0
  111. data/vendor/assets/stylesheets/.keep +0 -0
  112. metadata +198 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 741b78260a616af74126e6df7bfa8317560b1b8f
4
+ data.tar.gz: 3fa4a84bcc9c11553ab77872f83aaaf75c405acf
5
+ SHA512:
6
+ metadata.gz: f0134b0f185551f4cd0938178f437709c229e00f8a86b1fe04f7e2a8cc1dfc138f1fd00dc9de89fbd4cfe19c1ce39ce11fbacee2559056fc52677e859e61fe60
7
+ data.tar.gz: 578a126cf4421566b59dfe6f61e0aba8487b93cb0287b688c883565b4ede0b1e46b90d518f058cd6601fcf901b72de1b58fa24ab9988bcc0dd3e09d95c94d3fd
@@ -0,0 +1,19 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ /.bundle
3
+ /.yardoc
4
+ /Gemfile.lock
5
+ /_yardoc/
6
+ /coverage/
7
+ /doc/
8
+ /pkg/
9
+ /spec/reports/
10
+
11
+ # Ignore all logfiles and tempfiles.
12
+ /log/*
13
+ !/log/.keep
14
+ /tmp/*
15
+ !/tmp/.keep
16
+
17
+ # Ignore .env environment variables
18
+ /.env
19
+ /.byebug_history
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.5
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,61 @@
1
+ source 'https://rubygems.org'
2
+
3
+
4
+ # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
5
+ gem 'rails', '4.2.6'
6
+ # Use mysql as the database for Active Record
7
+ gem 'mysql2'
8
+ # Use SCSS for stylesheets
9
+ gem 'sass-rails', '~> 5.0'
10
+ # Use Uglifier as compressor for JavaScript assets
11
+ gem 'uglifier', '>= 1.3.0'
12
+ # Use CoffeeScript for .coffee assets and views
13
+ gem 'coffee-rails', '~> 4.1.0'
14
+ # See https://github.com/rails/execjs#readme for more supported runtimes
15
+ gem 'therubyracer', platforms: :ruby
16
+
17
+ # Use jquery as the JavaScript library
18
+ gem 'jquery-rails'
19
+ # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
20
+ gem 'turbolinks'
21
+ # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
22
+ gem 'jbuilder', '~> 2.0'
23
+ # bundle exec rake doc:rails generates the API under doc/api.
24
+ gem 'sdoc', '~> 0.4.0', group: :doc
25
+
26
+ # Use ActiveModel has_secure_password
27
+ # gem 'bcrypt', '~> 3.1.7'
28
+
29
+ # Use Unicorn as the app server
30
+ # gem 'unicorn'
31
+
32
+ # Use Capistrano for deployment
33
+ # gem 'capistrano-rails', group: :development
34
+
35
+ group :development, :test do
36
+ # Call 'byebug' anywhere in the code to stop execution and get a debugger console
37
+ gem 'byebug'
38
+ end
39
+
40
+ group :development do
41
+ # Access an IRB console on exception pages or by using <%= console %> in views
42
+ gem 'web-console', '~> 2.0'
43
+
44
+ # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
45
+ gem 'spring'
46
+ end
47
+
48
+ # Authentication
49
+ gem 'clearance'
50
+
51
+ # Use environment variables for databases
52
+ gem 'dotenv-rails'
53
+
54
+ # Use ZURB Foundation CSS framework
55
+ gem 'foundation-rails'
56
+
57
+ # Use UnixCrypt to set VirtualUser passwords
58
+ gem 'unix-crypt'
59
+
60
+ # Look up TLD from IANA
61
+ gem 'iana-data', require: 'iana'
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Runar Ingebrigtsen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,41 @@
1
+ # Ispmail::On::Rails
2
+
3
+ This is a Ruby on Rails application to manage ISPMAIL:
4
+ https://workaround.org/ispmail/jessie
5
+ https://workaround.org/ispmail/jessie/ansible
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'ispmail-on-rails'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install ispmail-on-rails
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ringe/ispmail-on-rails.
36
+
37
+
38
+ ## License
39
+
40
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
41
+
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks
File without changes
@@ -0,0 +1,25 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require foundation
16
+ //= require turbolinks
17
+ //= require_tree .
18
+
19
+ $(document).on('page:change',function(){
20
+ $(document).foundation();
21
+
22
+ if ($('#messages')[0].attributes["data-show-flash"].value == "true") {
23
+ $('#messages').foundation('open');
24
+ }
25
+ });
@@ -0,0 +1,3 @@
1
+ # Place all the behaviors and hooks related to the matching controller here.
2
+ # All this logic will automatically be available in application.js.
3
+ # You can use CoffeeScript in this file: http://coffeescript.org/
@@ -0,0 +1,3 @@
1
+ # Place all the behaviors and hooks related to the matching controller here.
2
+ # All this logic will automatically be available in application.js.
3
+ # You can use CoffeeScript in this file: http://coffeescript.org/
@@ -0,0 +1,3 @@
1
+ # Place all the behaviors and hooks related to the matching controller here.
2
+ # All this logic will automatically be available in application.js.
3
+ # You can use CoffeeScript in this file: http://coffeescript.org/
@@ -0,0 +1,566 @@
1
+ // Foundation for Sites Settings
2
+ // -----------------------------
3
+ //
4
+ // Table of Contents:
5
+ //
6
+ // 1. Global
7
+ // 2. Breakpoints
8
+ // 3. The Grid
9
+ // 4. Base Typography
10
+ // 5. Typography Helpers
11
+ // 6. Abide
12
+ // 7. Accordion
13
+ // 8. Accordion Menu
14
+ // 9. Badge
15
+ // 10. Breadcrumbs
16
+ // 11. Button
17
+ // 12. Button Group
18
+ // 13. Callout
19
+ // 14. Close Button
20
+ // 15. Drilldown
21
+ // 16. Dropdown
22
+ // 17. Dropdown Menu
23
+ // 18. Flex Video
24
+ // 19. Forms
25
+ // 20. Label
26
+ // 21. Media Object
27
+ // 22. Menu
28
+ // 23. Meter
29
+ // 24. Off-canvas
30
+ // 25. Orbit
31
+ // 26. Pagination
32
+ // 27. Progress Bar
33
+ // 28. Reveal
34
+ // 29. Slider
35
+ // 30. Switch
36
+ // 31. Table
37
+ // 32. Tabs
38
+ // 33. Thumbnail
39
+ // 34. Title Bar
40
+ // 35. Tooltip
41
+ // 36. Top Bar
42
+
43
+ @import 'util/util';
44
+
45
+ // 1. Global
46
+ // ---------
47
+
48
+ $global-font-size: 100%;
49
+ $global-width: rem-calc(1200);
50
+ $global-lineheight: 1.5;
51
+ $foundation-palette: (
52
+ primary: #2199e8,
53
+ secondary: #777,
54
+ success: #3adb76,
55
+ warning: #ffae00,
56
+ alert: #ec5840,
57
+ );
58
+ $light-gray: #e6e6e6;
59
+ $medium-gray: #cacaca;
60
+ $dark-gray: #8a8a8a;
61
+ $black: #0a0a0a;
62
+ $white: #fefefe;
63
+ $body-background: $white;
64
+ $body-font-color: $black;
65
+ $body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;
66
+ $body-antialiased: true;
67
+ $global-margin: 1rem;
68
+ $global-padding: 1rem;
69
+ $global-weight-normal: normal;
70
+ $global-weight-bold: bold;
71
+ $global-radius: 0;
72
+ $global-text-direction: ltr;
73
+ $global-flexbox: false;
74
+ $print-transparent-backgrounds: true;
75
+
76
+ @include add-foundation-colors;
77
+
78
+ // 2. Breakpoints
79
+ // --------------
80
+
81
+ $breakpoints: (
82
+ small: 0,
83
+ medium: 640px,
84
+ large: 1024px,
85
+ xlarge: 1200px,
86
+ xxlarge: 1440px,
87
+ );
88
+ $breakpoint-classes: (small medium large);
89
+
90
+ // 3. The Grid
91
+ // -----------
92
+
93
+ $grid-row-width: $global-width;
94
+ $grid-column-count: 12;
95
+ $grid-column-gutter: (
96
+ small: 20px,
97
+ medium: 30px,
98
+ );
99
+ $grid-column-align-edge: true;
100
+ $block-grid-max: 8;
101
+
102
+ // 4. Base Typography
103
+ // ------------------
104
+
105
+ $header-font-family: $body-font-family;
106
+ $header-font-weight: $global-weight-normal;
107
+ $header-font-style: normal;
108
+ $font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace;
109
+ $header-sizes: (
110
+ small: (
111
+ 'h1': 24,
112
+ 'h2': 20,
113
+ 'h3': 19,
114
+ 'h4': 18,
115
+ 'h5': 17,
116
+ 'h6': 16,
117
+ ),
118
+ medium: (
119
+ 'h1': 48,
120
+ 'h2': 40,
121
+ 'h3': 31,
122
+ 'h4': 25,
123
+ 'h5': 20,
124
+ 'h6': 16,
125
+ ),
126
+ );
127
+ $header-color: inherit;
128
+ $header-lineheight: 1.4;
129
+ $header-margin-bottom: 0.5rem;
130
+ $header-text-rendering: optimizeLegibility;
131
+ $small-font-size: 80%;
132
+ $header-small-font-color: $medium-gray;
133
+ $paragraph-lineheight: 1.6;
134
+ $paragraph-margin-bottom: 1rem;
135
+ $paragraph-text-rendering: optimizeLegibility;
136
+ $code-color: $black;
137
+ $code-font-family: $font-family-monospace;
138
+ $code-font-weight: $global-weight-normal;
139
+ $code-background: $light-gray;
140
+ $code-border: 1px solid $medium-gray;
141
+ $code-padding: rem-calc(2 5 1);
142
+ $anchor-color: $primary-color;
143
+ $anchor-color-hover: scale-color($anchor-color, $lightness: -14%);
144
+ $anchor-text-decoration: none;
145
+ $anchor-text-decoration-hover: none;
146
+ $hr-width: $global-width;
147
+ $hr-border: 1px solid $medium-gray;
148
+ $hr-margin: rem-calc(20) auto;
149
+ $list-lineheight: $paragraph-lineheight;
150
+ $list-margin-bottom: $paragraph-margin-bottom;
151
+ $list-style-type: disc;
152
+ $list-style-position: outside;
153
+ $list-side-margin: 1.25rem;
154
+ $list-nested-side-margin: 1.25rem;
155
+ $defnlist-margin-bottom: 1rem;
156
+ $defnlist-term-weight: $global-weight-bold;
157
+ $defnlist-term-margin-bottom: 0.3rem;
158
+ $blockquote-color: $dark-gray;
159
+ $blockquote-padding: rem-calc(9 20 0 19);
160
+ $blockquote-border: 1px solid $medium-gray;
161
+ $cite-font-size: rem-calc(13);
162
+ $cite-color: $dark-gray;
163
+ $keystroke-font: $font-family-monospace;
164
+ $keystroke-color: $black;
165
+ $keystroke-background: $light-gray;
166
+ $keystroke-padding: rem-calc(2 4 0);
167
+ $keystroke-radius: $global-radius;
168
+ $abbr-underline: 1px dotted $black;
169
+
170
+ // 5. Typography Helpers
171
+ // ---------------------
172
+
173
+ $lead-font-size: $global-font-size * 1.25;
174
+ $lead-lineheight: 1.6;
175
+ $subheader-lineheight: 1.4;
176
+ $subheader-color: $dark-gray;
177
+ $subheader-font-weight: $global-weight-normal;
178
+ $subheader-margin-top: 0.2rem;
179
+ $subheader-margin-bottom: 0.5rem;
180
+ $stat-font-size: 2.5rem;
181
+
182
+ // 6. Abide
183
+ // --------
184
+
185
+ $abide-inputs: true;
186
+ $abide-labels: true;
187
+ $input-background-invalid: map-get($foundation-palette, alert);
188
+ $form-label-color-invalid: map-get($foundation-palette, alert);
189
+ $input-error-color: map-get($foundation-palette, alert);
190
+ $input-error-font-size: rem-calc(12);
191
+ $input-error-font-weight: $global-weight-bold;
192
+
193
+ // 7. Accordion
194
+ // ------------
195
+
196
+ $accordion-background: $white;
197
+ $accordion-plusminus: true;
198
+ $accordion-item-color: foreground($accordion-background, $primary-color);
199
+ $accordion-item-background-hover: $light-gray;
200
+ $accordion-item-padding: 1.25rem 1rem;
201
+ $accordion-content-background: $white;
202
+ $accordion-content-border: 1px solid $light-gray;
203
+ $accordion-content-color: foreground($accordion-background, $primary-color);
204
+ $accordion-content-padding: 1rem;
205
+
206
+ // 8. Accordion Menu
207
+ // -----------------
208
+
209
+ $accordionmenu-arrows: true;
210
+ $accordionmenu-arrow-color: $primary-color;
211
+
212
+ // 9. Badge
213
+ // --------
214
+
215
+ $badge-background: $primary-color;
216
+ $badge-color: foreground($badge-background);
217
+ $badge-padding: 0.3em;
218
+ $badge-minwidth: 2.1em;
219
+ $badge-font-size: 0.6rem;
220
+
221
+ // 10. Breadcrumbs
222
+ // ---------------
223
+
224
+ $breadcrumbs-margin: 0 0 $global-margin 0;
225
+ $breadcrumbs-item-font-size: rem-calc(11);
226
+ $breadcrumbs-item-color: $primary-color;
227
+ $breadcrumbs-item-color-current: $black;
228
+ $breadcrumbs-item-color-disabled: $medium-gray;
229
+ $breadcrumbs-item-margin: 0.75rem;
230
+ $breadcrumbs-item-uppercase: true;
231
+ $breadcrumbs-item-slash: true;
232
+
233
+ // 11. Button
234
+ // ----------
235
+
236
+ $button-padding: 0.85em 1em;
237
+ $button-margin: 0 0 $global-margin 0;
238
+ $button-fill: solid;
239
+ $button-background: $primary-color;
240
+ $button-background-hover: scale-color($button-background, $lightness: -15%);
241
+ $button-color: $white;
242
+ $button-color-alt: $black;
243
+ $button-radius: $global-radius;
244
+ $button-sizes: (
245
+ tiny: 0.6rem,
246
+ small: 0.75rem,
247
+ default: 0.9rem,
248
+ large: 1.25rem,
249
+ );
250
+ $button-opacity-disabled: 0.25;
251
+
252
+ // 12. Button Group
253
+ // ----------------
254
+
255
+ $buttongroup-margin: 1rem;
256
+ $buttongroup-spacing: 1px;
257
+ $buttongroup-child-selector: '.button';
258
+ $buttongroup-expand-max: 6;
259
+
260
+ // 13. Callout
261
+ // -----------
262
+
263
+ $callout-background: $white;
264
+ $callout-background-fade: 85%;
265
+ $callout-border: 1px solid rgba($black, 0.25);
266
+ $callout-margin: 0 0 1rem 0;
267
+ $callout-padding: 1rem;
268
+ $callout-font-color: $body-font-color;
269
+ $callout-font-color-alt: $body-background;
270
+ $callout-radius: $global-radius;
271
+ $callout-link-tint: 30%;
272
+
273
+ // 14. Close Button
274
+ // ----------------
275
+
276
+ $closebutton-position: right top;
277
+ $closebutton-offset-horizontal: 1rem;
278
+ $closebutton-offset-vertical: 0.5rem;
279
+ $closebutton-size: 2em;
280
+ $closebutton-lineheight: 1;
281
+ $closebutton-color: $dark-gray;
282
+ $closebutton-color-hover: $black;
283
+
284
+ // 15. Drilldown
285
+ // -------------
286
+
287
+ $drilldown-transition: transform 0.15s linear;
288
+ $drilldown-arrows: true;
289
+ $drilldown-arrow-color: $primary-color;
290
+ $drilldown-background: $white;
291
+
292
+ // 16. Dropdown
293
+ // ------------
294
+
295
+ $dropdown-padding: 1rem;
296
+ $dropdown-border: 1px solid $medium-gray;
297
+ $dropdown-font-size: 1rem;
298
+ $dropdown-width: 300px;
299
+ $dropdown-radius: $global-radius;
300
+ $dropdown-sizes: (
301
+ tiny: 100px,
302
+ small: 200px,
303
+ large: 400px,
304
+ );
305
+
306
+ // 17. Dropdown Menu
307
+ // -----------------
308
+
309
+ $dropdownmenu-arrows: true;
310
+ $dropdownmenu-arrow-color: $anchor-color;
311
+ $dropdownmenu-min-width: 200px;
312
+ $dropdownmenu-background: $white;
313
+ $dropdownmenu-border: 1px solid $medium-gray;
314
+
315
+ // 18. Flex Video
316
+ // --------------
317
+
318
+ $flexvideo-margin-bottom: rem-calc(16);
319
+ $flexvideo-ratio: 4 by 3;
320
+ $flexvideo-ratio-widescreen: 16 by 9;
321
+
322
+ // 19. Forms
323
+ // ---------
324
+
325
+ $fieldset-border: 1px solid $medium-gray;
326
+ $fieldset-padding: rem-calc(20);
327
+ $fieldset-margin: rem-calc(18 0);
328
+ $legend-padding: rem-calc(0 3);
329
+ $form-spacing: rem-calc(16);
330
+ $helptext-color: $black;
331
+ $helptext-font-size: rem-calc(13);
332
+ $helptext-font-style: italic;
333
+ $input-prefix-color: $black;
334
+ $input-prefix-background: $light-gray;
335
+ $input-prefix-border: 1px solid $medium-gray;
336
+ $input-prefix-padding: 1rem;
337
+ $form-label-color: $black;
338
+ $form-label-font-size: rem-calc(14);
339
+ $form-label-font-weight: $global-weight-normal;
340
+ $form-label-line-height: 1.8;
341
+ $select-background: $white;
342
+ $select-triangle-color: $dark-gray;
343
+ $select-radius: $global-radius;
344
+ $input-color: $black;
345
+ $input-placeholder-color: $medium-gray;
346
+ $input-font-family: inherit;
347
+ $input-font-size: rem-calc(16);
348
+ $input-background: $white;
349
+ $input-background-focus: $white;
350
+ $input-background-disabled: $light-gray;
351
+ $input-border: 1px solid $medium-gray;
352
+ $input-border-focus: 1px solid $dark-gray;
353
+ $input-shadow: inset 0 1px 2px rgba($black, 0.1);
354
+ $input-shadow-focus: 0 0 5px $medium-gray;
355
+ $input-cursor-disabled: default;
356
+ $input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
357
+ $input-number-spinners: true;
358
+ $input-radius: $global-radius;
359
+
360
+ // 20. Label
361
+ // ---------
362
+
363
+ $label-background: $primary-color;
364
+ $label-color: foreground($label-background);
365
+ $label-font-size: 0.8rem;
366
+ $label-padding: 0.33333rem 0.5rem;
367
+ $label-radius: $global-radius;
368
+
369
+ // 21. Media Object
370
+ // ----------------
371
+
372
+ $mediaobject-margin-bottom: $global-margin;
373
+ $mediaobject-section-padding: $global-padding;
374
+ $mediaobject-image-width-stacked: 100%;
375
+
376
+ // 22. Menu
377
+ // --------
378
+
379
+ $menu-margin: 0;
380
+ $menu-margin-nested: 1rem;
381
+ $menu-item-padding: 0.7rem 1rem;
382
+ $menu-item-color-active: $white;
383
+ $menu-item-background-active: map-get($foundation-palette, primary);
384
+ $menu-icon-spacing: 0.25rem;
385
+
386
+ // 23. Meter
387
+ // ---------
388
+
389
+ $meter-height: 1rem;
390
+ $meter-radius: $global-radius;
391
+ $meter-background: $medium-gray;
392
+ $meter-fill-good: $success-color;
393
+ $meter-fill-medium: $warning-color;
394
+ $meter-fill-bad: $alert-color;
395
+
396
+ // 24. Off-canvas
397
+ // --------------
398
+
399
+ $offcanvas-size: 250px;
400
+ $offcanvas-background: $light-gray;
401
+ $offcanvas-zindex: -1;
402
+ $offcanvas-transition-length: 0.5s;
403
+ $offcanvas-transition-timing: ease;
404
+ $offcanvas-fixed-reveal: true;
405
+ $offcanvas-exit-background: rgba($white, 0.25);
406
+ $maincontent-class: 'off-canvas-content';
407
+ $maincontent-shadow: 0 0 10px rgba($black, 0.5);
408
+
409
+ // 25. Orbit
410
+ // ---------
411
+
412
+ $orbit-bullet-background: $medium-gray;
413
+ $orbit-bullet-background-active: $dark-gray;
414
+ $orbit-bullet-diameter: 1.2rem;
415
+ $orbit-bullet-margin: 0.1rem;
416
+ $orbit-bullet-margin-top: 0.8rem;
417
+ $orbit-bullet-margin-bottom: 0.8rem;
418
+ $orbit-caption-background: rgba($black, 0.5);
419
+ $orbit-caption-padding: 1rem;
420
+ $orbit-control-background-hover: rgba($black, 0.5);
421
+ $orbit-control-padding: 1rem;
422
+ $orbit-control-zindex: 10;
423
+
424
+ // 26. Pagination
425
+ // --------------
426
+
427
+ $pagination-font-size: rem-calc(14);
428
+ $pagination-margin-bottom: $global-margin;
429
+ $pagination-item-color: $black;
430
+ $pagination-item-padding: rem-calc(3 10);
431
+ $pagination-item-spacing: rem-calc(1);
432
+ $pagination-radius: $global-radius;
433
+ $pagination-item-background-hover: $light-gray;
434
+ $pagination-item-background-current: $primary-color;
435
+ $pagination-item-color-current: foreground($pagination-item-background-current);
436
+ $pagination-item-color-disabled: $medium-gray;
437
+ $pagination-ellipsis-color: $black;
438
+ $pagination-mobile-items: false;
439
+ $pagination-arrows: true;
440
+
441
+ // 27. Progress Bar
442
+ // ----------------
443
+
444
+ $progress-height: 1rem;
445
+ $progress-background: $medium-gray;
446
+ $progress-margin-bottom: $global-margin;
447
+ $progress-meter-background: $primary-color;
448
+ $progress-radius: $global-radius;
449
+
450
+ // 28. Reveal
451
+ // ----------
452
+
453
+ $reveal-background: $white;
454
+ $reveal-width: 600px;
455
+ $reveal-max-width: $global-width;
456
+ $reveal-padding: $global-padding;
457
+ $reveal-border: 1px solid $medium-gray;
458
+ $reveal-radius: $global-radius;
459
+ $reveal-zindex: 1005;
460
+ $reveal-overlay-background: rgba($black, 0.45);
461
+
462
+ // 29. Slider
463
+ // ----------
464
+
465
+ $slider-width-vertical: 0.5rem;
466
+ $slider-transition: all 0.2s ease-in-out;
467
+ $slider-height: 0.5rem;
468
+ $slider-background: $light-gray;
469
+ $slider-fill-background: $medium-gray;
470
+ $slider-handle-height: 1.4rem;
471
+ $slider-handle-width: 1.4rem;
472
+ $slider-handle-background: $primary-color;
473
+ $slider-opacity-disabled: 0.25;
474
+ $slider-radius: $global-radius;
475
+
476
+ // 30. Switch
477
+ // ----------
478
+
479
+ $switch-background: $medium-gray;
480
+ $switch-background-active: $primary-color;
481
+ $switch-height: 2rem;
482
+ $switch-height-tiny: 1.5rem;
483
+ $switch-height-small: 1.75rem;
484
+ $switch-height-large: 2.5rem;
485
+ $switch-radius: $global-radius;
486
+ $switch-margin: $global-margin;
487
+ $switch-paddle-background: $white;
488
+ $switch-paddle-offset: 0.25rem;
489
+ $switch-paddle-radius: $global-radius;
490
+ $switch-paddle-transition: all 0.25s ease-out;
491
+
492
+ // 31. Table
493
+ // ---------
494
+
495
+ $table-background: $white;
496
+ $table-color-scale: 5%;
497
+ $table-border: 1px solid smart-scale($table-background, $table-color-scale);
498
+ $table-padding: rem-calc(8 10 10);
499
+ $table-hover-scale: 2%;
500
+ $table-row-hover: darken($table-background, $table-hover-scale);
501
+ $table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale);
502
+ $table-striped-background: smart-scale($table-background, $table-color-scale);
503
+ $table-stripe: even;
504
+ $table-head-background: smart-scale($table-background, $table-color-scale / 2);
505
+ $table-foot-background: smart-scale($table-background, $table-color-scale);
506
+ $table-head-font-color: $body-font-color;
507
+ $show-header-for-stacked: false;
508
+
509
+ // 32. Tabs
510
+ // --------
511
+
512
+ $tab-margin: 0;
513
+ $tab-background: $white;
514
+ $tab-background-active: $light-gray;
515
+ $tab-item-font-size: rem-calc(12);
516
+ $tab-item-background-hover: $white;
517
+ $tab-item-padding: 1.25rem 1.5rem;
518
+ $tab-expand-max: 6;
519
+ $tab-content-background: $white;
520
+ $tab-content-border: $light-gray;
521
+ $tab-content-color: foreground($tab-background, $primary-color);
522
+ $tab-content-padding: 1rem;
523
+
524
+ // 33. Thumbnail
525
+ // -------------
526
+
527
+ $thumbnail-border: solid 4px $white;
528
+ $thumbnail-margin-bottom: $global-margin;
529
+ $thumbnail-shadow: 0 0 0 1px rgba($black, 0.2);
530
+ $thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5);
531
+ $thumbnail-transition: box-shadow 200ms ease-out;
532
+ $thumbnail-radius: $global-radius;
533
+
534
+ // 34. Title Bar
535
+ // -------------
536
+
537
+ $titlebar-background: $black;
538
+ $titlebar-color: $white;
539
+ $titlebar-padding: 0.5rem;
540
+ $titlebar-text-font-weight: bold;
541
+ $titlebar-icon-color: $white;
542
+ $titlebar-icon-color-hover: $medium-gray;
543
+ $titlebar-icon-spacing: 0.25rem;
544
+
545
+ // 35. Tooltip
546
+ // -----------
547
+
548
+ $has-tip-font-weight: $global-weight-bold;
549
+ $has-tip-border-bottom: dotted 1px $dark-gray;
550
+ $tooltip-background-color: $black;
551
+ $tooltip-color: $white;
552
+ $tooltip-padding: 0.75rem;
553
+ $tooltip-font-size: $small-font-size;
554
+ $tooltip-pip-width: 0.75rem;
555
+ $tooltip-pip-height: $tooltip-pip-width * 0.866;
556
+ $tooltip-radius: $global-radius;
557
+
558
+ // 36. Top Bar
559
+ // -----------
560
+
561
+ $topbar-padding: 0.5rem;
562
+ $topbar-background: $light-gray;
563
+ $topbar-submenu-background: $topbar-background;
564
+ $topbar-title-spacing: 1rem;
565
+ $topbar-input-width: 200px;
566
+ $topbar-unstack-breakpoint: medium;