dust-generators 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/lib/dust/version.rb +1 -1
  2. data/lib/generators/dust/albums/albums_generator.rb +129 -34
  3. data/lib/generators/dust/albums/templates/app/controllers/albums_controller.rb +24 -18
  4. data/lib/generators/dust/albums/templates/app/controllers/photos_controller.rb +37 -40
  5. data/lib/generators/dust/albums/templates/app/controllers/view_albums_controller.rb +6 -7
  6. data/lib/generators/dust/albums/templates/app/helpers/albums_helper.rb +1 -1
  7. data/lib/generators/dust/albums/templates/app/helpers/photos_helper.rb +1 -1
  8. data/lib/generators/dust/albums/templates/app/helpers/view_albums_helper.rb +1 -1
  9. data/lib/generators/dust/albums/templates/app/models/album.rb +8 -4
  10. data/lib/generators/dust/albums/templates/app/models/photo.rb +11 -4
  11. data/lib/generators/dust/albums/templates/app/views/albums/_form.html.erb +48 -18
  12. data/lib/generators/dust/albums/templates/app/views/albums/_search.html.erb +4 -4
  13. data/lib/generators/dust/albums/templates/app/views/albums/_upload_script.html.erb +11 -11
  14. data/lib/generators/dust/albums/templates/app/views/albums/edit.html.erb +3 -3
  15. data/lib/generators/dust/albums/templates/app/views/albums/index.html.erb +23 -23
  16. data/lib/generators/dust/albums/templates/app/views/albums/manage.html.erb +65 -0
  17. data/lib/generators/dust/albums/templates/app/views/albums/new.html.erb +3 -3
  18. data/lib/generators/dust/albums/templates/app/views/albums/show.html.erb +33 -21
  19. data/lib/generators/dust/albums/templates/app/views/albums/show.js.erb +1 -0
  20. data/lib/generators/dust/albums/templates/app/views/photos/_form.html.erb +20 -19
  21. data/lib/generators/dust/albums/templates/app/views/photos/_photo.html.erb +25 -23
  22. data/lib/generators/dust/albums/templates/app/views/photos/_search.html.erb +6 -0
  23. data/lib/generators/dust/albums/templates/app/views/photos/array.js.erb +3 -0
  24. data/lib/generators/dust/albums/templates/app/views/photos/edit.html.erb +6 -6
  25. data/lib/generators/dust/albums/templates/app/views/photos/index.html.erb +28 -23
  26. data/lib/generators/dust/albums/templates/app/views/photos/new.html.erb +4 -4
  27. data/lib/generators/dust/albums/templates/app/views/photos/show.html.erb +9 -9
  28. data/lib/generators/dust/albums/templates/app/views/photos/show.js.erb +2 -2
  29. data/lib/generators/dust/albums/templates/app/views/view_albums/index.html.erb +25 -14
  30. data/lib/generators/dust/albums/templates/app/views/view_albums/show.html.erb +23 -12
  31. data/lib/generators/dust/albums/templates/images/save_position.png +0 -0
  32. data/lib/generators/dust/albums/templates/javascripts/dragsort.js +288 -0
  33. data/lib/generators/dust/albums/templates/javascripts/dust_album.js +28 -0
  34. data/lib/generators/dust/albums/templates/{uploadify → javascripts/uploadify}/jquery.uploadify.v2.1.0.js +0 -0
  35. data/lib/generators/dust/albums/templates/{uploadify → javascripts/uploadify}/swfobject.js +0 -0
  36. data/lib/generators/dust/albums/templates/{uploadify → javascripts/uploadify}/uploadify.swf +0 -0
  37. data/lib/generators/dust/albums/templates/migration/albums_migration.rb +39 -0
  38. data/lib/generators/dust/albums/templates/stylesheets/dust_album.css +16 -0
  39. data/lib/generators/dust/albums/templates/stylesheets/dust_album_app.css +15 -0
  40. data/lib/generators/dust/albums/templates/{uploadify.css → stylesheets/uploadify.css} +1 -1
  41. data/rails_generators/dust_albums/templates/app/controllers/view_albums_controller.rb +1 -1
  42. data/rails_generators/dust_albums/templates/app/views/albums/show.html.erb +1 -1
  43. metadata +17 -12
  44. data/lib/generators/dust/albums/templates/albums_migration.rb +0 -18
  45. data/lib/generators/dust/albums/templates/dust_album.css +0 -11
  46. data/lib/generators/dust/albums/templates/jquery-1.4.2.js +0 -6240
  47. data/lib/generators/dust/albums/templates/photos_migration.rb +0 -20
@@ -1,7 +1,10 @@
1
- class Photo < ActiveRecord::Base
2
- belongs_to :album
3
- has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" }
4
- validates_presence_of :album
1
+ class <%=child_class_name%> < ActiveRecord::Base
2
+
3
+ acts_as_nested_set
4
+
5
+ belongs_to :<%=parent_singular_name%>
6
+ has_attached_file :file, :styles => {:large => '800>', :medium => "300x300>", :thumb => "100x100#" }
7
+ validates_presence_of :<%=parent_singular_name%>
5
8
 
6
9
  def self.page(search, page)
7
10
  with_permissions_to(:manage).search(search).order("title").paginate(:per_page => 20, :page => page)
@@ -15,4 +18,8 @@ class Photo < ActiveRecord::Base
15
18
  end
16
19
  end
17
20
 
21
+ def self.<%=parent_singular_name%>_page(page)
22
+ roots.paginate(:per_page => 24, :page => page)
23
+ end
24
+
18
25
  end
@@ -1,22 +1,52 @@
1
- <%= stylesheet( 'dust_album','uploadify') %>
1
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
2
2
 
3
- <% form_for @album, :validations => true do |f| %>
4
- <%= f.error_messages %>
5
- <p>
6
- <%= f.label :title %><br />
7
- <%= f.text_field :title, :class => 'field' %>
8
- </p>
9
- <p>
10
- <%= f.label :filename %><br />
11
- <%= f.text_field :filename, :class => 'field' %>
3
+ <%% form_for @<%=parent_singular_name%>, :validations => true do |f| %>
4
+ <%%= f.error_messages %>
5
+
6
+ <div class="item">
7
+ <p>
8
+ <%%= f.label :active %>
9
+ <%%= f.check_box :active %>
12
10
  </p>
13
- <p>
14
- <%= f.label :desc %><br />
15
- <%= f.text_area :desc, :class => 'field' %>
11
+ </div>
12
+
13
+ <div class="item">
14
+ <p>
15
+ <%%= f.label :nav, "Navigation Link" %><br />
16
+ <%%= f.text_field :nav, :class => 'field' %>
17
+ </p>
18
+ </div>
19
+
20
+ <div class="item">
21
+ <p>
22
+ <%%= f.label :title %><br />
23
+ <%%= f.text_field :title, :class => 'field' %>
16
24
  </p>
17
- <p>
18
- <%= f.label :active %>
19
- <%= f.check_box :active %>
25
+ </div>
26
+
27
+ <div class="item">
28
+ <p>
29
+ <%%= f.label :heading %><br />
30
+ <%%= f.text_field :heading, :class => 'field' %>
31
+ </p>
32
+ </div>
33
+
34
+ <div class="item">
35
+ <p>
36
+ <%%= f.label :filename %><br />
37
+ <%%= f.text_field :filename, :class => 'field' %>
20
38
  </p>
21
- <p><%= f.submit %></p>
22
- <% end %>
39
+ </div>
40
+
41
+ <div class="item">
42
+ <p>
43
+ <%%= f.label :desc %><br />
44
+ <%%= f.text_area :desc, :class => 'field' %>
45
+ </p>
46
+ </div>
47
+
48
+ <div class="item">
49
+ <p><%%= f.submit %></p>
50
+ </div>
51
+
52
+ <%% end %>
@@ -1,6 +1,6 @@
1
1
  <div id="searchbox">
2
- <%= form_tag albums_path, :method => 'get' do %>
3
- <%= text_field_tag :search, params[:search], :class => "input-text", :placeholder => 'Search Albums' %>
4
- <%= image_submit_tag "admin/blank.png", :class => "image-submit"%>
5
- <% end %>
2
+ <%%= form_tag <%=parent_plural_name%>_path, :method => 'get' do %>
3
+ <%%= text_field_tag :search, params[:search], :class => "input-text", :placeholder => 'Search <%=parent_plural_class_name%>' %>
4
+ <%%= image_submit_tag "admin/blank.png", :class => "image-submit"%>
5
+ <%%end %>
6
6
  </div>
@@ -1,16 +1,16 @@
1
1
 
2
- <%= javascript_include_tag "uploadify/swfobject", "uploadify/jquery.uploadify.v2.1.0" %>
3
- <%- session_key = Rails.application.config.session_options[:key] -%>
2
+ <%%= javascript_include_tag "uploadify/swfobject", "uploadify/jquery.uploadify.v2.1.0" %>
3
+ <%%- session_key = Rails.application.config.session_options[:key] -%>
4
4
  <script type="text/javascript" charset="utf-8">
5
5
 
6
6
  $(document).ready(function() {
7
- $('#photo_file').click(function(event) {
7
+ $('#<%=child_singular_name%>_file').click(function(event) {
8
8
  event.preventDefault();
9
9
  });
10
10
 
11
- $('#photo_file').uploadify({
11
+ $('#<%=child_singular_name%>_file').uploadify({
12
12
  'uploader' : '/javascripts/uploadify/uploadify.swf',
13
- 'script' : '/photos',
13
+ 'script' : '/<%=child_plural_name%>',
14
14
  'multi' : true,
15
15
  'auto' : false,
16
16
  'buttonText' : 'Find',
@@ -20,20 +20,20 @@
20
20
  height : 26, // The height of the flash button
21
21
  width : 101, // The width of the flash button
22
22
  onComplete : function(event, queueID, fileObj, response, data) { var dat = eval('(' +
23
- response + ')');$.getScript(dat.photo);},
23
+ response + ')');$.getScript(dat.<%=child_singular_name%>);},
24
24
  scriptData: {
25
25
  '_http_accept': 'application/javascript',
26
26
  'format' : 'json',
27
27
  '_method': 'post',
28
- '<%= session_key %>' : encodeURIComponent('<%= u cookies[session_key] %>'),
29
- 'authenticity_token': encodeURIComponent('<%= u form_authenticity_token %>'),
30
- 'album_id' : '<%= @album.id %>'
28
+ '<%%= session_key %>' : encodeURIComponent('<%%= u cookies[session_key] %>'),
29
+ 'authenticity_token': encodeURIComponent('<%%= u form_authenticity_token %>'),
30
+ '<%=parent_singular_name%>_id' : '<%%= @<%=parent_singular_name%>.id %>'
31
31
  }
32
32
  });
33
33
 
34
- $('#photo_submit').click(function(event){
34
+ $('#<%=child_singular_name%>_submit').click(function(event){
35
35
  event.preventDefault();
36
- $('#photo_file').uploadifyUpload();
36
+ $('#<%=child_singular_name%>_file').uploadifyUpload();
37
37
  });
38
38
  });
39
39
  </script>
@@ -1,5 +1,5 @@
1
- <% title "Edit Album" %>
1
+ <%%title "Edit <%=parent_class_name%>" %>
2
2
 
3
- <%= stylesheet( 'dust_album','uploadify') %>
3
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
4
4
 
5
- <%= render :partial => 'form' %>
5
+ <%%= render :partial => 'form' %>
@@ -1,53 +1,53 @@
1
- <% title "Albums" %>
2
- <% heading "Albums" %>
1
+ <%% title "<%=parent_plural_class_name%>" %>
2
+ <%% heading "<%=parent_plural_class_name%>" %>
3
3
 
4
- <%= stylesheet 'dust_album', 'uploadify' %>
4
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
5
5
 
6
6
  <div class="button_bar">
7
- <%= render :partial => 'albums/search' %>
8
- <%=link_to 'new page', new_album_path, :class => 'newfile tip', :title => "New Album" %>
7
+ <%%= render :partial => 'search' %>
8
+ <%%=link_to('new <%=parent_singular_name%>', new_<%=parent_singular_name%>_path, :class => 'newfile tip', :title => "New <%=parent_class_name%>")%>
9
9
  </div>
10
10
 
11
- <div class='photolist'>
11
+ <div class='<%=child_singular_name%>list'>
12
12
 
13
- <%= will_paginate @albums %>
13
+ <%%= will_paginate @<%=parent_plural_name%> %>
14
14
 
15
- <table class="photos">
15
+ <table class="<%=child_plural_name%>">
16
16
  <tr style='color:#222;'>
17
17
  <th></th>
18
18
  <th>
19
- Album Title
19
+ <%=parent_class_name%> Title
20
20
  </th>
21
21
  <th>
22
22
  Created At
23
23
  </th>
24
24
  <th></th>
25
25
  </tr>
26
- <% @albums.each do |album| %>
27
- <tr class='<%= cycle('odd', 'even')%>'>
26
+ <%% @<%=parent_plural_name%>.each do |<%=parent_singular_name%>| %>
27
+ <tr class='<%%= cycle('odd', 'even')%>'>
28
28
 
29
29
  <td>
30
- <% if album.photos.empty? %>
31
- <%= link_to "add photos to #{album.title}", album %>
32
- <% else %>
33
- <% @photo = album.photos.find(:first) %>
34
- <%= link_to image_tag(@photo.file.url(:thumb)), album %>
35
- <% end -%>
30
+ <%% if <%=parent_singular_name%>.<%=child_plural_name%>.empty? %>
31
+ <%%= link_to "add <%=child_plural_name%> to #{<%=parent_singular_name%>.title}", <%=parent_singular_name%> %>
32
+ <%% else %>
33
+ <%% @<%=child_singular_name%> = <%=parent_singular_name%>.<%=child_plural_name%>.find(:first) %>
34
+ <%%= link_to image_tag(@<%=child_singular_name%>.file.url(:thumb)), <%=parent_singular_name%> %>
35
+ <%% end -%>
36
36
  </td>
37
37
  <td>
38
- <%= album.title%>
38
+ <%%= <%=parent_singular_name%>.title%>
39
39
  </td>
40
40
  <td>
41
- <%= album.created_at.to_s(:m_d_y) %>
41
+ <%%= <%=parent_singular_name%>.created_at.to_s(:m_d_y) %>
42
42
  </td>
43
43
  <td>
44
44
  <div style='float:right'>
45
- <%=link_to '', edit_album_path(album), :class => 'edit' %>
46
- <%=link_to "", album, :confirm => 'Are you sure?', :method => :delete, :class => 'destroy' %>
45
+ <%%=link_to('', edit_<%=parent_singular_name%>_path(<%=parent_singular_name%>), :class => 'edit')%>
46
+ <%%=link_to "", <%=parent_singular_name%>, :confirm => 'Are you sure?', :method => :delete, :class => 'destroy' %>
47
47
  </div>
48
48
  </td>
49
49
  </tr>
50
- <% end %>
50
+ <%% end %>
51
51
 
52
52
  </table>
53
53
 
@@ -56,6 +56,6 @@
56
56
 
57
57
  <div class="clear"></div>
58
58
 
59
- <%= will_paginate @albums %>
59
+ <%%= will_paginate @<%=parent_plural_name%> %>
60
60
 
61
61
 
@@ -0,0 +1,65 @@
1
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
2
+
3
+ <script type="text/javascript" charset="utf-8">
4
+ $(document).ready(function() {
5
+ $(function () { // this line makes sure this code runs on page load
6
+ $('.checkall').click(function () {
7
+ $(this).parents('form:eq(0)').find(':checkbox').attr('checked', this.checked);
8
+ });
9
+ });
10
+ });
11
+ </script>
12
+
13
+ <div class='<%=child_singular_name%>list'>
14
+ <h1><%%= link_to @<%=parent_singular_name%>.title, <%=parent_singular_name%>_path(@<%=parent_singular_name%>) %></h1>
15
+
16
+ <%% form_tag '/destroy-<%=child_plural_name%>' do %>
17
+
18
+ <table class='<%=child_plural_name%>'>
19
+ <tr style='color:#222;'>
20
+ <th>
21
+
22
+ </th>
23
+ <th></th>
24
+ <th>
25
+ File Name
26
+ </th>
27
+ <th>
28
+ File Size
29
+ </th>
30
+ <th>
31
+ Created At
32
+ </th>
33
+ </tr>
34
+ <%% @<%=parent_singular_name%>.<%=child_plural_name%>.each do |<%=child_singular_name%>| %>
35
+ <tr class='<%%= cycle('odd', 'even')%>'>
36
+ <td>
37
+ <%%= check_box_tag "<%=child_singular_name%>_ids[]", <%=child_singular_name%>.id %>
38
+ </td>
39
+ <td>
40
+ <%%= image_tag(<%=child_singular_name%>.file.url(:thumb), :height => "60") %>
41
+
42
+ <div style="display:none"><div id="<%%=<%=child_singular_name%>.id%>"><%%= image_tag(<%=child_singular_name%>.file.url(:original)) %></div></div>
43
+ </td>
44
+ <td>
45
+ <%%= <%=child_singular_name%>.file_file_name %>
46
+ </td>
47
+ <td>
48
+ <%%= number_to_human_size(<%=child_singular_name%>.file_file_size) %>
49
+ </td>
50
+ <td>
51
+ <%%= <%=child_singular_name%>.created_at.to_s(:m_d_y) %>
52
+ </td>
53
+ </tr>
54
+ <%% end %>
55
+ <tr class='odd'>
56
+ <td colspan='5'>
57
+ <input type="checkbox" class="checkall"> Check all
58
+ <%%= submit_tag "Delete checked" %>
59
+ </td>
60
+ </tr>
61
+ </table>
62
+
63
+ <%% end -%>
64
+
65
+ </div>
@@ -1,6 +1,6 @@
1
- <% title "New Album" %>
1
+ <%% title "New <%=parent_class_name%>" %>
2
2
 
3
- <%= stylesheet( 'dust_album','uploadify') %>
3
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
4
4
 
5
- <%= render :partial => 'form' %>
5
+ <%%= render :partial => 'form' %>
6
6
 
@@ -1,44 +1,56 @@
1
- <% title h(@album.title) %>
2
- <% heading h(@album.title.titleize) %>
1
+ <%% title h(@<%=parent_singular_name%>.title) %>
3
2
 
4
- <%= stylesheet( 'dust_album','uploadify') %>
3
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
5
4
 
6
- <%= render :partial => "upload_script" %>
5
+
6
+ <%% content_for :head do %>
7
+ <%%= javascript_include_tag 'dragsort', 'dust_<%=parent_singular_name%>' %>
8
+ <%% end -%>
9
+
10
+ <%%= render :partial => "upload_script" %>
7
11
 
8
12
  <div class="item">
9
13
 
10
14
  <div class='manage'>
11
- <%= link_to "", edit_album_path(@album), :class => 'edit' %>
12
- <%= link_to "", @album, :confirm => 'Are you sure?', :method => :delete, :class => 'destroy' %>
15
+ <%%= link_to "", edit_<%=parent_singular_name%>_path(@<%=parent_singular_name%>), :class => 'edit' %>
16
+ <%%= link_to "", @<%=parent_singular_name%>, :confirm => 'Are you sure?', :method => :delete, :class => 'destroy' %>
13
17
  </div>
14
-
15
- <%= simple_format(h(@album.desc)) %>
18
+
19
+ <h1>
20
+ <%%= link_to @<%=parent_singular_name%>.title, view_<%=parent_singular_name%>_path(@<%=parent_singular_name%>.filename) %>
21
+ </h1>
22
+ <%%= simple_format(h(@<%=parent_singular_name%>.desc)) %>
23
+
16
24
  </div>
17
25
 
18
26
  <div class="item">
19
-
20
- <h3 id="photos_count"><%= pluralize(@album.photos.size, "Photo")%> <% unless @album.photos.empty? %> | <%= link_to "Manage Photos", photos_path %> <% end %></h3>
21
- <div id="uploads">
22
- <%= render @album.photos %>
27
+ <div class="manage">
28
+ <br />
29
+ <%%= link_to image_tag('save_position.png'), <%=child_plural_name%>_path, :id => 'order_<%=child_plural_name%>' %>
23
30
  </div>
24
-
25
- <div class="clear"></div>
26
31
 
32
+ <h3 id="<%=child_plural_name%>_count"><%%= pluralize(@<%=parent_singular_name%>.<%=child_plural_name%>.size, "<%=child_class_name%>")%> <%% unless @<%=parent_singular_name%>.<%=child_plural_name%>.empty? %> | <%%= link_to "Select <%=child_plural_class_name%> For Deletion", manage_<%=child_plural_name%>_path(@<%=parent_singular_name%>, :format => 'html'), :class => 'settings' %> <%% end %> </h3>
33
+ <p>Drag <%=child_plural_name%> to reorder them. Don't forget to hit the save order button when your done.</p>
34
+ <ul id="uploads">
35
+ <%%= render :partial => @<%=parent_singular_name%>.<%=child_plural_name%>.roots, :<%=child_singular_name%> => @<%=child_singular_name%> %>
36
+ </ul>
37
+
38
+ <div class="clear"></div>
27
39
  </div>
28
40
 
29
- <% content_for :left do -%>
41
+ <%% content_for :left do -%>
30
42
 
31
43
  <div id="uploadify">
32
- <h3>Add Photos to <%= @album.title.titleize %></h3>
33
- <% form_for @new_photo, :html => {:multipart => true} do |f| %>
44
+ <h3>Add <%=child_plural_class_name%> to <%%= @<%=parent_singular_name%>.title.titleize %></h3>
45
+ <%% form_for @new_<%=child_singular_name%>, :html => {:multipart => true} do |f| %>
34
46
 
35
- <%= f.hidden_field :album_id, "value" => @album.id %>
47
+ <%%= f.hidden_field :<%=parent_singular_name%>_id, "value" => @<%=parent_singular_name%>.id %>
36
48
  <div class="uploadifyButtons">
37
- <%= image_submit_tag "Upload.png", :id => "photo_submit", :name => 'commit' %> <%= f.file_field :file %>
49
+ <%%= image_submit_tag "upload.png", :id => "<%=child_singular_name%>_submit", :name => 'commit' %> <%%= f.file_field :file %>
38
50
  <div class='clear'></div>
39
51
  </div>
40
- <% end %>
52
+ <%% end %>
41
53
  </div>
42
54
 
43
- <% end -%>
55
+ <%% end -%>
44
56
 
@@ -0,0 +1 @@
1
+ $('#uploads').html("<%%= escape_javascript(render(@<%=parent_singular_name%>.<%=child_plural_name%>.roots, :<%=child_singular_name%> => @<%=child_singular_name%>)) %>");
@@ -1,22 +1,23 @@
1
- <%= stylesheet( 'dust_album','uploadify') %>
1
+ <%%= stylesheet( 'dust_<%=parent_singular_name%>','<%=parent_singular_name%>_uploadify') %>
2
2
 
3
- <% form_for @photo, :validations => true do |f| %>
4
- <%= f.error_messages %>
5
- <p>
6
- <%= f.label :title %><br />
7
- <%= f.text_field :title %>
3
+ <%% form_for @<%=child_singular_name%>, :validations => true do |f| %>
4
+ <%%= f.error_messages %>
5
+ <div class="item">
6
+ <p>
7
+ <%%= f.label :title %><br />
8
+ <%%= f.text_field :title, :class => 'field' %>
8
9
  </p>
9
- <p>
10
- <%= f.label :desc %><br />
11
- <%= f.text_area :desc %>
10
+ </div>
11
+
12
+ <div class="item">
13
+ <p>
14
+ <%%= f.label :desc %><br />
15
+ <%%= f.text_area :desc, :class => 'field' %>
12
16
  </p>
13
- <p>
14
- <%= f.label :date_shot %><br />
15
- <%= f.date_select :date_shot %>
16
- </p>
17
- <p>
18
- <%= f.label :location %><br />
19
- <%= f.text_field :location %>
20
- </p>
21
- <p><%= f.submit %></p>
22
- <% end %>
17
+ </div>
18
+
19
+ <div class="item">
20
+ <p><%%= f.submit %></p>
21
+ </div>
22
+
23
+ <%% end %>