sofa_blog 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. data/Gemfile +8 -1
  2. data/Gemfile.lock +83 -65
  3. data/LICENSE +1 -1
  4. data/README.md +27 -23
  5. data/Rakefile +8 -7
  6. data/VERSION +1 -1
  7. data/app/assets/images/rails.png +0 -0
  8. data/app/assets/javascripts/sofa_blog/application.js +7 -0
  9. data/app/assets/javascripts/sofa_blog/posts.js +2 -0
  10. data/app/assets/stylesheets/sofa_blog/admin.css +57 -0
  11. data/app/assets/stylesheets/sofa_blog/application.css +73 -0
  12. data/app/assets/stylesheets/sofa_blog/reset.css +1 -0
  13. data/app/controllers/application_controller.rb +5 -0
  14. data/app/controllers/sofa_blog/admin/base_controller.rb +3 -0
  15. data/app/controllers/sofa_blog/admin/comments_controller.rb +74 -0
  16. data/app/controllers/sofa_blog/admin/posts_controller.rb +55 -0
  17. data/app/controllers/sofa_blog/posts_controller.rb +13 -0
  18. data/app/helpers/sofa_blog/posts_helper.rb +2 -0
  19. data/app/helpers/sofa_blog_helper.rb +12 -0
  20. data/app/models/.gitkeep +0 -0
  21. data/app/models/sofa_blog/comment.rb +53 -0
  22. data/app/models/{blog_post.rb → sofa_blog/post.rb} +25 -25
  23. data/app/models/{blog_tag.rb → sofa_blog/tag.rb} +11 -10
  24. data/app/models/sofa_blog/tagging.rb +9 -0
  25. data/app/views/layouts/application.html.erb +17 -0
  26. data/app/views/sofa_blog/admin/_html_head.html.erb +1 -0
  27. data/app/views/sofa_blog/admin/_navigation.html.erb +1 -0
  28. data/app/views/sofa_blog/admin/comments/_comment.html.erb +21 -0
  29. data/app/views/sofa_blog/admin/comments/_form.html.erb +27 -0
  30. data/app/views/sofa_blog/admin/comments/_status.html.erb +7 -0
  31. data/app/views/sofa_blog/admin/comments/approve.js.erb +1 -0
  32. data/app/views/sofa_blog/admin/comments/disapprove.js.erb +1 -0
  33. data/app/views/sofa_blog/admin/comments/edit.html.erb +6 -0
  34. data/app/views/sofa_blog/admin/comments/index.html.erb +7 -0
  35. data/app/views/sofa_blog/admin/comments/new.html.erb +14 -0
  36. data/app/views/sofa_blog/admin/posts/_form.html.erb +35 -0
  37. data/app/views/sofa_blog/admin/posts/_post.html.erb +21 -0
  38. data/app/views/sofa_blog/admin/posts/edit.html.erb +5 -0
  39. data/app/views/sofa_blog/admin/posts/index.html.erb +7 -0
  40. data/app/views/sofa_blog/admin/posts/new.html.erb +5 -0
  41. data/app/views/sofa_blog/posts/_post.html.erb +21 -0
  42. data/app/views/sofa_blog/posts/index.html.erb +5 -0
  43. data/config/application.rb +48 -0
  44. data/config/boot.rb +6 -0
  45. data/config/database.yml +25 -0
  46. data/{tmp → config}/environment.rb +0 -1
  47. data/config/environments/development.rb +33 -0
  48. data/config/environments/production.rb +51 -0
  49. data/config/environments/test.rb +42 -0
  50. data/config/initializers/secret_token.rb +3 -0
  51. data/config/initializers/sofa_blog.rb +12 -0
  52. data/config/initializers/wrap_parameters.rb +14 -0
  53. data/config/locales/en.yml +5 -0
  54. data/config/routes.rb +14 -9
  55. data/config.ru +4 -0
  56. data/db/migrate/01_create_sofa_blog.rb +29 -28
  57. data/db/schema.rb +59 -0
  58. data/db/seeds.rb +7 -0
  59. data/lib/sofa_blog/configuration.rb +21 -0
  60. data/lib/sofa_blog/engine.rb +13 -10
  61. data/lib/sofa_blog/form_builder.rb +50 -0
  62. data/lib/sofa_blog.rb +21 -2
  63. data/script/rails +6 -0
  64. data/sofa_blog.gemspec +89 -47
  65. data/test/fixtures/.gitkeep +0 -0
  66. data/test/fixtures/sofa_blog/comments.yml +6 -0
  67. data/test/fixtures/sofa_blog/posts.yml +7 -0
  68. data/test/functional/.gitkeep +0 -0
  69. data/test/functional/sofa_blog/admin/comments_controller_test.rb +59 -0
  70. data/test/functional/sofa_blog/admin/posts_controller_test.rb +76 -0
  71. data/test/functional/sofa_blog/posts_controller_test.rb +7 -0
  72. data/test/test_helper.rb +37 -0
  73. data/test/unit/.gitkeep +0 -0
  74. data/test/unit/comment_test.rb +55 -0
  75. data/test/unit/helpers/sofa_blog/posts_helper_test.rb +4 -0
  76. data/test/unit/post_test.rb +44 -0
  77. data/test/unit/tag_test.rb +7 -0
  78. data/test/unit/tagging_test.rb +7 -0
  79. metadata +145 -103
  80. data/.DS_Store +0 -0
  81. data/app/.DS_Store +0 -0
  82. data/app/controllers/cms_admin/blog_comments_controller.rb +0 -66
  83. data/app/controllers/cms_admin/blog_posts_controller.rb +0 -48
  84. data/app/models/blog_comment.rb +0 -45
  85. data/app/models/blog_tagging.rb +0 -8
  86. data/app/views/.DS_Store +0 -0
  87. data/app/views/cms_admin/blog_comments/_blog_comment.html.erb +0 -22
  88. data/app/views/cms_admin/blog_comments/_form.html.erb +0 -24
  89. data/app/views/cms_admin/blog_comments/_status.html.erb +0 -7
  90. data/app/views/cms_admin/blog_comments/approve.rjs +0 -1
  91. data/app/views/cms_admin/blog_comments/disapprove.rjs +0 -1
  92. data/app/views/cms_admin/blog_comments/edit.html.erb +0 -7
  93. data/app/views/cms_admin/blog_comments/index.html.erb +0 -7
  94. data/app/views/cms_admin/blog_comments/new.html.erb +0 -6
  95. data/app/views/cms_admin/blog_posts/_blog_post.html.erb +0 -21
  96. data/app/views/cms_admin/blog_posts/_form.html.erb +0 -33
  97. data/app/views/cms_admin/blog_posts/edit.html.erb +0 -7
  98. data/app/views/cms_admin/blog_posts/index.html.erb +0 -8
  99. data/app/views/cms_admin/blog_posts/new.html.erb +0 -5
  100. data/app/views/sofa_blog/_head.html.erb +0 -1
  101. data/app/views/sofa_blog/_nav.html.erb +0 -1
  102. data/config/.DS_Store +0 -0
  103. data/doc/sofa.png +0 -0
  104. data/lib/generators/README +0 -12
  105. data/lib/generators/blog_generator.rb +0 -33
  106. data/public/stylesheets/content.css +0 -53
  107. data/tmp/application.rb +0 -15
  108. data/tmp/boot.rb +0 -13
  109. data/tmp/initializers/formatted_form_builder.rb +0 -141
  110. data/tmp/initializers/wristband.rb +0 -1
  111. /data/{public/javascripts/jquery.autocomplete.pack.js → app/assets/javascripts/sofa_blog/jquery.autocomplete.js} +0 -0
@@ -1,45 +0,0 @@
1
- class BlogComment < ActiveRecord::Base
2
-
3
- # -- Relationships --------------------------------------------------------
4
-
5
- belongs_to :blog_post, :counter_cache => :comments_count
6
-
7
- # -- Validations ----------------------------------------------------------
8
-
9
- validates_presence_of :content
10
- validates_length_of :email,
11
- :in => 6..100,
12
- :too_short => 'Your email address needs to be at least 6 characters long.'
13
- validates_format_of :email,
14
- :message => 'The email you entered is not valid.',
15
- :with => /^([\w.%-+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
16
-
17
- # -- Scopes ----------------------------------------------------------
18
-
19
- scope :approved, where(:approved => true)
20
-
21
- # -- AR Callbacks ---------------------------------------------------------
22
-
23
- after_save :update_approved_comments_counter, :update_comments_counter
24
- after_destroy :update_approved_comments_counter, :update_comments_counter
25
-
26
- # -- Instance Methods --------------------------------------------------------
27
-
28
- def approve!
29
- update_attribute(:approved, true)
30
- end
31
-
32
- def disapprove!
33
- update_attribute(:approved, false)
34
- end
35
-
36
-
37
- protected
38
- def update_approved_comments_counter
39
- self.connection.execute("UPDATE blog_posts SET approved_comments_count = #{blog_post.blog_comments.approved.count} WHERE id = #{blog_post.id}")
40
- end
41
-
42
- def update_comments_counter
43
- self.connection.execute("UPDATE blog_posts SET comments_count = #{blog_post.blog_comments.count} WHERE id = #{blog_post.id}")
44
- end
45
- end
@@ -1,8 +0,0 @@
1
- class BlogTagging < ActiveRecord::Base
2
-
3
- # -- Relationships --------------------------------------------------------
4
-
5
- belongs_to :blog_post
6
- belongs_to :blog_tag, :counter_cache => true
7
-
8
- end
data/app/views/.DS_Store DELETED
Binary file
@@ -1,22 +0,0 @@
1
- <li>
2
- <div class='item'>
3
- <div class='icon' style="background-image:url(http://www.gravatar.com/avatar/<%=Digest::MD5.hexdigest(blog_comment.email.downcase)%>?s=28&d=identicon)"></div>
4
- <div class='action_links'>
5
- <%= render :partial => 'status', :locals => {:blog_comment => blog_comment} %>
6
- <%= link_to 'Edit', edit_cms_admin_blog_post_blog_comment_path(@blog_post, blog_comment) %>
7
- <%= link_to 'Delete', cms_admin_blog_post_blog_comment_path(@blog_post, blog_comment), :method => 'delete', :confirm => 'Are you sure?' %>
8
- </div>
9
- <div class='label'>
10
- <div class='sublabel'>
11
- <em>
12
- <%= time_ago_in_words(blog_comment.updated_at) %> ago
13
- <strong><%= mail_to(blog_comment.email, blog_comment.name) %></strong> wrote
14
- <% if !blog_comment.approved? %>[Waiting approval]<% end %>
15
- </em>
16
- </div>
17
- </div>
18
- <div class='content'>
19
- <%= simple_format(auto_link(blog_comment.content)) %>
20
- </div>
21
- </div>
22
- </li>
@@ -1,24 +0,0 @@
1
- <%= content_for :head do %>
2
- <script type="text/javascript">
3
- $(document).ready(function() {
4
- $('#blog_comment_content').focus();
5
- })
6
- </script>
7
- <% end %>
8
-
9
- <div id='form_blocks'>
10
- <%= form.text_field :name %>
11
- <%= form.text_field :email %>
12
- <%= form.text_area :content %>
13
- </div>
14
-
15
-
16
- <%= form.simple_field nil, nil, :class => 'submit_element' do %>
17
- <%= form.check_box :approved, :disable_builder => true %>
18
- <%= form.label_for :approved, :label => 'Approved' %>
19
- <%= form.submit @blog_post.new_record?? 'Create comment' : 'Update comment', :disable_builder => true %>
20
- or
21
- <%= link_to 'cancel', :back%>
22
- <% end %>
23
-
24
-
@@ -1,7 +0,0 @@
1
- <span id="<%= dom_id(blog_comment, :status) %>">
2
- <% if blog_comment.approved? %>
3
- <%= link_to 'Disapprove', disapprove_cms_admin_blog_post_blog_comment_path(@blog_post, blog_comment), :remote => true, :method => :put, :before => "$('##{dom_id(blog_comment, :status)}').html('disapproving ...')", :update => dom_id(blog_comment, :status) %>
4
- <% else %>
5
- <%= link_to 'Approve', approve_cms_admin_blog_post_blog_comment_path(@blog_post, blog_comment), :remote => true, :method => :put, :before => "$('##{dom_id(blog_comment, :status)}').html('approving ...')", :update => dom_id(blog_comment, :status) %>
6
- <% end %>
7
- </span>
@@ -1 +0,0 @@
1
- page << "$('##{dom_id(@blog_comment, :status)}').html('#{escape_javascript(render(:partial => 'status', :locals => {:blog_comment => @blog_comment}))}')"
@@ -1 +0,0 @@
1
- page << "$('##{dom_id(@blog_comment, :status)}').html('#{escape_javascript(render(:partial => 'status', :locals => {:blog_comment => @blog_comment}))}')"
@@ -1,7 +0,0 @@
1
- <%= link_to span_tag('Create New Comment'), new_cms_admin_blog_post_path, :class => 'big button' %>
2
-
3
- <h1>Edit comment</h1>
4
-
5
- <%= cms_form_for @blog_comment, :url => {:action => :update} do |form| %>
6
- <%= render :partial => form %>
7
- <% end %>
@@ -1,7 +0,0 @@
1
- <%= link_to span_tag('Create New Comment'), new_cms_admin_blog_post_blog_comment_path(@blog_post), :class => 'big button' %>
2
-
3
- <h1><%= truncate(@blog_post.title) %></h1>
4
-
5
- <ul class='list'>
6
- <%= render @blog_comments %>
7
- </ul>
@@ -1,6 +0,0 @@
1
- <h1>New comment</h1>
2
-
3
- <%= cms_form_for @blog_comment, :url => {:action => :create} do |form| %>
4
- <%= render :partial => form %>
5
- <% end %>
6
-
@@ -1,21 +0,0 @@
1
- <li>
2
- <div class='item'>
3
- <div class='icon'></div>
4
- <div class='action_links'>
5
- <%= link_to pluralize(blog_post.comments_count, 'comment'), cms_admin_blog_post_blog_comments_path(blog_post) %>
6
- <%= link_to 'Edit', edit_cms_admin_blog_post_path(blog_post) %>
7
- <%= link_to 'Delete', cms_admin_blog_post_path(blog_post), :method => 'delete', :confirm => 'Are you sure?' %>
8
- </div>
9
- <div class='label'>
10
- <%= link_to blog_post.title.titleize, edit_cms_admin_blog_post_path(blog_post)%>
11
- <div class='sublabel'>
12
- Published <%= time_ago_in_words(blog_post.updated_at) %> ago
13
- by <strong><%= blog_post.author %></strong>
14
- <% if !blog_post.published? %>[DRAFT]<% end %>
15
- <% blog_post.blog_tags.each do |tag| %>
16
- <span class="tag"><%= tag.name %></span>
17
- <% end %>
18
- </div>
19
- </div>
20
- </div>
21
- </li>
@@ -1,33 +0,0 @@
1
- <% content_for :head do %>
2
- <%= javascript_include_tag 'comfortable_mexican_sofa/blog/jquery.autocomplete.pack' %>
3
- <script type="text/javascript">
4
- $(document).ready(function() {
5
- $('#blog_post_title').focus();
6
- $("#blog_post_tag_names").autocomplete(<%= BlogTag.all.collect(&:name).to_json.html_safe %>, {
7
- multiple: true,
8
- selectFirst: false
9
- });
10
- })
11
- </script>
12
- <% end %>
13
-
14
- <% content_for :right_column do %>
15
- <%= render :partial => 'cms_admin/uploads/index' %>
16
- <% end %>
17
-
18
- <div id='form_blocks'>
19
- <%= form.text_field :title %>
20
- <%= form.text_field :author %>
21
- <%= form.text_field :tag_names, :label => 'Tags' %>
22
- <%= form.text_area :content, :class=> 'rich_text' %>
23
- </div>
24
-
25
- <%= form.simple_field nil, nil, :class => 'submit_element' do %>
26
- <%= form.check_box :published, :disable_builder => true %>
27
- <%= form.label_for :published, :label => 'Published' %>
28
- <%= form.submit @blog_post.new_record?? 'Create post' : 'Update post', :disable_builder => true %>
29
- or
30
- <%= link_to 'cancel', :back%>
31
- <% end %>
32
-
33
-
@@ -1,7 +0,0 @@
1
- <%= link_to span_tag('Create New Blog Post'), new_cms_admin_blog_post_path, :class => 'big button' %>
2
-
3
- <h1> Edit blog post </h1>
4
-
5
- <%= cms_form_for @blog_post, :url => {:action => :update} do |form| %>
6
- <%= render :partial => form %>
7
- <% end %>
@@ -1,8 +0,0 @@
1
- <%= link_to span_tag('Create New Blog Post'), new_cms_admin_blog_post_path, :class => 'big button' %>
2
-
3
- <h1>Blog posts</h1>
4
-
5
- <ul class='list'>
6
- <%= render @blog_posts %>
7
- </ul>
8
-
@@ -1,5 +0,0 @@
1
- <h1>New Blog Post</h1>
2
-
3
- <%= cms_form_for @blog_post, :url => {:action => :create} do |form| %>
4
- <%= render :partial => form %>
5
- <% end %>
@@ -1 +0,0 @@
1
- <%= stylesheet_link_tag :blog, :cache => ('_blog' if ComfortableMexicanSofa.config.enable_caching) %>
@@ -1 +0,0 @@
1
- <%= active_link_to 'Blog posts', cms_admin_blog_posts_path %>
data/config/.DS_Store DELETED
Binary file
data/doc/sofa.png DELETED
Binary file
@@ -1,12 +0,0 @@
1
- ____ __ ____ _
2
- / ___| ___ / _| __ _ | __ )| | ___ __ _
3
- \___ \ / _ \| |_ / _` | | _ \| |/ _ \ / _` |
4
- ___) | (_) | _| (_| | | |_) | | (_) | (_| |
5
- |____/ \___/|_| \__,_| |____/|_|\___/ \__, |
6
- |___/
7
-
8
- Hey! Everything is almost done. Please don't forget to
9
-
10
- * run migrations -> `rake db:migrate`
11
-
12
- After that go to http://your-awesome-app/cms-admin to start populating content.
@@ -1,33 +0,0 @@
1
- class BlogGenerator < Rails::Generators::Base
2
- include Rails::Generators::Migration
3
-
4
- source_root File.expand_path('../../..', __FILE__)
5
-
6
- def generate_migration
7
- destination = File.expand_path('db/migrate/01_create_sofa_blog.rb', self.destination_root)
8
- migration_dir = File.dirname(destination)
9
- destination = self.class.migration_exists?(migration_dir, 'create_sofa_blog')
10
-
11
- if destination
12
- puts "\e[0m\e[31mFound existing create_sofa_blog.rb migration. Remove it if you want to regenerate.\e[0m"
13
- else
14
- migration_template 'db/migrate/01_create_sofa_blog.rb', 'db/migrate/create_sofa_blog.rb'
15
- end
16
- end
17
-
18
- def generate_public_assets
19
- directory 'public/javascripts/', 'public/javascripts/comfortable_mexican_sofa/blog'
20
- directory 'public/stylesheets/', 'public/stylesheets/comfortable_mexican_sofa/blog'
21
- end
22
-
23
-
24
- def show_readme
25
- readme 'lib/generators/README'
26
- end
27
-
28
- def self.next_migration_number(dirname)
29
- orm = Rails.configuration.generators.options[:rails][:orm]
30
- require "rails/generators/#{orm}"
31
- "#{orm.to_s.camelize}::Generators::Base".constantize.next_migration_number(dirname)
32
- end
33
- end
@@ -1,53 +0,0 @@
1
- .c_cms_admin_blog_posts.a_index ul.list li .item .label,
2
- .c_cms_admin_blog_comments.a_index ul.list li .item .label {
3
- margin-left: 32px;
4
- }
5
- .c_cms_admin_blog_comments.a_index ul.list li .item .content {
6
- font-size: 11px;
7
- font-weight: normal;
8
- margin: 5px 0px 0 32px;
9
- }
10
-
11
- /* === Tags === */
12
- span.tag {
13
- padding: 1px 5px;
14
- background-color: #d5d5d5;
15
- border-radius: 2px;
16
- -moz-border-radius: 2px;
17
- }
18
-
19
-
20
- /* === Autocomplete === */
21
- .ac_results {
22
- padding: 0px;
23
- border: 1px solid #999;
24
- background-color: white;
25
- overflow: hidden;
26
- z-index: 99999;
27
- color: #666;
28
- } ul {
29
- width: 100%;
30
- list-style-position: outside;
31
- list-style: none;
32
- padding: 0;
33
- margin: 0;
34
- } li {
35
- margin: 0px;
36
- padding: 2px 5px;
37
- cursor: default;
38
- display: block;
39
- font-size: 12px;
40
- line-height: 16px;
41
- overflow: hidden;
42
- }
43
-
44
- .ac_loading {
45
- background: white url('/images/ajax_loader.gif') right center no-repeat;
46
- }
47
- .ac_odd {
48
- background-color: #eee;
49
- }
50
- .ac_over {
51
- background-color: #C4EAF6;
52
- color: #000;
53
- }
data/tmp/application.rb DELETED
@@ -1,15 +0,0 @@
1
- require File.expand_path('../boot', __FILE__)
2
-
3
- require 'rails/all'
4
-
5
- # If you have a Gemfile, require the gems listed there, including any gems
6
- # you've limited to :test, :development, or :production.
7
- Bundler.require(:default, Rails.env) if defined?(Bundler)
8
-
9
- module SofaBlog
10
- class Application < Rails::Application
11
- config.encoding = "utf-8"
12
-
13
- config.filter_parameters += [:password]
14
- end
15
- end
data/tmp/boot.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'rubygems'
2
-
3
- # Set up gems listed in the Gemfile.
4
- gemfile = File.expand_path('../../Gemfile', __FILE__)
5
- begin
6
- ENV['BUNDLE_GEMFILE'] = gemfile
7
- require 'bundler'
8
- Bundler.setup
9
- rescue Bundler::GemNotFound => e
10
- STDERR.puts e.message
11
- STDERR.puts "Try running `bundle install`."
12
- exit!
13
- end if File.exist?(gemfile)
@@ -1,141 +0,0 @@
1
- class FormattedFormBuilder < ActionView::Helpers::FormBuilder
2
-
3
- %w[ date_select text_field password_field text_area file_field datetime_select ].each do |selector|
4
- src = <<-end_src
5
- def #{selector}(method, options = {})
6
- if (options[:simple] == true)
7
- super(method, options)
8
- else
9
- options.merge!(:size=> '') if #{%w{text_field password_field}.include?(selector)}
10
- standard_field('#{selector}', method, options) { super(method, options) }
11
- end
12
- end
13
- end_src
14
- class_eval src, __FILE__, __LINE__
15
- end
16
-
17
- def standard_field(type, method, options={}, &block)
18
- description = options.delete(:desc)
19
- content = options.delete(:content)
20
- prev_content = options.delete(:prev_content)
21
- label = label_for(method, options)
22
- required = options.delete(:required)
23
- check_box_details = options.delete(:check_box_details)
24
- text_snippet = options.delete(:text_snippet)
25
- %{
26
- <div class='form_element #{type}_element'>
27
- #{"<div class='text_snippet'>"+text_snippet+"</div>" if text_snippet}
28
- <div class='label'>
29
- #{description(description) || '&nbsp;' if type == 'check_box' }
30
- #{label if type != 'check_box' }
31
- #{@template.content_tag(:span, '*', :class => 'required_ind') if required }
32
- </div>
33
- <div class='value'>
34
- #{prev_content}#{yield}#{content}
35
- #{error_messages_for(method)}
36
- #{description(description) if type != 'check_box'}
37
- #{description(check_box_details) if type == 'check_box'}
38
- </div>
39
- </div>
40
- }.html_safe
41
- end
42
-
43
- # generic container for all things form
44
- def element(label = '&nbsp;', value = '', type = 'text_field', &block)
45
- value += @template.capture(&block) if block_given?
46
- %{
47
- <div class='form_element #{type}_element'>
48
- <div class='label'>
49
- #{label}
50
- </div>
51
- <div class='value'>
52
- #{value}
53
- </div>
54
- </div>
55
- }.html_safe
56
- end
57
-
58
- def check_box(method, options = {}, checked_value = "1", unchecked_value = "0")
59
- options[:content] = label_for(method, options)
60
- options[:label] = ''
61
- standard_field('check_box', method, options) { super(method, options, checked_value, unchecked_value) }
62
- end
63
-
64
- def radio_button(method, tag_value, options = {})
65
- if options && options[:choices]
66
- radios = options.delete(:choices).collect{|choice| %{<div class="radio_button">}+super(method, choice[0], options) + %{<label for="#{object_name.to_s.gsub(']', '').gsub('[', '_')}_#{method}_#{choice[0]}">#{choice[1]}</label></div>}}.join.html_safe
67
- standard_field('radio_button', method, options) { radios }
68
- elsif options && options[:value_name]
69
- standard_field('radio_button', method, options) { super(method, tag_value) + %{<label for="#{object_name}_#{method}_#{tag_value}">#{options[:value_name]}</label><div class="clearfloat"></div>}.html_safe}
70
- else
71
- standard_field('radio_button', method, options) { super(method, tag_value, options = {}) }
72
- end
73
- end
74
-
75
- def select(method, choices, options = {}, html_options = {})
76
- standard_field('select', method, options) { super(method, choices, options, html_options) }
77
- end
78
-
79
- def hidden_field(method, options = {}, html_options = {})
80
- super(method, options)
81
- end
82
-
83
- def submit(value, options={}, &block)
84
- cancel_link = @template.capture(&block) if block_given?
85
- cancel_link ||= options[:cancel_url] ? ' or ' + options.delete(:cancel_url) : ''
86
- if options[:show_ajax_loader]
87
- options[:onclick] = "$(this).parent().next().css('display', 'block');$(this).parent().hide();"
88
- end
89
- if options[:image_button] == true
90
- submit_id = Time.now.usec
91
- out = @template.content_tag(:div,
92
- %{
93
- #{super(value, options.merge(:style=>'visibility:hidden;position: absolute', :id => submit_id)).html_safe}
94
- <a class="red_button" href="" onclick="$('##{submit_id}').closest('form').submit();return false"><span>#{value}</span></a>
95
- #{cancel_link.html_safe}
96
- }.html_safe, :class => 'form_element submit_element').html_safe
97
-
98
- else
99
- out = @template.content_tag(:div, super(value, options) + cancel_link.html_safe, :class => 'form_element submit_element').html_safe
100
- end
101
-
102
- if options[:show_ajax_loader]
103
- out << %{
104
- <div class="form_element submit_element" style="display:none">
105
- <div class="submit_ajax_loader">#{options[:show_ajax_loader]}</div>
106
- </div>
107
- }.html_safe
108
- end
109
- out.html_safe
110
- end
111
-
112
- def label_for(method, options)
113
- label = options.delete(:label) || method.to_s.titleize.capitalize
114
- "<label for=\"#{object_name}_#{method}\">#{label}</label>"
115
- end
116
-
117
- def description(description)
118
- "<div class='description'>#{description}</div>" unless description.nil?
119
- end
120
-
121
- def error_messages
122
- if object && !object.errors.empty?
123
- message = object.errors[:base].present? ? object.errors[:base]: 'There were some problems submitting this form. Please correct all the highlighted fields and try again'
124
- @template.content_tag(:div, message, :class => 'form_error')
125
- end
126
- end
127
-
128
- def error_messages_for(method)
129
- if (object and object.respond_to?(:errors) and errors = object.errors[method])
130
- "<div class='errors'>#{errors.is_a?(Array) ? errors.first : errors}</div>"
131
- else
132
- ''
133
- end
134
- end
135
-
136
- def formatted_fields_for(record_or_name_or_array, *args, &block)
137
- options = args.extract_options!
138
- options.merge!(:builder => FormattedFormBuilder)
139
- fields_for(record_or_name_or_array, *(args << options), &block)
140
- end
141
- end
@@ -1 +0,0 @@
1
- require 'wristband'