1 class Locmare.ListGroupModule.LibModule.Pager
\r
2 @factory: (page_status, params) ->
\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 more: Locmare.ListGroupModule.LibModule.PagerModule.More
\r
9 c = pagers[page_status.type]
\r
10 return null if not page_status.total_page
\r
11 new c({page_status: page_status, params: params})
\r
13 class Locmare.ListGroupModule.LibModule.PagerModule
\r
14 class Locmare.ListGroupModule.LibModule.PagerModule.Default extends Backbone.View
\r
16 className: 'pagination'
\r
18 initialize: (options) ->
\r
19 @page_status = options.page_status
\r
20 @params = options.params
\r
21 @total = @page_status.total
\r
24 @controller = Manifest.manifest().controllers[@params['controller']]
\r
25 @action = @controller.actions[@params['action']]
\r
26 @action = @action.original if @action.original
\r
28 @current_page = @page_status.page
\r
29 @per_page = @page_status.page_size
\r
30 @total_page = @page_status.total_page
\r
34 if @hasPreviousPage()
\r
35 view = new Locmare.ListGroupModule.LibModule.PagerModule.FirstPage({
\r
36 parent: this, page: 1, class_name: 'first'
\r
38 @listenTo(view, 'navigate', @navigate)
\r
39 @listenTo(view, 'page', @click)
\r
40 this.$el.append(view.render().el)
\r
41 if @hasPreviousPage()
\r
42 view = new Locmare.ListGroupModule.LibModule.PagerModule.PrevPage({
\r
43 parent: this, page: @current_page - 1, class_name: 'prev'
\r
45 @listenTo(view, 'navigate', @navigate)
\r
46 @listenTo(view, 'page', @click)
\r
47 this.$el.append(view.render().el)
\r
48 if @hasPreviousPageGap()
\r
50 (new Locmare.ListGroupModule.LibModule.PagerModule.PageGap()).render().el
\r
52 _.each @range(), (page) =>
\r
53 view = new Locmare.ListGroupModule.LibModule.PagerModule.Page({
\r
54 parent: this, page: page, class_name: 'page'
\r
56 @listenTo(view, 'navigate', @navigate)
\r
57 @listenTo(view, 'page', @click)
\r
58 this.$el.append(view.render().el)
\r
59 if @hasNextPageGap()
\r
61 (new Locmare.ListGroupModule.LibModule.PagerModule.PageGap()).render().el
\r
64 view = new Locmare.ListGroupModule.LibModule.PagerModule.NextPage({
\r
65 parent: this, page: @current_page + 1, class_name: 'next'
\r
67 @listenTo(view, 'navigate', @navigate)
\r
68 @listenTo(view, 'page', @click)
\r
69 this.$el.append(view.render().el)
\r
71 view = new Locmare.ListGroupModule.LibModule.PagerModule.LastPage({
\r
72 parent: this, page: @total_page, class_name: 'last'
\r
74 @listenTo(view, 'navigate', @navigate)
\r
75 @listenTo(view, 'page', @click)
\r
76 this.$el.append(view.render().el)
\r
77 rb = new Tag.RowBreak()
\r
78 this.$el.append(rb.render().el)
\r
82 f = if @hasPreviousPageGap()
\r
83 @current_page - @window_size
\r
86 t = if @hasNextPageGap()
\r
87 @current_page + @window_size
\r
92 hasPreviousPage: () ->
\r
96 @current_page < @total_page
\r
98 hasPreviousPageGap: () ->
\r
99 @current_page > @window_size + 1
\r
101 hasNextPageGap: () ->
\r
102 @total_page - @current_page > @window_size
\r
106 _.each @params, (v, k) -> # deep copy
\r
108 params['page'] = page
\r
109 params['page_size'] = @per_page
\r
113 @trigger('page', page)
\r
116 @trigger('http_get', url)
\r
118 class Locmare.ListGroupModule.LibModule.PagerModule.Part extends Backbone.View
\r
121 initialize: (options) ->
\r
122 @parent = options.parent
\r
123 @page = options.page
\r
124 @el.className = options.class_name
\r
127 if @page == @parent.current_page
\r
128 this.$el.html(@content())
\r
130 linked_caption = new Tag.A({
\r
131 attr: {href: '/' + @url()},
\r
132 content: @content()
\r
134 @listenTo(linked_caption, 'click', @click)
\r
135 this.$el.html(linked_caption.render().el)
\r
145 @trigger('page', @page)
\r
146 @trigger('navigate', @url())
\r
148 class Locmare.ListGroupModule.LibModule.PagerModule.FirstPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
154 @trigger('page', @page)
\r
155 @trigger('navigate', @url())
\r
157 class Locmare.ListGroupModule.LibModule.PagerModule.PrevPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
162 class Locmare.ListGroupModule.LibModule.PagerModule.PageGap extends Backbone.View
\r
164 className: 'page-gap'
\r
167 this.$el.html('...')
\r
170 class Locmare.ListGroupModule.LibModule.PagerModule.Page extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
173 Pettanr.to_s(@page)
\r
175 class Locmare.ListGroupModule.LibModule.PagerModule.NextPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
180 class Locmare.ListGroupModule.LibModule.PagerModule.LastPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
185 class Locmare.ListGroupModule.LibModule.PagerModule.More extends Backbone.View
\r
187 className: 'pagination'
\r
189 initialize: (options) ->
\r
190 @params = options.params
\r
192 @controller = Manifest.manifest().controllers[@params['controller']]
\r
193 @action = @controller.actions[@params['action']]
\r
194 @action = @action.original if @action.original
\r
198 linked_caption = new Tag.A({
\r
199 attr: {href: '/' + @url()},
\r
202 @listenTo(linked_caption, 'click', @click)
\r
203 this.$el.html(linked_caption.render().el)
\r
207 @action.url @params
\r
210 @trigger('http_get', @url())
\r