memcached-manager 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/.rspec +2 -0
  2. data/.travis.yml +19 -0
  3. data/CONTRIBUTING.md +28 -0
  4. data/Gemfile +26 -0
  5. data/Gemfile.lock +143 -0
  6. data/README.rdoc +15 -1
  7. data/Rakefile +60 -0
  8. data/VERSION +1 -0
  9. data/config.ru +2 -6
  10. data/features/api/create_memcached_key.feature +6 -0
  11. data/features/api/delete_memcached_key.feature +6 -0
  12. data/features/api/list_memcached_keys.feature +6 -0
  13. data/features/api/set_memcached_info.feature +5 -0
  14. data/features/api/show_memcached_key.feature +10 -0
  15. data/features/api/show_memcached_stats.feature +5 -0
  16. data/features/api/update_memcached_key.feature +7 -0
  17. data/features/step_definitions/api/create_memcached_key.rb +21 -0
  18. data/features/step_definitions/api/delete_memcached_key.rb +7 -0
  19. data/features/step_definitions/api/list_memcached_keys.rb +16 -0
  20. data/features/step_definitions/api/show_memcached_key.rb +18 -0
  21. data/features/step_definitions/api/show_memcached_stats.rb +3 -0
  22. data/features/step_definitions/api/update_memcached_key.rb +18 -0
  23. data/features/step_definitions/set_memcached_info.rb +25 -0
  24. data/features/step_definitions/webapp/create_memcached_key.rb +10 -0
  25. data/features/step_definitions/webapp/delete_memcached_key.rb +16 -0
  26. data/features/step_definitions/webapp/edit_memcached_key.rb +3 -0
  27. data/features/step_definitions/webapp/list_memcached_keys.rb +4 -0
  28. data/features/step_definitions/webapp/show_memcached_key.rb +4 -0
  29. data/features/step_definitions/webapp/show_memcached_stats.rb +5 -0
  30. data/features/support/env.rb +28 -0
  31. data/features/support/hooks.rb +3 -0
  32. data/features/webapp/create_memcached_key.feature +9 -0
  33. data/features/webapp/delete_memcached_key.feature +8 -0
  34. data/features/webapp/edit_memcached_key.feature +9 -0
  35. data/features/webapp/list_memcached_keys.feature +8 -0
  36. data/features/webapp/show_memcached_key.feature +7 -0
  37. data/features/webapp/show_memcached_stats.feature +6 -0
  38. data/lib/api.rb +85 -0
  39. data/lib/extensions/api_response.rb +15 -0
  40. data/lib/extensions/errors.rb +19 -0
  41. data/lib/extensions/memcached_connection.rb +15 -0
  42. data/lib/extensions/memcached_inspector.rb +49 -0
  43. data/lib/extensions/memcached_settings.rb +18 -0
  44. data/lib/extensions.rb +14 -0
  45. data/lib/memcached-manager.rb +4 -0
  46. data/lib/public/images/glyphicons-halflings-white.png +0 -0
  47. data/lib/public/images/glyphicons-halflings.png +0 -0
  48. data/lib/public/javascripts/angular/controllers.js +89 -0
  49. data/lib/public/javascripts/angular/routes.js +66 -0
  50. data/lib/public/javascripts/angular/services/notification.js +16 -0
  51. data/lib/public/javascripts/angular/services/resources.js +20 -0
  52. data/lib/public/javascripts/angular/services/response.js +10 -0
  53. data/lib/public/javascripts/angular-resource.min.js +10 -0
  54. data/lib/public/javascripts/angular-ui-states.min.js +7 -0
  55. data/lib/public/javascripts/angular.min.js +161 -0
  56. data/lib/public/javascripts/application.js +18 -0
  57. data/lib/public/javascripts/jquery-1.9.1.min.js +4 -0
  58. data/lib/public/javascripts/noty/jquery.noty.js +547 -0
  59. data/lib/public/javascripts/noty/layouts/top.js +34 -0
  60. data/lib/public/javascripts/noty/themes/default.js +156 -0
  61. data/lib/public/javascripts/noty_config.js +25 -0
  62. data/lib/public/stylesheets/app.css +50 -0
  63. data/lib/public/stylesheets/base.css +269 -0
  64. data/lib/public/stylesheets/icons.css +492 -0
  65. data/lib/public/stylesheets/layout.css +58 -0
  66. data/lib/public/stylesheets/skeleton.css +242 -0
  67. data/lib/public/templates/edit.html.erb +6 -0
  68. data/lib/public/templates/keys.html.erb +36 -0
  69. data/lib/public/templates/new.html.erb +6 -0
  70. data/lib/public/templates/show.html.erb +2 -0
  71. data/lib/public/templates/stats.html.erb +8 -0
  72. data/lib/routes.rb +4 -0
  73. data/lib/views/index.erb +13 -0
  74. data/lib/views/layout.erb +55 -0
  75. data/lib/webapp.rb +15 -0
  76. data/memcached-manager.gemspec +154 -0
  77. data/spec/javascripts/angular/controllers/list_keys_controller_spec.js +1 -0
  78. data/spec/javascripts/angular/services/notification_spec.js +2 -0
  79. data/spec/javascripts/angular/services/resource_spec.js +2 -0
  80. data/spec/javascripts/angular/services/response_spec.js +2 -0
  81. metadata +80 -6
@@ -0,0 +1,156 @@
1
+ ;(function($) {
2
+
3
+ $.noty.themes.defaultTheme = {
4
+ name: 'defaultTheme',
5
+ helpers: {
6
+ borderFix: function() {
7
+ if (this.options.dismissQueue) {
8
+ var selector = this.options.layout.container.selector + ' ' + this.options.layout.parent.selector;
9
+ switch (this.options.layout.name) {
10
+ case 'top':
11
+ $(selector).css({borderRadius: '0px 0px 0px 0px'});
12
+ $(selector).last().css({borderRadius: '0px 0px 5px 5px'}); break;
13
+ case 'topCenter': case 'topLeft': case 'topRight':
14
+ case 'bottomCenter': case 'bottomLeft': case 'bottomRight':
15
+ case 'center': case 'centerLeft': case 'centerRight': case 'inline':
16
+ $(selector).css({borderRadius: '0px 0px 0px 0px'});
17
+ $(selector).first().css({'border-top-left-radius': '5px', 'border-top-right-radius': '5px'});
18
+ $(selector).last().css({'border-bottom-left-radius': '5px', 'border-bottom-right-radius': '5px'}); break;
19
+ case 'bottom':
20
+ $(selector).css({borderRadius: '0px 0px 0px 0px'});
21
+ $(selector).first().css({borderRadius: '5px 5px 0px 0px'}); break;
22
+ default: break;
23
+ }
24
+ }
25
+ }
26
+ },
27
+ modal: {
28
+ css: {
29
+ position: 'fixed',
30
+ width: '100%',
31
+ height: '100%',
32
+ backgroundColor: '#000',
33
+ zIndex: 10000,
34
+ opacity: 0.6,
35
+ display: 'none',
36
+ left: 0,
37
+ top: 0
38
+ }
39
+ },
40
+ style: function() {
41
+
42
+ this.$bar.css({
43
+ overflow: 'hidden',
44
+ background: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAoCAYAAAAPOoFWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPZJREFUeNq81tsOgjAMANB2ov7/7ypaN7IlIwi9rGuT8QSc9EIDAsAznxvY4pXPKr05RUE5MEVB+TyWfCEl9LZApYopCmo9C4FKSMtYoI8Bwv79aQJU4l6hXXCZrQbokJEksxHo9KMOgc6w1atHXM8K9DVC7FQnJ0i8iK3QooGgbnyKgMDygBWyYFZoqx4qS27KqLZJjA1D0jK6QJcYEQEiWv9PGkTsbqxQ8oT+ZtZB6AkdsJnQDnMoHXHLGKOgDYuCWmYhEERCI5gaamW0bnHdA3k2ltlIN+2qKRyCND0bhqSYCyTB3CAOc4WusBEIpkeBuPgJMAAX8Hs1NfqHRgAAAABJRU5ErkJggg==') repeat-x scroll left top #fff"
45
+ });
46
+
47
+ this.$message.css({
48
+ fontSize: '13px',
49
+ lineHeight: '16px',
50
+ textAlign: 'center',
51
+ padding: '8px 10px 9px',
52
+ width: 'auto',
53
+ position: 'relative'
54
+ });
55
+
56
+ this.$closeButton.css({
57
+ position: 'absolute',
58
+ top: 4, right: 4,
59
+ width: 10, height: 10,
60
+ background: "url(data:image/png;base64,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)",
61
+ display: 'none',
62
+ cursor: 'pointer'
63
+ });
64
+
65
+ this.$buttons.css({
66
+ padding: 5,
67
+ textAlign: 'right',
68
+ borderTop: '1px solid #ccc',
69
+ backgroundColor: '#fff'
70
+ });
71
+
72
+ this.$buttons.find('button').css({
73
+ marginLeft: 5
74
+ });
75
+
76
+ this.$buttons.find('button:first').css({
77
+ marginLeft: 0
78
+ });
79
+
80
+ this.$bar.bind({
81
+ mouseenter: function() { $(this).find('.noty_close').stop().fadeTo('normal',1); },
82
+ mouseleave: function() { $(this).find('.noty_close').stop().fadeTo('normal',0); }
83
+ });
84
+
85
+ switch (this.options.layout.name) {
86
+ case 'top':
87
+ this.$bar.css({
88
+ borderRadius: '0px 0px 5px 5px',
89
+ borderBottom: '2px solid #eee',
90
+ borderLeft: '2px solid #eee',
91
+ borderRight: '2px solid #eee',
92
+ boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"
93
+ });
94
+ break;
95
+ case 'topCenter': case 'center': case 'bottomCenter': case 'inline':
96
+ this.$bar.css({
97
+ borderRadius: '5px',
98
+ border: '1px solid #eee',
99
+ boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"
100
+ });
101
+ this.$message.css({fontSize: '13px', textAlign: 'center'});
102
+ break;
103
+ case 'topLeft': case 'topRight':
104
+ case 'bottomLeft': case 'bottomRight':
105
+ case 'centerLeft': case 'centerRight':
106
+ this.$bar.css({
107
+ borderRadius: '5px',
108
+ border: '1px solid #eee',
109
+ boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"
110
+ });
111
+ this.$message.css({fontSize: '13px', textAlign: 'left'});
112
+ break;
113
+ case 'bottom':
114
+ this.$bar.css({
115
+ borderRadius: '5px 5px 0px 0px',
116
+ borderTop: '2px solid #eee',
117
+ borderLeft: '2px solid #eee',
118
+ borderRight: '2px solid #eee',
119
+ boxShadow: "0 -2px 4px rgba(0, 0, 0, 0.1)"
120
+ });
121
+ break;
122
+ default:
123
+ this.$bar.css({
124
+ border: '2px solid #eee',
125
+ boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"
126
+ });
127
+ break;
128
+ }
129
+
130
+ switch (this.options.type) {
131
+ case 'alert': case 'notification':
132
+ this.$bar.css({backgroundColor: '#FFF', borderColor: '#CCC', color: '#444'}); break;
133
+ case 'warning':
134
+ this.$bar.css({backgroundColor: '#FFEAA8', borderColor: '#FFC237', color: '#826200'});
135
+ this.$buttons.css({borderTop: '1px solid #FFC237'}); break;
136
+ case 'error':
137
+ this.$bar.css({backgroundColor: 'red', borderColor: 'darkred', color: '#FFF'});
138
+ this.$message.css({fontWeight: 'bold'});
139
+ this.$buttons.css({borderTop: '1px solid darkred'}); break;
140
+ case 'information':
141
+ this.$bar.css({backgroundColor: '#57B7E2', borderColor: '#0B90C4', color: '#FFF'});
142
+ this.$buttons.css({borderTop: '1px solid #0B90C4'}); break;
143
+ case 'success':
144
+ this.$bar.css({backgroundColor: 'lightgreen', borderColor: '#50C24E', color: 'darkgreen'});
145
+ this.$buttons.css({borderTop: '1px solid #50C24E'});break;
146
+ default:
147
+ this.$bar.css({backgroundColor: '#FFF', borderColor: '#CCC', color: '#444'}); break;
148
+ }
149
+ },
150
+ callback: {
151
+ onShow: function() { $.noty.themes.defaultTheme.helpers.borderFix.apply(this); },
152
+ onClose: function() { $.noty.themes.defaultTheme.helpers.borderFix.apply(this); }
153
+ }
154
+ };
155
+
156
+ })(jQuery);
@@ -0,0 +1,25 @@
1
+ $.noty.defaults = {
2
+ layout: 'top',
3
+ theme: 'defaultTheme',
4
+ type: 'alert',
5
+ text: '',
6
+ dismissQueue: true, // If you want to use queue feature set this true
7
+ template: '<div class="noty_message"><span class="noty_text"></span><div class="noty_close"></div></div>',
8
+ animation: {
9
+ open: {height: 'toggle'},
10
+ close: {height: 'toggle'},
11
+ easing: 'swing',
12
+ speed: 1000 // opening & closing animation speed
13
+ },
14
+ timeout: true, // delay for closing event. Set false for sticky notifications
15
+ force: false, // adds notification to the beginning of queue when set to true
16
+ modal: false,
17
+ closeWith: ['click'], // ['click', 'button', 'hover']
18
+ callback: {
19
+ onShow: function() {},
20
+ afterShow: function() {},
21
+ onClose: function() {},
22
+ afterClose: function() {}
23
+ },
24
+ buttons: false // an array of buttons
25
+ };
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Ui-view: keys
3
+ * */
4
+
5
+ .key {
6
+ padding: 10px;
7
+ margin: 0px;
8
+ height: 40px;
9
+ border-top: 1px solid #eee;
10
+ display: block;
11
+ background-color: #f5f5f5;
12
+ }
13
+
14
+ .key:hover {
15
+ background-color: #eee;
16
+ }
17
+
18
+ #key-text {
19
+ float: left;
20
+ width: 60%;
21
+ margin-left: 10px;
22
+ }
23
+
24
+ #key-new {
25
+ float: right;
26
+ width: 30%;
27
+ }
28
+
29
+ .key-info {
30
+ float: left;
31
+ width: 85%;
32
+ }
33
+
34
+ .pointer {
35
+ cursor: pointer;
36
+ }
37
+
38
+ .key-actions {
39
+ float: right;
40
+ padding-top: 10px;
41
+ width: 15%;
42
+ }
43
+
44
+ .clear {
45
+ clear: both;
46
+ }
47
+
48
+ .key-title {
49
+ font-weight: 800;
50
+ }
@@ -0,0 +1,269 @@
1
+ /*
2
+ * Skeleton V1.2
3
+ * Copyright 2011, Dave Gamache
4
+ * www.getskeleton.com
5
+ * Free to use under the MIT license.
6
+ * http://www.opensource.org/licenses/mit-license.php
7
+ * 6/20/2012
8
+ */
9
+
10
+
11
+ /* Table of Content
12
+ ==================================================
13
+ #Reset & Basics
14
+ #Basic Styles
15
+ #Site Styles
16
+ #Typography
17
+ #Links
18
+ #Lists
19
+ #Images
20
+ #Buttons
21
+ #Forms
22
+ #Misc */
23
+
24
+
25
+ /* #Reset & Basics (Inspired by E. Meyers)
26
+ ================================================== */
27
+ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
28
+ margin: 0;
29
+ padding: 0;
30
+ border: 0;
31
+ font-size: 100%;
32
+ font: inherit;
33
+ vertical-align: baseline; }
34
+ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
35
+ display: block; }
36
+ body {
37
+ line-height: 1; }
38
+ ol, ul {
39
+ list-style: none; }
40
+ blockquote, q {
41
+ quotes: none; }
42
+ blockquote:before, blockquote:after,
43
+ q:before, q:after {
44
+ content: '';
45
+ content: none; }
46
+ table {
47
+ border-collapse: collapse;
48
+ border-spacing: 0; }
49
+
50
+
51
+ /* #Basic Styles
52
+ ================================================== */
53
+ body {
54
+ background: #fff;
55
+ font: 14px/21px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
56
+ color: #444;
57
+ -webkit-font-smoothing: antialiased; /* Fix for webkit rendering */
58
+ -webkit-text-size-adjust: 100%;
59
+ }
60
+
61
+
62
+ /* #Typography
63
+ ================================================== */
64
+ h1, h2, h3, h4, h5, h6 {
65
+ color: #181818;
66
+ font-family: "Georgia", "Times New Roman", serif;
67
+ font-weight: normal; }
68
+ h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
69
+ h1 { font-size: 46px; line-height: 50px; margin-bottom: 14px;}
70
+ h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; }
71
+ h3 { font-size: 28px; line-height: 34px; margin-bottom: 8px; }
72
+ h4 { font-size: 21px; line-height: 30px; margin-bottom: 4px; }
73
+ h5 { font-size: 17px; line-height: 24px; }
74
+ h6 { font-size: 14px; line-height: 21px; }
75
+ .subheader { color: #777; }
76
+
77
+ p { margin: 0 0 20px 0; }
78
+ p img { margin: 0; }
79
+ p.lead { font-size: 21px; line-height: 27px; color: #777; }
80
+
81
+ em { font-style: italic; }
82
+ strong { font-weight: bold; color: #333; }
83
+ small { font-size: 80%; }
84
+
85
+ /* Blockquotes */
86
+ blockquote, blockquote p { font-size: 17px; line-height: 24px; color: #777; font-style: italic; }
87
+ blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; }
88
+ blockquote cite { display: block; font-size: 12px; color: #555; }
89
+ blockquote cite:before { content: "\2014 \0020"; }
90
+ blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; }
91
+
92
+ hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; }
93
+
94
+
95
+ /* #Links
96
+ ================================================== */
97
+ a, a:visited { color: #333; text-decoration: underline; outline: 0; }
98
+ a:hover, a:focus { color: #000; }
99
+ p a, p a:visited { line-height: inherit; }
100
+
101
+
102
+ /* #Lists
103
+ ================================================== */
104
+ ul, ol { margin-bottom: 20px; }
105
+ ul { list-style: none outside; }
106
+ ol { list-style: decimal; }
107
+ ol, ul.square, ul.circle, ul.disc { margin-left: 30px; }
108
+ ul.square { list-style: square outside; }
109
+ ul.circle { list-style: circle outside; }
110
+ ul.disc { list-style: disc outside; }
111
+ ul ul, ul ol,
112
+ ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; }
113
+ ul ul li, ul ol li,
114
+ ol ol li, ol ul li { margin-bottom: 6px; }
115
+ li { line-height: 18px; margin-bottom: 12px; }
116
+ ul.large li { line-height: 21px; }
117
+ li p { line-height: 21px; }
118
+
119
+ /* #Images
120
+ ================================================== */
121
+
122
+ img.scale-with-grid {
123
+ max-width: 100%;
124
+ height: auto; }
125
+
126
+
127
+ /* #Buttons
128
+ ================================================== */
129
+
130
+ .button,
131
+ button,
132
+ input[type="submit"],
133
+ input[type="reset"],
134
+ input[type="button"] {
135
+ background: #eee; /* Old browsers */
136
+ background: #eee -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */
137
+ background: #eee -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */
138
+ background: #eee -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */
139
+ background: #eee -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */
140
+ background: #eee -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */
141
+ background: #eee linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */
142
+ border: 1px solid #aaa;
143
+ border-top: 1px solid #ccc;
144
+ border-left: 1px solid #ccc;
145
+ -moz-border-radius: 3px;
146
+ -webkit-border-radius: 3px;
147
+ border-radius: 3px;
148
+ color: #444;
149
+ display: inline-block;
150
+ font-size: 11px;
151
+ font-weight: bold;
152
+ text-decoration: none;
153
+ text-shadow: 0 1px rgba(255, 255, 255, .75);
154
+ cursor: pointer;
155
+ margin-bottom: 20px;
156
+ line-height: normal;
157
+ padding: 8px 10px;
158
+ font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; }
159
+
160
+ .button:hover,
161
+ button:hover,
162
+ input[type="submit"]:hover,
163
+ input[type="reset"]:hover,
164
+ input[type="button"]:hover {
165
+ color: #222;
166
+ background: #ddd; /* Old browsers */
167
+ background: #ddd -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */
168
+ background: #ddd -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */
169
+ background: #ddd -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */
170
+ background: #ddd -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */
171
+ background: #ddd -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */
172
+ background: #ddd linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */
173
+ border: 1px solid #888;
174
+ border-top: 1px solid #aaa;
175
+ border-left: 1px solid #aaa; }
176
+
177
+ .button:active,
178
+ button:active,
179
+ input[type="submit"]:active,
180
+ input[type="reset"]:active,
181
+ input[type="button"]:active {
182
+ border: 1px solid #666;
183
+ background: #ccc; /* Old browsers */
184
+ background: #ccc -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */
185
+ background: #ccc -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */
186
+ background: #ccc -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */
187
+ background: #ccc -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */
188
+ background: #ccc -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */
189
+ background: #ccc linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ }
190
+
191
+ .button.full-width,
192
+ button.full-width,
193
+ input[type="submit"].full-width,
194
+ input[type="reset"].full-width,
195
+ input[type="button"].full-width {
196
+ width: 100%;
197
+ padding-left: 0 !important;
198
+ padding-right: 0 !important;
199
+ text-align: center; }
200
+
201
+ /* Fix for odd Mozilla border & padding issues */
202
+ button::-moz-focus-inner,
203
+ input::-moz-focus-inner {
204
+ border: 0;
205
+ padding: 0;
206
+ }
207
+
208
+
209
+ /* #Forms
210
+ ================================================== */
211
+
212
+ form {
213
+ margin-bottom: 20px; }
214
+ fieldset {
215
+ margin-bottom: 20px; }
216
+ input[type="text"],
217
+ input[type="password"],
218
+ input[type="email"],
219
+ textarea,
220
+ select {
221
+ border: 1px solid #ccc;
222
+ padding: 6px 4px;
223
+ outline: none;
224
+ -moz-border-radius: 2px;
225
+ -webkit-border-radius: 2px;
226
+ border-radius: 2px;
227
+ font: 13px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
228
+ color: #777;
229
+ margin: 0;
230
+ width: 210px;
231
+ max-width: 100%;
232
+ display: block;
233
+ margin-bottom: 20px;
234
+ background: #fff; }
235
+ select {
236
+ padding: 0; }
237
+ input[type="text"]:focus,
238
+ input[type="password"]:focus,
239
+ input[type="email"]:focus,
240
+ textarea:focus {
241
+ border: 1px solid #aaa;
242
+ color: #444;
243
+ -moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
244
+ -webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
245
+ box-shadow: 0 0 3px rgba(0,0,0,.2); }
246
+ textarea {
247
+ min-height: 60px; }
248
+ label,
249
+ legend {
250
+ display: block;
251
+ font-weight: bold;
252
+ font-size: 13px; }
253
+ select {
254
+ width: 220px; }
255
+ input[type="checkbox"] {
256
+ display: inline; }
257
+ label span,
258
+ legend span {
259
+ font-weight: normal;
260
+ font-size: 13px;
261
+ color: #444; }
262
+
263
+ /* #Misc
264
+ ================================================== */
265
+ .remove-bottom { margin-bottom: 0 !important; }
266
+ .half-bottom { margin-bottom: 10px !important; }
267
+ .add-bottom { margin-bottom: 20px !important; }
268
+
269
+