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
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
12 class Locmare.ListGroupModule.LibModule.PagerModule
\r
13 class Locmare.ListGroupModule.LibModule.PagerModule.Default extends Backbone.View
\r
15 className: 'pagination'
\r
17 initialize: (options) ->
\r
18 @page_status = options.page_status
\r
19 @params = options.params
\r
20 @total = @page_status.total
\r
23 @controller = Manifest.manifest().controllers[@params['controller']]
\r
24 @action = @controller.actions[@params['action']]
\r
25 @action = @action.original if @action.original
\r
27 @current_page = @page_status.page
\r
28 @per_page = @page_status.page_size
\r
29 @total_page = @page_status.total_page
\r
33 if @hasPreviousPage()
\r
34 view = new Locmare.ListGroupModule.LibModule.PagerModule.FirstPage({
\r
35 parent: this, page: 1, class_name: 'first'
\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
44 @listenTo(view, 'navigate', @navigate)
\r
45 @listenTo(view, 'page', @click)
\r
46 this.$el.append(view.render().el)
\r
47 if @hasPreviousPageGap()
\r
49 (new Locmare.ListGroupModule.LibModule.PagerModule.PageGap()).render().el
\r
51 _.each @range(), (page) =>
\r
52 view = new Locmare.ListGroupModule.LibModule.PagerModule.Page({
\r
53 parent: this, page: page, class_name: 'page'
\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
60 (new Locmare.ListGroupModule.LibModule.PagerModule.PageGap()).render().el
\r
63 view = new Locmare.ListGroupModule.LibModule.PagerModule.NextPage({
\r
64 parent: this, page: @current_page + 1, class_name: 'next'
\r
66 @listenTo(view, 'navigate', @navigate)
\r
67 @listenTo(view, 'page', @click)
\r
68 this.$el.append(view.render().el)
\r
70 view = new Locmare.ListGroupModule.LibModule.PagerModule.LastPage({
\r
71 parent: this, page: @total_page, class_name: 'last'
\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
81 f = if @hasPreviousPageGap()
\r
82 @current_page - @window_size
\r
85 t = if @hasNextPageGap()
\r
86 @current_page + @window_size
\r
91 hasPreviousPage: () ->
\r
95 @current_page < @total_page
\r
97 hasPreviousPageGap: () ->
\r
98 @current_page > @window_size + 1
\r
100 hasNextPageGap: () ->
\r
101 @total_page - @current_page > @window_size
\r
105 _.each @params, (v, k) -> # deep copy
\r
107 params['page'] = page
\r
108 params['page_size'] = @per_page
\r
112 @trigger('page', page)
\r
115 @trigger('http_get', url)
\r
117 class Locmare.ListGroupModule.LibModule.PagerModule.Part extends Backbone.View
\r
120 initialize: (options) ->
\r
121 @parent = options.parent
\r
122 @page = options.page
\r
123 @el.className = options.class_name
\r
126 if @page == @parent.current_page
\r
127 this.$el.html(@content())
\r
129 linked_caption = new Tag.A({
\r
130 attr: {href: '/' + @url()},
\r
131 content: @content()
\r
133 @listenTo(linked_caption, 'click', @click)
\r
134 this.$el.html(linked_caption.render().el)
\r
144 @trigger('page', @page)
\r
145 @trigger('navigate', @url())
\r
147 class Locmare.ListGroupModule.LibModule.PagerModule.FirstPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
153 @trigger('page', @page)
\r
154 @trigger('navigate', @url())
\r
156 class Locmare.ListGroupModule.LibModule.PagerModule.PrevPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
161 class Locmare.ListGroupModule.LibModule.PagerModule.PageGap extends Backbone.View
\r
163 className: 'page-gap'
\r
166 this.$el.html('...')
\r
169 class Locmare.ListGroupModule.LibModule.PagerModule.Page extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
172 Pettanr.to_s(@page)
\r
174 class Locmare.ListGroupModule.LibModule.PagerModule.NextPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r
179 class Locmare.ListGroupModule.LibModule.PagerModule.LastPage extends Locmare.ListGroupModule.LibModule.PagerModule.Part
\r