OSDN Git Service

fix filer edit box
[pettanr/pettanr.git] / app / assets / javascripts / locmare / filer / pager.js.coffee
index e0ed33d..9f4dd43 100644 (file)
@@ -1,5 +1,6 @@
 class Locmare.FilerModule.Pager extends Backbone.View\r
-  tagName: 'div'\r
+  tagName: 'ul'\r
+  className: 'pagination'\r
   \r
   initialize: (options) ->\r
     @filer = options.filer\r
@@ -17,9 +18,114 @@ class Locmare.FilerModule.Pager extends Backbone.View
   api_path: () ->\r
     list_result().path\r
   \r
-class Locmare.FilerModule.NonePager extends Locmare.FilerModule.Pager\r
-  \r
 class Locmare.FilerModule.DefaultPager extends Locmare.FilerModule.Pager\r
+  tagName: 'ul'\r
+  className: 'pagination'\r
+  \r
+  initialize: (options) ->\r
+    @page_status = options.page_status\r
+    @counter = @page_status.counter\r
+    @current_page = @page_status.current_page\r
+    @per_page = @page_status.per_page\r
+    @window_size = @page_status.window_size\r
+    @parts = []\r
+    _this = this\r
+    @counter.fetch().done ->\r
+      _this.total = _this.counter.get('count')\r
+      _this.total_page = Math.floor(_this.total / _this.per_page) + 1\r
+      _this.render()\r
+  \r
+  render: () ->\r
+    @parts = []\r
+    @build()\r
+    _this = this\r
+    this.$el.html('')\r
+    _.each @parts, (part) ->\r
+      _this.$el.append(part.render().el)\r
+    rb = new Pettanr.Tag.Div({class_name: 'row_break'})\r
+    this.$el.append(rb.render().el)\r
+    this\r
+  \r
+  build: () ->\r
+    @parts.push(new Locmare.FilerModule.DefaultPager.FirstPage({})) if @hasPreviousPage()\r
+    @parts.push(new Locmare.FilerModule.DefaultPager.PrevPage({})) if @hasPreviousPage()\r
+    @parts.push(new Locmare.FilerModule.DefaultPager.PageGap({})) if @hasPreviousPageGap()\r
+    f = if @hasPreviousPageGap()\r
+      @current_page - @window_size\r
+    else\r
+      1\r
+    t = if @hasNextPageGap()\r
+      @current_page + @window_size\r
+    else\r
+      @total_page\r
+    for page in [f..t]\r
+      @parts.push(new Locmare.FilerModule.DefaultPager.Page({page: page}))\r
+    @parts.push(new Locmare.FilerModule.DefaultPager.PageGap({})) if @hasNextPageGap()\r
+    @parts.push(new Locmare.FilerModule.DefaultPager.NextPage({})) if @hasNextPage()\r
+    @parts.push(new Locmare.FilerModule.DefaultPager.LastPage({})) if @hasNextPage()\r
+  \r
+  hasPreviousPage: () ->\r
+    @current_page > 1\r
+  \r
+  hasNextPage: () ->\r
+    @current_page < @total_page\r
+  \r
+  hasPreviousPageGap: () ->\r
+    @current_page > @window_size + 1\r
+  \r
+  hasNextPageGap: () ->\r
+    @total_page - @current_page > @window_size\r
+  \r
+class Locmare.FilerModule.DefaultPager.FirstPage extends Backbone.View\r
+  tagName: 'li'\r
+  className: 'first'\r
+  \r
+  render: () ->\r
+    this.$el.html('<<')\r
+    this\r
+  \r
+class Locmare.FilerModule.DefaultPager.PrevPage extends Backbone.View\r
+  tagName: 'li'\r
+  className: 'prev'\r
+  \r
+  render: () ->\r
+    this.$el.html('<')\r
+    this\r
+  \r
+class Locmare.FilerModule.DefaultPager.PageGap extends Backbone.View\r
+  tagName: 'li'\r
+  className: 'page-gap'\r
+  \r
+  render: () ->\r
+    this.$el.html('...')\r
+    this\r
+  \r
+class Locmare.FilerModule.DefaultPager.Page extends Backbone.View\r
+  tagName: 'li'\r
+  className: 'page'\r
+  \r
+  initialize: (options) ->\r
+    @page = options.page\r
+  \r
+  render: () ->\r
+    this.$el.html(@page)\r
+    this\r
+  \r
+class Locmare.FilerModule.DefaultPager.NextPage extends Backbone.View\r
+  tagName: 'li'\r
+  className: 'next'\r
+  \r
+  render: () ->\r
+    this.$el.html('>')\r
+    this\r
+  \r
+class Locmare.FilerModule.DefaultPager.LastPage extends Backbone.View\r
+  tagName: 'li'\r
+  className: 'last'\r
+  \r
+  render: () ->\r
+    this.$el.html('>>')\r
+    this\r
   \r
 class Locmare.FilerModule.MorePager extends Locmare.FilerModule.Pager\r
   \r