muck-users 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -46,20 +46,31 @@ class Admin::Muck::RolesController < Admin::Muck::BaseController
46
46
  flash[:notice] = translate('muck.users.cant_delete_administrator_role')
47
47
  output_admin_messages
48
48
  else
49
- @role.delete
50
- render :update do |page|
51
- page.remove @role.dom_id
49
+ success = @role.delete
50
+ flash[:notice] = translate('muck.users.role_not_deleted') if !success
51
+
52
+ respond_to do |format|
53
+ format.html do
54
+ flash[:notice] = translate('muck.users.role_deleted') if success
55
+ redirect_to admin_roles_path
56
+ end
57
+ format.xml { head :ok }
58
+ format.js do
59
+ if success
60
+ render :js => 'admin/roles/destroy'
61
+ else
62
+ output_admin_messages
63
+ end
64
+ end
52
65
  end
66
+
53
67
  end
54
68
  end
55
69
 
56
70
  protected
57
71
 
58
72
  def ajax_update_roles
59
- render :update do |page|
60
- page.replace_html 'current-roles', :partial => 'admin/roles/role', :collection => Role.by_alpha
61
- page << "jQuery('.dialog').dialog('close');"
62
- end
73
+ render :template => 'admin/roles/ajax_update_roles'
63
74
  end
64
75
 
65
76
  end
@@ -125,7 +125,7 @@ class Admin::Muck::UsersController < Admin::Muck::BaseController
125
125
  redirect_to admin_users_path
126
126
  end
127
127
  format.xml { head :ok }
128
- format.js { render(:update){|page| page.visual_effect :fade, "#{@user.dom_id('row')}".to_sym} }
128
+ format.js { render :js => "#{}jQuery('##{@user.dom_id('row')}').fadeOut();" }
129
129
  end
130
130
  end
131
131
 
@@ -137,10 +137,7 @@ class Admin::Muck::UsersController < Admin::Muck::BaseController
137
137
 
138
138
  def update_permissions(user, message)
139
139
  flash[:notice] = message
140
- render :update do |page|
141
- page << "jQuery('.dialog').dialog('close');"
142
- page.replace_html user.dom_id('permissions'), :partial => 'admin/permissions/permission', :collection => user.permissions, :locals => { :user => user }
143
- end
140
+ render :template => 'admin/users/update_permissions', :layout => false
144
141
  end
145
142
 
146
143
  def update_activate(message)
@@ -97,8 +97,8 @@ class Muck::UsersController < ApplicationController
97
97
  end
98
98
  end
99
99
  respond_to do |format|
100
- format.html { render :text => result}
101
- format.js { render :text => result}
100
+ format.html { render :text => result }
101
+ format.js { render :text => result }
102
102
  end
103
103
  end
104
104
 
@@ -120,7 +120,7 @@ class Muck::UsersController < ApplicationController
120
120
  end
121
121
  respond_to do |format|
122
122
  format.html { render :text => result }
123
- format.js { render :text => result}
123
+ format.js { render :text => result }
124
124
  end
125
125
  end
126
126
 
@@ -0,0 +1,2 @@
1
+ jQuery('#current-roles').html('<%=escape_javascript(render(:partial => 'admin/roles/role', :collection => Role.by_alpha))%>');
2
+ jQuery('.dialog').dialog('close');
@@ -0,0 +1,2 @@
1
+ <%= hide_admin_messages %>
2
+ jQuery('#<%=@role.dom_id%>').fadeOut();"
@@ -0,0 +1,2 @@
1
+ jQuery('.dialog').dialog('close');
2
+ jQuery('#<%= user.dom_id('permissions') %>').html('<%= escape_javascript(render(:partial => 'admin/permissions/permission', :collection => user.permissions, :locals => { :user => user })) %>');
@@ -1,18 +1,3 @@
1
- <% content_for :javascript do -%>
2
- jQuery("#user_login").blur(function(){
3
- jQuery.post("is_login_available",{ user_login:jQuery(this).val() } ,function(data){
4
- jQuery("#username-availibility").html(data);
5
- });
6
- });
7
- jQuery("#user_login").keydown(function() {
8
- jQuery("#username-availibility").html('');
9
- });
10
- jQuery("#user_email").blur(function(){
11
- jQuery.post("is_email_available",{ user_email:jQuery(this).val() } ,function(data){
12
- jQuery("#email-availibility").html(data);
13
- });
14
- });
15
- jQuery("#user_email").keydown(function() {
16
- jQuery("#email-availibility").html('');
17
- });
1
+ <% content_for :head do -%>
2
+ <%= javascript_include_tag 'muck-users' %>
18
3
  <% end -%>
data/locales/en.yml CHANGED
@@ -51,9 +51,9 @@ en:
51
51
  select_new_password: Select a New Password
52
52
  access_code_delete_link: Delete Access Code
53
53
  request_access_code: Request Access Code
54
- updated_permissions: Updated Permissions
55
54
  first_name: First Name
56
55
  forgot_username: Forgot Username
56
+ updated_permissions: Updated Permissions
57
57
  account_activated: Your account has been activated! You can now login.
58
58
  already_logged_in: You are already logged in and don't need to recover your password.
59
59
  email_invalid: Invalid email
@@ -116,11 +116,13 @@ en:
116
116
  add_permission_to_user: Add Permission to user {{user}}
117
117
  user_account_deleted: You have successfully deleted your account.
118
118
  sign_in: Sign In
119
+ role_deleted: Role Deleted
120
+ role_not_deleted: Role could not be deleted
119
121
  complete_profile: Complete Your Profile
120
122
  access_codes: Access Codes
123
+ access_code_delete_confirm: Are you sure you want to cancel this access code?
121
124
  expiration_date_tip: Enter the date upon which the access code will become invalid
122
125
  problem_editing_account: There was a problem updating your information.
123
- access_code_delete_confirm: Are you sure you want to cancel this access code?
124
126
  navigation:
125
127
  inactive_users: Inactive Users
126
128
  all_users: All Users
data/muck-users.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muck-users}
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin Ball", "Joel Duffin"]
12
- s.date = %q{2010-01-30}
12
+ s.date = %q{2010-02-01}
13
13
  s.description = %q{Easily add user signup, login and other features to your application}
14
14
  s.email = %q{justin@tatemae.com}
15
15
  s.extra_rdoc_files = [
@@ -46,6 +46,8 @@ Gem::Specification.new do |s|
46
46
  "app/views/admin/access_codes/show.html.erb",
47
47
  "app/views/admin/permissions/_permission.html.erb",
48
48
  "app/views/admin/roles/_role.html.erb",
49
+ "app/views/admin/roles/ajax_update_roles.js.erb",
50
+ "app/views/admin/roles/destroy.js.erb",
49
51
  "app/views/admin/roles/edit.html.erb",
50
52
  "app/views/admin/roles/index.html.erb",
51
53
  "app/views/admin/roles/new.html.erb",
@@ -63,6 +65,7 @@ Gem::Specification.new do |s|
63
65
  "app/views/admin/users/index.html.erb",
64
66
  "app/views/admin/users/permissions.html.erb",
65
67
  "app/views/admin/users/search.html.erb",
68
+ "app/views/admin/users/update_permissions.js.erb",
66
69
  "app/views/password_resets/edit.html.erb",
67
70
  "app/views/password_resets/new.html.erb",
68
71
  "app/views/user_mailer/access_code.text.html.erb",
@@ -674,6 +677,7 @@ Gem::Specification.new do |s|
674
677
  "public/images/admin/source/roles.png",
675
678
  "public/images/admin/user.gif",
676
679
  "public/images/profile_default.jpg",
680
+ "public/javascripts/muck-users.js",
677
681
  "rails/init.rb",
678
682
  "tasks/rails.rake",
679
683
  "test/rails_root/.gitignore",
@@ -688,7 +692,6 @@ Gem::Specification.new do |s|
688
692
  "test/rails_root/app/models/user.rb",
689
693
  "test/rails_root/app/models/user_session.rb",
690
694
  "test/rails_root/app/views/default/index.html.erb",
691
- "test/rails_root/app/views/layouts/default.html.erb",
692
695
  "test/rails_root/config/amazon_s3.yml",
693
696
  "test/rails_root/config/boot.rb",
694
697
  "test/rails_root/config/database.yml",
@@ -1143,6 +1146,8 @@ Gem::Specification.new do |s|
1143
1146
  "test/rails_root/public/javascripts/jquery/jquery.swapimage.min.js",
1144
1147
  "test/rails_root/public/javascripts/jquery/jquery.tips.js",
1145
1148
  "test/rails_root/public/javascripts/jquery/jrails.js",
1149
+ "test/rails_root/public/javascripts/muck-countries.js",
1150
+ "test/rails_root/public/javascripts/muck-users.js",
1146
1151
  "test/rails_root/public/javascripts/muck.js",
1147
1152
  "test/rails_root/public/javascripts/muck_activities.js",
1148
1153
  "test/rails_root/public/javascripts/muck_time/en.js",
@@ -1188,6 +1193,7 @@ Gem::Specification.new do |s|
1188
1193
  "test/rails_root/public/stylesheets/blueprint/src/print.css",
1189
1194
  "test/rails_root/public/stylesheets/blueprint/src/reset.css",
1190
1195
  "test/rails_root/public/stylesheets/blueprint/src/typography.css",
1196
+ "test/rails_root/public/stylesheets/default.css",
1191
1197
  "test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png",
1192
1198
  "test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png",
1193
1199
  "test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png",
@@ -0,0 +1,18 @@
1
+ jQuery(document).ready(function() {
2
+ jQuery("#user_login").blur(function(){
3
+ jQuery.post("is_login_available",{ user_login:jQuery(this).val(), format:'js' },function(data){
4
+ jQuery("#username-availibility").html(data);
5
+ });
6
+ });
7
+ jQuery("#user_login").keydown(function() {
8
+ jQuery("#username-availibility").html('');
9
+ });
10
+ jQuery("#user_email").blur(function(){
11
+ jQuery.post("is_email_available",{ user_email:jQuery(this).val(), format:'js' },function(data){
12
+ jQuery("#email-availibility").html(data);
13
+ });
14
+ });
15
+ jQuery("#user_email").keydown(function() {
16
+ jQuery("#email-availibility").html('');
17
+ });
18
+ });
@@ -2,6 +2,8 @@ class ApplicationController < ActionController::Base
2
2
  include SslRequirement
3
3
  helper :all
4
4
  protect_from_forgery
5
+
6
+ layout 'default'
5
7
 
6
8
  protected
7
9
 
@@ -19,9 +19,7 @@ Rails::Initializer.run do |config|
19
19
  config.gem "authlogic"
20
20
  config.gem "searchlogic"
21
21
  config.gem "bcrypt-ruby", :lib => "bcrypt"
22
- config.gem 'jrails'
23
22
  config.gem "overlord"
24
23
  config.gem 'muck-engine', :lib => 'muck_engine'
25
24
  config.plugin_locators << TestGemLocator
26
- end
27
-
25
+ end
@@ -0,0 +1,50 @@
1
+ function setup_country(force_load){
2
+
3
+ var country_id = jQuery("#countries").val();
4
+ var state_id = jQuery("#states").val();
5
+
6
+ if (country_id == undefined){
7
+ return;
8
+ }
9
+
10
+ if (country_id == '-1'){
11
+ jQuery("#states").val('-1');
12
+ jQuery("#counties").val('-1');
13
+ }
14
+
15
+ if (country_id == '-1' || country_id == ''){
16
+ jQuery("#states-container").hide();
17
+ jQuery("#counties-container").hide();
18
+ return;
19
+ }
20
+
21
+ if(force_load || state_id == '' || state_id == null || state_id == -1) {
22
+ jQuery.getJSON("/helper/load_states_for_country/" + country_id + ".js", function(data){
23
+ var options = '';
24
+ jQuery("#counties-container").hide();
25
+ jQuery('#states-container label').html(data.label);
26
+ states = data.states;
27
+ if(states.length > 0){
28
+ for (var i = 0; i < states.length; i++) {
29
+ var state_id = states[i].state.id;
30
+ if(state_id == undefined) { state_id = ''; }
31
+ options += '<option value="' + state_id + '">' + states[i].state.name + '</option>';
32
+ }
33
+ jQuery("#states-container").show();
34
+ jQuery("select#states").html(options);
35
+ } else {
36
+ jQuery("#states-container").hide();
37
+ }
38
+ });
39
+ }
40
+ }
41
+
42
+ jQuery(document).ready(function() {
43
+ jQuery("#countries-container select").change(function() {
44
+ setup_country(true);
45
+ });
46
+ if(jQuery("#states").val() == '' || jQuery("#states").val() == null) {
47
+ jQuery("#states-container").hide();
48
+ }
49
+ setup_country(false);
50
+ });
@@ -0,0 +1,18 @@
1
+ jQuery(document).ready(function() {
2
+ jQuery("#user_login").blur(function(){
3
+ jQuery.post("is_login_available",{ user_login:jQuery(this).val(), format:'js' },function(data){
4
+ jQuery("#username-availibility").html(data);
5
+ });
6
+ });
7
+ jQuery("#user_login").keydown(function() {
8
+ jQuery("#username-availibility").html('');
9
+ });
10
+ jQuery("#user_email").blur(function(){
11
+ jQuery.post("is_email_available",{ user_email:jQuery(this).val(), format:'js' },function(data){
12
+ jQuery("#email-availibility").html(data);
13
+ });
14
+ });
15
+ jQuery("#user_email").keydown(function() {
16
+ jQuery("#email-availibility").html('');
17
+ });
18
+ });
@@ -8,88 +8,6 @@ jQuery(document).ajaxSend(function(event, request, settings) {
8
8
  settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN);
9
9
  });
10
10
 
11
- function setup_submit_delete(){
12
- jQuery(".submit-delete").click(function() {
13
- // if(!confirm("Are you sure?")){
14
- // return false;
15
- // }
16
- jQuery(this).parents('.delete-container').fadeOut();
17
- var form = jQuery(this).parents('form');
18
- jQuery.post(form.attr('action') + '.json', form.serialize(),
19
- function(data){
20
- var json = eval('(' + data + ')');
21
- if(!json.success){
22
- jQuery.jGrowl.info(json.message);
23
- }
24
- });
25
- return false;
26
- });
27
- jQuery(".submit-delete-js").click(function() {
28
- // if(!confirm("Are you sure?")){
29
- // return false;
30
- // }
31
- jQuery(this).parents('.delete-container').fadeOut();
32
- var form = jQuery(this).parents('form');
33
- jQuery.post(form.attr('action') + '.js', form.serialize(),
34
- function(data){
35
- });
36
- return false;
37
- });
38
- }
39
-
40
- function show_hide_obj (ary_objs_to_show, ary_objs_to_hide)
41
- {
42
- for (i=0;i<ary_objs_to_show.length;i++) {
43
- if (obj_to_show = document.getElementById(ary_objs_to_show[i])) obj_to_show.style.display="";
44
- if (tab = document.getElementById('anchor'+ary_objs_to_show[i])) tab.className = 'curTab';
45
- }
46
- for (i=0;i<ary_objs_to_hide.length;i++) {
47
- if (obj_to_hide = document.getElementById(ary_objs_to_hide[i])) obj_to_hide.style.display="none";
48
- if (tab = document.getElementById('anchor'+ary_objs_to_hide[i])) tab.className = '';
49
- }
50
- }
51
-
52
- function setup_country(force_load){
53
-
54
- var country_id = jQuery("#countries").val();
55
- var state_id = jQuery("#states").val();
56
-
57
- if (country_id == undefined){
58
- return;
59
- }
60
-
61
- if (country_id == '-1'){
62
- jQuery("#states").val('-1');
63
- jQuery("#counties").val('-1');
64
- }
65
-
66
- if (country_id == '-1' || country_id == ''){
67
- jQuery("#states-container").hide();
68
- jQuery("#counties-container").hide();
69
- return;
70
- }
71
-
72
- if(force_load || state_id == '' || state_id == null || state_id == -1) {
73
- jQuery.getJSON("/helper/load_states_for_country/" + country_id + ".js", function(data){
74
- var options = '';
75
- jQuery("#counties-container").hide();
76
- jQuery('#states-container label').html(data.label);
77
- states = data.states;
78
- if(states.length > 0){
79
- for (var i = 0; i < states.length; i++) {
80
- var state_id = states[i].state.id;
81
- if(state_id == undefined) { state_id = ''; }
82
- options += '<option value="' + state_id + '">' + states[i].state.name + '</option>';
83
- }
84
- jQuery("#states-container").show();
85
- jQuery("select#states").html(options);
86
- } else {
87
- jQuery("#states-container").hide();
88
- }
89
- });
90
- }
91
- }
92
-
93
11
  function apply_ajax_forms() {
94
12
  jQuery('form.ajax').ajaxForm({
95
13
  dataType: 'script',
@@ -133,21 +51,26 @@ jQuery(document).ready(function() {
133
51
  return false;
134
52
  });
135
53
 
136
- jQuery("#global-login").focus(function() {
137
- jQuery("#global-login").val("");
138
- });
139
- jQuery("#global-password").focus(function() {
140
- jQuery("#global-password").val("");
141
- });
142
- jQuery("#quick-login-submit").click(function() {
143
- jQuery("#quick-login").submit();
144
- });
145
-
146
- jQuery("#countries-container select").change(function() {
147
- setup_country(true);
54
+ jQuery(".submit-delete").live('click', function() {
55
+ jQuery(this).parents('.delete-container').fadeOut();
56
+ var form = jQuery(this).parents('form');
57
+ jQuery.post(form.attr('action') + '.json', form.serialize(),
58
+ function(data){
59
+ var json = eval('(' + data + ')');
60
+ if(!json.success){
61
+ jQuery.jGrowl.info(json.message);
62
+ }
63
+ });
64
+ return false;
65
+ });
66
+
67
+ jQuery(".submit-delete-js").live('click', function() {
68
+ jQuery(this).parents('.delete-container').fadeOut();
69
+ var form = jQuery(this).parents('form');
70
+ jQuery.post(form.attr('action') + '.js', form.serialize(),
71
+ function(data){
72
+ });
73
+ return false;
148
74
  });
149
- if(jQuery("#states").val() == '' || jQuery("#states").val() == null) {
150
- jQuery("#states-container").hide();
151
- }
152
- setup_country(false);
75
+
153
76
  });
@@ -26,7 +26,9 @@ ul.admin-list li a{font-size:1.2em;}
26
26
  /* errors, message */
27
27
  .notify-box{font-size:1.2em;color:#555;width:100%}
28
28
  .error,.notice,.success {margin:0;}
29
- #errorExplanation{margin:0;padding:0;}
29
+ #errorExplanation{margin:0;padding:.8em;width:97%;border:2px solid #ddd;background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
30
+ #admin-messages{display:none;}
31
+
30
32
  /* tables */
31
33
  .adminTable{margin:5px 0 0 0;padding:0 0 40px 0px;width:980px;}
32
34
  .adminTable a{color:#000;text-decoration:none;font-weight:bold;}
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muck-users
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Ball
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2010-01-30 00:00:00 -07:00
13
+ date: 2010-02-01 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -102,6 +102,8 @@ files:
102
102
  - app/views/admin/access_codes/show.html.erb
103
103
  - app/views/admin/permissions/_permission.html.erb
104
104
  - app/views/admin/roles/_role.html.erb
105
+ - app/views/admin/roles/ajax_update_roles.js.erb
106
+ - app/views/admin/roles/destroy.js.erb
105
107
  - app/views/admin/roles/edit.html.erb
106
108
  - app/views/admin/roles/index.html.erb
107
109
  - app/views/admin/roles/new.html.erb
@@ -119,6 +121,7 @@ files:
119
121
  - app/views/admin/users/index.html.erb
120
122
  - app/views/admin/users/permissions.html.erb
121
123
  - app/views/admin/users/search.html.erb
124
+ - app/views/admin/users/update_permissions.js.erb
122
125
  - app/views/password_resets/edit.html.erb
123
126
  - app/views/password_resets/new.html.erb
124
127
  - app/views/user_mailer/access_code.text.html.erb
@@ -730,6 +733,7 @@ files:
730
733
  - public/images/admin/source/roles.png
731
734
  - public/images/admin/user.gif
732
735
  - public/images/profile_default.jpg
736
+ - public/javascripts/muck-users.js
733
737
  - rails/init.rb
734
738
  - tasks/rails.rake
735
739
  - test/rails_root/.gitignore
@@ -744,7 +748,6 @@ files:
744
748
  - test/rails_root/app/models/user.rb
745
749
  - test/rails_root/app/models/user_session.rb
746
750
  - test/rails_root/app/views/default/index.html.erb
747
- - test/rails_root/app/views/layouts/default.html.erb
748
751
  - test/rails_root/config/amazon_s3.yml
749
752
  - test/rails_root/config/boot.rb
750
753
  - test/rails_root/config/database.yml
@@ -1199,6 +1202,8 @@ files:
1199
1202
  - test/rails_root/public/javascripts/jquery/jquery.swapimage.min.js
1200
1203
  - test/rails_root/public/javascripts/jquery/jquery.tips.js
1201
1204
  - test/rails_root/public/javascripts/jquery/jrails.js
1205
+ - test/rails_root/public/javascripts/muck-countries.js
1206
+ - test/rails_root/public/javascripts/muck-users.js
1202
1207
  - test/rails_root/public/javascripts/muck.js
1203
1208
  - test/rails_root/public/javascripts/muck_activities.js
1204
1209
  - test/rails_root/public/javascripts/muck_time/en.js
@@ -1244,6 +1249,7 @@ files:
1244
1249
  - test/rails_root/public/stylesheets/blueprint/src/print.css
1245
1250
  - test/rails_root/public/stylesheets/blueprint/src/reset.css
1246
1251
  - test/rails_root/public/stylesheets/blueprint/src/typography.css
1252
+ - test/rails_root/public/stylesheets/default.css
1247
1253
  - test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png
1248
1254
  - test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png
1249
1255
  - test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
- <head>
4
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5
- <title>home</title>
6
- <%= stylesheet_link_tag 'application', :cache=>true -%>
7
- <%= javascript_include_tag 'application' -%>
8
- <%= javascript_tag %[const AUTH_TOKEN = #{form_authenticity_token.inspect};] if protect_against_forgery? -%>
9
- <%= yield :head -%>
10
- <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
11
- </head>
12
- <body>
13
- <div id="header">
14
- <div id="top-navigation">
15
- </div>
16
- <div class="clear"></div>
17
- </div>
18
- <div id="main">
19
- <div id="content">
20
- <%= yield %>
21
- </div>
22
- </div>
23
- <div id="footer">
24
- </div>
25
- </body>
26
- </html>