OSDN Git Service

add: success inspire
[pettanr/pettanr.git] / app / assets / javascripts / locmare / list_group / lib / pager.js.coffee
1 class Locmare.ListGroupModule.LibModule.Pager\r
2   @factory: (page_status, params) ->\r
3     pagers = {\r
4       default: Locmare.ListGroupModule.LibModule.PagerModule.Default,\r
5       offset: Locmare.ListGroupModule.LibModule.PagerModule.Offset,\r
6       unlimited: Locmare.ListGroupModule.LibModule.PagerModule.Unlimited\r
7     }\r
8     c = pagers[page_status.type]\r
9     return null if not page_status.total_page\r
10     new c({page_status: page_status, params: params})\r
11   \r
12 class Locmare.ListGroupModule.LibModule.PagerModule\r
13 class Locmare.ListGroupModule.LibModule.PagerModule.Default extends Backbone.View\r
14   tagName: 'ul'\r
15   className: 'pagination'\r
16   \r
17   initialize: (options) ->\r
18     @page_status = options.page_status\r
19     @params = options.params\r
20     @total = @page_status.total\r
21     \r
22     @window_size = 3\r
23     @controller = Manifest.manifest().controllers[@params['controller']]\r
24     @action = @controller.actions[@params['action']]\r
25     @action = @action.original if @action.original\r
26     \r
27     @current_page = @page_status.page\r
28     @per_page = @page_status.page_size\r
29     @total_page = @page_status.total_page\r
30   \r
31   render: () ->\r
32     this.$el.html('')\r
33     if @hasPreviousPage()\r
34       view = new Locmare.ListGroupModule.LibModule.PagerModule.FirstPage({\r
35         parent: this, page: 1, class_name: 'first'\r
36       })\r
37       @listenTo(view, 'navigate', @navigate)\r
38       @listenTo(view, 'page', @click)\r
39       this.$el.append(view.render().el)\r
40     if @hasPreviousPage()\r
41       view = new Locmare.ListGroupModule.LibModule.PagerModule.PrevPage({\r
42         parent: this, page: @current_page - 1, class_name: 'prev'\r
43       })\r
44       @listenTo(view, 'navigate', @navigate)\r
45       @listenTo(view, 'page', @click)\r
46       this.$el.append(view.render().el)\r
47     if @hasPreviousPageGap()\r
48       this.$el.append(\r
49         (new Locmare.ListGroupModule.LibModule.PagerModule.PageGap()).render().el\r
50       )\r
51     _.each @range(), (page) =>\r
52       view = new Locmare.ListGroupModule.LibModule.PagerModule.Page({\r
53         parent: this, page: page, class_name: 'page'\r
54       })\r
55       @listenTo(view, 'navigate', @navigate)\r
56       @listenTo(view, 'page', @click)\r
57       this.$el.append(view.render().el)\r
58     if @hasNextPageGap()\r
59       this.$el.append(\r
60         (new Locmare.ListGroupModule.LibModule.PagerModule.PageGap()).render().el\r
61       )\r
62     if @hasNextPage()\r
63       view = new Locmare.ListGroupModule.LibModule.PagerModule.NextPage({\r
64         parent: this, page: @current_page + 1, class_name: 'next'\r
65       })\r
66       @listenTo(view, 'navigate', @navigate)\r
67       @listenTo(view, 'page', @click)\r
68       this.$el.append(view.render().el)\r
69     if @hasNextPage()\r
70       view = new Locmare.ListGroupModule.LibModule.PagerModule.LastPage({\r
71         parent: this, page: @total_page, class_name: 'last'\r
72       })\r
73       @listenTo(view, 'navigate', @navigate)\r
74       @listenTo(view, 'page', @click)\r
75       this.$el.append(view.render().el)\r
76     rb = new Tag.RowBreak()\r
77     this.$el.append(rb.render().el)\r
78     this\r
79   \r
80   range: () ->\r
81     f = if @hasPreviousPageGap()\r
82       @current_page - @window_size\r
83     else\r
84       1\r
85     t = if @hasNextPageGap()\r
86       @current_page + @window_size\r
87     else\r
88       @total_page\r
89     _.range(f, t)\r
90   \r
91   hasPreviousPage: () ->\r
92     @current_page > 1\r
93   \r
94   hasNextPage: () ->\r
95     @current_page < @total_page\r
96   \r
97   hasPreviousPageGap: () ->\r
98     @current_page > @window_size + 1\r
99   \r
100   hasNextPageGap: () ->\r
101     @total_page - @current_page > @window_size\r
102   \r
103   url: (page) ->\r
104     params = {}\r
105     _.each @params, (v, k) ->  # deep copy\r
106       params[k] = v\r
107     params['page'] = page\r
108     params['page_size'] = @per_page\r
109     @action.url params\r
110   \r
111   click: (page) ->\r
112     @trigger('page', page)\r
113   \r
114   navigate: (url) ->\r
115     @trigger('http_get', url)\r
116   \r
117 class Locmare.ListGroupModule.LibModule.PagerModule.Part extends Backbone.View\r
118   tagName: 'li'\r
119   \r
120   initialize: (options) ->\r
121     @parent = options.parent\r
122     @page = options.page\r
123     @el.className = options.class_name\r
124   \r
125   render: () ->\r
126     if @page == @parent.current_page\r
127       this.$el.html(@content())\r
128     else\r
129       linked_caption = new Tag.A({\r
130         attr: {href: '/' + @url()}, \r
131         content: @content()\r
132       })\r
133       @listenTo(linked_caption, 'click', @click)\r
134       this.$el.html(linked_caption.render().el)\r
135     this\r
136   \r
137   content: () ->\r
138     ''\r
139   \r
140   url: () ->\r
141     @parent.url(@page)\r
142   \r
143   click: () ->\r
144     @trigger('page', @page)\r
145     @trigger('navigate', @url())\r
146   \r
147 class Locmare.ListGroupModule.LibModule.PagerModule.FirstPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part\r
148   \r
149   content: () ->\r
150     '<<'\r
151   \r
152   click: () ->\r
153     @trigger('page', @page)\r
154     @trigger('navigate', @url())\r
155   \r
156 class Locmare.ListGroupModule.LibModule.PagerModule.PrevPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part\r
157   \r
158   content: () ->\r
159     '<'\r
160   \r
161 class Locmare.ListGroupModule.LibModule.PagerModule.PageGap extends Backbone.View\r
162   tagName: 'li'\r
163   className: 'page-gap'\r
164   \r
165   render: () ->\r
166     this.$el.html('...')\r
167     this\r
168   \r
169 class Locmare.ListGroupModule.LibModule.PagerModule.Page extends Locmare.ListGroupModule.LibModule.PagerModule.Part\r
170   \r
171   content: () ->\r
172     Pettanr.to_s(@page)\r
173   \r
174 class Locmare.ListGroupModule.LibModule.PagerModule.NextPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part\r
175   \r
176   content: () ->\r
177     '>'\r
178   \r
179 class Locmare.ListGroupModule.LibModule.PagerModule.LastPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part\r
180   \r
181   content: () ->\r
182     '>>'\r
183   \r