refactoring
This commit is contained in:
@@ -1,78 +0,0 @@
|
||||
module Paginators
|
||||
class Base < Presenter
|
||||
def sequential_pagination_html(template)
|
||||
html = "<menu>"
|
||||
prev_url = template.request.env["HTTP_REFERER"]
|
||||
next_url = sequential_link(template)
|
||||
html << %{<li><a href="#{prev_url}">« Previous</a></li>}
|
||||
if post_set.posts.any?
|
||||
html << %{<li><a href="#{next_url}">Next »</a></li>}
|
||||
end
|
||||
html << "</menu>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
def numbered_pagination_html(template)
|
||||
html = "<menu>"
|
||||
window = 3
|
||||
if total_pages <= (window * 2) + 5
|
||||
1.upto(total_pages) do |page|
|
||||
html << numbered_pagination_item(template, page, current_page)
|
||||
end
|
||||
elsif current_page <= window + 2
|
||||
1.upto(current_page + window) do |page|
|
||||
html << numbered_pagination_item(template, page, current_page)
|
||||
end
|
||||
html << numbered_pagination_item(template, "...", current_page)
|
||||
html << numbered_pagination_item(template, total_pages, current_page)
|
||||
|
||||
elsif current_page >= total_pages - (window + 1)
|
||||
html << numbered_pagination_item(template, 1, current_page)
|
||||
html << numbered_pagination_item(template, "...", current_page)
|
||||
(current_page - window).upto(total_pages) do |page|
|
||||
html << numbered_pagination_item(template, page, current_page)
|
||||
end
|
||||
else
|
||||
html << numbered_pagination_item(template, 1, current_page)
|
||||
html << numbered_pagination_item(template, "...", current_page)
|
||||
(current_page - window).upto(current_page + window) do |page|
|
||||
html << numbered_pagination_item(template, page, current_page)
|
||||
end
|
||||
html << numbered_pagination_item(template, "...", current_page)
|
||||
html << numbered_pagination_item(template, total_pages, current_page)
|
||||
end
|
||||
html << "</menu>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
protected
|
||||
def numbered_pagination_item(template, page, current_page)
|
||||
html = "<li>"
|
||||
if page == "..."
|
||||
html << "..."
|
||||
elsif page == current_page
|
||||
html << page.to_s
|
||||
else
|
||||
html << paginated_link(template, page)
|
||||
end
|
||||
html << "</li>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
def total_pages
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def current_page
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def sequential_link(template)
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def paginated_link(template, page)
|
||||
raise NotImplementedError
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,22 +0,0 @@
|
||||
module Paginators
|
||||
class ForumPost < Base
|
||||
attr_accessor :forum_posts
|
||||
|
||||
def initialize(forum_posts)
|
||||
@forum_posts = forum_posts
|
||||
end
|
||||
|
||||
protected
|
||||
def total_pages
|
||||
forum_posts.total_entries
|
||||
end
|
||||
|
||||
def current_page
|
||||
forum_posts.current_page
|
||||
end
|
||||
|
||||
def paginated_link(template, page)
|
||||
template.link_to(page, template.forum_posts_path(:search => template.params[:search], :page => page))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,23 +0,0 @@
|
||||
module Paginators
|
||||
class ForumTopic < Base
|
||||
attr_accessor :forum_topic, :forum_posts
|
||||
|
||||
def initialize(forum_topic, forum_posts)
|
||||
@forum_topic = forum_topic
|
||||
@forum_posts = forum_posts
|
||||
end
|
||||
|
||||
protected
|
||||
def total_pages
|
||||
forum_posts.total_pages
|
||||
end
|
||||
|
||||
def current_page
|
||||
forum_posts.current_page
|
||||
end
|
||||
|
||||
def paginated_link(template, page)
|
||||
template.link_to(page, template.forum_topic_path(forum_topic, :page => page))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,58 +0,0 @@
|
||||
module Paginators
|
||||
class Numbered
|
||||
attr_reader :template, :source
|
||||
delegate :url, :total_pages, :current_page, :to => :source
|
||||
|
||||
def initialize(template, source)
|
||||
@template = template
|
||||
@source = source
|
||||
end
|
||||
|
||||
def pagination_html
|
||||
html = "<menu>"
|
||||
window = 3
|
||||
if total_pages <= (window * 2) + 5
|
||||
1.upto(total_pages) do |page|
|
||||
html << pagination_item(page, current_page)
|
||||
end
|
||||
elsif current_page <= window + 2
|
||||
1.upto(current_page + window) do |page|
|
||||
html << pagination_item(page, current_page)
|
||||
end
|
||||
html << pagination_item("...", current_page)
|
||||
html << pagination_item(total_pages, current_page)
|
||||
|
||||
elsif current_page >= total_pages - (window + 1)
|
||||
html << pagination_item(1, current_page)
|
||||
html << pagination_item("...", current_page)
|
||||
(current_page - window).upto(total_pages) do |page|
|
||||
html << pagination_item(page, current_page)
|
||||
end
|
||||
else
|
||||
html << pagination_item(1, current_page)
|
||||
html << pagination_item("...", current_page)
|
||||
(current_page - window).upto(current_page + window) do |page|
|
||||
html << pagination_item(page, current_page)
|
||||
end
|
||||
html << pagination_item("...", current_page)
|
||||
html << pagination_item(total_pages, current_page)
|
||||
end
|
||||
html << "</menu>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
protected
|
||||
def pagination_item(page, current_page)
|
||||
html = "<li>"
|
||||
if page == "..."
|
||||
html << "..."
|
||||
elsif page == current_page
|
||||
html << page.to_s
|
||||
else
|
||||
html << template.link_to(page, url(template, :page => page))
|
||||
end
|
||||
html << "</li>"
|
||||
html.html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,22 +0,0 @@
|
||||
module Paginators
|
||||
class Pool < Base
|
||||
attr_accessor :post_set
|
||||
|
||||
def initialize(post_set)
|
||||
@post_set = post_set
|
||||
end
|
||||
|
||||
protected
|
||||
def total_pages
|
||||
(post_set.count.to_f / post_set.limit.to_f).ceil
|
||||
end
|
||||
|
||||
def current_page
|
||||
[1, post_set.page].max
|
||||
end
|
||||
|
||||
def paginated_link(template, page)
|
||||
template.link_to(page, template.pool_path(post_set.pool, :page => page))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,27 +0,0 @@
|
||||
module Paginators
|
||||
class Post < Base
|
||||
attr_accessor :post_set
|
||||
|
||||
def initialize(post_set)
|
||||
@post_set = post_set
|
||||
end
|
||||
|
||||
protected
|
||||
def total_pages
|
||||
(post_set.count.to_f / post_set.limit.to_f).ceil
|
||||
end
|
||||
|
||||
def current_page
|
||||
[1, post_set.page].max
|
||||
end
|
||||
|
||||
# TODO: this is not compatible with paginating favorites
|
||||
def sequential_link(template)
|
||||
template.posts_path(:tags => template.params[:tags], before_id => post_set.posts[-1].id, :page => nil)
|
||||
end
|
||||
|
||||
def paginated_link(template, page)
|
||||
template.link_to(page, template.posts_path(:tags => template.params[:tags], :page => page))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,18 +0,0 @@
|
||||
module Paginators
|
||||
class PostVersion < Base
|
||||
attr_accessor :post_set
|
||||
|
||||
def initialize(post_set)
|
||||
@post_set = post_set
|
||||
end
|
||||
|
||||
def numbered_pagination_html(template)
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
protected
|
||||
def sequential_link(template)
|
||||
template.post_versions_path(:before_time => post_set.posts[-1].last_commented_at, :page => nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,29 +0,0 @@
|
||||
module Paginators
|
||||
class Sequential
|
||||
attr_reader :template, :source
|
||||
delegate :url, :to => :source
|
||||
|
||||
def initialize(template, source)
|
||||
@template = template
|
||||
@source = source
|
||||
end
|
||||
|
||||
def pagination_html
|
||||
html = "<menu>"
|
||||
html << '<li>' + template.link_to("« Previous", prev_url) + '</li>'
|
||||
if next_url
|
||||
html << '<li>' + template.link_to("Next »", next_url) + '</li>'
|
||||
end
|
||||
html << "</menu>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
def prev_url
|
||||
template.request.env["HTTP_REFERER"]
|
||||
end
|
||||
|
||||
def next_url
|
||||
@next_url ||= url(template)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -38,14 +38,6 @@ class PostSetPresenter < Presenter
|
||||
end
|
||||
end
|
||||
|
||||
def pagination_html(template)
|
||||
if post_set.use_sequential_paginator?
|
||||
Paginators::Post.new(post_set).sequential_pagination_html(template)
|
||||
else
|
||||
Paginators::Post.new(post_set).numbered_pagination_html(template)
|
||||
end
|
||||
end
|
||||
|
||||
def post_previews_html
|
||||
html = ""
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
class TagSetPresenter < Presenter
|
||||
def initialize(tags)
|
||||
@tags = tags
|
||||
fetch_categories
|
||||
end
|
||||
|
||||
def tag_list_html(template, options = {})
|
||||
@@ -21,17 +20,13 @@ class TagSetPresenter < Presenter
|
||||
end
|
||||
|
||||
private
|
||||
def fetch_categories
|
||||
@category_cache ||= Tag.categories_for(@tags)
|
||||
end
|
||||
|
||||
def category_for(tag)
|
||||
@category_cache[tag]
|
||||
def categories
|
||||
@categories ||= Tag.categories_for(@tags)
|
||||
end
|
||||
|
||||
def build_list_item(tag, template, options)
|
||||
html = ""
|
||||
html << %{<li data-tag-type="#{category_for(tag)}" data-tag-name="#{u(tag)}">}
|
||||
html << %{<li data-tag-type="#{categories[tag]}" data-tag-name="#{u(tag)}">}
|
||||
|
||||
if CurrentUser.user.is_privileged?
|
||||
html << %{<a href="/wiki_pages?title=#{u(tag)}">?</a> }
|
||||
|
||||
Reference in New Issue
Block a user