kublog 0.0.1.1

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 (184) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +8 -0
  3. data/Gemfile.lock +177 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +102 -0
  6. data/Rakefile +39 -0
  7. data/app/assets/images/kublog/.gitkeep +0 -0
  8. data/app/assets/images/kublog/missing_image.png +0 -0
  9. data/app/assets/javascripts/kublog/application.js +13 -0
  10. data/app/assets/javascripts/kublog/categories.js.coffee +48 -0
  11. data/app/assets/javascripts/kublog/comments.js.coffee +30 -0
  12. data/app/assets/javascripts/kublog/email.js.coffee +32 -0
  13. data/app/assets/javascripts/kublog/images.js.coffee +77 -0
  14. data/app/assets/javascripts/kublog/posts.js.coffee +44 -0
  15. data/app/assets/javascripts/kublog/shared.js.coffee.erb +19 -0
  16. data/app/assets/javascripts/kublog/wysiwyg.controls.js.coffee +68 -0
  17. data/app/assets/plugins/kublog/ajaxyupload/images/ajax-loader.gif +0 -0
  18. data/app/assets/plugins/kublog/ajaxyupload/javascripts/jquery.ajaxyupload.js +126 -0
  19. data/app/assets/plugins/kublog/fancybox/images/blank.gif +0 -0
  20. data/app/assets/plugins/kublog/fancybox/images/fancy_close.png +0 -0
  21. data/app/assets/plugins/kublog/fancybox/images/fancy_loading.png +0 -0
  22. data/app/assets/plugins/kublog/fancybox/images/fancy_nav_left.png +0 -0
  23. data/app/assets/plugins/kublog/fancybox/images/fancy_nav_right.png +0 -0
  24. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_e.png +0 -0
  25. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_n.png +0 -0
  26. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_ne.png +0 -0
  27. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_nw.png +0 -0
  28. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_s.png +0 -0
  29. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_se.png +0 -0
  30. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_sw.png +0 -0
  31. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_w.png +0 -0
  32. data/app/assets/plugins/kublog/fancybox/images/fancy_title_left.png +0 -0
  33. data/app/assets/plugins/kublog/fancybox/images/fancy_title_main.png +0 -0
  34. data/app/assets/plugins/kublog/fancybox/images/fancy_title_over.png +0 -0
  35. data/app/assets/plugins/kublog/fancybox/images/fancy_title_right.png +0 -0
  36. data/app/assets/plugins/kublog/fancybox/images/fancybox-x.png +0 -0
  37. data/app/assets/plugins/kublog/fancybox/images/fancybox-y.png +0 -0
  38. data/app/assets/plugins/kublog/fancybox/images/fancybox.png +0 -0
  39. data/app/assets/plugins/kublog/fancybox/javascripts/fancybox-1.3.4.js +46 -0
  40. data/app/assets/plugins/kublog/fancybox/stylesheets/fancybox-1.3.4.css +359 -0
  41. data/app/assets/plugins/kublog/livequery/javascripts/jquery.livequery.js +250 -0
  42. data/app/assets/plugins/kublog/wysiwyg/images/ajax-loader.gif +0 -0
  43. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.bg.png +0 -0
  44. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.gif +0 -0
  45. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.jpg +0 -0
  46. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.no-alpha.gif +0 -0
  47. data/app/assets/plugins/kublog/wysiwyg/javascripts/jquery.wysiwyg.js +2377 -0
  48. data/app/assets/plugins/kublog/wysiwyg/javascripts/wysiwyg.image.js +284 -0
  49. data/app/assets/plugins/kublog/wysiwyg/javascripts/wysiwyg.link.js +249 -0
  50. data/app/assets/plugins/kublog/wysiwyg/stylesheets/jquery.wysiwyg.css +94 -0
  51. data/app/assets/stylesheets/kublog/application.css +9 -0
  52. data/app/assets/stylesheets/kublog/categories.css +4 -0
  53. data/app/assets/stylesheets/kublog/comments.css +4 -0
  54. data/app/assets/stylesheets/kublog/email.css +7 -0
  55. data/app/assets/stylesheets/kublog/images.css +41 -0
  56. data/app/assets/stylesheets/kublog/posts.css +39 -0
  57. data/app/controllers/kublog/application_controller.rb +12 -0
  58. data/app/controllers/kublog/categories_controller.rb +47 -0
  59. data/app/controllers/kublog/comments_controller.rb +37 -0
  60. data/app/controllers/kublog/images_controller.rb +44 -0
  61. data/app/controllers/kublog/posts_controller.rb +66 -0
  62. data/app/helpers/kublog/application_helper.rb +4 -0
  63. data/app/helpers/kublog/posts_helper.rb +38 -0
  64. data/app/mailers/kublog/post_mailer.rb +11 -0
  65. data/app/models/kublog/category.rb +26 -0
  66. data/app/models/kublog/comment.rb +46 -0
  67. data/app/models/kublog/image.rb +23 -0
  68. data/app/models/kublog/post.rb +51 -0
  69. data/app/presenters/kublog/post_presenter.rb +23 -0
  70. data/app/presenters/kublog/posts_presenter.rb +29 -0
  71. data/app/uploaders/kublog/file_uploader.rb +56 -0
  72. data/app/views/kublog/post_mailer/new_post.html.erb +1 -0
  73. data/app/views/kublog/post_mailer/new_post.liquid.html.erb +7 -0
  74. data/app/views/kublog/posts/_email_form.html.erb +13 -0
  75. data/app/views/kublog/posts/_form.html.erb +71 -0
  76. data/app/views/kublog/posts/_image_form.html.erb +26 -0
  77. data/app/views/kublog/posts/edit.html.erb +3 -0
  78. data/app/views/kublog/posts/index.atom.builder +15 -0
  79. data/app/views/kublog/posts/index.html.erb +36 -0
  80. data/app/views/kublog/posts/new.html.erb +3 -0
  81. data/app/views/kublog/posts/show.html.erb +46 -0
  82. data/app/views/layouts/kublog/application.html.erb +14 -0
  83. data/config/locales/kublog/en.yml +54 -0
  84. data/config/routes.rb +13 -0
  85. data/db/migrate/20110816211552_create_kublog_posts.rb +27 -0
  86. data/db/migrate/20110817215828_create_kublog_images.rb +11 -0
  87. data/db/migrate/20110818181434_create_kublog_categories.rb +11 -0
  88. data/db/migrate/20110822194341_create_kublog_comments.rb +14 -0
  89. data/kublog.gemspec +39 -0
  90. data/lib/kublog.rb +92 -0
  91. data/lib/kublog/author.rb +13 -0
  92. data/lib/kublog/engine.rb +5 -0
  93. data/lib/kublog/notifiable.rb +26 -0
  94. data/lib/kublog/notification/email.rb +86 -0
  95. data/lib/kublog/notification/email_job.rb +14 -0
  96. data/lib/kublog/notification/fb_post.rb +43 -0
  97. data/lib/kublog/notification/fb_post_job.rb +16 -0
  98. data/lib/kublog/notification/tweet.rb +68 -0
  99. data/lib/kublog/notification/tweet_job.rb +16 -0
  100. data/lib/kublog/user_integration/common.rb +31 -0
  101. data/lib/kublog/user_integration/devise.rb +23 -0
  102. data/lib/kublog/version.rb +3 -0
  103. data/lib/kublog/xhr_upload/file_helper.rb +36 -0
  104. data/lib/tasks/kublog_tasks.rake +4 -0
  105. data/script/rails +6 -0
  106. data/test/dummy/Rakefile +7 -0
  107. data/test/dummy/app/assets/javascripts/application.js +9 -0
  108. data/test/dummy/app/assets/javascripts/sessions.js +2 -0
  109. data/test/dummy/app/assets/javascripts/users.js +2 -0
  110. data/test/dummy/app/assets/stylesheets/application.css +157 -0
  111. data/test/dummy/app/assets/stylesheets/sessions.css +4 -0
  112. data/test/dummy/app/assets/stylesheets/users.css +4 -0
  113. data/test/dummy/app/controllers/application_controller.rb +19 -0
  114. data/test/dummy/app/controllers/sessions_controller.rb +22 -0
  115. data/test/dummy/app/controllers/users_controller.rb +17 -0
  116. data/test/dummy/app/helpers/application_helper.rb +2 -0
  117. data/test/dummy/app/helpers/error_messages_helper.rb +23 -0
  118. data/test/dummy/app/helpers/layout_helper.rb +22 -0
  119. data/test/dummy/app/helpers/sessions_helper.rb +2 -0
  120. data/test/dummy/app/helpers/users_helper.rb +2 -0
  121. data/test/dummy/app/mailers/.gitkeep +0 -0
  122. data/test/dummy/app/models/.gitkeep +0 -0
  123. data/test/dummy/app/models/ability.rb +2 -0
  124. data/test/dummy/app/models/user.rb +25 -0
  125. data/test/dummy/app/views/layouts/_account.html.erb +8 -0
  126. data/test/dummy/app/views/layouts/application.html.erb +29 -0
  127. data/test/dummy/app/views/layouts/kublog/application.html.erb +31 -0
  128. data/test/dummy/app/views/sessions/new.html.erb +15 -0
  129. data/test/dummy/app/views/users/new.html.erb +28 -0
  130. data/test/dummy/config.ru +4 -0
  131. data/test/dummy/config/application.rb +42 -0
  132. data/test/dummy/config/boot.rb +10 -0
  133. data/test/dummy/config/database.yml +25 -0
  134. data/test/dummy/config/environment.rb +5 -0
  135. data/test/dummy/config/environments/development.rb +38 -0
  136. data/test/dummy/config/environments/production.rb +51 -0
  137. data/test/dummy/config/environments/test.rb +39 -0
  138. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  139. data/test/dummy/config/initializers/inflections.rb +10 -0
  140. data/test/dummy/config/initializers/mime_types.rb +5 -0
  141. data/test/dummy/config/initializers/secret_token.rb +7 -0
  142. data/test/dummy/config/initializers/session_store.rb +8 -0
  143. data/test/dummy/config/initializers/wrap_parameters.rb +12 -0
  144. data/test/dummy/config/locales/en.yml +54 -0
  145. data/test/dummy/config/routes.rb +13 -0
  146. data/test/dummy/db/migrate/20110816225222_create_users.rb +11 -0
  147. data/test/dummy/db/migrate/20110819135547_create_delayed_jobs.rb +21 -0
  148. data/test/dummy/db/schema.rb +96 -0
  149. data/test/dummy/lib/assets/.gitkeep +0 -0
  150. data/test/dummy/log/.gitkeep +0 -0
  151. data/test/dummy/public/404.html +26 -0
  152. data/test/dummy/public/422.html +26 -0
  153. data/test/dummy/public/500.html +26 -0
  154. data/test/dummy/public/favicon.ico +0 -0
  155. data/test/dummy/script/delayed_job +5 -0
  156. data/test/dummy/script/rails +6 -0
  157. data/test/dummy/test/fixtures/users.yml +9 -0
  158. data/test/dummy/test/functional/sessions_controller_test.rb +7 -0
  159. data/test/dummy/test/functional/users_controller_test.rb +7 -0
  160. data/test/dummy/test/unit/helpers/sessions_helper_test.rb +4 -0
  161. data/test/dummy/test/unit/helpers/users_helper_test.rb +4 -0
  162. data/test/dummy/test/unit/user_test.rb +7 -0
  163. data/test/factories.rb +9 -0
  164. data/test/fixtures/kublog/categories.yml +7 -0
  165. data/test/fixtures/kublog/comments.yml +7 -0
  166. data/test/fixtures/kublog/images.yml +9 -0
  167. data/test/fixtures/kublog/posts.yml +9 -0
  168. data/test/functional/kublog/categories_controller_test.rb +9 -0
  169. data/test/functional/kublog/comments_controller_test.rb +9 -0
  170. data/test/functional/kublog/images_controller_test.rb +9 -0
  171. data/test/functional/kublog/post_mailer_test.rb +9 -0
  172. data/test/functional/kublog/posts_controller_test.rb +9 -0
  173. data/test/integration/navigation_test.rb +10 -0
  174. data/test/kublog_test.rb +7 -0
  175. data/test/test_helper.rb +12 -0
  176. data/test/unit/helpers/kublog/categories_helper_test.rb +6 -0
  177. data/test/unit/helpers/kublog/comments_helper_test.rb +6 -0
  178. data/test/unit/helpers/kublog/images_helper_test.rb +6 -0
  179. data/test/unit/helpers/kublog/posts_helper_test.rb +6 -0
  180. data/test/unit/kublog/category_test.rb +9 -0
  181. data/test/unit/kublog/comment_test.rb +9 -0
  182. data/test/unit/kublog/image_test.rb +9 -0
  183. data/test/unit/kublog/post_test.rb +19 -0
  184. metadata +439 -0
@@ -0,0 +1,11 @@
1
+ module Kublog
2
+ class PostMailer < ActionMailer::Base
3
+ default from: "test@kublog.com"
4
+
5
+ def new_post(post, user)
6
+ @post, @user = post, user
7
+ mail(:to => user.email, :subject => post.title.titleize)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ module Kublog
2
+ class Category < ActiveRecord::Base
3
+ extend FriendlyId
4
+
5
+ has_many :posts, :dependent => :nullify
6
+
7
+ validates_presence_of :name
8
+ validates_uniqueness_of :name
9
+
10
+ friendly_id :name, :use => :slugged
11
+
12
+ def to_s
13
+ self.name.titleize
14
+ end
15
+
16
+ # Site access to the category
17
+ def path
18
+ Engine.routes.url_helpers.category_path(self)
19
+ end
20
+
21
+ def as_json(params={})
22
+ super params.merge({:methods => [:path]})
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,46 @@
1
+ module Kublog
2
+ class Comment < ActiveRecord::Base
3
+ belongs_to :user
4
+ belongs_to :post
5
+
6
+ validates_presence_of :body
7
+ validate :has_user_details
8
+
9
+ default_scope order('kublog_comments.created_at ASC')
10
+
11
+ delegate :admin?, :to => :user, :allow_nil => true
12
+
13
+ def author
14
+ return self.author_name if self.user.nil?
15
+ return self.user.to_s
16
+ end
17
+
18
+ # Site access to the category
19
+ def path
20
+ Engine.routes.url_helpers.post_comment_path(self.post, self)
21
+ end
22
+
23
+ def as_json(options={})
24
+ super(options.merge({:methods => [:path, :author, :ftime, :admin?]}))
25
+ end
26
+
27
+ def ftime
28
+ I18n.l(self.created_at, :format => :short)
29
+ end
30
+
31
+ private
32
+
33
+ def has_user_details
34
+ if self.user.nil?
35
+ errors.add(:author_name, :blank) if author_name.blank?
36
+ errors.add(:author_email, :blank) if author_email.blank?
37
+ errors.add(:author_email, :invalid) if !valid_author_email?
38
+ end
39
+ end
40
+
41
+ def valid_author_email?
42
+ self.author_email.to_s.match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i)
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,23 @@
1
+ module Kublog
2
+ class Image < ActiveRecord::Base
3
+
4
+ validates_presence_of :file
5
+
6
+ mount_uploader :file, FileUploader
7
+ attr_accessible :file, :alt
8
+
9
+ before_create :set_default_alt
10
+ before_validation :get_dimensions
11
+
12
+ private
13
+
14
+ def set_default_alt
15
+ self.alt = file_url.match(/([\w|\b|\s\-]+)\.[png|jpg|gif|jpeg]+/)[1]
16
+ end
17
+
18
+ def get_dimensions
19
+ self.file_width, self.file_height = `identify -format "%wx %h" #{self.file.path}`.split(/x/)
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: UTF-8
2
+ module Kublog
3
+ class Post < ActiveRecord::Base
4
+ extend FriendlyId
5
+ include Notification::Email, Notification::Tweet, Notification::FbPost
6
+
7
+ #Associations
8
+ belongs_to :user, :class_name => Kublog.author_class
9
+ belongs_to :category
10
+ has_many :comments, :dependent => :destroy
11
+
12
+ validates_presence_of :title, :body, :user
13
+ validate :body_with_content
14
+
15
+ #Special Attributes
16
+ serialize :intended_for, Array
17
+ friendly_id :title, :use => :slugged
18
+
19
+ #Scopes
20
+ default_scope order('kublog_posts.created_at DESC')
21
+
22
+ def author
23
+ user.to_s
24
+ end
25
+
26
+ def to_s
27
+ title
28
+ end
29
+
30
+ # Public Access to the Post
31
+ def url
32
+ Engine.routes.url_helpers.quickie_url(self, :host => Kublog.default_url_options[:host])
33
+ end
34
+
35
+ def related_posts
36
+ self.category.posts.where('id != ?', self.id) unless self.category.nil?
37
+ end
38
+
39
+ private
40
+
41
+ def body_with_content
42
+ errors.add(:body, :blank) if blank_body?
43
+ end
44
+
45
+ # Weird regex identifies &nbsp; generated blank chars
46
+ def blank_body?
47
+ Sanitize.clean(self.body).gsub(/[ | ]/, '').blank?
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,23 @@
1
+ module Kublog
2
+ class PostPresenter
3
+
4
+ attr_accessor :post
5
+
6
+ def initialize(post=nil)
7
+ @post = post
8
+ end
9
+
10
+ def comment_count
11
+ @comment_count ||= comments.count
12
+ end
13
+
14
+ def comments
15
+ @comments ||= @post.comments
16
+ end
17
+
18
+ def related_posts
19
+ @related_posts ||= @post.related_posts.try(:limit, 5) || []
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,29 @@
1
+ module Kublog
2
+ class PostsPresenter
3
+
4
+ def initialize(category=nil)
5
+ @category = category
6
+ end
7
+
8
+ def categories
9
+ @categories ||= Category.all
10
+ end
11
+
12
+ def posts
13
+ @posts ||= @category ? @category.posts : Post.all
14
+ end
15
+
16
+ def title
17
+ @title ||= @category.nil? ? Kublog.blog_name : "#{@category.name} :: #{Kublog.blog_name}"
18
+ end
19
+
20
+ def updated
21
+ self.posts.first.try(:updated_at)
22
+ end
23
+
24
+ def ftime(updated)
25
+ updated.strftime("%Y-%m-%dT%H:%M:%SZ")
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+
3
+ module Kublog
4
+ class FileUploader < CarrierWave::Uploader::Base
5
+
6
+ # Include RMagick or ImageScience support:
7
+ include CarrierWave::RMagick
8
+ # include CarrierWave::MiniMagick
9
+ # include CarrierWave::ImageScience
10
+
11
+ # Choose what kind of storage to use for this uploader:
12
+ storage Kublog.image_storage
13
+ # storage :fog
14
+
15
+ # Override the directory where uploaded files will be stored.
16
+ # This is a sensible default for uploaders that are meant to be mounted:
17
+ def store_dir
18
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
19
+ end
20
+
21
+ # Provide a default URL as a default if there hasn't been a file uploaded:
22
+ def default_url
23
+ '/assets/kublog/missing_image.png' # + [version_name, "default.png"].compact.join('_')
24
+ end
25
+
26
+ # Process files as they are uploaded:
27
+ # process :scale => [200, 300]
28
+ #
29
+ # def scale(width, height)
30
+ # # do something
31
+ # end
32
+
33
+ # Create different versions of your uploaded files:
34
+
35
+ version :thumb do
36
+ process :resize_to_limit => [54, 54]
37
+ end
38
+
39
+ version :small do
40
+ process :resize_to_limit => [140, 140]
41
+ end
42
+
43
+ # Add a white list of extensions which are allowed to be uploaded.
44
+ # For images you might use something like this:
45
+ def extension_white_list
46
+ %w(jpg jpeg gif png)
47
+ end
48
+
49
+ # Override the filename of the uploaded files:
50
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
51
+ # def filename
52
+ # "something.jpg" if original_filename
53
+ # end
54
+
55
+ end
56
+ end
@@ -0,0 +1 @@
1
+ <%= Liquid::Template.parse(@post.email_body).render('user' => @user.to_s).html_safe %>
@@ -0,0 +1,7 @@
1
+ <p>
2
+ <%= I18n.t('kublog.post_mailer.new_post.greetings') %> {{user}},
3
+ </p>
4
+
5
+ <div>
6
+ <%= post.body %>
7
+ </div>
@@ -0,0 +1,13 @@
1
+ <div style='display:none'>
2
+ <%= link_to '#', '#email-template', :class => 'submit_fancybox', :id => 'link-to-email-template' %>
3
+ <div id="email-template">
4
+ <h2><%= t('.format_email') %></h2>
5
+ <div class='field'>
6
+ <%= f.text_area :email_body %>
7
+ </div>
8
+ <div class='field'>
9
+ <%= f.submit :id => 'email_submit' %> <%= t('.or') %>
10
+ <%= link_to t('.cancel'), '#', :id => 'email_cancel' %>
11
+ </div>
12
+ </div>
13
+ </div>
@@ -0,0 +1,71 @@
1
+ <%= form_for post, :html => {:class => 'post_form'} do |f| %>
2
+
3
+ <div class="main-attributes">
4
+
5
+ <div class='field'>
6
+ <%= f.label :body %><br />
7
+ <%= f.text_area :body, :class => 'editor' %>
8
+ </div>
9
+
10
+ <div class='field'>
11
+ <%= f.label :title %> <br />
12
+ <%= f.text_field :title, :class => 'original' %>
13
+ </div>
14
+
15
+ <div class='field'>
16
+ <%= f.label :category_id %> <br />
17
+ <%= select_tag 'post[category_id]', category_options(post).html_safe %>
18
+ </div>
19
+ <%= render "email_form", :f => f %>
20
+ <%= render 'image_form' %>
21
+ </div>
22
+
23
+ <div class='sharing-attributes'>
24
+
25
+ <div class='field'>
26
+ <%= f.check_box :twitter_notify, :class => 'trigger-optional', :checked => post.new_record? %>
27
+ <%= f.label :twitter_notify %>
28
+ <div class='optional' style='<%= display? post.new_record? %>'>
29
+ <span class='chars_left'>129</span>
30
+ <%= f.text_area :tweet_text, :rows => 5, :cols => 10, :maxlength => 129, :value => '',
31
+ :disabled => !post.new_record?, :class => 'small mimic' %>
32
+ <small><%= t('.link_to_tweet') %></small>
33
+ </div>
34
+ </div>
35
+
36
+ <div class='field'>
37
+ <%= f.check_box :facebook_notify, :class => 'trigger-optional',
38
+ :checked => post.new_record? %>
39
+ <%= f.label :facebook_notify %>
40
+ <div class='optional' style='<%= display? post.new_record? %>'>
41
+ <%= f.text_area :facebook_text, :rows => 5, :cols => 10, :value => '',
42
+ :disabled => !post.new_record?, :class => 'small mimic' %>
43
+ <small><%= t('.link_to_facebook') %></small>
44
+ </div>
45
+ </div>
46
+
47
+ <div class='field'>
48
+ <%= f.check_box :email_notify, :class => 'trigger-optional', :checked => false %>
49
+ <%= f.label :email_notify %>
50
+ <% unless user_kinds.empty? %>
51
+ <div class='optional'>
52
+ <ul>
53
+ <% user_kinds.each do |user_kind|%>
54
+ <li>
55
+ <%= check_box_tag "post[intended_for][]", user_kind, nil,
56
+ :id => "post_intended_for_#{user_kind}" %>
57
+ <%= label_tag "post_intended_for_#{user_kind}", user_kind.titleize %>
58
+ </li>
59
+ <% end %>
60
+ </ul>
61
+ </div>
62
+ <% end %>
63
+ </div>
64
+
65
+ </div>
66
+
67
+ <div class='submit field'>
68
+ <%= f.submit :id => 'create_post_button' %>
69
+ </div>
70
+
71
+ <% end %>
@@ -0,0 +1,26 @@
1
+ <div style='display:none'>
2
+ <%= link_to '#', '#image-upload', :class => 'fancybox', :id => 'link-to-upload' %>
3
+ <div id="image-upload">
4
+ <h2><%= t('.insert_image') %></h2>
5
+ <%= hidden_field_tag :image_id %>
6
+ <div class='image-file field'>
7
+ <%= file_field_tag :image, :class => 'upload' %><br /><br />
8
+ <div class='container'>
9
+ <span></span>
10
+ <%= image_tag missing_image_url, :id => 'uploaded-file-placeholder' %>
11
+ </div>
12
+ </div>
13
+ <div class='image-alt field'>
14
+ <%= label_tag :image_alt, t('.alt') %><br />
15
+ <%= text_field_tag :image_alt, '', :disabled => true %>
16
+ </div>
17
+ <div class='image-size field'>
18
+ <%= label_tag :insert_size, t('.insert_size') %><br />
19
+ <%= select_tag :insert_size, size_options, :disabled => true %>
20
+ </div>
21
+ <div class='field'>
22
+ <%= submit_tag t('.insert_image'), :disabled => true %>
23
+ <%= t('.or') %> <%= link_to t('.cancel'), '#', :id => 'cancel-upload' %>
24
+ </div>
25
+ </div>
26
+ </div>
@@ -0,0 +1,3 @@
1
+ <h1><%= t('.title') %></h1>
2
+
3
+ <%= render 'form', :post => @post %>
@@ -0,0 +1,15 @@
1
+ atom_feed do |feed|
2
+ feed.title @presenter.title
3
+ feed.updated @presenter.updated
4
+ @presenter.posts.each do |post|
5
+ feed.entry(post) do |entry|
6
+ entry.url post.url
7
+ entry.title post.title
8
+ entry.content post.body, :type => 'html'
9
+ entry.updated_at @presenter.ftime(post.updated_at)
10
+ entry.author do |author|
11
+ author.name post.user.to_s
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,36 @@
1
+ <div class='post-actions'>
2
+ <% if is_admin? %>
3
+ <h2><%= t('.actions') %></h2>
4
+ <ul>
5
+ <li><%= link_to 'New Post', new_post_path %></li>
6
+ </ul>
7
+ <% end %>
8
+ <% unless @presenter.categories.empty? %>
9
+ <h2><%= t('.categories') %></h2>
10
+ <ul id='categories'>
11
+ <% @presenter.categories.each do |category|%>
12
+ <li>
13
+ <%= link_to category, category %>
14
+ <% if is_admin? %>
15
+ <small>
16
+ (<%= link_to t('.edit'), '#', :class => 'edit', 'data-prompt' => t('.edit_category_prompt') %> |
17
+ <%= link_to t('.delete'), '#', :class=> 'delete', 'data-confirm' => t('.category_delete_confirm')%>)
18
+ </small>
19
+ <% end %>
20
+ </li>
21
+ <% end %>
22
+ </ul>
23
+ <% end %>
24
+ </div>
25
+
26
+ <% @presenter.posts.each do |post| %>
27
+ <div class='post'>
28
+ <%= link_to content_tag(:h2, post.title), quickie_path(post), :class => 'post-title' %>
29
+ <span class='published-at'>
30
+ <%= l post.updated_at, :format => :short %>
31
+ </span>
32
+ <div class='post-body'>
33
+ <%= post.body.html_safe %>
34
+ </div>
35
+ </div>
36
+ <% end %>