blog_basic 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/Gemfile +24 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Manifest +0 -0
  4. data/README.md +186 -0
  5. data/Rakefile +47 -0
  6. data/app/admin/blog_basic_blog_posts.rb +9 -0
  7. data/app/admin/dashboards.rb +38 -0
  8. data/app/assets/images/rails.png +0 -0
  9. data/app/assets/javascripts/active_admin.js +1 -0
  10. data/app/assets/javascripts/application.js +9 -0
  11. data/app/assets/stylesheets/active_admin.css.scss +6 -0
  12. data/app/assets/stylesheets/application.css +7 -0
  13. data/app/controllers/application_controller.rb +3 -0
  14. data/app/controllers/blog_basic/app_controller.rb +27 -0
  15. data/app/controllers/blog_basic/application_controller.rb +4 -0
  16. data/app/controllers/blog_basic/blog_comments_controller.rb +69 -0
  17. data/app/controllers/blog_basic/blog_posts_controller.rb +149 -0
  18. data/app/controllers/blog_basic/sessions_controller.rb +32 -0
  19. data/app/controllers/blog_basic/tags_controller.rb +11 -0
  20. data/app/helpers/application_helper.rb +2 -0
  21. data/app/helpers/blog_basic/application_helper.rb +21 -0
  22. data/app/helpers/blog_basic/blog_posts_helper.rb +17 -0
  23. data/app/helpers/blog_basic/shared_helper.rb +36 -0
  24. data/app/helpers/blog_basic/tags_helper.rb +5 -0
  25. data/app/models/admin_user.rb +9 -0
  26. data/app/models/blog_basic/blog_comment.rb +78 -0
  27. data/app/models/blog_basic/blog_content.rb +4 -0
  28. data/app/models/blog_basic/blog_image.rb +23 -0
  29. data/app/models/blog_basic/blog_post.rb +104 -0
  30. data/app/models/blog_basic/session.rb +5 -0
  31. data/app/models/blog_basic/user.rb +22 -0
  32. data/app/views/blog_basic/blog_comments/_new_blog_comment.html.erb +43 -0
  33. data/app/views/blog_basic/blog_posts/_admin_links.html.erb +9 -0
  34. data/app/views/blog_basic/blog_posts/_blog_post.html.erb +62 -0
  35. data/app/views/blog_basic/blog_posts/_comment.html.erb +18 -0
  36. data/app/views/blog_basic/blog_posts/_comments.html.erb +6 -0
  37. data/app/views/blog_basic/blog_posts/_form.html.erb +133 -0
  38. data/app/views/blog_basic/blog_posts/_image.html.erb +20 -0
  39. data/app/views/blog_basic/blog_posts/drafts.html.erb +21 -0
  40. data/app/views/blog_basic/blog_posts/edit.html.erb +6 -0
  41. data/app/views/blog_basic/blog_posts/index.atom.builder +12 -0
  42. data/app/views/blog_basic/blog_posts/index.html.erb +31 -0
  43. data/app/views/blog_basic/blog_posts/new.html.erb +6 -0
  44. data/app/views/blog_basic/blog_posts/show.html.erb +8 -0
  45. data/app/views/blog_basic/shared/_footer.html.erb +15 -0
  46. data/app/views/blog_basic/shared/_index_top.html.erb +12 -0
  47. data/app/views/blog_basic/shared/_topbar.html.erb +24 -0
  48. data/app/views/layouts/application.html.erb +14 -0
  49. data/blog_basic.gemspec +57 -0
  50. data/config/routes.rb +21 -0
  51. data/db/migrate/1_blog_tables.rb +86 -0
  52. data/init.rb +9 -0
  53. data/lib/akismetor.rb +77 -0
  54. data/lib/blog_basic/active_admin.rb +103 -0
  55. data/lib/blog_basic/blog_basic_model_helper.rb +85 -0
  56. data/lib/blog_basic/blog_conf.rb +36 -0
  57. data/lib/blog_basic/engine.rb +13 -0
  58. data/lib/blog_basic/engine.rb.backup +80 -0
  59. data/lib/blog_basic.rb +16 -0
  60. data/lib/generators/blog_basic/create_assets/blog_assets_generator.rb +49 -0
  61. data/lib/generators/blog_basic/create_assets/templates/blog_comments_migration.rb +23 -0
  62. data/lib/generators/blog_basic/create_assets/templates/blog_images_migration.rb +19 -0
  63. data/lib/generators/blog_basic/create_assets/templates/blog_posts_migration.rb +17 -0
  64. data/lib/generators/blog_basic/create_assets/templates/config/blog_basic.yml +52 -0
  65. data/lib/generators/blog_basic/create_assets/templates/syntax/active4d.css +114 -0
  66. data/lib/generators/blog_basic/create_assets/templates/syntax/all_hallows_eve.css +72 -0
  67. data/lib/generators/blog_basic/create_assets/templates/syntax/amy.css +147 -0
  68. data/lib/generators/blog_basic/create_assets/templates/syntax/blackboard.css +88 -0
  69. data/lib/generators/blog_basic/create_assets/templates/syntax/brilliance_black.css +605 -0
  70. data/lib/generators/blog_basic/create_assets/templates/syntax/brilliance_dull.css +599 -0
  71. data/lib/generators/blog_basic/create_assets/templates/syntax/cobalt.css +149 -0
  72. data/lib/generators/blog_basic/create_assets/templates/syntax/dawn.css +121 -0
  73. data/lib/generators/blog_basic/create_assets/templates/syntax/eiffel.css +121 -0
  74. data/lib/generators/blog_basic/create_assets/templates/syntax/espresso_libre.css +109 -0
  75. data/lib/generators/blog_basic/create_assets/templates/syntax/idle.css +62 -0
  76. data/lib/generators/blog_basic/create_assets/templates/syntax/iplastic.css +80 -0
  77. data/lib/generators/blog_basic/create_assets/templates/syntax/lazy.css +73 -0
  78. data/lib/generators/blog_basic/create_assets/templates/syntax/mac_classic.css +123 -0
  79. data/lib/generators/blog_basic/create_assets/templates/syntax/magicwb_amiga.css +104 -0
  80. data/lib/generators/blog_basic/create_assets/templates/syntax/pastels_on_dark.css +188 -0
  81. data/lib/generators/blog_basic/create_assets/templates/syntax/slush_poppies.css +85 -0
  82. data/lib/generators/blog_basic/create_assets/templates/syntax/spacecadet.css +51 -0
  83. data/lib/generators/blog_basic/create_assets/templates/syntax/sunburst.css +180 -0
  84. data/lib/generators/blog_basic/create_assets/templates/syntax/twilight.css +137 -0
  85. data/lib/generators/blog_basic/create_assets/templates/syntax/zenburnesque.css +91 -0
  86. data/lib/generators/blog_basic/install/install_generator.rb +53 -0
  87. data/lib/generators/blog_basic/install/templates/active_admin.rb +103 -0
  88. data/lib/generators/blog_basic/install/templates/blog_basic.yml +52 -0
  89. data/lib/generators/blog_basic/install/templates/blog_kit.css +75 -0
  90. data/lib/generators/blog_basic/install/templates/devise.en.yml +58 -0
  91. data/lib/generators/blog_basic/install/templates/devise.rb +209 -0
  92. data/lib/generators/blog_basic/install/templates/migrations/1_blog_tables.rb +86 -0
  93. data/lib/generators/blog_basic/install/templates/migrations/20111213104240_devise_create_admin_users.rb +28 -0
  94. data/lib/generators/blog_basic/install/templates/migrations/20111213114257_create_admin_notes.rb +16 -0
  95. data/lib/generators/blog_basic/install/templates/migrations/20111213114258_move_admin_notes_to_comments.rb +25 -0
  96. data/lib/generators/blog_basic/install/templates/omniauth.rb.erb +10 -0
  97. data/lib/tasks/blog_basic_tasks.rake +0 -0
  98. data/lib/url_validator.rb +24 -0
  99. data/test/database.yml +4 -0
  100. data/test/fixtures/admin_users.yml +11 -0
  101. data/test/functional/blog_assets_generator_test.rb +35 -0
  102. data/test/functional/blog_comments_controller_test.rb +0 -0
  103. data/test/functional/blog_posts_controller_test.rb +84 -0
  104. data/test/performance/browsing_test.rb +12 -0
  105. data/test/schema.rb +61 -0
  106. data/test/test_helper.rb +13 -0
  107. data/test/unit/admin_user_test.rb +7 -0
  108. data/uninstall.rb +1 -0
  109. metadata +310 -0
@@ -0,0 +1,21 @@
1
+ module BlogBasic
2
+ module ApplicationHelper
3
+ def signed_in?
4
+ !session[:user_id].nil?
5
+ end
6
+
7
+ def current_user
8
+ logger.info "Current user ID: " + session[:user_id].to_s
9
+ if signed_in?
10
+ @current_user ||= User.find(session[:user_id])
11
+ end
12
+ end
13
+
14
+ def ensure_signed_in
15
+ unless signed_in?
16
+ session[:redirect_to] = request.request_uri
17
+ redirect_to(new_session_path)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module BlogBasic
2
+ module BlogPostsHelper
3
+
4
+ def display_name(name, site)
5
+ if !site.blank?
6
+ return link_to(name, site, :rel => 'nofollow')
7
+ else
8
+ return name
9
+ end
10
+ end
11
+
12
+ def carnonical_link(post)
13
+ "<link rel=\"canonical\" href=\"/".html_safe + post.id.to_s + "\" />".html_safe
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ module BlogBasic
2
+ module SharedHelper
3
+
4
+ def require_user
5
+ #return true
6
+ logger.info session[:user_id].to_s
7
+ @current_user ||= User.new(session[:user_id])
8
+ end
9
+
10
+ def title(page_title)
11
+ content_for(:title, page_title)
12
+ end
13
+
14
+ def sidebar_ad(posted_at)
15
+ if (posted_at < 30.days.ago) && !danish?
16
+ raw render(:partial => '/snippets/v_text_ad')
17
+ end
18
+ end
19
+
20
+ def leaderboard_ad
21
+ if !danish?
22
+ raw render(:partial => '/snippets/h_leaderboard_ad')
23
+ else
24
+ raw render :text => "<div></div>"
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def danish?
31
+ #geoip ||= GeoIP.new("#{RAILS_ROOT}/db/GeoIP.dat")
32
+ #return geoip.country(request.ip).country_code2 == "DK"
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ module BlogBasic
2
+ module TagsHelper
3
+
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ #class AdminUser < ActiveRecord::Base
2
+ # Include default devise modules. Others available are:
3
+ # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
4
+ # devise :database_authenticatable,
5
+ # :recoverable, :rememberable, :trackable, :validatable
6
+
7
+ # Setup accessible (or protected) attributes for your model
8
+ # attr_accessible :email, :password, :password_confirmation, :remember_me
9
+ #end
@@ -0,0 +1,78 @@
1
+ module BlogBasic
2
+ class BlogComment < ActiveRecord::Base
3
+ include BlogBasic::BlogBasicModelHelper
4
+
5
+ unloadable
6
+
7
+ belongs_to :user
8
+ belongs_to :blog_article
9
+
10
+ validates_presence_of :body
11
+ validates :site_url, :url => true, :if => Proc.new{ |comment| !comment.site.blank? }
12
+
13
+ before_save :check_for_spam
14
+
15
+ def validate
16
+ if !self.user
17
+ self.errors.add(:name, 'is required') if self.name.blank?
18
+ end
19
+ end
20
+
21
+ def formatted_created_at
22
+ self.created_at.strftime(BlogBasic::BlogConf.data['post_date_format'] || '%m/%d/%Y at %I:%M%p')
23
+ end
24
+
25
+ def parsed_body
26
+ # # Going to add markdown/html support later for comments
27
+ # self.code_highlight_and_markdown(self.body, {:escape_html => true})
28
+
29
+ self.body
30
+ end
31
+
32
+ def user_name
33
+ name = self.user ? self.user.name : self.name
34
+ if !self.site_url.blank? && false
35
+ return "<a href=\"".html_safe << self.site_url << "\">".html_safe << name << "</a>".html_safe
36
+ else
37
+ return name
38
+ end
39
+ end
40
+
41
+ def site
42
+ self.site_url.blank? ? "" : self.site_url
43
+ end
44
+
45
+ # Used to set more tracking for akismet
46
+ def request=(request)
47
+ self.user_ip = request.remote_ip
48
+ self.user_agent = request.env['HTTP_USER_AGENT']
49
+ self.referrer = request.env['HTTP_REFERER']
50
+ end
51
+
52
+ def check_for_spam
53
+ if BlogBasic::BlogConf.data['akismet_key'] && BlogBasic::BlogConf.data['blog_url']
54
+ if Akismetor.spam?(akismet_attributes)
55
+ self.errors.add_to_base('This comment has been detected as spam')
56
+ return false
57
+ else
58
+ return true
59
+ end
60
+ end
61
+ true
62
+ end
63
+
64
+ def akismet_attributes
65
+ {
66
+ :key => BlogBasic::BlogConf.data['akismet_key'],
67
+ :blog => BlogBasic::BlogConf.data['blog_url'],
68
+ :user_ip => user_ip,
69
+ :user_agent => user_agent,
70
+ :comment_author => name,
71
+ :comment_author_email => email,
72
+ :comment_author_url => site_url,
73
+ :comment_content => body
74
+ }
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,4 @@
1
+ module BlogBasic
2
+ class BlogContent < ActiveRecord::Base
3
+ end
4
+ end
@@ -0,0 +1,23 @@
1
+ module BlogBasic
2
+ class BlogImage < ActiveRecord::Base
3
+ unloadable
4
+
5
+ belongs_to :blog_post
6
+
7
+ attr_accessor :random_id
8
+
9
+ # Check for paperclip
10
+ if self.respond_to?(:has_attached_file)
11
+ has_attached_file(:image, {
12
+ :styles => {
13
+ :original => '1000x1000>',
14
+ :large => '600x600>',
15
+ :medium => '300x300>',
16
+ :small => '100x100>',
17
+ :thumb => '30x30>'
18
+ }
19
+ }.merge(BlogConf.data['paperclip'] || {}))
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,104 @@
1
+ module BlogBasic
2
+ class BlogPost < ActiveRecord::Base
3
+ include BlogBasic::BlogBasicModelHelper
4
+ include ActionView::Helpers::TextHelper
5
+
6
+ unloadable
7
+
8
+ belongs_to :user
9
+
10
+ has_many :blog_comments, :dependent => :destroy
11
+ has_many :blog_images, :dependent => :destroy
12
+ has_many :blog_contents
13
+
14
+ accepts_nested_attributes_for :blog_images, :allow_destroy => true
15
+
16
+ validates_presence_of :title
17
+ validates_presence_of :body
18
+
19
+ default_scope :order => 'published_at DESC'
20
+
21
+ scope :published, { :conditions => {:published => 1 }}
22
+ scope :drafts, { :conditions => {:published => 0 }}
23
+
24
+ before_save :check_published, :if => :not_resaving?
25
+ after_save :replace_blog_image_tags, :if => :not_resaving?
26
+
27
+ acts_as_taggable
28
+
29
+ def not_resaving?
30
+ !@resaving
31
+ end
32
+
33
+ # For images that haven't been uploaded yet, they get a random image id
34
+ # with 'upload' infront of it. We replace those with their new image
35
+ # id
36
+ def replace_blog_image_tags
37
+ @resaving = true
38
+ self.body.gsub!(/[{]blog_image:upload[0-9]+:[a-zA-Z]+[}]/) do |image_tag|
39
+ random_id, size = image_tag.scan(/upload([0-9]+)[:]([a-zA-Z]+)/).flatten
40
+
41
+ new_id = random_id
42
+
43
+ matching_image = self.blog_images.reject {|bi| !bi.random_id || bi.random_id != random_id }.first
44
+
45
+ if matching_image
46
+ new_id = matching_image.id
47
+ end
48
+
49
+ "{blog_image:#{new_id}:#{size}}"
50
+ end
51
+
52
+ self.save
53
+ @resaving = false
54
+
55
+ return true
56
+ end
57
+
58
+ def check_published
59
+ if self.published_change && self.published_change == [false, true]
60
+ # Moved to published state, update published_on
61
+ self.published_at = Time.now
62
+ end
63
+ end
64
+
65
+ def show_user?
66
+ (!BlogConf.data['show_user_who_published'] || BlogConf.data['show_user_who_published'] == true) && self.user
67
+ end
68
+
69
+
70
+ def user_name(skip_link=false)
71
+ if !skip_link && BlogConf.data['link_to_user']
72
+ return "<a href=\"/users/#{self.user.id}\">#{CGI.escapeHTML(self.user.name)}</a>"
73
+ else
74
+ return self.user.name
75
+ end
76
+ end
77
+
78
+ def parsed_body(length=0)
79
+ image_parsed_body = self.body.gsub(/[{]blog_image[:]([0-9]+)[:]([a-zA-Z]+)[}]/) do |str|
80
+ puts "IMAGE ID: #{$1.to_i}"
81
+ img = BlogImage.find_by_id($1.to_i)
82
+ logger.debug img.inspect.to_s
83
+ if img
84
+ img.image.url($2)
85
+ else
86
+ ''
87
+ end
88
+ end
89
+ if length > 0
90
+ image_parsed_body = truncate(image_parsed_body, :length => length, :separator => ' ')
91
+ end
92
+ return code_highlight_and_markdown(image_parsed_body)
93
+ end
94
+
95
+ def formatted_updated_at
96
+ self.updated_at.strftime(BlogConf.data['post_date_format'] || '%m/%d/%Y at %I:%M%p')
97
+ end
98
+
99
+ # Provide SEO Friendly URL's
100
+ def to_param
101
+ "#{id}-#{title.gsub(/[^a-z0-9]+/i, '-')}"
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,5 @@
1
+ module BlogBasic
2
+ class Session < ActiveRecord::Base
3
+ end
4
+
5
+ end
@@ -0,0 +1,22 @@
1
+ module BlogBasic
2
+ class User < ActiveRecord::Base
3
+
4
+ def self.create_with_omniauth(auth)
5
+ create! do |user|
6
+ user.provider = auth["provider"]
7
+ user.uid = auth["uid"]
8
+ user.name = auth["user_info"]["name"]
9
+ end
10
+ end
11
+
12
+ def admin?
13
+ #self.email == "bottiger@gmail.com"
14
+ !self.identifier_url.nil?
15
+ end
16
+
17
+ def name
18
+ "Arvid Bottiger"
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,43 @@
1
+ <div class="blogNewComment">
2
+ <h2>Post a Comment</h2>
3
+ <% if !current_user && (!BlogBasic::BlogConf.data['anonymous_comments'] || BlogBasic::BlogConf.data['anonymous_comments'] == false) %>
4
+ <p>You must be logged in to post a comment.</p>
5
+ <% else %>
6
+ <% if current_user %>
7
+ <p>Posting as <span class="blogPoster"><%=h current_user.name %></span></p>
8
+ <% end %>
9
+ <% form_for([@blog_post, blog_comment]) do |f| %>
10
+ <% if blog_comment.errors.size > 0 %>
11
+ <div id="errorExplanation">
12
+ <h2>The comment could not be saved:</h2>
13
+ <ul>
14
+ <% blog_comment.errors.full_messages.each do |msg| %>
15
+ <li><%= msg %></li>
16
+ <% end %>
17
+ </ul>
18
+ </div>
19
+ <% end %>
20
+ <% unless current_user %>
21
+ <p>
22
+ <%= f.label :name %><br />
23
+ <%= f.text_field :name %>
24
+ </p>
25
+ <p>
26
+ <%= f.label :site_url, 'Web Site (optional)' %><br />
27
+ <%= f.text_field :site_url %>
28
+ </p>
29
+ <p>
30
+ <%= f.label :email, 'Email (optional)' %><br />
31
+ <%= f.text_field :email %>
32
+ </p>
33
+ <% end %>
34
+ <p>
35
+ <%= f.label :body, 'Comment' %><br />
36
+ <%= f.text_area :body, :class => 'blogNewCommentField' %>
37
+ </p>
38
+ <p>
39
+ <%= f.submit 'Post' %>
40
+ </p>
41
+ <% end %>
42
+ <% end %>
43
+ </div>
@@ -0,0 +1,9 @@
1
+ <% if current_user && current_user.admin? %>
2
+ <div class="blogAdminLinks">
3
+ <ul class="blogList">
4
+ <li class="blogListFirst"><%= link_to 'New Blog Post', new_blog_post_path %></li>
5
+ <li><%= link_to 'Edit Drafts', drafts_blog_posts_path %></li>
6
+ <li><%= link_to 'All Posts', blog_posts_path %></li>
7
+ </ul>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,62 @@
1
+ <% if params[:action] == 'show' %>
2
+ <% content_for :head do %><%= carnonical_link(blog_post) %><% end %>
3
+ <% end %>
4
+ <div class="blogPost">
5
+ <div class="blogUserImage">
6
+ <%= blog_post.user_image_tag %>
7
+ </div>
8
+
9
+ <h1 class="blogPostTitle header">
10
+ <%= link_to(h(blog_post.title), blog_post) %>
11
+ <% if !blog_post.published? %>
12
+ [Draft]
13
+ <% end %>
14
+ </h1>
15
+
16
+ <div class="blogPostBody">
17
+ <% if defined?(show_comments) %>
18
+ <%= blog_post.parsed_body %>
19
+ <% else %>
20
+ <%= blog_post.parsed_body(1000) %>
21
+ <% end %>
22
+ </div>
23
+
24
+ <% if params[:action] == 'show' %>
25
+ <p class="blogPostPostedAt">
26
+ <% if blog_post.show_user? %>
27
+ By <span class="blogPoster"><a rel="author" style="color: red" href="http://who.is.bottiger.org"><%= blog_post.user_name %></a></span>
28
+ <% end %>
29
+ if you liked it, hit the +1 like a man!&nbsp;
30
+ <g:plusone></g:plusone>
31
+ </p>
32
+ <% end %>
33
+
34
+ <p class="blogPostTags">
35
+ <b>Tags: </b>
36
+ <% blog_post.tag_list.each do |tag| %>
37
+ <%= link_to tag, tag_url(tag) %><% if tag != blog_post.tag_list.last %>, <% end %>
38
+ <% end %>
39
+ </p>
40
+
41
+ <p class="blogFooter">
42
+ <ul class="blogList">
43
+ <li class="blogListFirst"><%= link_to(pluralize(blog_post.blog_comments.count, 'comment'), blog_post_path(blog_post), :class => 'blogCommentCount') %></li>
44
+ <% if params[:action] == 'show' %>
45
+ <li><%= link_to('Back', blog_posts_path) %></li>
46
+ <% end %>
47
+
48
+
49
+ <% if current_user && current_user.admin? %>
50
+ <li><%= link_to('Edit Post', edit_blog_post_path(blog_post))%></li>
51
+ <li><%= link_to('Delete', blog_post_path(blog_post), :method => :delete, :confirm => "Are you sure you want to destroy the post: #{blog_post.title}") %></li>
52
+ <% end %>
53
+ </ul>
54
+ </p>
55
+
56
+ <% if defined?(show_comments) %>
57
+ <%= render :partial => 'blog_basic/blog_comments/new_blog_comment', :locals => {:blog_comment => @blog_comment} %>
58
+ <%= render :partial => 'blog_basic/blog_posts/comments' %>
59
+ <% end %>
60
+
61
+ <br style="clear: both;" />
62
+ </div>
@@ -0,0 +1,18 @@
1
+ <div class="blogComment<% if comment.user && comment.user.respond_to?(:admin?) && comment.user.admin? %> blogCommentAdmin<% end %>">
2
+ <div class="blogUserImage">
3
+ <%= comment.user_image_tag %>
4
+ </div>
5
+
6
+ <p class="blogCommentPostedAt">
7
+ By <span class="blogPoster"><%= display_name(comment.user_name, comment.site) %></span>
8
+ on
9
+ <span class="blogPostDate"><%= comment.formatted_created_at%></span>
10
+ </p>
11
+
12
+ <%= h(comment.parsed_body) %>
13
+
14
+ <% if current_user && current_user.admin? %>
15
+ <p><%= button_to('Delete', blog_post_blog_comment_path(@blog_post, comment), :method => :delete, :confirm => 'Are you sure you want to delete this comment?') %></p>
16
+ <% end %>
17
+ <br style="clear: both;" />
18
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="blogComments">
2
+ <h2>Showing <%= pluralize(@blog_post.blog_comments.count, 'comment') %></h2>
3
+ <% @blog_comments.each do |comment| %>
4
+ <%= render :partial => 'blog_basic/blog_posts/comment', :locals => {:comment => comment} %>
5
+ <% end %>
6
+ </div>
@@ -0,0 +1,133 @@
1
+ <script>
2
+ function addImage() {
3
+ var newImageDiv = document.getElementById('newImage');
4
+ var blogImagesDiv = document.getElementById('blogImages');
5
+
6
+ var add_html = (newImageDiv.innerHTML+'').replace(/replace_with_rand/g, Math.round(Math.random() * 1000000000));
7
+
8
+ blogImagesDiv.innerHTML += add_html;
9
+
10
+ }
11
+
12
+ function removeImage(image_id) {
13
+ document.getElementById('image_' + image_id).value = '1';
14
+ document.getElementById('imageDiv' + image_id).style.display = 'none';
15
+ }
16
+
17
+ function insertImage(image_id) {
18
+ var blogBody = document.getElementById('blog_post_body');
19
+ if (typeof(BLOG_EDITOR) !== 'undefined') {
20
+ BLOG_EDITOR.setContent(BLOG_EDITOR.getContent() + '\n<img src="{blog_image:' + image_id + ':large}" />\n');
21
+ } else {
22
+ blogBody.value += '\n![]({blog_image:' + image_id + ':large})\n';
23
+ }
24
+ }
25
+ </script>
26
+ <%= form_for(@blog_post, :html => { :multipart => true }) do |f| %>
27
+ <% if BlogBasic::BlogConf.data['use_markdown'] == false && BlogBasic::BlogConf.data['html_editor'] == true %>
28
+ <script type="text/javascript" src="http://js.nicedit.com/nicEdit-latest.js"></script>
29
+ <script type="text/javascript">
30
+ bkLib.onDomLoaded(function() {
31
+ nicEditors.allTextAreas();
32
+ BLOG_EDITOR = nicEditors.findEditor('blog_post_body');
33
+ });
34
+ </script>
35
+ <% end %>
36
+
37
+ <div class="editBlogPost">
38
+ <div class="blogEditLeftPanel">
39
+ <% if @blog_post.errors.size > 0 %>
40
+ <div id="errorExplanation">
41
+ <h2>The blog post could not be saved:</h2>
42
+ <ul>
43
+ <% @blog_post.errors.full_messages.each do |msg| %>
44
+ <li><%= msg %></li>
45
+ <% end %>
46
+ </ul>
47
+ </div>
48
+ <% end %>
49
+ <p>
50
+ <%= f.label :title %><br />
51
+ <%= f.text_field :title %>
52
+ </p>
53
+ <p>
54
+ <%= f.label :body %><br />
55
+ <%= f.text_area :body, :size => "120x40" %>
56
+ </p>
57
+ <p>
58
+ <%= f.label :tags, 'Tags (comma seperated)' %><br />
59
+ <%= f.text_field :tag_list %>
60
+ </p>
61
+ <p>
62
+ <%= f.label :published, 'Status' %><br />
63
+ <%= f.radio_button :published,0 %><%= f.label :published_false, 'Draft' %>
64
+ <%= f.radio_button :published, 1 %><%= f.label :published_post, 'Post' %>
65
+ <%= f.radio_button :published, 2 %><%= f.label :published_page, 'Page' %>
66
+ </p>
67
+ <p>
68
+ <%= f.submit 'Save' %> or <%= link_to 'Back', blog_posts_path %>
69
+ </p>
70
+ </div>
71
+ <div class="blogEditRightPanel">
72
+ <h2>Images</h2>
73
+
74
+ <p>
75
+ You can upload images for the blog post below and insert them using the [insert]
76
+ link. Once inserted, you can change the size to thumb, small, medium, or large.
77
+ Small is the default.
78
+ </p>
79
+
80
+ <table id="blogImages">
81
+ <tr class="blogImageHeader">
82
+ <td></td>
83
+ <td>Image</td>
84
+ <td>ID</td>
85
+ <td>File</td>
86
+ <td></td>
87
+ </td>
88
+ <%= f.fields_for(:blog_images) do |g| %>
89
+ <%= render :partial => 'image', :locals => {:g => g} %>
90
+ <% end %>
91
+ </table>
92
+
93
+ <button onclick="addImage();return false;">Add Image</button>
94
+
95
+ <% if BlogBasic::BlogConf.data['use_markdown'] != false %>
96
+ <div class="blogMarkdownHelp">
97
+ <h2>Editing Help</h2>
98
+ <p>This blog uses Markdown to format its syntax, here is a quick guide</p>
99
+ <ul>
100
+ <li>**bold text**</li>
101
+ <li>*italicized text*</li>
102
+ <li>&gt;This text is blockquoted</li>
103
+ <li>&gt;&gt;This text is a nested blockquote</li>
104
+ <li>* This is an unordered list (ul) item</li>
105
+ <li>1. This is an ordered list (ol) item</li>
106
+ <li>[This is a link](http://www.example.com/)</li>
107
+ <li>[This is a link](http://www.example.com/ "with a title attribute")</li>
108
+ <li>
109
+ Code can be highlighted with the following wrapper<br />
110
+
111
+ <pre>&lt;code lang=&quot;ruby&quot;&gt;
112
+ ... your code ...
113
+ &lt;/code&gt;</pre>
114
+ </li>
115
+ </ul>
116
+ </div>
117
+ <% end %>
118
+
119
+
120
+ </div>
121
+ <br style="clear: both;" />
122
+ </div>
123
+ <% end %>
124
+
125
+
126
+ <!-- used to create new images -->
127
+ <table id="newImage" style="display: none;">
128
+ <%= fields_for(@empty_blog_post) do |h| %>
129
+ <%= h.fields_for(:blog_images, :child_index => 'replace_with_rand') do |g| %>
130
+ <%= render :partial => 'image', :locals => {:g => g} %>
131
+ <% end %>
132
+ <% end %>
133
+ </table>
@@ -0,0 +1,20 @@
1
+ <tr id="imageDiv<%= g.options[:child_index] || g.object.id %>">
2
+ <% if !g.object || g.object.new_record? %>
3
+ <td>[<a href="" onclick="insertImage('upload<%= g.options[:child_index] %>');return false;">Insert</a>]</td>
4
+ <td></td>
5
+ <td><%= g.options[:child_index] %></td>
6
+ <td>
7
+ <%= g.file_field(:image, :size => '10') %>
8
+ <%= g.hidden_field :random_id, :value => g.options[:child_index] %>
9
+ </td>
10
+ <% else %>
11
+ <td>[<a href="" onclick="insertImage(<%= g.object.id %>);return false;">Insert</a>]</td>
12
+ <td><img src="<%= g.object.image.url(:thumb) %>" /></td>
13
+ <td><%= g.object.id %></td>
14
+ <td class="imageFileName"><%= g.object.image_file_name %></td>
15
+ <% end %>
16
+ <td>
17
+ [<%= link_to_function('delete', "removeImage(#{g.options[:child_index] || g.object.id})") %>]
18
+ <%= g.hidden_field :_destroy, :id => "image_#{g.options[:child_index] || g.object.id}" %>
19
+ </td>
20
+ </tr>
@@ -0,0 +1,21 @@
1
+ <% self.respond_to?(:title) && title('Drafts') %>
2
+ <% @show_title = false -%>
3
+ <%= stylesheet_link_tag 'blog_kit' %>
4
+ <%= stylesheet_link_tag 'syntax/' + (BlogBasic::BlogConf.data['theme'] || 'mac_classic') %>
5
+
6
+ <%= render :partial => 'admin_links' %>
7
+
8
+ <% if @blog_posts.size == 0 && !params[:page] %>
9
+ <div class="blogPost">
10
+ <h1>No Blog Posts</h1>
11
+ <p>There are currently no blog posts, please check back shortly.</p>
12
+ </div>
13
+ <% else %>
14
+ <%= render :collection => @blog_posts, :partial => 'blog_post' %>
15
+ <% end %>
16
+
17
+ <div class="blogPages">
18
+ <%= will_paginate @blog_posts %>
19
+ </div>
20
+
21
+ <%= render :partial => 'admin_links' %>
@@ -0,0 +1,6 @@
1
+ <% self.respond_to?(:title) && title('Edit Post') %>
2
+ <% @show_title = false -%>
3
+ <%= stylesheet_link_tag 'blog_kit' %>
4
+ <h1>Edit Blog Post</h1>
5
+
6
+ <%= render :partial => 'form' %>
@@ -0,0 +1,12 @@
1
+ atom_feed do |feed|
2
+ feed.title(BlogBasic::BlogConf.data['blog_name'])
3
+ feed.updated(@blog_posts.first.created_at) if @blog_posts.first
4
+
5
+ @blog_posts.each do |post|
6
+ feed.entry(post) do |entry|
7
+ entry.title(post.title)
8
+ entry.content(post.parsed_body, :type => 'html')
9
+ #entry.author { |author| author.name(post.user_name(true)) }
10
+ end
11
+ end
12
+ end