changes
This commit is contained in:
@@ -1,13 +1,20 @@
|
||||
module PostSets
|
||||
class Base
|
||||
def has_wiki?
|
||||
false
|
||||
is_single_tag?
|
||||
end
|
||||
|
||||
def wiki_page
|
||||
nil
|
||||
end
|
||||
|
||||
def has_artist?
|
||||
is_single_tag?
|
||||
end
|
||||
|
||||
def artist
|
||||
end
|
||||
|
||||
def presenter
|
||||
@presenter ||= PostSetPresenter.new(self)
|
||||
end
|
||||
@@ -16,10 +23,6 @@ module PostSets
|
||||
false
|
||||
end
|
||||
|
||||
def tag
|
||||
tag_string
|
||||
end
|
||||
|
||||
def arbitrary_sql_order_clause(ids, table_name)
|
||||
if ids.empty?
|
||||
return "#{table_name}.id desc"
|
||||
|
||||
@@ -2,11 +2,11 @@ module PostSets
|
||||
class Favorite < Base
|
||||
attr_reader :user, :page, :favorites, :posts
|
||||
|
||||
def initialize(params)
|
||||
@user = ::User.find(params[:id])
|
||||
@page = [params[:page].to_i, 1].max
|
||||
@favorites = ::Favorite.model_for(@user.id).for_user(@user.id).paginate(page)
|
||||
@posts = ::Post.where("id in (?)", post_ids).order(arbitrary_sql_order_clause(post_ids, "posts")).paginate("a0")
|
||||
def initialize(user_id, page)
|
||||
@user = ::User.find(user_id)
|
||||
@page = [page.to_i, 1].max
|
||||
@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")).page("b0")
|
||||
end
|
||||
|
||||
def post_ids
|
||||
@@ -17,8 +17,12 @@ module PostSets
|
||||
(page - 1) * records_per_page
|
||||
end
|
||||
|
||||
def tag_array
|
||||
@tag_array ||= ["fav:#{user.name}"]
|
||||
end
|
||||
|
||||
def tag_string
|
||||
@tag_string ||= "fav:#{user.name}"
|
||||
tag_array.join(" ")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
module PostSets
|
||||
class Post < Base
|
||||
attr_reader :tags, :page, :posts
|
||||
attr_reader :tag_array, :page, :posts
|
||||
|
||||
def initialize(params)
|
||||
@tags = Tag.scan_query(params[:tags])
|
||||
@tag_array = Tag.scan_query(params[:tags])
|
||||
@page = [params[:page].to_i, 1].max
|
||||
@posts = ::Post.tag_match(tag_string).paginate(page)
|
||||
end
|
||||
|
||||
def tag_string
|
||||
@tag_string ||= tags.join(" ")
|
||||
@tag_string ||= tag_array.join(" ")
|
||||
end
|
||||
|
||||
def has_wiki?
|
||||
@@ -29,7 +29,7 @@ module PostSets
|
||||
end
|
||||
|
||||
def is_single_tag?
|
||||
tags.size == 1
|
||||
tag_array.size == 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,30 +6,36 @@ module Danbooru
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ClassMethods
|
||||
def paginate(page)
|
||||
if use_sequential_paginator?(page)
|
||||
paginate_sequential(page)
|
||||
def page(p)
|
||||
if use_sequential_paginator?(p)
|
||||
paginate_sequential(p)
|
||||
else
|
||||
paginate_numbered(page)
|
||||
paginate_numbered(p)
|
||||
end
|
||||
end
|
||||
|
||||
def use_sequential_paginator?(page)
|
||||
page =~ /[ab]\d+/i
|
||||
def use_sequential_paginator?(p)
|
||||
p =~ /[ab]\d+/i
|
||||
end
|
||||
|
||||
def paginate_sequential(page)
|
||||
if page =~ /b(\d+)/
|
||||
def paginate_sequential(p)
|
||||
if p =~ /b(\d+)/
|
||||
paginate_sequential_before($1)
|
||||
elsif page =~ /a(\d+)/
|
||||
elsif p =~ /a(\d+)/
|
||||
paginate_sequential_after($1)
|
||||
else
|
||||
paginate_numbered(page)
|
||||
paginate_numbered(p)
|
||||
end
|
||||
end
|
||||
|
||||
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.sequential_paginator_mode = :before
|
||||
end
|
||||
@@ -42,17 +48,17 @@ module Danbooru
|
||||
end
|
||||
end
|
||||
|
||||
def paginate_numbered(page)
|
||||
page = [page.to_i, 1].max
|
||||
limit(records_per_page).offset((page - 1) * records_per_page).tap do |obj|
|
||||
def paginate_numbered(p)
|
||||
p = [p.to_i, 1].max
|
||||
limit(records_per_page).offset((p - 1) * records_per_page).tap do |obj|
|
||||
obj.extend(NumberedCollectionExtension)
|
||||
obj.total_pages = (obj.total_count / records_per_page.to_f).ceil
|
||||
obj.current_page = page
|
||||
obj.current_page = p
|
||||
end
|
||||
end
|
||||
|
||||
def records_per_page
|
||||
Danbooru.config.posts_per_page
|
||||
Danbooru.config.posts_per_p
|
||||
end
|
||||
|
||||
# taken from kaminari (https://github.com/amatsuda/kaminari)
|
||||
|
||||
Reference in New Issue
Block a user