[Groonga-commit] groonga/groonga [master] admin: implement pager as jQuery UI widget

Back to archive index

null+****@clear***** null+****@clear*****
2012年 4月 11日 (水) 19:21:38 JST


Kouhei Sutou	2012-04-11 19:21:38 +0900 (Wed, 11 Apr 2012)

  New Revision: 943f78f73b6d94c3dcbfa43ea510185c0f128671

  Log:
    admin: implement pager as jQuery UI widget

  Modified files:
    data/html/admin/js/groonga-admin.js

  Modified: data/html/admin/js/groonga-admin.js (+72 -50)
===================================================================
--- data/html/admin/js/groonga-admin.js    2012-04-11 16:12:25 +0900 (ea1fba6)
+++ data/html/admin/js/groonga-admin.js    2012-04-11 19:21:38 +0900 (1b1eac4)
@@ -70,6 +70,67 @@ Groonga = {
   GRN_OBJ_WITH_POSITION:          (0x01<<9)
 };
 
+$.widget("ui.paginate", {
+  version: "1.0",
+  options: {
+    total: 0,
+    nItemsPerPage: 10,
+    currentPage: 0,
+    nShowLinks: 10,
+    callback: null
+  },
+  _create: function() {
+    var that = this;
+    var element = this.element;
+    element.addClass("pager");
+
+    var total = this.options.total;
+    var nItemsPerPage = this.options.nItemsPerPage;
+    var currentPage = this.options.currentPage;
+    var nShowLinks = this.options.nShowLinks;
+    var lastPage = Math.floor((total - 1) / nItemsPerPage) + 1;
+    var start = currentPage - Math.floor(nShowLinks / 2);
+    start = (start < 1) ? 1 : start;
+    var end = start + nShowLinks - 1;
+    end = (end > lastPage) ? lastPage : end;
+
+    var callback = this.options.callback;
+    if (start > 1) {
+      element.append($('<span />')
+                     .addClass('pager')
+                     .append($('<a />')
+                             .attr('href', '#')
+                             .text('1')
+                             .click(function () {callback(0)})));
+      element.append($('<span />').text('....'));
+    }
+    for (var i = start; i <= end; i++) {
+      var page = $('<span />').append($('<a />')
+                                      .attr('href', '#')
+                                      .text(String(i))
+                                      .click(function () {
+                                        callback(Number($(this).text()) - 1);
+                                      }));
+      if (i == currentPage) {
+        page.addClass('pager-current');
+      } else {
+        page.addClass('pager');
+      }
+      element.append(page);
+    }
+    if (end < lastPage) {
+      element.append($('<span />')
+                     .text('....'));
+      element.append($('<span />')
+                     .addClass('pager')
+                     .append($('<a />')
+                             .attr('href', '#')
+                             .text(String(lastPage))
+                             .click(function () {callback(lastPage - 1);})));
+    }
+  }
+});
+
 function GroongaAdmin() {
   this.current_table = null;
   this.statusTimer = null;
@@ -677,45 +738,6 @@ jQuery.extend(GroongaAdmin.prototype, {
       })
     );
   },
-  pager_element_factory: function(per_page, current_page, show_num, func) {
-    return function (total) {
-      var ret = $('<div />').addClass('pager');
-      if (total) {
-        var last_page = Math.floor((total - 1) / per_page) + 1;
-        var st = current_page - Math.floor(show_num / 2);
-        st = (st < 1) ? 1 : st;
-        var ed = st + show_num - 1;
-        ed = (ed > last_page) ? last_page : ed;
-
-        if (st > 1) {
-          ret.append(
-            $('<span />').addClass('pager').append(
-              $('<a />').attr('href', '#').text('1').click(func)
-            )
-          ).append($('<span />').text('....'));
-        }
-        for (var i = st; i <= ed; i++) {
-          var s = $('<span />').append(
-            $('<a />').attr('href', '#').text(String(i)).click(func)
-          );
-          if (i == current_page) {
-            s.addClass('pager-current');
-          } else {
-            s.addClass('pager');
-          }
-          ret.append(s);
-        }
-        if (ed < last_page) {
-          ret.append($('<span />').text('....')).append(
-            $('<span />').addClass('pager').append(
-              $('<a />').attr('href', '#').text(String(last_page)).click(func)
-            )
-          )
-        }
-      }
-      return ret;
-    }
-  },
   recordlist_simple: function(table_name, simplequery, simplequery_type, page, hide_dialog) {
     var d = {
       'table': table_name,
@@ -763,17 +785,17 @@ jQuery.extend(GroongaAdmin.prototype, {
             if (rows != '' && !parseInt(rows)) {
               pager = $('<span />');
             } else {
-              pager =
-                that.pager_element_factory(
-                  rows,
-                  Math.floor(offset/rows)+1,
-                  13,
-                  function() {
-                    params['offset'] = (Number($(this).text()) - 1) * rows;
-                    that.recordlist(params, true, false);
-                    return false;
-                  }
-                )(all_count);
+              pager = $("<div/>");
+              pager.paginate({
+                total: all_count,
+                nItemsPerPage: rows,
+                currentPage: Math.floor(offset/rows)+1,
+                callback: function(page) {
+                  params['offset'] = page * rows;
+                  that.recordlist(params, true, false);
+                  return false;
+                }
+              });
             }
           } else {
             pager = $('<span />');




Groonga-commit メーリングリストの案内
Back to archive index