web-app-theme 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/.gitignore +2 -0
  2. data/LICENSE +21 -0
  3. data/README.md +22 -0
  4. data/Rakefile +25 -0
  5. data/VERSION +1 -0
  6. data/features/step_definitions/layout_steps.rb +55 -0
  7. data/features/step_definitions/themed_steps.rb +19 -0
  8. data/features/support/env.rb +82 -0
  9. data/features/theme_generator.feature +51 -0
  10. data/features/themed_generator.feature +52 -0
  11. data/images/avatar.png +0 -0
  12. data/index.html +474 -0
  13. data/javascripts/jquery-1.3.min.js +19 -0
  14. data/javascripts/jquery.localscroll.js +104 -0
  15. data/javascripts/jquery.scrollTo.js +150 -0
  16. data/lib/web_app_theme.rb +2 -0
  17. data/rails_generators/theme/USAGE +4 -0
  18. data/rails_generators/theme/templates/view_layout_administration.html.erb +48 -0
  19. data/rails_generators/theme/templates/view_layout_sign.html.erb +15 -0
  20. data/rails_generators/theme/templates/web_app_theme_override.css +1 -0
  21. data/rails_generators/theme/theme_generator.rb +39 -0
  22. data/rails_generators/themed/USAGE +4 -0
  23. data/rails_generators/themed/templates/view_edit.html.erb +20 -0
  24. data/rails_generators/themed/templates/view_form.html.erb +10 -0
  25. data/rails_generators/themed/templates/view_new.html.erb +19 -0
  26. data/rails_generators/themed/templates/view_show.html.erb +23 -0
  27. data/rails_generators/themed/templates/view_sidebar.html.erb +13 -0
  28. data/rails_generators/themed/templates/view_signin.html.erb +39 -0
  29. data/rails_generators/themed/templates/view_signup.html.erb +56 -0
  30. data/rails_generators/themed/templates/view_tables.html.erb +54 -0
  31. data/rails_generators/themed/templates/view_text.html.erb +18 -0
  32. data/rails_generators/themed/themed_generator.rb +95 -0
  33. data/stylesheets/base.css +336 -0
  34. data/stylesheets/themes/bec-green/style.css +290 -0
  35. data/stylesheets/themes/bec/style.css +301 -0
  36. data/stylesheets/themes/blue/style.css +280 -0
  37. data/stylesheets/themes/default/style.css +267 -0
  38. data/stylesheets/themes/djime-cerulean/style.css +298 -0
  39. data/stylesheets/themes/drastic-dark/style.css +373 -0
  40. data/stylesheets/themes/kathleene/style.css +272 -0
  41. data/stylesheets/themes/orange/style.css +263 -0
  42. data/stylesheets/themes/reidb-greenish/style.css +301 -0
  43. data/stylesheets/themes/warehouse/style.css +391 -0
  44. data/test/spec_helper.rb +5 -0
  45. data/test/themed_generator_spec.rb +115 -0
  46. metadata +101 -0
@@ -0,0 +1,23 @@
1
+ <div class="block">
2
+ <div class="secondary-navigation">
3
+ <ul>
4
+ <li class="first"><%%= link_to 'List', <%= controller_routing_path %>_path %></li>
5
+ <li><%%= link_to 'New', new_<%= singular_controller_routing_path %>_path %></li>
6
+ <li class="active"><%%= link_to 'Show', <%= singular_controller_routing_path %>_path %></li>
7
+ </ul>
8
+ <div class="clear"></div>
9
+ </div>
10
+ <div class="content">
11
+ <div class="inner">
12
+ <% columns.each do |column| %>
13
+ <p>
14
+ <b><%= column.name.capitalize %>:</b>
15
+ <%%= @<%= resource_name %>.<%= column.name %> %>
16
+ </p>
17
+ <%- end -%>
18
+ <%%= link_to 'Edit', edit_<%= singular_controller_routing_path %>_path(@<%= resource_name %>) %>
19
+ </div>
20
+ </div>
21
+ </div>
22
+
23
+ <%% content_for :sidebar, render(:partial => 'sidebar') -%>
@@ -0,0 +1,13 @@
1
+ <div class="block">
2
+ <h3>Simple Block</h3>
3
+ <div class="content">
4
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
5
+ </div>
6
+ </div>
7
+ <div class="block">
8
+ <h3>Links</h3>
9
+ <ul class="navigation">
10
+ <li><a href="#">Link 1</a></li>
11
+ <li><a href="#">Link 2</a></li>
12
+ </ul>
13
+ </div>
@@ -0,0 +1,39 @@
1
+ <h1><%= options[:app_name] %></h1>
2
+ <div class="block" id="block-login">
3
+ <h2>Login Box</h2>
4
+ <div class="content login">
5
+ <div class="flash">
6
+ <%% flash.each do |type, message| -%>
7
+ <div class="message <%%= type %>">
8
+ <p><%%= message %></p>
9
+ </div>
10
+ <%% end -%>
11
+ </div>
12
+ <%% form_tag({:action => :create}, :class => 'form login') do -%>
13
+ <div class="group">
14
+ <div class="left">
15
+ <label class="label right">Login</label>
16
+ </div>
17
+ <div class="right">
18
+ <%%= text_field_tag :login, @login, :class => 'text_field' %>
19
+ </div>
20
+ <div class="clear"></div>
21
+ </div>
22
+ <div class="group">
23
+ <div class="left">
24
+ <label class="label right">Password</label>
25
+ </div>
26
+ <div class="right">
27
+ <%%= password_field_tag :password, nil, :class => 'text_field' %>
28
+ </div>
29
+ <div class="clear"></div>
30
+ </div>
31
+ <div class="group navform">
32
+ <div class="right">
33
+ <input type="submit" class="button" value="Sign in" />
34
+ </div>
35
+ <div class="clear"></div>
36
+ </div>
37
+ <%% end -%>
38
+ </div>
39
+ </div>
@@ -0,0 +1,56 @@
1
+ <h1><%= options[:app_name] %></h1>
2
+ <div class="block" id="block-signup">
3
+ <h2>Sign up</h2>
4
+ <div class="content">
5
+ <div class="flash">
6
+ <%% flash.each do |type, message| -%>
7
+ <div class="message <%%= type %>">
8
+ <p><%%= message %></p>
9
+ </div>
10
+ <%% end -%>
11
+ </div>
12
+ <%% form_for :<%= resource_name %>, :url => <%= controller_routing_path %>_path, :html => { :class => 'form' } do |f| -%>
13
+ <div class="group">
14
+ <div class="left">
15
+ <label class="label">Login</label>
16
+ </div>
17
+ <div class="right">
18
+ <%%= f.text_field :login, :class => 'text_field' %>
19
+ </div>
20
+ <div class="clear"></div>
21
+ </div>
22
+ <div class="group">
23
+ <div class="left">
24
+ <label class="label">Email</label>
25
+ </div>
26
+ <div class="right">
27
+ <%%= f.text_field :email, :class => 'text_field' %>
28
+ </div>
29
+ <div class="clear"></div>
30
+ </div>
31
+ <div class="group">
32
+ <div class="left">
33
+ <label class="label">Password</label>
34
+ </div>
35
+ <div class="right">
36
+ <%%= f.password_field :password, :class => 'text_field' %>
37
+ </div>
38
+ <div class="clear"></div>
39
+ </div>
40
+
41
+ <div class="group">
42
+ <div class="left">
43
+ <label class="label">Password</label>
44
+ </div>
45
+ <div class="right">
46
+ <%%= f.password_field :password_confirmation, :class => 'text_field' %>
47
+ </div>
48
+ <div class="clear"></div>
49
+ </div>
50
+
51
+ <div class="group navform">
52
+ <input type="submit" class="button" value="Sign up" />
53
+ </div>
54
+ <%% end -%>
55
+ </div>
56
+ </div>
@@ -0,0 +1,54 @@
1
+ <div class="block">
2
+ <div class="secondary-navigation">
3
+ <ul>
4
+ <li class="first active"><%%= link_to 'List', <%= controller_routing_path %>_path %></li>
5
+ <li><%%= link_to 'New', new_<%= singular_controller_routing_path %>_path %></li>
6
+ </ul>
7
+ <div class="clear"></div>
8
+ </div>
9
+ <div class="content">
10
+ <h2 class="title">All <%= plural_model_name %></h2>
11
+ <div class="inner">
12
+ <table class="table">
13
+ <tr>
14
+ <th class="first">ID</th>
15
+ <% unless columns.empty? -%>
16
+ <th><%= columns.first.name.capitalize %></th>
17
+ <% end -%>
18
+ <th>Created at</th>
19
+ <th class="last">&nbsp;</th>
20
+ </tr>
21
+ <%% @<%= plural_resource_name %>.each do |<%= resource_name %>| -%>
22
+ <tr class="<%%= cycle("odd", "even") %>">
23
+ <td>
24
+ <%%= <%= resource_name %>.id %>
25
+ </td>
26
+ <% unless columns.empty? -%>
27
+ <td>
28
+ <%%= link_to <%= resource_name %>.<%= columns.first.name %>, <%= singular_controller_routing_path %>_path(<%= resource_name %>) %>
29
+ </td>
30
+ <% end -%>
31
+ <td>
32
+ <%%= <%= resource_name %>.created_at %>
33
+ </td>
34
+ <td class="last">
35
+ <%%= link_to 'show', <%= singular_controller_routing_path %>_path(<%= resource_name %>) %> |
36
+ <%%= link_to 'edit', edit_<%= singular_controller_routing_path %>_path(<%= resource_name %>) %> |
37
+ <%%= link_to 'destroy', <%= singular_controller_routing_path %>_path(<%= resource_name %>), :method => :delete, :confirm => 'Are you sure?' %>
38
+ </td>
39
+ </tr>
40
+ <%% end -%>
41
+ </table>
42
+ <div class="actions-bar">
43
+ <div class="actions">
44
+ </div>
45
+ <% if options[:will_paginate] %>
46
+ <%%= will_paginate @<%= resource_name %> %>
47
+ <% end %>
48
+ <div class="clear"></div>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </div>
53
+
54
+ <%% content_for :sidebar, render(:partial => 'sidebar') -%>
@@ -0,0 +1,18 @@
1
+ <div class="block" id="block-text">
2
+ <div class="content">
3
+ <h2 class="title"><%= resource_name.capitalize %></h2>
4
+ <div class="inner">
5
+ <p class="first">
6
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <span class="hightlight">Excepteur sint occaecat cupidatat non proident</span>, sunt in culpa qui officia deserunt mollit anim id est laborum.
7
+ </p>
8
+ <p> <span class="small">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore</span></p>
9
+ <p> <span class="gray">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore</span></p>
10
+ <hr />
11
+ <p>
12
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <span class="hightlight">Excepteur sint occaecat cupidatat non proident</span>, sunt in culpa qui officia deserunt mollit anim id est laborum.
13
+ </p>
14
+ </div>
15
+ </div>
16
+ </div>
17
+
18
+ <%% content_for :sidebar, render(:partial => 'sidebar') -%>
@@ -0,0 +1,95 @@
1
+ class ThemedGenerator < Rails::Generator::NamedBase
2
+
3
+ default_options :app_name => 'Web App',
4
+ :themed_type => :crud,
5
+ :layout => false,
6
+ :will_paginate => false
7
+
8
+ attr_reader :controller_routing_path,
9
+ :singular_controller_routing_path,
10
+ :columns,
11
+ :model_name,
12
+ :plural_model_name,
13
+ :resource_name,
14
+ :plural_resource_name
15
+
16
+ def initialize(runtime_args, runtime_options = {})
17
+ super
18
+ @controller_path = runtime_args.shift
19
+ @model_name = runtime_args.shift
20
+ end
21
+
22
+ def manifest
23
+ @controller_routing_path = @table_name
24
+ @singular_controller_routing_path = @table_name.singularize
25
+ base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_path)
26
+ @model_name = base_name.singularize unless @model_name
27
+
28
+ # Post
29
+ @model_name = @model_name.camelize
30
+ # Posts
31
+ @plural_model_name = @model_name.pluralize
32
+ # post
33
+ @resource_name = @model_name.underscore
34
+ # posts
35
+ @plural_resource_name = @resource_name.pluralize
36
+
37
+ manifest_method = "manifest_for_#{options[:themed_type]}"
38
+ record do |m|
39
+ send(manifest_method, m) if respond_to?(manifest_method)
40
+ end
41
+ end
42
+
43
+ protected
44
+
45
+ def manifest_for_crud(m)
46
+ @columns = get_columns
47
+ m.directory(File.join('app/views', @controller_file_path))
48
+ m.template('view_tables.html.erb', File.join("app/views", @controller_file_path, "index.html.erb"))
49
+ m.template('view_new.html.erb', File.join("app/views", @controller_file_path, "new.html.erb"))
50
+ m.template('view_edit.html.erb', File.join("app/views", @controller_file_path, "edit.html.erb"))
51
+ m.template('view_form.html.erb', File.join("app/views", @controller_file_path, "_form.html.erb"))
52
+ m.template('view_show.html.erb', File.join("app/views", @controller_file_path, "show.html.erb"))
53
+ m.template('view_sidebar.html.erb', File.join("app/views", @controller_file_path, "_sidebar.html.erb"))
54
+
55
+ if options[:layout]
56
+ m.gsub_file(File.join("app/views/layouts", "#{options[:layout]}.html.erb"), /\<div\s+id=\"main-navigation\">.*\<\/ul\>/mi) do |match|
57
+ match.gsub!(/\<\/ul\>/, "")
58
+ %|#{match} <li class="<%= controller.controller_path == '#{@controller_file_path}' ? 'active' : '' %>"><a href="<%= #{controller_routing_path}_path %>">#{plural_model_name}</a></li></ul>|
59
+ end
60
+ end
61
+ end
62
+
63
+ def manifest_for_restful_authentication(m)
64
+ signup_controller_path = @controller_file_path
65
+ signin_controller_path = @model_name.downcase # just here I use the second argument as a controller path
66
+ @resource_name = @controller_path.singularize
67
+ m.template('view_signup.html.erb', File.join("app/views", signup_controller_path, "new.html.erb"))
68
+ m.template('view_signin.html.erb', File.join("app/views", signin_controller_path, "new.html.erb"))
69
+ end
70
+
71
+ def manifest_for_text(m)
72
+ m.directory(File.join('app/views', @controller_file_path))
73
+ m.template('view_text.html.erb', File.join("app/views", @controller_file_path, "show.html.erb"))
74
+ m.template('view_sidebar.html.erb', File.join("app/views", @controller_file_path, "_sidebar.html.erb"))
75
+ end
76
+
77
+ def get_columns
78
+ excluded_column_names = %w[id created_at updated_at]
79
+ Kernel.const_get(@model_name).columns.reject{|c| excluded_column_names.include?(c.name) }.collect{|c| Rails::Generator::GeneratedAttribute.new(c.name, c.type)}
80
+ end
81
+
82
+ def banner
83
+ "Usage: #{$0} themed ControllerPath [ModelName] [options]"
84
+ end
85
+
86
+ def add_options!(opt)
87
+ opt.separator ''
88
+ opt.separator 'Options:'
89
+ opt.on("--app_name=app_name", String, "") { |v| options[:app_name] = v }
90
+ opt.on("--type=themed_type", String, "") { |v| options[:themed_type] = v }
91
+ opt.on("--layout=layout", String, "Add menu link") { |v| options[:layout] = v }
92
+ opt.on("--with_will_paginate", "Add pagination using will_paginate") { |v| options[:will_paginate] = true }
93
+ end
94
+
95
+ end
@@ -0,0 +1,336 @@
1
+ * {margin:0;padding:0}
2
+ .clear { clear: both; height: 0; }
3
+
4
+ h1 { margin: 15px 0; font-size: 22px; font-weight: normal; }
5
+ h2 { font-size: 22px; margin: 15px 0; font-weight: normal;}
6
+ h3 { font-size: 18px; margin: 10px 0; font-weight: normal;}
7
+ h4 { font-size: 16px; margin: 10px 0; font-weight: normal;}
8
+ hr {height: 1px; border: 0; }
9
+ p { margin: 15px 0;}
10
+ a img { border: none; }
11
+
12
+ body {
13
+ font-size: 12px;
14
+ font-family: sans-serif;
15
+ }
16
+
17
+ #container {
18
+ min-width: 960px;
19
+ }
20
+
21
+ #header, #wrapper {
22
+ padding: 0 20px;
23
+ }
24
+
25
+ #header {
26
+ position: relative;
27
+ padding-top: 1px;
28
+ }
29
+
30
+ #header h1 {
31
+ margin: 0;
32
+ padding: 10px 0;
33
+ font-size: 30px;
34
+ }
35
+
36
+ #header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
37
+ text-decoration: none;
38
+ }
39
+
40
+ #main {
41
+ width: 70%;
42
+ float: left;
43
+ }
44
+
45
+ .actions-bar {
46
+ padding: 10px 1px;
47
+ }
48
+
49
+ .actions-bar .actions {
50
+ float: left;
51
+ }
52
+
53
+
54
+ .actions-bar .pagination {
55
+ float: right;
56
+ padding: 1px 0;
57
+ }
58
+
59
+ #sidebar {
60
+ width: 25%;
61
+ float: right;
62
+ }
63
+
64
+ #sidebar h3 {
65
+ padding: 10px 15px;
66
+ margin: 0;
67
+ font-size: 13px;
68
+ }
69
+
70
+ #sidebar .block {
71
+ margin-bottom: 20px;
72
+ padding-bottom: 10px;
73
+ }
74
+
75
+ #sidebar .block .content {
76
+ padding: 0 15px;
77
+ }
78
+
79
+ #sidebar ul.navigation li a:link, #sidebar ul.navigation li a:visited {
80
+ display: block;
81
+ padding: 10px 15px;
82
+ }
83
+
84
+ #sidebar .block .sidebar-block, #sidebar .notice {
85
+ padding:10px;
86
+ }
87
+
88
+ #wrapper {
89
+ padding-top: 20px;
90
+ }
91
+
92
+ #main .block {
93
+ margin-bottom: 20px;
94
+ padding-top: 1px;
95
+ }
96
+
97
+ #main .block .content .inner {
98
+ padding: 0 15px 15px;
99
+ }
100
+
101
+ #main .main p.first {
102
+ margin-top: 0;
103
+ }
104
+
105
+ #user-navigation {
106
+ position: absolute;
107
+ top: 0px;
108
+ right: 20px;
109
+ }
110
+
111
+ #main-navigation {
112
+ width: 100%;
113
+ }
114
+
115
+ #user-navigation ul, #main-navigation ul, .secondary-navigation ul, #sidebar ul.navigation {
116
+ margin: 0;
117
+ padding: 0;
118
+ list-style-type: none;
119
+ }
120
+
121
+ #user-navigation ul li, #main-navigation ul li, .secondary-navigation ul li {
122
+ float: left;
123
+ }
124
+
125
+ #main-navigation ul li {
126
+ margin-right: 5px;
127
+ }
128
+
129
+ #user-navigation ul li {
130
+ padding: 5px 10px;
131
+ }
132
+
133
+ #main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
134
+ .secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
135
+ #user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
136
+ text-decoration: none;
137
+ }
138
+
139
+ #main-navigation ul li a {
140
+ font-size: 15px;
141
+ display: block;
142
+ padding: 8px 15px;
143
+ }
144
+
145
+ .secondary-navigation {
146
+ font-size: 13px;
147
+ border-bottom-width: 10px;
148
+ border-bottom-style: solid;
149
+ }
150
+
151
+ .secondary-navigation ul li a {
152
+ display: block;
153
+ padding: 10px 15px;
154
+ }
155
+
156
+ #footer {
157
+ padding-bottom: 20px;
158
+ }
159
+
160
+ /* pagination */
161
+
162
+ .pagination a, .pagination span {
163
+ padding: 2px 5px;
164
+ margin-right: 5px;
165
+ display: block;
166
+ float: left;
167
+ border-style: solid;
168
+ border-width: 1px;
169
+ }
170
+
171
+ .pagination span.current {
172
+ font-weight: bold;
173
+ }
174
+
175
+ .pagination a {
176
+ text-decoration: none;
177
+ }
178
+
179
+ /* tables */
180
+ .table {
181
+ width: 100%;
182
+ border-collapse: collapse;
183
+ margin-bottom: 15px;
184
+ }
185
+
186
+ .table th {
187
+ padding: 10px;
188
+ font-weight: bold;
189
+ text-align: left;
190
+ }
191
+
192
+ .table th.first {
193
+ width: 30px;
194
+ }
195
+
196
+ .table th.last {
197
+ width: 200px;
198
+ }
199
+
200
+ .table .checkbox {
201
+ margin-left: 10px;
202
+ }
203
+
204
+ .table td {
205
+ padding: 10px;
206
+ }
207
+
208
+ .table td.last {
209
+ text-align: right;
210
+ }
211
+
212
+ /* forms */
213
+
214
+ input.checkbox {
215
+ margin: 0;
216
+ padding: 0;
217
+ }
218
+
219
+ .form .group {
220
+ margin-bottom: 15px;
221
+ }
222
+
223
+ .form div.left {
224
+ width: 20%;
225
+ float: left;
226
+ }
227
+
228
+ .form div.right {
229
+ width: 75%;
230
+ float: right;
231
+ }
232
+
233
+ .form .columns .column {
234
+ width: 48%;
235
+ }
236
+
237
+ .form .columns .left {
238
+ float: left;
239
+ }
240
+
241
+ .form .columns .right {
242
+ float: right;
243
+ }
244
+
245
+ .form label.label, .form input.text_field, .form textarea.text_area {
246
+ font-size: 1.2em;
247
+ padding: 1px 0;
248
+ margin: 0;
249
+ }
250
+
251
+ .form label.right {
252
+ text-align: right;
253
+ }
254
+
255
+ .form input.checkbox, .form input.radio {
256
+ margin-right: 5px;
257
+ }
258
+
259
+ .form label.checkbox, .form label.radio {
260
+ line-height: 1.5em;
261
+ }
262
+
263
+ .form label.label {
264
+ display: block;
265
+ padding-bottom: 2px;
266
+ font-weight: bold;
267
+ }
268
+
269
+ .form div.fieldWithErrors label.label {
270
+ display: inline;
271
+ }
272
+
273
+ .form .fieldWithErrors .error {
274
+ color: red;
275
+ }
276
+
277
+ .form input.text_field, .form textarea.text_area {
278
+ width: 100%;
279
+ border-width: 1px;
280
+ border-style: solid;
281
+ }
282
+
283
+ /* lists */
284
+
285
+ ul.list {
286
+ margin: 0;
287
+ padding: 0;
288
+ list-style-type: none;
289
+ }
290
+
291
+ ul.list li {
292
+ clear: left;
293
+ padding-bottom: 5px;
294
+ }
295
+
296
+ ul.list li .left {
297
+ float: left;
298
+ }
299
+
300
+ ul.list li .left .avatar {
301
+ width: 50px;
302
+ height: 50px;
303
+ }
304
+
305
+ ul.list li .item {
306
+ margin-left: 80px;
307
+ }
308
+
309
+ ul.list li .item .avatar {
310
+ float: left;
311
+ margin: 0 5px 5px 0;
312
+ width: 30px;
313
+ height: 30px;
314
+ }
315
+
316
+ /* box */
317
+
318
+ #box {
319
+ width: 500px;
320
+ margin: 50px auto;
321
+ }
322
+
323
+ #box .block {
324
+ margin-bottom: 20px;
325
+ }
326
+
327
+ #box .block h2 {
328
+ padding: 10px 15px;
329
+ margin: 0;
330
+ }
331
+
332
+ #box .block .content {
333
+ padding: 10px 20px;
334
+ }
335
+
336
+