Module: Ramaze::Helper::Sequel

Defined in:
lib/ramaze/helper/sequel.rb

Instance Method Summary collapse

Instance Method Details

#paginator(paginated, target) ⇒ Object

Very crude paginator, may contain serious bugs, please fix :) pass it the result of YourModel.paginate, target is where links point to.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/ramaze/helper/sequel.rb', line 9

def paginator(paginated, target)
  page_count = paginated.page_count
  prev_page = paginated.prev_page
  current_page = paginated.current_page
  next_page = paginated.next_page

  lower = (current_page - 3).abs
  lower = lower == 0 ? 1 : lower

  out = ['<div class="paginator">']

  if prev_page
    out << %(<a class="paginator_prev" href="#{Rs(target, prev_page)}">&lt;&nbsp;Prev</a>)
  else
    out << %(<span class="paginator_prev">&lt;&nbsp;Prev</span>)
  end

  if current_page > 3
    out << %(<a class="paginator_page" href="#{Rs(target, 1)}">#{1}</a> ... )
  end

  lower.upto(current_page) do |pc|
    next if pc == current_page
    out << %(<a class="paginator_page" href="#{Rs(target, pc)}">#{pc}</a>)
  end

  out << %(<span class="paginator_current">#{current_page}</span>)

  current_page.upto([page_count, current_page + 3].min) do |pc|
    next if pc == current_page
    out << %(<a class="paginator_page" href="#{Rs(target, pc)}">#{pc}</a>)
  end

  if current_page < (page_count - 3)
    out << %(.. <a class="paginator_page" href="#{Rs(target, page_count)}">#{page_count}</a>)
  end

  if next_page
    out << %(<a class="paginator_next" href="#{Rs(target, next_page)}">Next&nbsp;&gt;</a>)
  else
    out << %(<span class="paginator_next">Next&nbsp;&gt;</span>)
  end
  out << '</div>'
  out.join(" ")
end