This commit is contained in:
albert
2011-06-21 17:29:58 -04:00
parent 2f1fdcb459
commit 9ac7f85f0b
4 changed files with 44 additions and 31 deletions

View File

@@ -1,13 +1,20 @@
module PostSets module PostSets
class Base class Base
def has_wiki? def has_wiki?
false is_single_tag?
end end
def wiki_page def wiki_page
nil nil
end end
def has_artist?
is_single_tag?
end
def artist
end
def presenter def presenter
@presenter ||= PostSetPresenter.new(self) @presenter ||= PostSetPresenter.new(self)
end end
@@ -16,10 +23,6 @@ module PostSets
false false
end end
def tag
tag_string
end
def arbitrary_sql_order_clause(ids, table_name) def arbitrary_sql_order_clause(ids, table_name)
if ids.empty? if ids.empty?
return "#{table_name}.id desc" return "#{table_name}.id desc"

View File

@@ -2,11 +2,11 @@ module PostSets
class Favorite < Base class Favorite < Base
attr_reader :user, :page, :favorites, :posts attr_reader :user, :page, :favorites, :posts
def initialize(params) def initialize(user_id, page)
@user = ::User.find(params[:id]) @user = ::User.find(user_id)
@page = [params[:page].to_i, 1].max @page = [page.to_i, 1].max
@favorites = ::Favorite.model_for(@user.id).for_user(@user.id).paginate(page) @favorites = ::Favorite.model_for(user.id).for_user(user.id).page(page)
@posts = ::Post.where("id in (?)", post_ids).order(arbitrary_sql_order_clause(post_ids, "posts")).paginate("a0") @posts = ::Post.where("id in (?)", post_ids).order(arbitrary_sql_order_clause(post_ids, "posts")).page("b0")
end end
def post_ids def post_ids
@@ -17,8 +17,12 @@ module PostSets
(page - 1) * records_per_page (page - 1) * records_per_page
end end
def tag_array
@tag_array ||= ["fav:#{user.name}"]
end
def tag_string def tag_string
@tag_string ||= "fav:#{user.name}" tag_array.join(" ")
end end
end end
end end

View File

@@ -1,15 +1,15 @@
module PostSets module PostSets
class Post < Base class Post < Base
attr_reader :tags, :page, :posts attr_reader :tag_array, :page, :posts
def initialize(params) def initialize(params)
@tags = Tag.scan_query(params[:tags]) @tag_array = Tag.scan_query(params[:tags])
@page = [params[:page].to_i, 1].max @page = [params[:page].to_i, 1].max
@posts = ::Post.tag_match(tag_string).paginate(page) @posts = ::Post.tag_match(tag_string).paginate(page)
end end
def tag_string def tag_string
@tag_string ||= tags.join(" ") @tag_string ||= tag_array.join(" ")
end end
def has_wiki? def has_wiki?
@@ -29,7 +29,7 @@ module PostSets
end end
def is_single_tag? def is_single_tag?
tags.size == 1 tag_array.size == 1
end end
end end
end end

View File

@@ -6,30 +6,36 @@ module Danbooru
extend ActiveSupport::Concern extend ActiveSupport::Concern
module ClassMethods module ClassMethods
def paginate(page) def page(p)
if use_sequential_paginator?(page) if use_sequential_paginator?(p)
paginate_sequential(page) paginate_sequential(p)
else else
paginate_numbered(page) paginate_numbered(p)
end end
end end
def use_sequential_paginator?(page) def use_sequential_paginator?(p)
page =~ /[ab]\d+/i p =~ /[ab]\d+/i
end end
def paginate_sequential(page) def paginate_sequential(p)
if page =~ /b(\d+)/ if p =~ /b(\d+)/
paginate_sequential_before($1) paginate_sequential_before($1)
elsif page =~ /a(\d+)/ elsif p =~ /a(\d+)/
paginate_sequential_after($1) paginate_sequential_after($1)
else else
paginate_numbered(page) paginate_numbered(p)
end end
end end
def paginate_sequential_before(before_id) def paginate_sequential_before(before_id)
limit(records_per_page).where("id < ?", before_id.to_i).reorder("id desc").tap do |obj| c = limit(records_per_page)
if before_id.to_i > 0
c = c.where("id < ?", before_id.to_i)
end
c.reorder("id desc").tap do |obj|
obj.extend(SequentialCollectionExtension) obj.extend(SequentialCollectionExtension)
obj.sequential_paginator_mode = :before obj.sequential_paginator_mode = :before
end end
@@ -42,17 +48,17 @@ module Danbooru
end end
end end
def paginate_numbered(page) def paginate_numbered(p)
page = [page.to_i, 1].max p = [p.to_i, 1].max
limit(records_per_page).offset((page - 1) * records_per_page).tap do |obj| limit(records_per_page).offset((p - 1) * records_per_page).tap do |obj|
obj.extend(NumberedCollectionExtension) obj.extend(NumberedCollectionExtension)
obj.total_pages = (obj.total_count / records_per_page.to_f).ceil obj.total_pages = (obj.total_count / records_per_page.to_f).ceil
obj.current_page = page obj.current_page = p
end end
end end
def records_per_page def records_per_page
Danbooru.config.posts_per_page Danbooru.config.posts_per_p
end end
# taken from kaminari (https://github.com/amatsuda/kaminari) # taken from kaminari (https://github.com/amatsuda/kaminari)