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.
- data/Gemfile +8 -1
- data/Gemfile.lock +83 -65
- data/LICENSE +1 -1
- data/README.md +27 -23
- data/Rakefile +8 -7
- data/VERSION +1 -1
- data/app/assets/images/rails.png +0 -0
- data/app/assets/javascripts/sofa_blog/application.js +7 -0
- data/app/assets/javascripts/sofa_blog/posts.js +2 -0
- data/app/assets/stylesheets/sofa_blog/admin.css +57 -0
- data/app/assets/stylesheets/sofa_blog/application.css +73 -0
- data/app/assets/stylesheets/sofa_blog/reset.css +1 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/sofa_blog/admin/base_controller.rb +3 -0
- data/app/controllers/sofa_blog/admin/comments_controller.rb +74 -0
- data/app/controllers/sofa_blog/admin/posts_controller.rb +55 -0
- data/app/controllers/sofa_blog/posts_controller.rb +13 -0
- data/app/helpers/sofa_blog/posts_helper.rb +2 -0
- data/app/helpers/sofa_blog_helper.rb +12 -0
- data/app/models/.gitkeep +0 -0
- data/app/models/sofa_blog/comment.rb +53 -0
- data/app/models/{blog_post.rb → sofa_blog/post.rb} +25 -25
- data/app/models/{blog_tag.rb → sofa_blog/tag.rb} +11 -10
- data/app/models/sofa_blog/tagging.rb +9 -0
- data/app/views/layouts/application.html.erb +17 -0
- data/app/views/sofa_blog/admin/_html_head.html.erb +1 -0
- data/app/views/sofa_blog/admin/_navigation.html.erb +1 -0
- data/app/views/sofa_blog/admin/comments/_comment.html.erb +21 -0
- data/app/views/sofa_blog/admin/comments/_form.html.erb +27 -0
- data/app/views/sofa_blog/admin/comments/_status.html.erb +7 -0
- data/app/views/sofa_blog/admin/comments/approve.js.erb +1 -0
- data/app/views/sofa_blog/admin/comments/disapprove.js.erb +1 -0
- data/app/views/sofa_blog/admin/comments/edit.html.erb +6 -0
- data/app/views/sofa_blog/admin/comments/index.html.erb +7 -0
- data/app/views/sofa_blog/admin/comments/new.html.erb +14 -0
- data/app/views/sofa_blog/admin/posts/_form.html.erb +35 -0
- data/app/views/sofa_blog/admin/posts/_post.html.erb +21 -0
- data/app/views/sofa_blog/admin/posts/edit.html.erb +5 -0
- data/app/views/sofa_blog/admin/posts/index.html.erb +7 -0
- data/app/views/sofa_blog/admin/posts/new.html.erb +5 -0
- data/app/views/sofa_blog/posts/_post.html.erb +21 -0
- data/app/views/sofa_blog/posts/index.html.erb +5 -0
- data/config/application.rb +48 -0
- data/config/boot.rb +6 -0
- data/config/database.yml +25 -0
- data/{tmp → config}/environment.rb +0 -1
- data/config/environments/development.rb +33 -0
- data/config/environments/production.rb +51 -0
- data/config/environments/test.rb +42 -0
- data/config/initializers/secret_token.rb +3 -0
- data/config/initializers/sofa_blog.rb +12 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +14 -9
- data/config.ru +4 -0
- data/db/migrate/01_create_sofa_blog.rb +29 -28
- data/db/schema.rb +59 -0
- data/db/seeds.rb +7 -0
- data/lib/sofa_blog/configuration.rb +21 -0
- data/lib/sofa_blog/engine.rb +13 -10
- data/lib/sofa_blog/form_builder.rb +50 -0
- data/lib/sofa_blog.rb +21 -2
- data/script/rails +6 -0
- data/sofa_blog.gemspec +89 -47
- data/test/fixtures/.gitkeep +0 -0
- data/test/fixtures/sofa_blog/comments.yml +6 -0
- data/test/fixtures/sofa_blog/posts.yml +7 -0
- data/test/functional/.gitkeep +0 -0
- data/test/functional/sofa_blog/admin/comments_controller_test.rb +59 -0
- data/test/functional/sofa_blog/admin/posts_controller_test.rb +76 -0
- data/test/functional/sofa_blog/posts_controller_test.rb +7 -0
- data/test/test_helper.rb +37 -0
- data/test/unit/.gitkeep +0 -0
- data/test/unit/comment_test.rb +55 -0
- data/test/unit/helpers/sofa_blog/posts_helper_test.rb +4 -0
- data/test/unit/post_test.rb +44 -0
- data/test/unit/tag_test.rb +7 -0
- data/test/unit/tagging_test.rb +7 -0
- metadata +145 -103
- data/.DS_Store +0 -0
- data/app/.DS_Store +0 -0
- data/app/controllers/cms_admin/blog_comments_controller.rb +0 -66
- data/app/controllers/cms_admin/blog_posts_controller.rb +0 -48
- data/app/models/blog_comment.rb +0 -45
- data/app/models/blog_tagging.rb +0 -8
- data/app/views/.DS_Store +0 -0
- data/app/views/cms_admin/blog_comments/_blog_comment.html.erb +0 -22
- data/app/views/cms_admin/blog_comments/_form.html.erb +0 -24
- data/app/views/cms_admin/blog_comments/_status.html.erb +0 -7
- data/app/views/cms_admin/blog_comments/approve.rjs +0 -1
- data/app/views/cms_admin/blog_comments/disapprove.rjs +0 -1
- data/app/views/cms_admin/blog_comments/edit.html.erb +0 -7
- data/app/views/cms_admin/blog_comments/index.html.erb +0 -7
- data/app/views/cms_admin/blog_comments/new.html.erb +0 -6
- data/app/views/cms_admin/blog_posts/_blog_post.html.erb +0 -21
- data/app/views/cms_admin/blog_posts/_form.html.erb +0 -33
- data/app/views/cms_admin/blog_posts/edit.html.erb +0 -7
- data/app/views/cms_admin/blog_posts/index.html.erb +0 -8
- data/app/views/cms_admin/blog_posts/new.html.erb +0 -5
- data/app/views/sofa_blog/_head.html.erb +0 -1
- data/app/views/sofa_blog/_nav.html.erb +0 -1
- data/config/.DS_Store +0 -0
- data/doc/sofa.png +0 -0
- data/lib/generators/README +0 -12
- data/lib/generators/blog_generator.rb +0 -33
- data/public/stylesheets/content.css +0 -53
- data/tmp/application.rb +0 -15
- data/tmp/boot.rb +0 -13
- data/tmp/initializers/formatted_form_builder.rb +0 -141
- data/tmp/initializers/wristband.rb +0 -1
- /data/{public/javascripts/jquery.autocomplete.pack.js → app/assets/javascripts/sofa_blog/jquery.autocomplete.js} +0 -0
data/app/models/blog_comment.rb
DELETED
@@ -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
|
data/app/models/blog_tagging.rb
DELETED
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,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 +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
|
data/lib/generators/README
DELETED
@@ -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) || ' ' 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 = ' ', 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'
|
File without changes
|