OSDN Git Service

change page status
[pettanr/pettanr.git] / lib / locmare / list_group / lib / pager.rb
1 module Locmare
2   module ListGroupModule
3     module LibModule
4       module Pager
5         class Default
6           
7           attr :page_status, :options, :window_size, 
8             :total, :current_page, :per_page, :total_page, 
9             :template_dir, :template_name
10           
11           def initialize page_status, options
12             @page_status = page_status
13             @options = options
14             @total = @page_status.total
15             @current_page = @page_status.page
16             @per_page = @page_status.limit
17             @total_page = @page_status.total_page
18             @window_size = 3
19             @template_dir = 'templates/r/pager/'
20             @template_name = @template_dir + 'default'
21             @controller = Manifest.manifest.controllers[@options['controller'].to_s]
22             @action = @controller.actions[@options['action'].to_s]
23           end
24           
25           def range
26             f = if self.has_previous_page_gap
27               @current_page - @window_size
28             else
29               1
30             end
31             t = if self.has_next_page_gap
32               @current_page + @window_size
33             else
34               @total_page
35             end
36             f..t
37           end
38           
39           def has_previous_page
40             @current_page > 1
41           end
42           
43           def has_next_page
44             @current_page < @total_page
45           end
46           
47           def has_previous_page_gap
48             @current_page > @window_size + 1
49           end
50           
51           def has_next_page_gap
52             @total_page - @current_page > @window_size
53           end
54           
55           def url page
56             params = {}
57             @options.each do |k, v|  # deep copy
58               params[k] = v
59             end
60             params['page'] = page
61             params['page_size'] = @per_page
62             @action.url params
63           end
64           
65         end
66       end
67       
68     end
69   end
70 end