From 630407adf338ea7ec8c600387f699b94e2c84128 Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Tue, 9 Sep 2014 16:54:15 +0200 Subject: [PATCH 01/10] made gemspec valid --- forem.gemspec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forem.gemspec b/forem.gemspec index 708d25694..82e4d9e55 100644 --- a/forem.gemspec +++ b/forem.gemspec @@ -25,10 +25,9 @@ Gem::Specification.new do |s| s.add_dependency 'rails', '~> 4.0.3' s.add_dependency 'simple_form', '~> 3.0.1' s.add_dependency 'sanitize', '2.0.6' - s.add_dependency 'friendly_id', '5.0.2' s.add_dependency 'workflow', '1.0.0' s.add_dependency 'gemoji', '= 1.1.2' s.add_dependency 'decorators', '~> 1.0.2' s.add_dependency 'select2-rails', '~> 3.5.4' - s.add_dependency 'friendly_id', '~> 5.0.0' + s.add_runtime_dependency 'friendly_id', '~> 5.0.0', '= 5.0.2' end From e46304df2b0bfe37ae03466fd8aa19b67bfc7ff8 Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Tue, 9 Sep 2014 17:49:33 +0200 Subject: [PATCH 02/10] Little updates to make use of single CSS possible --- app/views/forem/posts/_post.html.erb | 3 +-- app/views/forem/posts/_reply_to_post.html.erb | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/views/forem/posts/_post.html.erb b/app/views/forem/posts/_post.html.erb index a29e1c981..c7f9a84ba 100644 --- a/app/views/forem/posts/_post.html.erb +++ b/app/views/forem/posts/_post.html.erb @@ -16,7 +16,6 @@ <% end %> -
<% if post.user.is_a?(Forem::NilUser) %> @@ -59,6 +58,6 @@
<% end %>
-
+ diff --git a/app/views/forem/posts/_reply_to_post.html.erb b/app/views/forem/posts/_reply_to_post.html.erb index 2eb01f18d..a517b9b0d 100644 --- a/app/views/forem/posts/_reply_to_post.html.erb +++ b/app/views/forem/posts/_reply_to_post.html.erb @@ -12,7 +12,7 @@ <%= forem_format(post.text) %> <% if post.reply_to %> - + <%= link_to "#{t("forem.post.in_reply_to")} #{post.reply_to.user}", "#post-#{post.reply_to.id}" %> <% end %> From 032d46ed0ccd3cbc9037e4b97de58383d5c79873 Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Tue, 9 Sep 2014 22:21:00 +0200 Subject: [PATCH 03/10] Use proper localisation string for post edit button --- app/views/forem/posts/_post.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/forem/posts/_post.html.erb b/app/views/forem/posts/_post.html.erb index c7f9a84ba..a62eb4a60 100644 --- a/app/views/forem/posts/_post.html.erb +++ b/app/views/forem/posts/_post.html.erb @@ -49,7 +49,7 @@ <% end %> <% if post.owner_or_admin?(forem_user) %> <% if can?(:edit_post, post.topic.forum) %> - <%= link_to t('edit', :scope => 'forem.post'), forem.edit_forum_topic_post_path(post.forum, post.topic, post), :class => "btn btn-info" %> + <%= link_to t('edit', :scope => 'forem.post.buttons'), forem.edit_forum_topic_post_path(post.forum, post.topic, post), :class => "btn btn-info" %> <% end %> <% if can?(:destroy_post, post.topic.forum) %> <%= link_to t('delete', :scope => 'forem.topic'), forem.forum_topic_post_path(post.forum, post.topic, post), :method => :delete, data: { :confirm => t("are_you_sure") }, :class => "btn btn-danger" %> From 5c45167433077755880f804de3159ca1ce8a9031 Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Tue, 9 Sep 2014 22:29:20 +0200 Subject: [PATCH 04/10] Properly wrap header in reply form --- app/views/forem/posts/new.html.erb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/views/forem/posts/new.html.erb b/app/views/forem/posts/new.html.erb index 23b355a90..1be8355bf 100644 --- a/app/views/forem/posts/new.html.erb +++ b/app/views/forem/posts/new.html.erb @@ -1,13 +1,11 @@ <%= render :partial => 'forem/forums/head', :locals => { :forum => @topic.forum } %> -

- <%= t("forem.post.new") %> - <% if @reply_to_post %> - <%= render 'reply_to_post', :post => @reply_to_post %> - <% else %> - <%= @topic.subject %> - <% end %> -

+

<%= t("forem.post.new") %>

+<% if @reply_to_post %> +<%= render 'reply_to_post', :post => @reply_to_post %> +<% else %> +<%= @topic.subject %> +<% end %> <%= simple_form_for [forem, @topic.forum, @topic, @post] do |f| %> <%= render :partial => "form", :locals => { :f => f } %> From cd39afef374ddb45bd15ec9cbc9f7a0c95dece0a Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Fri, 12 Sep 2014 12:10:58 +0200 Subject: [PATCH 05/10] Added member info to post partial --- app/views/forem/posts/_post.html.erb | 7 +++++++ config/locales/en.yml | 2 ++ 2 files changed, 9 insertions(+) diff --git a/app/views/forem/posts/_post.html.erb b/app/views/forem/posts/_post.html.erb index a62eb4a60..106148b8e 100644 --- a/app/views/forem/posts/_post.html.erb +++ b/app/views/forem/posts/_post.html.erb @@ -25,6 +25,13 @@ <% end %>
<%= forem_avatar(post.user, :size => 60) %>
+
+
    +
  • <%= t('wrote_posts', count: post.user.forem_posts.approved.count) %>
  • +
  • <%= t('member_since', date: post.user.created_at.strftime('%e %b %y')) %>
  • +
+
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index 6ed4ceae3..8548e4b32 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -217,3 +217,5 @@ en: by: by started_by: "Started by " are_you_sure: Are you sure? + wrote_posts: "Wrote %{count} posts" + member_since: "Member since %{date}" From f9b0c61e1dbb2cc2438d2058b6cf731a168500fa Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Fri, 12 Sep 2014 12:11:09 +0200 Subject: [PATCH 06/10] Removed trailing apostrophe --- app/views/forem/topics/_form.html.erb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/views/forem/topics/_form.html.erb b/app/views/forem/topics/_form.html.erb index d9a65c5a3..577bbc165 100644 --- a/app/views/forem/topics/_form.html.erb +++ b/app/views/forem/topics/_form.html.erb @@ -6,5 +6,4 @@ <% end %> <%= f.submit :class => "btn btn-primary" %> -<% end %> -` \ No newline at end of file +<% end %> \ No newline at end of file From 69291970ecd98fc9e8b682ce0c5d0355d8a64b47 Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Fri, 12 Sep 2014 16:02:19 +0200 Subject: [PATCH 07/10] Implemented post preview --- app/assets/javascripts/forem.js.erb | 36 ++++++++++++++++ app/controllers/forem/posts_controller.rb | 17 +++++++- app/views/forem/posts/_form.html.erb | 8 +++- app/views/forem/posts/_post.html.erb | 43 +++++++++++++------ app/views/forem/posts/_reply_to_post.html.erb | 20 --------- app/views/forem/posts/new.html.erb | 2 +- config/routes.rb | 3 ++ forem.gemspec | 2 +- 8 files changed, 94 insertions(+), 37 deletions(-) delete mode 100644 app/views/forem/posts/_reply_to_post.html.erb diff --git a/app/assets/javascripts/forem.js.erb b/app/assets/javascripts/forem.js.erb index 5a562d7ac..d886d74a9 100644 --- a/app/assets/javascripts/forem.js.erb +++ b/app/assets/javascripts/forem.js.erb @@ -1,4 +1,40 @@ //= require select2/select2 +//= require jquery var Forem = {}; Forem.routes = {}; + +var textareaSelector = 'textarea.new-post'; +var lastRenderedMarkdown = ""; +var previewRefreshTimeout = 100; + +$(function() { + if($(textareaSelector).length) { + fetch_preview(); + } +}); + +function fetch_preview() +{ + markdownText = $(textareaSelector).val(); + if(markdownText == lastRenderedMarkdown) { + setTimeout(fetch_preview, previewRefreshTimeout); + return; + } + + lastRenderedMarkdown = markdownText; + $.post( + $(textareaSelector).data("previewUrl"), + { markdown : markdownText }, + function(result) { + update_preview(result); + setTimeout(fetch_preview, previewRefreshTimeout); + } + ); +} + +function update_preview(data) +{ + selector = $(textareaSelector).data("previewElementSelector"); + $(selector).html(data.html); +} \ No newline at end of file diff --git a/app/controllers/forem/posts_controller.rb b/app/controllers/forem/posts_controller.rb index 2f019f16b..85ea09d67 100644 --- a/app/controllers/forem/posts_controller.rb +++ b/app/controllers/forem/posts_controller.rb @@ -1,7 +1,7 @@ module Forem class PostsController < Forem::ApplicationController before_filter :authenticate_forem_user - before_filter :find_topic + before_filter :find_topic, except: [:preview] before_filter :reject_locked_topic!, :only => [:create] before_filter :block_spammers, :only => [:new, :create] before_filter :authorize_reply_for_topic!, :only => [:new, :create] @@ -20,6 +20,10 @@ def new flash[:notice] = t("forem.post.cannot_quote_deleted_post") redirect_to [@topic.forum, @topic] end + + if(@reply_to_post) + @post.reply_to = @reply_to_post + end end def create @@ -48,6 +52,17 @@ def destroy @post.destroy destroy_successful end + + def preview + formatted_markdown = { + markdown: params[:markdown], + html: ApplicationController.helpers.forem_format(params[:markdown]) + } + respond_to do |format| + format.json { render json: formatted_markdown} + end + end + private diff --git a/app/views/forem/posts/_form.html.erb b/app/views/forem/posts/_form.html.erb index dc737a901..6fa051881 100644 --- a/app/views/forem/posts/_form.html.erb +++ b/app/views/forem/posts/_form.html.erb @@ -1,4 +1,10 @@ -<%= f.input :text, :input_html => { :class => "field col-md-12" } %> +<%= render "/forem/posts/post", + post: f.object, + post_counter: 1, + show_buttons: false + %> + +<%= f.input :text, :input_html => { :class => "field col-md-12 new-post", "data-preview-url" => render_post_preview_path, "data-preview-element-selector" => "#post_2 .contents .text" } %> <% if params[:reply_to_id] %> <%= f.hidden_field :reply_to_id, :value => params[:reply_to_id] %> diff --git a/app/views/forem/posts/_post.html.erb b/app/views/forem/posts/_post.html.erb index 106148b8e..b4f41a0dc 100644 --- a/app/views/forem/posts/_post.html.erb +++ b/app/views/forem/posts/_post.html.erb @@ -1,7 +1,18 @@ +<% +post_user = Forem::NilUser +if post.persisted? + post_user = post.user +else + post_user = forem_user +end + +show_buttons = post.persisted? && local_assigns[:show_buttons].nil? ? true : show_buttons +%> +
col-md-12'> - <% if post.pending_review? %> + <% if post.pending_review? && show_buttons %>
<%= t(".pending_review") %> <% if forem_admin_or_moderator?(post.topic.forum) %> @@ -18,35 +29,41 @@
- <% if post.user.is_a?(Forem::NilUser) %> + <% if post_user.is_a?(Forem::NilUser) %> <%= t(:deleted) %> <% else %> - <%= link_to_if Forem.user_profile_links, post.user, [main_app, post.user] %> + <%= link_to_if Forem.user_profile_links, post_user, [main_app, post_user] %> <% end %>
-
<%= forem_avatar(post.user, :size => 60) %>
+
<%= forem_avatar(post_user, :size => 60) %>
-
    -
  • <%= t('wrote_posts', count: post.user.forem_posts.approved.count) %>
  • -
  • <%= t('member_since', date: post.user.created_at.strftime('%e %b %y')) %>
  • -
+
    +
  • <%= t('wrote_posts', count: post_user.forem_posts.approved.count) %>
  • +
  • <%= t('member_since', date: post_user.created_at.strftime('%e %b %y')) %>
  • +
- - <%= post_time_tag(post) %> + + <% if post.persisted? %> + <%= post_time_tag(post) %> + <% else %> +   + <% end %> - <%= forem_format(post.text) %> - <% if post.reply_to %>
<%= link_to "#{t("forem.post.in_reply_to")} #{post.reply_to.user}", "#post-#{post.reply_to.id}" %>
<% end %> + + + <%= forem_format(post.text) if post.persisted? %> + - <% if forem_user %> + <% if forem_user && show_buttons %>
<% if can?(:reply, post.topic) %> <% if post.topic.can_be_replied_to? %> diff --git a/app/views/forem/posts/_reply_to_post.html.erb b/app/views/forem/posts/_reply_to_post.html.erb deleted file mode 100644 index a517b9b0d..000000000 --- a/app/views/forem/posts/_reply_to_post.html.erb +++ /dev/null @@ -1,20 +0,0 @@ - -
col-md-10'> -
-
- <%= link_to_if Forem.user_profile_links, post.user, [main_app, post.user] %> -
-
<%= forem_avatar(post.user, :size => 60) %>
-
- -
- - <%= forem_format(post.text) %> - - <% if post.reply_to %> - - <%= link_to "#{t("forem.post.in_reply_to")} #{post.reply_to.user}", "#post-#{post.reply_to.id}" %> - - <% end %> -
-
\ No newline at end of file diff --git a/app/views/forem/posts/new.html.erb b/app/views/forem/posts/new.html.erb index 1be8355bf..45fb0484c 100644 --- a/app/views/forem/posts/new.html.erb +++ b/app/views/forem/posts/new.html.erb @@ -2,7 +2,7 @@

<%= t("forem.post.new") %>

<% if @reply_to_post %> -<%= render 'reply_to_post', :post => @reply_to_post %> +<%= render "/forem/posts/post", :post => @reply_to_post, post_counter: 0, show_buttons: false %> <% else %> <%= @topic.subject %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 4ce8f604b..114e2af49 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -33,6 +33,9 @@ get 'users/autocomplete', :to => "users#autocomplete", :as => "user_autocomplete" end + #post preview + post '/render_preview', to: "posts#preview", as: :render_post_preview + get '/:forum_id/moderation', :to => "moderation#index", :as => :forum_moderator_tools # For mass moderation of posts put '/:forum_id/moderate/posts', :to => "moderation#posts", :as => :forum_moderate_posts diff --git a/forem.gemspec b/forem.gemspec index 82e4d9e55..3ae59b8f2 100644 --- a/forem.gemspec +++ b/forem.gemspec @@ -12,7 +12,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'launchy' s.add_development_dependency 'rspec-rails', '~> 2.14.0' s.add_development_dependency 'capybara', '2.1.0' - s.add_development_dependency 'jquery-rails' s.add_development_dependency 'factory_girl_rails', '~> 4.4.1' s.add_development_dependency 'database_cleaner', '~> 1.0.0' @@ -29,5 +28,6 @@ Gem::Specification.new do |s| s.add_dependency 'gemoji', '= 1.1.2' s.add_dependency 'decorators', '~> 1.0.2' s.add_dependency 'select2-rails', '~> 3.5.4' + s.add_dependency 'jquery-rails', '~> 3.1.0' s.add_runtime_dependency 'friendly_id', '~> 5.0.0', '= 5.0.2' end From 1145333536ea58fe031e19cfbbe8473b1e123045 Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Fri, 12 Sep 2014 16:15:44 +0200 Subject: [PATCH 08/10] Verify post visibility when finding last visible post --- app/models/forem/forum.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/forem/forum.rb b/app/models/forem/forum.rb index 2047f45be..2d1bc4dbe 100644 --- a/app/models/forem/forum.rb +++ b/app/models/forem/forum.rb @@ -30,7 +30,7 @@ def last_post_for(forem_user) end def last_visible_post(forem_user) - posts.approved_or_pending_review_for(forem_user).last + posts.visible.approved_or_pending_review_for(forem_user).last end def moderator?(user) From d96d63eddfc48e10bbeb5d7596a8e36f9b45833a Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Fri, 12 Sep 2014 16:38:18 +0200 Subject: [PATCH 09/10] Fix sort order --- app/models/forem/topic.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/models/forem/topic.rb b/app/models/forem/topic.rb index 72ecda402..59caf7182 100644 --- a/app/models/forem/topic.rb +++ b/app/models/forem/topic.rb @@ -42,19 +42,19 @@ def visible end def by_pinned - order('forem_topics.pinned DESC'). - order('forem_topics.id') + order('forem_topics.pinned DESC', + 'forem_topics.id') end def by_most_recent_post - order('forem_topics.last_post_at DESC'). - order('forem_topics.id') + order('forem_topics.last_post_at DESC', + 'forem_topics.id') end def by_pinned_or_most_recent_post - order('forem_topics.pinned DESC'). - order('forem_topics.last_post_at DESC'). - order('forem_topics.id') + order('forem_topics.pinned DESC', + 'forem_topics.last_post_at DESC', + 'forem_topics.id') end def pending_review From 848958cbd7a2886d4242401e8f9a27405bdeec3a Mon Sep 17 00:00:00 2001 From: Jasper van Bourgognie Date: Sat, 1 Nov 2014 13:22:13 +0100 Subject: [PATCH 10/10] Emoji fix --- app/views/forem/posts/_post.html.erb | 6 +----- lib/forem/engine.rb | 6 +++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/forem/posts/_post.html.erb b/app/views/forem/posts/_post.html.erb index 0227f8d7b..ad8459b9e 100644 --- a/app/views/forem/posts/_post.html.erb +++ b/app/views/forem/posts/_post.html.erb @@ -32,11 +32,7 @@ show_buttons = post.persisted? && local_assigns[:show_buttons].nil? ? true : sho <% if post_user.is_a?(Forem::NilUser) %> <%= t(:deleted) %> <% else %> -<<<<<<< HEAD - <%= link_to_if Forem.user_profile_links, post_user, [main_app, post_user] %> -======= - <%= link_to_if Forem.user_profile_links, post.user.forem_name, [main_app, post.user] %> ->>>>>>> dc8f34302e1d1b02f68629b436e0fbfc7754f788 + <%= link_to_if Forem.user_profile_links, post_user.forem_name, [main_app, post_user] %> <% end %>
<%= forem_avatar(post_user, :size => 60) %>
diff --git a/lib/forem/engine.rb b/lib/forem/engine.rb index 8ffabe748..a88d10020 100644 --- a/lib/forem/engine.rb +++ b/lib/forem/engine.rb @@ -1,3 +1,5 @@ +require 'emoji' + module ::Forem class Engine < Rails::Engine isolate_namespace Forem @@ -13,17 +15,19 @@ def root Decorators.register! Engine.root, Rails.root end + config.assets.paths << Emoji.images_path + # Precompile any assets included straight in certain pges initializer "forem.assets.precompile", :group => :all do |app| app.config.assets.precompile += %w[ forem/admin/members.js ] + app.config.assets.precompile << "emoji/**/*.png" end end end require 'simple_form' -require 'emoji' require 'select2-rails' # We need one of the two pagination engines loaded by this point.