kosmos 0.0.1 → 0.0.2.pre.test2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/README.md +109 -8
  4. data/bin/kosmos +6 -79
  5. data/kosmos.gemspec +4 -1
  6. data/lib/kosmos.rb +18 -4
  7. data/lib/kosmos/download_url.rb +4 -0
  8. data/lib/kosmos/git_adapter.rb +5 -3
  9. data/lib/kosmos/package.rb +41 -57
  10. data/lib/kosmos/package_attrs.rb +79 -0
  11. data/lib/kosmos/package_downloads.rb +80 -0
  12. data/lib/kosmos/packages/achievements.rb +8 -0
  13. data/lib/kosmos/packages/active_texture_management.rb +1 -1
  14. data/lib/kosmos/packages/advanced_animator.rb +9 -0
  15. data/lib/kosmos/packages/advanced_jet_engine.rb +9 -0
  16. data/lib/kosmos/packages/aerojet_kerbodyne.rb +9 -0
  17. data/lib/kosmos/packages/aies_aerospace.rb +9 -0
  18. data/lib/kosmos/packages/ambient_light_adjustment.rb +9 -0
  19. data/lib/kosmos/packages/amok_dynamics.rb +9 -0
  20. data/lib/kosmos/packages/antenna_range.rb +10 -0
  21. data/lib/kosmos/packages/asmis_eclss_mod.rb +9 -0
  22. data/lib/kosmos/packages/astronomers_visual_pack.rb +5 -0
  23. data/lib/kosmos/packages/atmospheric_sound_enhancement.rb +9 -0
  24. data/lib/kosmos/packages/auto_asparagus.rb +9 -0
  25. data/lib/kosmos/packages/aviation_lights.rb +9 -0
  26. data/lib/kosmos/packages/b9_aerospace_pack.rb +11 -0
  27. data/lib/kosmos/packages/b9_cockpit_extended.rb +9 -0
  28. data/lib/kosmos/packages/b9_iva_extension.rb +9 -0
  29. data/lib/kosmos/packages/baha_extraplanetary_parts.rb +9 -0
  30. data/lib/kosmos/packages/better_rove_mates.rb +9 -0
  31. data/lib/kosmos/packages/better_than_starting_manned.rb +9 -0
  32. data/lib/kosmos/packages/bob_catind_soviet_american_packs.rb +10 -0
  33. data/lib/kosmos/packages/bolt_on_mission_probe.rb +9 -0
  34. data/lib/kosmos/packages/cargo_transfer_bagsand_tanks.rb +9 -0
  35. data/lib/kosmos/packages/celestial_body_science_multiplier_editor.rb +9 -0
  36. data/lib/kosmos/packages/celss_greenhouse.rb +9 -0
  37. data/lib/kosmos/packages/chatterer.rb +9 -0
  38. data/lib/kosmos/packages/coffee_industries_modular_airliner.rb +9 -0
  39. data/lib/kosmos/packages/conics_configurator.rb +9 -0
  40. data/lib/kosmos/packages/connected_living_space_api.rb +9 -0
  41. data/lib/kosmos/packages/constellation_essentials.rb +9 -0
  42. data/lib/kosmos/packages/cross_feed_enabler.rb +9 -0
  43. data/lib/kosmos/packages/custom_asteroids.rb +9 -0
  44. data/lib/kosmos/packages/dang_it.rb +9 -0
  45. data/lib/kosmos/packages/dark_multi_player.rb +10 -0
  46. data/lib/kosmos/packages/davon_supply.rb +9 -0
  47. data/lib/kosmos/packages/davon_throttle_controlsystems.rb +9 -0
  48. data/lib/kosmos/packages/dmagic_orbital_science.rb +9 -0
  49. data/lib/kosmos/packages/down_under_aerospace.rb +9 -0
  50. data/lib/kosmos/packages/editor_extensions.rb +9 -0
  51. data/lib/kosmos/packages/editor_part_highlighter.rb +9 -0
  52. data/lib/kosmos/packages/engine_ignitor.rb +9 -0
  53. data/lib/kosmos/packages/fasa.rb +18 -0
  54. data/lib/kosmos/packages/flight_managerfor_reusable_stages.rb +9 -0
  55. data/lib/kosmos/packages/fus_tek_station_parts.rb +9 -0
  56. data/lib/kosmos/packages/fusebox.rb +9 -0
  57. data/lib/kosmos/packages/gimbal_auto_trim.rb +9 -0
  58. data/lib/kosmos/packages/ginger_corp_station_hubs.rb +9 -0
  59. data/lib/kosmos/packages/glow_strips.rb +9 -0
  60. data/lib/kosmos/packages/habitat_pack.rb +9 -0
  61. data/lib/kosmos/packages/hangar_extender.rb +9 -0
  62. data/lib/kosmos/packages/home_grown_rockets.rb +10 -0
  63. data/lib/kosmos/packages/hooligan_labs.rb +26 -0
  64. data/lib/kosmos/packages/hullcam_vds.rb +8 -0
  65. data/lib/kosmos/packages/kerbal_attachment_system.rb +1 -1
  66. data/lib/kosmos/packages/kerbal_engineer_redux.rb +11 -0
  67. data/lib/kosmos/packages/launch_countdown.rb +9 -0
  68. data/lib/kosmos/packages/remote_tech.rb +1 -11
  69. data/lib/kosmos/packages/void.rb +9 -0
  70. data/lib/kosmos/user_interface.rb +120 -0
  71. data/lib/kosmos/util.rb +5 -1
  72. data/lib/kosmos/version.rb +1 -1
  73. data/lib/kosmos/versioner.rb +3 -3
  74. data/lib/kosmos/web/app.rb +36 -0
  75. data/lib/kosmos/web/public/css/main.css +69 -0
  76. data/lib/kosmos/web/public/css/normalize.css +527 -0
  77. data/lib/kosmos/web/public/index.html +107 -0
  78. data/lib/kosmos/web/public/js/main.js +125 -0
  79. data/lib/kosmos/web/public/js/plugins.js +24 -0
  80. data/lib/kosmos/web/public/js/vendor/jquery-1.10.2.min.js +6 -0
  81. data/lib/kosmos/web/public/js/vendor/modernizr-2.6.2.min.js +4 -0
  82. data/lib/kosmos/web/public/js/vendor/underscore.js +5 -0
  83. data/package_generator.rb +197 -0
  84. data/spec/package_spec.rb +32 -1
  85. data/spec/spec_helper.rb +6 -0
  86. data/spec/versioner_spec.rb +2 -21
  87. metadata +113 -6
@@ -0,0 +1,120 @@
1
+ class String
2
+ def undent
3
+ gsub(/^.{#{slice(/^ +/).length}}/, '')
4
+ end
5
+ end
6
+
7
+ module Kosmos
8
+ module UserInterface
9
+ class << self
10
+ def init(args)
11
+ ksp_path = args.shift
12
+
13
+ Util.log "Initializing Kosmos into #{ksp_path} (This will take a sec) ..."
14
+
15
+ Kosmos::Versioner.init_repo(ksp_path)
16
+ Kosmos.save_ksp_path(ksp_path)
17
+
18
+ Util.log <<-EOS.undent
19
+ Done! You're ready to begin installing mods.
20
+
21
+ Install your first mod by running the command:
22
+
23
+ kosmos install [name-of-the-mod]
24
+ EOS
25
+ end
26
+
27
+ def install(args)
28
+ ksp_path = Kosmos.load_ksp_path
29
+
30
+ packages = load_packages(args)
31
+ check_installed_packages(ksp_path, packages)
32
+
33
+ Util.log "Kosmos is about to install #{packages.count} package(s):"
34
+ pretty_print_list(packages.map(&:title))
35
+
36
+ packages.each do |package|
37
+ Util.log "Installing package #{package.title} ..."
38
+ package.new.install!(ksp_path)
39
+ Util.log "Done!"
40
+ end
41
+ end
42
+
43
+ def uninstall(args)
44
+ ksp_path = Kosmos.load_ksp_path
45
+
46
+ package_name = args.shift
47
+ unless package_name
48
+ Util.log <<-EOS.undent
49
+ Error: You need to specify what package to uninstall. Example:
50
+ kosmos uninstall name-of-the-mod"
51
+ EOS
52
+
53
+ exit
54
+ end
55
+
56
+ package = Kosmos::Package.find(package_name)
57
+
58
+ if package
59
+ Util.log "Preparing to uninstall #{package.title} ..."
60
+ Kosmos::Versioner.uninstall_package(ksp_path, package)
61
+ Util.log "Done! Just uninstalled: #{package.title}."
62
+ else
63
+ Util.log "Error: Kosmos couldn't find any packages with the name #{package_name.inspect}."
64
+ end
65
+ end
66
+
67
+ def list(args)
68
+ ksp_path = Kosmos.load_ksp_path
69
+
70
+ packages = Kosmos::Versioner.installed_packages(ksp_path)
71
+ Util.log "You have installed #{packages.length} mod(s) using Kosmos:"
72
+ pretty_print_list(packages)
73
+ end
74
+
75
+ def server(args)
76
+ Web::App.start!
77
+ end
78
+
79
+ private
80
+
81
+ def pretty_print_list(list)
82
+ list.each { |value| Util.log " * #{value}" }
83
+ end
84
+
85
+ def load_packages(package_names)
86
+ packages = Hash[package_names.map do |name|
87
+ [name, Kosmos::Package.find(name)]
88
+ end]
89
+
90
+ unknown_packages = packages.select { |_, package| package.nil? }
91
+ package_suggestions = unknown_packages.map do |name, _|
92
+ best_guess = Kosmos::Package.search(name).normalized_title
93
+ "#{name} (Maybe you meant: #{best_guess.inspect}?)"
94
+ end
95
+
96
+ if unknown_packages.any?
97
+ Util.log "Error: Kosmos couldn't find any packages with the following names:"
98
+ pretty_print_list(package_suggestions)
99
+ exit
100
+ end
101
+
102
+ packages.values
103
+ end
104
+
105
+ def check_installed_packages(ksp_path, packages)
106
+ installed_titles = Kosmos::Versioner.installed_packages(ksp_path)
107
+
108
+ installed_packages = packages.select do |package|
109
+ installed_titles.include?(package.title)
110
+ end
111
+
112
+ if installed_packages.any?
113
+ Util.log "Error: You have already installed the following packages using Kosmos:"
114
+ pretty_print_list(installed_packages.map(&:title))
115
+ exit
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
data/lib/kosmos/util.rb CHANGED
@@ -1,7 +1,11 @@
1
1
  module Kosmos
2
2
  module Util
3
3
  def self.log(msg)
4
- puts msg if Kosmos.config.verbose
4
+ Kosmos.config.output_method.call(msg) if Kosmos.config.verbose
5
+ end
6
+
7
+ def self.run_post_processors!(ksp_path)
8
+ Kosmos.config.post_processors.each { |p| p.post_process(ksp_path) }
5
9
  end
6
10
  end
7
11
  end
@@ -1,3 +1,3 @@
1
1
  module Kosmos
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2-test2"
3
3
  end
@@ -1,5 +1,3 @@
1
- require 'rugged'
2
-
3
1
  module Kosmos
4
2
  class Versioner
5
3
  class << self
@@ -44,7 +42,9 @@ module Kosmos
44
42
  commit.post? && commit.subject == package.title
45
43
  end
46
44
 
47
- GitAdapter.revert_commit(path, to_revert, uninstall_message(package))
45
+ GitAdapter.revert_commit(path, to_revert)
46
+ Util.run_post_processors!(path)
47
+ GitAdapter.commit_everything(path, uninstall_message(package))
48
48
  end
49
49
 
50
50
  private
@@ -0,0 +1,36 @@
1
+ require 'sinatra'
2
+
3
+ module Kosmos
4
+ module Web
5
+ class App < Sinatra::Application
6
+ set server: 'thin', connection: nil
7
+
8
+ get '/' do
9
+ send_file(File.join(settings.public_folder, 'index.html'))
10
+ end
11
+
12
+ get '/stream', provides: 'text/event-stream' do
13
+ stream :keep_open do |out|
14
+ settings.connection = out
15
+ end
16
+ end
17
+
18
+ post '/' do
19
+ Kosmos.configure do |config|
20
+ config.output_method = Proc.new do |str|
21
+ settings.connection << "data: #{str}\n\n"
22
+ end
23
+ end
24
+
25
+ kosmos_params = params[:params].split(' ')
26
+ kosmos_command = %w(init install uninstall list).find do |command|
27
+ command == params[:command]
28
+ end
29
+
30
+ UserInterface.send(kosmos_command, kosmos_params)
31
+
32
+ 204
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,69 @@
1
+ .main-container {
2
+ text-align: center;
3
+ }
4
+
5
+ .big-brand h1 {
6
+ font-size: 63px;
7
+ margin-bottom: 0px;
8
+ }
9
+
10
+ .big-brand h2 {
11
+ margin-top: 5px;
12
+ }
13
+
14
+ .underline {
15
+ text-decoration: underline;
16
+ }
17
+
18
+ .options-row {
19
+ margin-top: 10px;
20
+ }
21
+
22
+ .kosmos-option .btn {
23
+ width: 100%;
24
+
25
+ font-size: 20px;
26
+ font-family: 'Ubuntu Mono';
27
+ }
28
+
29
+ .kosmos-option p {
30
+ font-size: 18px;
31
+ }
32
+
33
+ #cli-row {
34
+ text-align: left;
35
+ }
36
+
37
+ #cli-explain {
38
+ font-size: 17px;
39
+ font-style: italic;
40
+ }
41
+
42
+ #cli {
43
+ font-family: 'Ubuntu Mono';
44
+ }
45
+
46
+ #cli #cli-input {
47
+ font-size: 35px;
48
+ }
49
+
50
+ #cli #cli-input #prompt {
51
+ color: #308EA1;
52
+ }
53
+
54
+ #cli #cli-input #awaiting-user-input {
55
+ font-style: italic;
56
+ }
57
+
58
+ #cli #cli-input #cli-args-input {
59
+ font-size: 30px;
60
+ }
61
+
62
+ #output-row {
63
+ margin-top: 20px;
64
+ }
65
+
66
+ #output {
67
+ text-align: left;
68
+ font-size: 15px;
69
+ }
@@ -0,0 +1,527 @@
1
+ /*! normalize.css v1.1.3 | MIT License | git.io/normalize */
2
+
3
+ /* ==========================================================================
4
+ HTML5 display definitions
5
+ ========================================================================== */
6
+
7
+ /**
8
+ * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3.
9
+ */
10
+
11
+ article,
12
+ aside,
13
+ details,
14
+ figcaption,
15
+ figure,
16
+ footer,
17
+ header,
18
+ hgroup,
19
+ main,
20
+ nav,
21
+ section,
22
+ summary {
23
+ display: block;
24
+ }
25
+
26
+ /**
27
+ * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
28
+ */
29
+
30
+ audio,
31
+ canvas,
32
+ video {
33
+ display: inline-block;
34
+ *display: inline;
35
+ *zoom: 1;
36
+ }
37
+
38
+ /**
39
+ * Prevent modern browsers from displaying `audio` without controls.
40
+ * Remove excess height in iOS 5 devices.
41
+ */
42
+
43
+ audio:not([controls]) {
44
+ display: none;
45
+ height: 0;
46
+ }
47
+
48
+ /**
49
+ * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4.
50
+ * Known issue: no IE 6 support.
51
+ */
52
+
53
+ [hidden] {
54
+ display: none;
55
+ }
56
+
57
+ /* ==========================================================================
58
+ Base
59
+ ========================================================================== */
60
+
61
+ /**
62
+ * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using
63
+ * `em` units.
64
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
65
+ * user zoom.
66
+ */
67
+
68
+ html {
69
+ font-size: 100%; /* 1 */
70
+ -ms-text-size-adjust: 100%; /* 2 */
71
+ -webkit-text-size-adjust: 100%; /* 2 */
72
+ }
73
+
74
+ /**
75
+ * Address `font-family` inconsistency between `textarea` and other form
76
+ * elements.
77
+ */
78
+
79
+ html,
80
+ button,
81
+ input,
82
+ select,
83
+ textarea {
84
+ font-family: sans-serif;
85
+ }
86
+
87
+ /**
88
+ * Address margins handled incorrectly in IE 6/7.
89
+ */
90
+
91
+ body {
92
+ margin: 0;
93
+ }
94
+
95
+ /* ==========================================================================
96
+ Links
97
+ ========================================================================== */
98
+
99
+ /**
100
+ * Address `outline` inconsistency between Chrome and other browsers.
101
+ */
102
+
103
+ a:focus {
104
+ outline: thin dotted;
105
+ }
106
+
107
+ /**
108
+ * Improve readability when focused and also mouse hovered in all browsers.
109
+ */
110
+
111
+ a:active,
112
+ a:hover {
113
+ outline: 0;
114
+ }
115
+
116
+ /* ==========================================================================
117
+ Typography
118
+ ========================================================================== */
119
+
120
+ /**
121
+ * Address font sizes and margins set differently in IE 6/7.
122
+ * Address font sizes within `section` and `article` in Firefox 4+, Safari 5,
123
+ * and Chrome.
124
+ */
125
+
126
+ h1 {
127
+ font-size: 2em;
128
+ margin: 0.67em 0;
129
+ }
130
+
131
+ h2 {
132
+ font-size: 1.5em;
133
+ margin: 0.83em 0;
134
+ }
135
+
136
+ h3 {
137
+ font-size: 1.17em;
138
+ margin: 1em 0;
139
+ }
140
+
141
+ h4 {
142
+ font-size: 1em;
143
+ margin: 1.33em 0;
144
+ }
145
+
146
+ h5 {
147
+ font-size: 0.83em;
148
+ margin: 1.67em 0;
149
+ }
150
+
151
+ h6 {
152
+ font-size: 0.67em;
153
+ margin: 2.33em 0;
154
+ }
155
+
156
+ /**
157
+ * Address styling not present in IE 7/8/9, Safari 5, and Chrome.
158
+ */
159
+
160
+ abbr[title] {
161
+ border-bottom: 1px dotted;
162
+ }
163
+
164
+ /**
165
+ * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
166
+ */
167
+
168
+ b,
169
+ strong {
170
+ font-weight: bold;
171
+ }
172
+
173
+ blockquote {
174
+ margin: 1em 40px;
175
+ }
176
+
177
+ /**
178
+ * Address styling not present in Safari 5 and Chrome.
179
+ */
180
+
181
+ dfn {
182
+ font-style: italic;
183
+ }
184
+
185
+ /**
186
+ * Address differences between Firefox and other browsers.
187
+ * Known issue: no IE 6/7 normalization.
188
+ */
189
+
190
+ hr {
191
+ -moz-box-sizing: content-box;
192
+ box-sizing: content-box;
193
+ height: 0;
194
+ }
195
+
196
+ /**
197
+ * Address styling not present in IE 6/7/8/9.
198
+ */
199
+
200
+ mark {
201
+ background: #ff0;
202
+ color: #000;
203
+ }
204
+
205
+ /**
206
+ * Address margins set differently in IE 6/7.
207
+ */
208
+
209
+ p,
210
+ pre {
211
+ margin: 1em 0;
212
+ }
213
+
214
+ /**
215
+ * Correct font family set oddly in IE 6, Safari 4/5, and Chrome.
216
+ */
217
+
218
+ code,
219
+ kbd,
220
+ pre,
221
+ samp {
222
+ font-family: monospace, serif;
223
+ _font-family: 'courier new', monospace;
224
+ font-size: 1em;
225
+ }
226
+
227
+ /**
228
+ * Improve readability of pre-formatted text in all browsers.
229
+ */
230
+
231
+ pre {
232
+ white-space: pre;
233
+ white-space: pre-wrap;
234
+ word-wrap: break-word;
235
+ }
236
+
237
+ /**
238
+ * Address CSS quotes not supported in IE 6/7.
239
+ */
240
+
241
+ q {
242
+ quotes: none;
243
+ }
244
+
245
+ /**
246
+ * Address `quotes` property not supported in Safari 4.
247
+ */
248
+
249
+ q:before,
250
+ q:after {
251
+ content: '';
252
+ content: none;
253
+ }
254
+
255
+ /**
256
+ * Address inconsistent and variable font size in all browsers.
257
+ */
258
+
259
+ small {
260
+ font-size: 80%;
261
+ }
262
+
263
+ /**
264
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
265
+ */
266
+
267
+ sub,
268
+ sup {
269
+ font-size: 75%;
270
+ line-height: 0;
271
+ position: relative;
272
+ vertical-align: baseline;
273
+ }
274
+
275
+ sup {
276
+ top: -0.5em;
277
+ }
278
+
279
+ sub {
280
+ bottom: -0.25em;
281
+ }
282
+
283
+ /* ==========================================================================
284
+ Lists
285
+ ========================================================================== */
286
+
287
+ /**
288
+ * Address margins set differently in IE 6/7.
289
+ */
290
+
291
+ dl,
292
+ menu,
293
+ ol,
294
+ ul {
295
+ margin: 1em 0;
296
+ }
297
+
298
+ dd {
299
+ margin: 0 0 0 40px;
300
+ }
301
+
302
+ /**
303
+ * Address paddings set differently in IE 6/7.
304
+ */
305
+
306
+ menu,
307
+ ol,
308
+ ul {
309
+ padding: 0 0 0 40px;
310
+ }
311
+
312
+ /**
313
+ * Correct list images handled incorrectly in IE 7.
314
+ */
315
+
316
+ nav ul,
317
+ nav ol {
318
+ list-style: none;
319
+ list-style-image: none;
320
+ }
321
+
322
+ /* ==========================================================================
323
+ Embedded content
324
+ ========================================================================== */
325
+
326
+ /**
327
+ * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3.
328
+ * 2. Improve image quality when scaled in IE 7.
329
+ */
330
+
331
+ img {
332
+ border: 0; /* 1 */
333
+ -ms-interpolation-mode: bicubic; /* 2 */
334
+ }
335
+
336
+ /**
337
+ * Correct overflow displayed oddly in IE 9.
338
+ */
339
+
340
+ svg:not(:root) {
341
+ overflow: hidden;
342
+ }
343
+
344
+ /* ==========================================================================
345
+ Figures
346
+ ========================================================================== */
347
+
348
+ /**
349
+ * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
350
+ */
351
+
352
+ figure {
353
+ margin: 0;
354
+ }
355
+
356
+ /* ==========================================================================
357
+ Forms
358
+ ========================================================================== */
359
+
360
+ /**
361
+ * Correct margin displayed oddly in IE 6/7.
362
+ */
363
+
364
+ form {
365
+ margin: 0;
366
+ }
367
+
368
+ /**
369
+ * Define consistent border, margin, and padding.
370
+ */
371
+
372
+ fieldset {
373
+ border: 1px solid #c0c0c0;
374
+ margin: 0 2px;
375
+ padding: 0.35em 0.625em 0.75em;
376
+ }
377
+
378
+ /**
379
+ * 1. Correct color not being inherited in IE 6/7/8/9.
380
+ * 2. Correct text not wrapping in Firefox 3.
381
+ * 3. Correct alignment displayed oddly in IE 6/7.
382
+ */
383
+
384
+ legend {
385
+ border: 0; /* 1 */
386
+ padding: 0;
387
+ white-space: normal; /* 2 */
388
+ *margin-left: -7px; /* 3 */
389
+ }
390
+
391
+ /**
392
+ * 1. Correct font size not being inherited in all browsers.
393
+ * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5,
394
+ * and Chrome.
395
+ * 3. Improve appearance and consistency in all browsers.
396
+ */
397
+
398
+ button,
399
+ input,
400
+ select,
401
+ textarea {
402
+ font-size: 100%; /* 1 */
403
+ margin: 0; /* 2 */
404
+ vertical-align: baseline; /* 3 */
405
+ *vertical-align: middle; /* 3 */
406
+ }
407
+
408
+ /**
409
+ * Address Firefox 3+ setting `line-height` on `input` using `!important` in
410
+ * the UA stylesheet.
411
+ */
412
+
413
+ button,
414
+ input {
415
+ line-height: normal;
416
+ }
417
+
418
+ /**
419
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
420
+ * All other form control elements do not inherit `text-transform` values.
421
+ * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+.
422
+ * Correct `select` style inheritance in Firefox 4+ and Opera.
423
+ */
424
+
425
+ button,
426
+ select {
427
+ text-transform: none;
428
+ }
429
+
430
+ /**
431
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
432
+ * and `video` controls.
433
+ * 2. Correct inability to style clickable `input` types in iOS.
434
+ * 3. Improve usability and consistency of cursor style between image-type
435
+ * `input` and others.
436
+ * 4. Remove inner spacing in IE 7 without affecting normal text inputs.
437
+ * Known issue: inner spacing remains in IE 6.
438
+ */
439
+
440
+ button,
441
+ html input[type="button"], /* 1 */
442
+ input[type="reset"],
443
+ input[type="submit"] {
444
+ -webkit-appearance: button; /* 2 */
445
+ cursor: pointer; /* 3 */
446
+ *overflow: visible; /* 4 */
447
+ }
448
+
449
+ /**
450
+ * Re-set default cursor for disabled elements.
451
+ */
452
+
453
+ button[disabled],
454
+ html input[disabled] {
455
+ cursor: default;
456
+ }
457
+
458
+ /**
459
+ * 1. Address box sizing set to content-box in IE 8/9.
460
+ * 2. Remove excess padding in IE 8/9.
461
+ * 3. Remove excess padding in IE 7.
462
+ * Known issue: excess padding remains in IE 6.
463
+ */
464
+
465
+ input[type="checkbox"],
466
+ input[type="radio"] {
467
+ box-sizing: border-box; /* 1 */
468
+ padding: 0; /* 2 */
469
+ *height: 13px; /* 3 */
470
+ *width: 13px; /* 3 */
471
+ }
472
+
473
+ /**
474
+ * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
475
+ * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
476
+ * (include `-moz` to future-proof).
477
+ */
478
+
479
+ input[type="search"] {
480
+ -webkit-appearance: textfield; /* 1 */
481
+ -moz-box-sizing: content-box;
482
+ -webkit-box-sizing: content-box; /* 2 */
483
+ box-sizing: content-box;
484
+ }
485
+
486
+ /**
487
+ * Remove inner padding and search cancel button in Safari 5 and Chrome
488
+ * on OS X.
489
+ */
490
+
491
+ input[type="search"]::-webkit-search-cancel-button,
492
+ input[type="search"]::-webkit-search-decoration {
493
+ -webkit-appearance: none;
494
+ }
495
+
496
+ /**
497
+ * Remove inner padding and border in Firefox 3+.
498
+ */
499
+
500
+ button::-moz-focus-inner,
501
+ input::-moz-focus-inner {
502
+ border: 0;
503
+ padding: 0;
504
+ }
505
+
506
+ /**
507
+ * 1. Remove default vertical scrollbar in IE 6/7/8/9.
508
+ * 2. Improve readability and alignment in all browsers.
509
+ */
510
+
511
+ textarea {
512
+ overflow: auto; /* 1 */
513
+ vertical-align: top; /* 2 */
514
+ }
515
+
516
+ /* ==========================================================================
517
+ Tables
518
+ ========================================================================== */
519
+
520
+ /**
521
+ * Remove most spacing between table cells.
522
+ */
523
+
524
+ table {
525
+ border-collapse: collapse;
526
+ border-spacing: 0;
527
+ }