From 267df896c69df4417c10564de9a67f072ea57d06 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 25 Aug 2014 16:41:27 -0700 Subject: [PATCH] fixes #2245 --- .../stylesheets/specific/posts.css.scss | 4 +++ app/controllers/pools_controller.rb | 5 ++++ app/logical/post_sets/pool_gallery.rb | 20 +++++++++++++ app/models/pool.rb | 6 +++- app/presenters/post_presenter.rb | 18 +++++++++--- .../post_set_presenters/pool_gallery.rb | 28 +++++++++++++++++++ app/views/pools/_secondary_links.html.erb | 1 + app/views/pools/gallery.html.erb | 15 ++++++++++ config/routes.rb | 3 ++ 9 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 app/logical/post_sets/pool_gallery.rb create mode 100644 app/presenters/post_set_presenters/pool_gallery.rb create mode 100644 app/views/pools/gallery.html.erb diff --git a/app/assets/stylesheets/specific/posts.css.scss b/app/assets/stylesheets/specific/posts.css.scss index d0a6f7e45..0bd0a5818 100644 --- a/app/assets/stylesheets/specific/posts.css.scss +++ b/app/assets/stylesheets/specific/posts.css.scss @@ -10,6 +10,10 @@ article.post-preview { @include inline-block; position: relative; + &.pooled { + height: 194px; + } + img { margin: auto; } diff --git a/app/controllers/pools_controller.rb b/app/controllers/pools_controller.rb index 11a47ba09..d04e6e843 100644 --- a/app/controllers/pools_controller.rb +++ b/app/controllers/pools_controller.rb @@ -22,6 +22,11 @@ class PoolsController < ApplicationController end end + def gallery + @pools = Pool.series.search(params[:search]).order("updated_at desc").paginate(params[:page], :limit => params[:limit], :search_count => params[:search]) + @post_set = PostSets::PoolGallery.new(@pools) + end + def search end diff --git a/app/logical/post_sets/pool_gallery.rb b/app/logical/post_sets/pool_gallery.rb new file mode 100644 index 000000000..8bccd853d --- /dev/null +++ b/app/logical/post_sets/pool_gallery.rb @@ -0,0 +1,20 @@ +module PostSets + class PoolGallery < PostSets::Base + attr_reader :page, :per_page, :pools + + def initialize(pools, page = 1, per_page = nil) + @pools = pools + @page = page + @per_page = (per_page || CurrentUser.per_page).to_i + @per_page = 200 if @per_page > 200 + end + + def current_page + [page.to_i, 1].max + end + + def presenter + @presenter ||= ::PostSetPresenters::PoolGallery.new(self) + end + end +end diff --git a/app/models/pool.rb b/app/models/pool.rb index bc08866d0..d6f791ca8 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -2,7 +2,7 @@ require 'ostruct' class Pool < ActiveRecord::Base validates_uniqueness_of :name, :case_sensitive => false - validates_format_of :name, :with => /\A[^\s,]+\Z/, :message => "cannot have whitespace or commas" + validates_format_of :name, :with => /\A[^,]+\Z/, :message => "cannot have commas" validates_inclusion_of :category, :in => %w(series collection) belongs_to :creator, :class_name => "User" belongs_to :updater, :class_name => "User" @@ -316,6 +316,10 @@ class Pool < ActiveRecord::Base end end + def cover_post_id + post_ids[/^(\d+)/, 1] + end + def create_version(force = false) if post_ids_changed? || name_changed? || description_changed? || is_active_changed? || is_deleted_changed? || category_changed? || force last_version = versions.last diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index 03e2533a9..b4fef6965 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -12,23 +12,33 @@ class PostPresenter < Presenter path = options[:path_prefix] || "/posts" - html = %{
} + html = %{
} if options[:tags].present? tag_param = "?tags=#{CGI::escape(options[:tags])}" - elsif options[:pool_id] - tag_param = "?pool_id=#{options[:pool_id]}" + elsif options[:pool_id] || options[:pool] + tag_param = "?pool_id=#{CGI::escape((options[:pool_id] || options[:pool].id).to_s)}" else tag_param = nil end html << %{} html << %{#{h(post.tag_string)}} html << %{} + + if options[:pool] + html << %{

} + html << %{} + html << options[:pool].pretty_name.truncate(40) + html << %{} + html << %{

} + end + html << %{
} html.html_safe end - def self.preview_class(post) + def self.preview_class(post, description = nil) klass = "post-preview" + klass << " pooled" if description klass << " post-status-pending" if post.is_pending? klass << " post-status-flagged" if post.is_flagged? klass << " post-status-deleted" if post.is_deleted? diff --git a/app/presenters/post_set_presenters/pool_gallery.rb b/app/presenters/post_set_presenters/pool_gallery.rb new file mode 100644 index 000000000..2f7fef2eb --- /dev/null +++ b/app/presenters/post_set_presenters/pool_gallery.rb @@ -0,0 +1,28 @@ +module PostSetPresenters + class PoolGallery < Base + attr_accessor :post_set + delegate :pools, :to => :post_set + + def initialize(post_set) + @post_set = post_set + end + + def post_previews_html(template, options = {}) + html = "" + + if pools.empty? + return template.render("post_sets/blank") + end + + pools.each do |pool| + if pool.cover_post_id + post = ::Post.find(pool.cover_post_id) + html << PostPresenter.preview(post, options.merge(:tags => @post_set.tag_string, :raw => @post_set.raw, :pool => pool)) + html << "\n" + end + end + + html.html_safe + end + end +end diff --git a/app/views/pools/_secondary_links.html.erb b/app/views/pools/_secondary_links.html.erb index 4d4154b7a..8f7f93683 100644 --- a/app/views/pools/_secondary_links.html.erb +++ b/app/views/pools/_secondary_links.html.erb @@ -1,6 +1,7 @@ <% content_for(:secondary_links) do %>
  • <%= render "pools/quick_search" %>
  • +
  • <%= link_to "Gallery", gallery_pools_path %>
  • <%= link_to "Listing", pools_path %>
  • <%= link_to "New", new_pool_path %>
  • <%= link_to "Help", wiki_pages_path(:search => {:title => "help:pools"}) %>
  • diff --git a/app/views/pools/gallery.html.erb b/app/views/pools/gallery.html.erb new file mode 100644 index 000000000..69b48cac4 --- /dev/null +++ b/app/views/pools/gallery.html.erb @@ -0,0 +1,15 @@ +
    + +
    + +<%= render "secondary_links" %> + +<% content_for(:page_title) do %> + Pool Gallery - <%= Danbooru.config.app_name %> +<% end %> diff --git a/config/routes.rb b/config/routes.rb index 04e78e39d..fc44b092f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -157,6 +157,9 @@ Rails.application.routes.draw do put :revert post :undelete end + collection do + get :gallery + end resource :order, :only => [:edit, :update], :controller => "pool_orders" end resource :pool_element, :only => [:create, :destroy] do