mugen 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile +5 -0
  5. data/LICENSE +20 -0
  6. data/README.md +65 -0
  7. data/Rakefile +31 -0
  8. data/autotest/discover.rb +1 -0
  9. data/generators/README +3 -0
  10. data/generators/USAGE +34 -0
  11. data/generators/mugen_generator.rb +63 -0
  12. data/generators/templates/app/controllers/mygengo/account_controller.rb +10 -0
  13. data/generators/templates/app/controllers/mygengo/comments_controller.rb +6 -0
  14. data/generators/templates/app/controllers/mygengo/jobs_controller.rb +153 -0
  15. data/generators/templates/app/helpers/mugen_helper.rb +11 -0
  16. data/generators/templates/app/views/layouts/mygengo.html.erb +52 -0
  17. data/generators/templates/app/views/mygengo/account/_balance.haml +5 -0
  18. data/generators/templates/app/views/mygengo/account/_stats.haml +9 -0
  19. data/generators/templates/app/views/mygengo/account/index.haml +3 -0
  20. data/generators/templates/app/views/mygengo/comments/_comment.haml +7 -0
  21. data/generators/templates/app/views/mygengo/comments/_form.haml +10 -0
  22. data/generators/templates/app/views/mygengo/jobs/_comments.haml +8 -0
  23. data/generators/templates/app/views/mygengo/jobs/_feedback.haml +8 -0
  24. data/generators/templates/app/views/mygengo/jobs/_job.haml +36 -0
  25. data/generators/templates/app/views/mygengo/jobs/_revision.haml +2 -0
  26. data/generators/templates/app/views/mygengo/jobs/index.haml +8 -0
  27. data/generators/templates/app/views/mygengo/jobs/new.haml +53 -0
  28. data/generators/templates/app/views/mygengo/jobs/reject_form.haml +36 -0
  29. data/generators/templates/app/views/mygengo/jobs/review_form.haml +54 -0
  30. data/generators/templates/app/views/mygengo/jobs/revise_form.haml +7 -0
  31. data/generators/templates/app/views/mygengo/jobs/revision.haml +8 -0
  32. data/generators/templates/app/views/mygengo/jobs/show.haml +38 -0
  33. data/generators/templates/config/initializers/mugen.rb +2 -0
  34. data/generators/templates/config/routes.rb +16 -0
  35. data/generators/templates/public/stylesheets/mygengo/base.css +397 -0
  36. data/generators/templates/public/stylesheets/mygengo/mugen.css +117 -0
  37. data/generators/templates/public/stylesheets/mygengo/override.css +1 -0
  38. data/generators/templates/public/stylesheets/mygengo/scaffold.css +56 -0
  39. data/generators/templates/public/stylesheets/mygengo/style.css +373 -0
  40. data/lib/generators/mugen/README +3 -0
  41. data/lib/generators/mugen/USAGE +35 -0
  42. data/lib/generators/mugen/mugen_generator.rb +50 -0
  43. data/lib/generators/mugen/templates/app/controllers/mygengo/account_controller.rb +10 -0
  44. data/lib/generators/mugen/templates/app/controllers/mygengo/comments_controller.rb +6 -0
  45. data/lib/generators/mugen/templates/app/controllers/mygengo/jobs_controller.rb +153 -0
  46. data/lib/generators/mugen/templates/app/controllers/mygengo/mygengo_controller.rb +18 -0
  47. data/lib/generators/mugen/templates/app/helpers/mugen_helper.rb +11 -0
  48. data/lib/generators/mugen/templates/app/views/layouts/mygengo.html.erb +52 -0
  49. data/lib/generators/mugen/templates/app/views/mygengo/account/_balance.haml +5 -0
  50. data/lib/generators/mugen/templates/app/views/mygengo/account/_stats.haml +9 -0
  51. data/lib/generators/mugen/templates/app/views/mygengo/account/index.haml +3 -0
  52. data/lib/generators/mugen/templates/app/views/mygengo/comments/_comment.haml +7 -0
  53. data/lib/generators/mugen/templates/app/views/mygengo/comments/_form.haml +10 -0
  54. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_comments.haml +8 -0
  55. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_feedback.haml +8 -0
  56. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_job.haml +36 -0
  57. data/lib/generators/mugen/templates/app/views/mygengo/jobs/_revision.haml +2 -0
  58. data/lib/generators/mugen/templates/app/views/mygengo/jobs/index.haml +8 -0
  59. data/lib/generators/mugen/templates/app/views/mygengo/jobs/new.haml +53 -0
  60. data/lib/generators/mugen/templates/app/views/mygengo/jobs/reject_form.haml +36 -0
  61. data/lib/generators/mugen/templates/app/views/mygengo/jobs/review_form.haml +54 -0
  62. data/lib/generators/mugen/templates/app/views/mygengo/jobs/revise_form.haml +7 -0
  63. data/lib/generators/mugen/templates/app/views/mygengo/jobs/revision.haml +8 -0
  64. data/lib/generators/mugen/templates/app/views/mygengo/jobs/show.haml +38 -0
  65. data/lib/generators/mugen/templates/config/initializers/mugen.rb +2 -0
  66. data/lib/generators/mugen/templates/config/routes2.rb +16 -0
  67. data/lib/generators/mugen/templates/config/routes3.rb +17 -0
  68. data/lib/generators/mugen/templates/public/images/mygengo/blank +0 -0
  69. data/lib/generators/mugen/templates/public/stylesheets/mygengo/base.css +397 -0
  70. data/lib/generators/mugen/templates/public/stylesheets/mygengo/mugen.css +117 -0
  71. data/lib/generators/mugen/templates/public/stylesheets/mygengo/override.css +1 -0
  72. data/lib/generators/mugen/templates/public/stylesheets/mygengo/scaffold.css +56 -0
  73. data/lib/generators/mugen/templates/public/stylesheets/mygengo/style.css +373 -0
  74. data/lib/mugen.rb +73 -0
  75. data/lib/mugen/account.rb +27 -0
  76. data/lib/mugen/client.rb +33 -0
  77. data/lib/mugen/core_extensions.rb +32 -0
  78. data/lib/mugen/httparty_extensions.rb +26 -0
  79. data/lib/mugen/job.rb +169 -0
  80. data/lib/mugen/jobs.rb +42 -0
  81. data/lib/mugen/service.rb +30 -0
  82. data/lib/mugen/version.rb +3 -0
  83. data/lib/tasks/mugen.rake +5 -0
  84. data/mugen.gemspec +33 -0
  85. data/rails/init.rb +1 -0
  86. data/spec/account_spec.rb +22 -0
  87. data/spec/job_spec.rb +40 -0
  88. data/spec/jobs_spec.rb +33 -0
  89. data/spec/mugen_spec.rb +33 -0
  90. data/spec/service_spec.rb +21 -0
  91. data/spec/spec_helper.rb +4 -0
  92. metadata +191 -0
@@ -0,0 +1,2 @@
1
+ %li
2
+ = link_to revision['rev_id'], revision_mygengo_job_path(:job_id => job['job_id'], :id => revision['rev_id'])
@@ -0,0 +1,8 @@
1
+ %h3 Jobs listing
2
+
3
+ %table.general
4
+ - for job in @jobs
5
+ = render :partial => 'mygengo/jobs/job', :locals => {:job => job}
6
+
7
+ %br
8
+ = link_to 'Create a job', new_mygengo_job_path
@@ -0,0 +1,53 @@
1
+ %h3 New translation order
2
+ = form_for :job, :url => {:action => 'create'}, :html => {:class => 'mygengo-form'} do |f|
3
+ .field
4
+ Slug
5
+ %br
6
+ = f.text_field :slug
7
+ .float
8
+ .field
9
+ Text
10
+ %br
11
+ = f.text_area :body_src
12
+ %div
13
+ .field.float
14
+ Translate from
15
+ %br
16
+ = f.select :lc_src, @language_src, :selected => 'en'
17
+ .field
18
+ Translate to
19
+ %br
20
+ = f.select :lc_tgt, @language_tgt
21
+ .field
22
+ Tier
23
+ %br
24
+ = f.radio_button :tier, :machine
25
+ Machine
26
+ = f.radio_button:tier, :standard
27
+ Standard
28
+ = f.radio_button :tier, :pro
29
+ Pro
30
+ = f.radio_button :tier, :ultra
31
+ Ultra
32
+ #comment_area.hidden
33
+ Comment
34
+ %br
35
+ = f.text_area :comment, :size => '40x7'
36
+ #comment_button.field
37
+ = button_to_function 'Add comment' do |page|
38
+ - page['#comment_area'].show
39
+ - page['#comment_button'].hide
40
+
41
+ .field
42
+ = f.check_box :as_group
43
+ As group
44
+ .field
45
+ = f.check_box :auto_approve
46
+ Auto approve and publish jobs
47
+ / .field
48
+ / %h4 Total (250 words)
49
+ / $10.50
50
+ .field
51
+ = f.submit "Order"
52
+
53
+ .clear
@@ -0,0 +1,36 @@
1
+ %h3 Rejection form
2
+ = form_for :job, :url => {:action => 'reject', :id => @job['job_id']} do |f|
3
+ .field
4
+ Job ##{link_to @job['job_id'], mygengo_job_path(@job['job_id'])}
5
+ .field
6
+ Whould you like to cancel the translation?
7
+ %br
8
+ = radio_button_tag 'job[follow_up]', 'cancel'
9
+ Yes, please cancel and refund me
10
+ %br
11
+ = radio_button_tag 'job[follow_up]', 'requeue'
12
+ No, please have another translator finish the job
13
+ .field
14
+ Rejection reason
15
+ %br
16
+ = radio_button_tag 'job[reason]', 'quality'
17
+ Poor quality of translation
18
+ %br
19
+ = radio_button_tag 'job[reason]', 'missing'
20
+ Missing of incomplete translation
21
+ %br
22
+ = radio_button_tag 'job[reason]', 'missing'
23
+ Other (please describe beliw)
24
+ .field
25
+ Comment
26
+ %br
27
+ = text_area_tag 'job[comment]', '', :size => '40x2'
28
+ - if (@job['captcha_url'] && !@job['captcha_url'].empty?)
29
+ .field
30
+ = image_tag @job['captcha_url']
31
+ %br
32
+ = text_field_tag 'job[captcha]'
33
+
34
+ = f.submit "Reject translation"
35
+ |
36
+ = link_to :back
@@ -0,0 +1,54 @@
1
+ %h3 Job review page
2
+ = form_for :job, :url => {:action => 'approve', :id => @job['job_id']} do |f|
3
+ .field
4
+ Job ##{link_to @job['job_id'], mygengo_job_path(@job['job_id'])}
5
+ .field
6
+ %h4
7
+ Original text
8
+ %br
9
+ = text_area_tag :body_src, @job['body_src'], :size => '40x7'
10
+ .field
11
+ %h4
12
+ Preview
13
+ %br
14
+ = image_tag @preview, :title => "translation preview"
15
+
16
+ .field
17
+ Please rate the translation
18
+ %br
19
+ Bad
20
+ = radio_button_tag 'job[rating]', 1
21
+ 1
22
+ = radio_button_tag 'job[rating]', 2
23
+ 2
24
+ = radio_button_tag 'job[rating]', 3
25
+ 3
26
+ = radio_button_tag 'job[rating]', 4
27
+ 4
28
+ = radio_button_tag 'job[rating]', 5
29
+ 5
30
+ Good
31
+ .field
32
+ for_translator
33
+ %br
34
+ = text_area_tag 'job[for_translator]', '', :size => '40x2'
35
+ .field
36
+ for_mygengo
37
+ %br
38
+ = text_area_tag 'job[for_mygengo]', '', :size => '40x2'
39
+
40
+ .field
41
+ Can myGengo use this translation publicly in its examples?
42
+ %br
43
+ = check_box_tag 'job[public]', '1'
44
+ Yes, you can use this translation as public example of myGengo service.
45
+
46
+ .mygengo-box
47
+ = render :partial => "comments", :locals => {:comments => @comments}
48
+
49
+
50
+ = f.submit "Approve"
51
+ |
52
+ = link_to 'Reject', reject_form_mygengo_job_path(@job['job_id'])
53
+ |
54
+ = link_to 'Request corrections', revise_form_mygengo_job_path(@job['job_id'])
@@ -0,0 +1,7 @@
1
+ %h3 Revise
2
+ = form_for :job, :url => {:action => 'revise', :id => @job['job_id']} do |f|
3
+ .field
4
+ Comment
5
+ %br
6
+ = text_area_tag 'job[comment]', '', :size => '40x7'
7
+ = f.submit 'Revise'
@@ -0,0 +1,8 @@
1
+ %h2 Job: #{@job['job_id']}
2
+
3
+ %p
4
+ Source:
5
+ %br
6
+ = @revision['body_tgt']
7
+
8
+ = link_to 'Back', mygengo_job_path(@job['job_id'])
@@ -0,0 +1,38 @@
1
+ .mygengo-job
2
+ %h2 Job: #{@job['job_id']}(#{@job['slug']})
3
+
4
+ %table.general
5
+ = render :partial => 'mygengo/jobs/job', :locals => {:job => @job}
6
+
7
+ .mygengo-form
8
+ .left
9
+ Body
10
+ %br
11
+ = text_area_tag :body_src, @job['body_src'], :size => '40x11'
12
+ %br
13
+ - if @job['status'] == 'pending' || @job['status'] == 'approved'
14
+ %div
15
+ Body (translated)
16
+ %br
17
+ = text_area_tag :body_tgt, @job['body_tgt'], :size => '40x10'
18
+ - if @job['status'] == 'pending'
19
+ %br
20
+ Warning: this is machine pre-translation
21
+ .clear
22
+ - unless @feedback.blank?
23
+ = render :partial => "mygengo/jobs/feedback", :locals => {:feedback => @feedback}
24
+
25
+ %br
26
+
27
+ - unless @job['status'] == 'available' || @job['status'] == 'approved'
28
+ .mygengo-box
29
+ = render :partial => "comments", :locals => {:comments => @comments}
30
+ = render :partial => "mygengo/comments/form"
31
+
32
+
33
+ - unless @revisions.empty?
34
+ .mygengo-box
35
+ %h4 Revisions
36
+ %ul.mygengo-revisions
37
+ - for rev in @revisions
38
+ = render :partial => "mygengo/jobs/revision", :locals => {:revision => rev, :job => @job}
@@ -0,0 +1,2 @@
1
+ Mugen.api_key = ''
2
+ Mugen.private_key = ''
@@ -0,0 +1,16 @@
1
+ map.namespace(:mygengo) do |admin|
2
+ admin.resources :jobs, :member => {
3
+ :review_form => :get,
4
+ :reject_form => :get,
5
+ :revise_form => :get,
6
+ :purchase => :get,
7
+ :reject => :post,
8
+ :revise => :post,
9
+ :approve => :post,
10
+ :callback => :post,
11
+ }
12
+ admin.resources :comments, :only => [:create]
13
+ admin.resources :account, :only => [:index]
14
+ end
15
+
16
+ map.revision_mygengo_job '/mygengo/jobs/:job_id/revision/:id', :controller => 'mygengo/jobs', :action => 'revision'
@@ -0,0 +1,17 @@
1
+ namespace :mygengo do
2
+ resources :jobs do
3
+ member do
4
+ get :review_form
5
+ get :reject_form
6
+ get :revise_form
7
+ get :purchase
8
+ post :reject
9
+ post :revise
10
+ post :approve
11
+ post :callback
12
+ end
13
+ end
14
+ resources :comments, :only => [:create]
15
+ resources :account, :only => [:index]
16
+ end
17
+ match '/mygengo/jobs/:job_id/revision/:id' => 'mygengo/jobs#revision', :as => :revision_mygengo_job
@@ -0,0 +1,397 @@
1
+ * {margin:0;padding:0}
2
+ .clear { clear: both; height: 0; }
3
+
4
+ .wat-cf:after {
5
+ content: ".";
6
+ display: block;
7
+ height: 0;
8
+ clear: both;
9
+ visibility: hidden;
10
+ }
11
+
12
+ .wat-cf {display: inline-block;}
13
+
14
+ /* Hides from IE-mac \*/
15
+ * html .wat-cf {height: 1%;}
16
+ .wat-cf {display: block;}
17
+ /* End hide from IE-mac */
18
+
19
+ h1 { margin: 15px 0; font-size: 22px; font-weight: normal; }
20
+ h2 { font-size: 22px; margin: 15px 0; font-weight: normal;}
21
+ h3 { font-size: 18px; margin: 10px 0; font-weight: normal;}
22
+ h4 { font-size: 16px; margin: 10px 0; font-weight: normal;}
23
+ hr {height: 1px; border: 0; }
24
+ p { margin: 15px 0;}
25
+ a img { border: none; }
26
+
27
+ body {
28
+ font-size: 12px;
29
+ font-family: sans-serif;
30
+ }
31
+
32
+ #container {
33
+ min-width: 960px;
34
+ }
35
+
36
+ #header, #wrapper {
37
+ padding: 0 20px;
38
+ }
39
+
40
+ #header {
41
+ position: relative;
42
+ padding-top: 1px;
43
+ }
44
+
45
+ #header h1 {
46
+ margin: 0;
47
+ padding: 10px 0;
48
+ font-size: 26px;
49
+ }
50
+
51
+ #header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
52
+ text-decoration: none;
53
+ }
54
+
55
+ #main {
56
+ width: 70%;
57
+ float: left;
58
+ }
59
+
60
+ .actions-bar {
61
+ padding: 10px 1px;
62
+ }
63
+
64
+ .actions-bar .actions {
65
+ float: left;
66
+ }
67
+
68
+
69
+ .actions-bar .pagination {
70
+ float: right;
71
+ padding: 1px 0;
72
+ }
73
+
74
+ #sidebar {
75
+ width: 25%;
76
+ float: right;
77
+ }
78
+
79
+ #sidebar h3 {
80
+ padding: 10px 15px;
81
+ margin: 0;
82
+ font-size: 13px;
83
+ }
84
+
85
+ #sidebar .block {
86
+ margin-bottom: 20px;
87
+ padding-bottom: 10px;
88
+ }
89
+
90
+ #sidebar .block .content {
91
+ padding: 0 15px;
92
+ }
93
+
94
+ #sidebar ul.navigation li a:link, #sidebar ul.navigation li a:visited {
95
+ display: block;
96
+ padding: 10px 15px;
97
+ }
98
+
99
+ #sidebar .block .sidebar-block, #sidebar .notice {
100
+ padding:10px;
101
+ }
102
+
103
+ #wrapper {
104
+ padding-top: 20px;
105
+ }
106
+
107
+ #main .block {
108
+ margin-bottom: 20px;
109
+ padding-top: 1px;
110
+ }
111
+
112
+ #main .block .content .inner {
113
+ padding: 0 15px 15px;
114
+ }
115
+
116
+ #main .main p.first {
117
+ margin-top: 0;
118
+ }
119
+
120
+ #user-navigation {
121
+ position: absolute;
122
+ top: 0px;
123
+ right: 20px;
124
+ }
125
+
126
+ #main-navigation {
127
+ width: 100%;
128
+ }
129
+
130
+ #user-navigation ul, #main-navigation ul, .secondary-navigation ul, #sidebar ul.navigation {
131
+ margin: 0;
132
+ padding: 0;
133
+ list-style-type: none;
134
+ }
135
+
136
+ #user-navigation ul li, #main-navigation ul li, .secondary-navigation ul li {
137
+ float: left;
138
+ }
139
+
140
+ #main-navigation ul li {
141
+ margin-right: 5px;
142
+ }
143
+
144
+ #user-navigation ul li {
145
+ padding: 5px 10px;
146
+ }
147
+
148
+ #main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
149
+ .secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
150
+ #user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
151
+ text-decoration: none;
152
+ }
153
+
154
+ #main-navigation ul li a {
155
+ font-size: 14px;
156
+ line-height: 14px;
157
+ display: block;
158
+ padding: 8px 15px;
159
+ }
160
+
161
+ .secondary-navigation {
162
+ font-size: 13px;
163
+ border-bottom-width: 10px;
164
+ border-bottom-style: solid;
165
+ }
166
+
167
+ .secondary-navigation ul li a {
168
+ display: block;
169
+ padding: 10px 15px;
170
+ }
171
+
172
+ #footer {
173
+ padding-bottom: 20px;
174
+ }
175
+
176
+ /* pagination */
177
+
178
+ .pagination a, .pagination span, .pagination em {
179
+ padding: 2px 5px;
180
+ margin-right: 5px;
181
+ display: block;
182
+ float: left;
183
+ border-style: solid;
184
+ border-width: 1px;
185
+ }
186
+
187
+ .pagination em {
188
+ font-weight: bold;
189
+ }
190
+
191
+ .pagination a {
192
+ text-decoration: none;
193
+ }
194
+
195
+ /* tables */
196
+ .table {
197
+ width: 100%;
198
+ border-collapse: collapse;
199
+ margin-bottom: 15px;
200
+ }
201
+
202
+ .table th {
203
+ padding: 10px;
204
+ font-weight: bold;
205
+ text-align: left;
206
+ }
207
+
208
+ .table th.first {
209
+ width: 30px;
210
+ }
211
+
212
+ .table th.last {
213
+ width: 200px;
214
+ }
215
+
216
+ .table .checkbox {
217
+ margin-left: 10px;
218
+ }
219
+
220
+ .table td {
221
+ padding: 10px;
222
+ }
223
+
224
+ .table td.last {
225
+ text-align: right;
226
+ }
227
+
228
+ /* forms */
229
+
230
+ input.checkbox {
231
+ margin: 0;
232
+ padding: 0;
233
+ }
234
+
235
+ .form .group {
236
+ margin-bottom: 15px;
237
+ }
238
+
239
+ .form div.left {
240
+ width: 20%;
241
+ float: left;
242
+ }
243
+
244
+ .form div.right {
245
+ width: 75%;
246
+ float: right;
247
+ }
248
+
249
+ .form .columns .column {
250
+ width: 48%;
251
+ }
252
+
253
+ .form .columns .left {
254
+ float: left;
255
+ }
256
+
257
+ .form .columns .right {
258
+ float: right;
259
+ }
260
+
261
+ .form label.label, .form input.text_field, .form textarea.text_area {
262
+ font-size: 1.2em;
263
+ padding: 1px 0;
264
+ margin: 0;
265
+ }
266
+
267
+ .form label.right {
268
+ text-align: right;
269
+ }
270
+
271
+ .form input.checkbox, .form input.radio {
272
+ margin-right: 5px;
273
+ }
274
+
275
+ .form label.checkbox, .form label.radio {
276
+ line-height: 1.5em;
277
+ }
278
+
279
+ .form label.label {
280
+ display: block;
281
+ padding-bottom: 2px;
282
+ font-weight: bold;
283
+ }
284
+
285
+ .form div.fieldWithErrors label.label {
286
+ display: inline;
287
+ }
288
+
289
+ .form .fieldWithErrors .error {
290
+ color: red;
291
+ }
292
+
293
+ .form input.text_field, .form textarea.text_area {
294
+ width: 100%;
295
+ border-width: 1px;
296
+ border-style: solid;
297
+ }
298
+
299
+ /* lists */
300
+
301
+ ul.list {
302
+ margin: 0;
303
+ padding: 0;
304
+ list-style-type: none;
305
+ }
306
+
307
+ ul.list li {
308
+ clear: left;
309
+ padding-bottom: 5px;
310
+ }
311
+
312
+ ul.list li .left {
313
+ float: left;
314
+ }
315
+
316
+ ul.list li .left .avatar {
317
+ width: 50px;
318
+ height: 50px;
319
+ }
320
+
321
+ ul.list li .item {
322
+ margin-left: 80px;
323
+ }
324
+
325
+ ul.list li .item .avatar {
326
+ float: left;
327
+ margin: 0 5px 5px 0;
328
+ width: 30px;
329
+ height: 30px;
330
+ }
331
+
332
+ /* box */
333
+
334
+ #box {
335
+ width: 500px;
336
+ margin: 50px auto;
337
+ }
338
+
339
+ #box .block {
340
+ margin-bottom: 20px;
341
+ }
342
+
343
+ #box .block h2 {
344
+ padding: 10px 15px;
345
+ margin: 0;
346
+ }
347
+
348
+ #box .block .content {
349
+ padding: 10px 20px;
350
+ }
351
+
352
+ /* Inspired by http://particletree.com/features/rediscovering-the-button-element */
353
+
354
+ a.button:link, a.button:visited, a.button:hover, a.button:active, button.button {
355
+ color: #222;
356
+ display:block;
357
+ float:left;
358
+ margin:0 7px 0 0;
359
+ background-color: #eee;
360
+ border:1px solid #bfbfbf;
361
+ font-size: 1em;
362
+ line-height: 1.3em;
363
+ font-weight:bold;
364
+ cursor:pointer;
365
+ padding:5px 10px 6px 7px;
366
+ text-decoration: none;
367
+ }
368
+
369
+ button.button {
370
+ width:auto;
371
+ overflow:visible;
372
+ padding:4px 10px 3px 7px; /* IE6 */
373
+ }
374
+ button.button[type] {
375
+ padding:5px 10px 5px 7px; /* Firefox */
376
+ line-height:17px; /* Safari */
377
+ }
378
+
379
+ *:first-child+html button.button[type] {
380
+ padding:4px 10px 3px 7px; /* IE7 */
381
+ }
382
+
383
+ button.button img, a.button img {
384
+ margin:0 3px -3px 0 !important;
385
+ padding:0;
386
+ border:none;
387
+ width:16px;
388
+ height:16px;
389
+ }
390
+
391
+ button.button:hover, a.button:hover {
392
+ background-color:#dedede;
393
+ }
394
+
395
+ button.button:active, a.button:active {
396
+ background-color:#e5e5e5;
397
+ }