mugen 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }