blog_basic 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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