diff --git a/app/assets/javascripts/app/views/post-viewer/nav.js b/app/assets/javascripts/app/views/post-viewer/nav.js index 736535d7604d1f308bde2aacad5a0c4733ff03ea..1fa714fa6c8fcfdbdc1279e2e77c23ccc801d5ce 100644 --- a/app/assets/javascripts/app/views/post-viewer/nav.js +++ b/app/assets/javascripts/app/views/post-viewer/nav.js @@ -1,11 +1,6 @@ app.views.PostViewerNav = app.views.Base.extend({ - templateName: "post-viewer/nav", - events : { - "click a" : "pjax" - }, - postRenderTemplate : function() { var mappings = {"#forward" : "next_post", "#back" : "previous_post"}; @@ -17,14 +12,5 @@ app.views.PostViewerNav = app.views.Base.extend({ setArrow : function(arrow, loc) { loc ? arrow.attr('href', loc) : arrow.remove() - }, - - pjax : function(evt) { - if(evt) { evt.preventDefault(); } - var link; - - evt.target.tagName != "A" ? link = $(evt.target).closest("a") : link = $(evt.target) - app.router.navigate(link.attr("href").substring(1), true) } - }); \ No newline at end of file diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index e3d86b0c40c5ee072c2c907b27133f8d58e40252..12d047e98318f08deaced8f3b710a76c79eea74a 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -9,6 +9,7 @@ class PostsController < ApplicationController before_filter :authenticate_user!, :except => [:show, :iframe, :oembed] before_filter :set_format_if_malformed_from_status_net, :only => :show + before_filter :find_post, :only => [:show, :next, :previous] layout 'post' @@ -24,28 +25,19 @@ class PostsController < ApplicationController end def show - @post = find_by_guid_or_id_with_current_user(params[:id]) - - if @post - # @commenting_disabled = can_not_comment_on_post? - # mark corresponding notification as read - if user_signed_in? && notification = Notification.where(:recipient_id => current_user.id, :target_id => @post.id).first - notification.unread = false - notification.save - end - - respond_to do |format| - format.html{ gon.post = postJson; render 'posts/show.html.haml' } - format.xml{ render :xml => @post.to_diaspora_xml } - format.mobile{render 'posts/show.mobile.haml', :layout => "application"} - format.json{ render :json => postJson } - end + return log_and_redirect_back unless @post + # @commenting_disabled = can_not_comment_on_post? + # mark corresponding notification as read + if user_signed_in? && notification = Notification.where(:recipient_id => current_user.id, :target_id => @post.id).first + notification.unread = false + notification.save + end - else - user_id = (user_signed_in? ? current_user : nil) - Rails.logger.info(":event => :link_to_nonexistent_post, :ref => #{request.env['HTTP_REFERER']}, :user_id => #{user_id}, :post_id => #{params[:id]}") - flash[:error] = I18n.t('posts.show.not_found') - redirect_to :back + respond_to do |format| + format.html{ gon.post = postJson; render 'posts/show.html.haml' } + format.xml{ render :xml => @post.to_diaspora_xml } + format.mobile{render 'posts/show.mobile.haml', :layout => "application"} + format.json{ render :json => postJson } end end @@ -88,8 +80,31 @@ class PostsController < ApplicationController end end + def next + redirect_to post_path(post_base.newer(@post)) + end + + def previous + redirect_to post_path(post_base.older(@post)) + end + protected + def log_and_redirect_back #preserving old functionality, but this should probably be removed + user_id = (user_signed_in? ? current_user : nil) + Rails.logger.info(":event => :link_to_nonexistent_post, :ref => #{request.env['HTTP_REFERER']}, :user_id => #{user_id}, :post_id => #{params[:id]}") + flash[:error] = I18n.t('posts.show.not_found') + redirect_to :back + end + + def find_post + @post = find_by_guid_or_id_with_current_user(params[:id]) + end + + def post_base + Post.visible_from_author(@post.author, current_user) + end + def postJson PostPresenter.new(@post, current_user).to_json end @@ -101,7 +116,6 @@ class PostsController < ApplicationController else Post.where(key => id, :public => true).includes(:author, :comments => :author).first end - end def set_format_if_malformed_from_status_net diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index 5d22950a7ea81eb500c4b48f7aa6f7714a3f8999..ebb65d937f8bcf0cf5e251e38232fd5aeb7c26df 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -4,116 +4,94 @@ class PostPresenter attr_accessor :post, :current_user def initialize(post, current_user = nil) - self.post = post - self.current_user = current_user + @post = post + @current_user = current_user end def to_json(options = {}) - self.post.as_api_response(:backbone).update( + @post.as_api_response(:backbone).update( { - :user_like => self.user_like, - :user_participation => self.user_participation, - :likes_count => self.post.likes.count, - :participations_count => self.post.participations.count, - :reshares_count => self.post.reshares.count, - :user_reshare => self.user_reshare, - :next_post => self.next_post_path, - :previous_post => self.previous_post_path, - :likes => self.likes, - :reshares => self.reshares, - :comments => self.comments, - :participations => self.participations, - :frame_name => self.post.frame_name || template_name, + :user_like => user_like, + :user_participation => user_participation, + :likes_count => @post.likes.count, + :participations_count => @post.participations.count, + :reshares_count => @post.reshares.count, + :user_reshare => user_reshare, + :next_post => next_post_path, + :previous_post => previous_post_path, + :likes => likes, + :reshares => reshares, + :comments => comments, + :participations => participations, + :frame_name => @post.frame_name || template_name, :title => title }) end + def next_post_path + Rails.application.routes.url_helpers.next_post_path(@post) + end + + def previous_post_path + Rails.application.routes.url_helpers.previous_post_path(@post) + end + def comments - as_api(post.comments) + as_api(@post.comments) end def likes - as_api(post.likes) + as_api(@post.likes) end def reshares - as_api(post.reshares) + as_api(@post.reshares) end def participations - as_api(post.participations) + as_api(@post.participations) end - def user_like return unless user_signed_in? - if like = post.likes.where(:author_id => person.id).first - like.as_api_response(:backbone) - end + @post.likes.where(:author_id => person.id).first.try(:as_api_response, :backbone) end def user_participation return unless user_signed_in? - if participation = post.participations.where(:author_id => person.id).first - participation.as_api_response(:backbone) - end + @post.participations.where(:author_id => person.id).first.try(:as_api_response, :backbone) end def user_reshare return unless user_signed_in? - self.post.reshares.where(:author_id => person.id).first - end - - def next_post_path - if n = next_post - Rails.application.routes.url_helpers.post_path(n) - end - end - - def previous_post_path - if p = previous_post - Rails.application.routes.url_helpers.post_path(p) - end + @post.reshares.where(:author_id => person.id).first end def title - if post.text.present? - post.text(:plain_text => true) + if @post.text.present? + @post.text(:plain_text => true) else - I18n.translate('posts.presenter.title', :name => post.author.name) + I18n.translate('posts.presenter.title', :name => @post.author.name) end end - def template_name - @template_name ||= TemplatePicker.new(post).template_name + def template_name #kill me, lol, I should be client side + @template_name ||= TemplatePicker.new(@post).template_name end protected - def next_post - post_base.newer(post) - end - - def previous_post - post_base.older(post) - end - def as_api(collection) collection.includes(:author => :profile).all.map do |element| element.as_api_response(:backbone) end end - def post_base - Post.visible_from_author(self.post.author, current_user) - end - def person - self.current_user.person + @current_user.person end def user_signed_in? - current_user.present? + @current_user.present? end - end diff --git a/config/routes.rb b/config/routes.rb index 389b3c0e61d6ab6dade9890ba69971e1ee7ccc84..26a500e586b5b5c044256427ce6a1dc2ac3ed3c7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,10 @@ Diaspora::Application.routes.draw do resources :status_messages, :only => [:new, :create] resources :posts do + member do + get :next + get :previous + end resources :likes, :only => [:create, :destroy, :index] resources :participations, :only => [:create, :destroy, :index] resources :comments, :only => [:new, :create, :destroy, :index]