ソースを参照

Add page list supprot.

zhixin 11 年 前
コミット
f9420bbf80
2 ファイル変更48 行追加7 行削除
  1. 5 0
      src/bootstrap-table.css
  2. 43 7
      src/bootstrap-table.js

+ 5 - 0
src/bootstrap-table.css

@@ -78,6 +78,11 @@
     line-height: 34px;
     line-height: 34px;
 }
 }
 
 
+.fixed-table-pagination .page-list {
+    float: right;
+    margin-right: 10px;
+}
+
 .fixed-table-pagination li.disabled a {
 .fixed-table-pagination li.disabled a {
     pointer-events: none;
     pointer-events: none;
     cursor: default;
     cursor: default;

+ 43 - 7
src/bootstrap-table.js

@@ -37,6 +37,7 @@
     var BootstrapTable = function(el, options) {
     var BootstrapTable = function(el, options) {
         this.options = options;
         this.options = options;
         this.$el = $(el);
         this.$el = $(el);
+        this.$el_ = this.$el.clone();
 
 
         this.init();
         this.init();
     };
     };
@@ -231,20 +232,25 @@
         if (this.options.sidePagination === 'client') {
         if (this.options.sidePagination === 'client') {
             this.options.totalRows = this.data.length;
             this.options.totalRows = this.data.length;
         }
         }
-        this.totalPages = 0;
-        if (this.options.totalRows) {
-            this.totalPages = ~~((this.options.totalRows - 1) / this.options.pageSize) + 1;
-        }
         this.updatePagination();
         this.updatePagination();
     };
     };
 
 
     BootstrapTable.prototype.updatePagination = function() {
     BootstrapTable.prototype.updatePagination = function() {
-        var html = [],
+        var that = this,
+            html = [],
             i, from, to,
             i, from, to,
+            $pageList,
             $first, $pre,
             $first, $pre,
             $next, $last,
             $next, $last,
             $number;
             $number;
 
 
+        this.totalPages = 0;
+        if (this.options.totalRows) {
+            this.totalPages = ~~((this.options.totalRows - 1) / this.options.pageSize) + 1;
+        }
+        if (this.totalPages > 0 && this.options.pageNumber > this.totalPages) {
+            this.options.pageNumber = this.totalPages;
+        }
         this.pageFrom = (this.options.pageNumber - 1) * this.options.pageSize + 1;
         this.pageFrom = (this.options.pageNumber - 1) * this.options.pageSize + 1;
         this.pageTo = this.options.pageNumber * this.options.pageSize;
         this.pageTo = this.options.pageNumber * this.options.pageSize;
         if (this.pageTo > this.options.totalRows) {
         if (this.pageTo > this.options.totalRows) {
@@ -286,9 +292,26 @@
                     '<li class="page-next"><a href="javascript:void(0)">&gt;</a></li>',
                     '<li class="page-next"><a href="javascript:void(0)">&gt;</a></li>',
                     '<li class="page-last"><a href="javascript:void(0)">&gt;&gt;</a></li>',
                     '<li class="page-last"><a href="javascript:void(0)">&gt;&gt;</a></li>',
                 '</ul>',
                 '</ul>',
-            '</div>')
+            '</div>');
+
+        html.push(
+            '<div class="pagination btn-group dropup page-list">',
+                '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',
+                    this.options.pageSize,
+                    ' <span class="caret"></span>',
+                '</button>',
+                '<ul class="dropdown-menu" role="menu">');
+        $.each(this.options.pageList, function(i, page) {
+            var active = page === that.options.pageSize ? ' class="active"' : '';
+            html.push(sprintf('<li%s><a href="javascript:void(0)">%s</a></li>', active, page));
+        });
+        html.push(
+                '</ul>',
+            '</div>');
+
         this.$pagination.html(html.join(''));
         this.$pagination.html(html.join(''));
 
 
+        $pageList = this.$pagination.find('.page-list a');
         $first = this.$pagination.find('.page-first');
         $first = this.$pagination.find('.page-first');
         $pre = this.$pagination.find('.page-pre');
         $pre = this.$pagination.find('.page-pre');
         $next = this.$pagination.find('.page-next');
         $next = this.$pagination.find('.page-next');
@@ -303,6 +326,7 @@
             $next.addClass('disabled');
             $next.addClass('disabled');
             $last.addClass('disabled');
             $last.addClass('disabled');
         }
         }
+        $pageList.off('click').on('click', $.proxy(this.onPageListChange, this));
         $first.off('click').on('click', $.proxy(this.onPageFirst, this));
         $first.off('click').on('click', $.proxy(this.onPageFirst, this));
         $pre.off('click').on('click', $.proxy(this.onPagePre, this));
         $pre.off('click').on('click', $.proxy(this.onPagePre, this));
         $next.off('click').on('click', $.proxy(this.onPageNext, this));
         $next.off('click').on('click', $.proxy(this.onPageNext, this));
@@ -310,6 +334,12 @@
         $number.off('click').on('click', $.proxy(this.onPageNumber, this));
         $number.off('click').on('click', $.proxy(this.onPageNumber, this));
     };
     };
 
 
+    BootstrapTable.prototype.onPageListChange = function(event) {
+        this.options.pageSize = +$(event.currentTarget).text();
+        this.updatePagination();
+        this.initBody();
+    };
+
     BootstrapTable.prototype.onPageFirst = function() {
     BootstrapTable.prototype.onPageFirst = function() {
         this.options.pageNumber = 1;
         this.options.pageNumber = 1;
         this.updatePagination();
         this.updatePagination();
@@ -500,6 +530,11 @@
         this.updateRows(false);
         this.updateRows(false);
     };
     };
 
 
+    BootstrapTable.prototype.destroy = function() {
+        this.$container.replaceWith(this.$el_);
+        return this.$el_;
+    };
+
 
 
     // BOOTSTRAP TABLE PLUGIN DEFINITION
     // BOOTSTRAP TABLE PLUGIN DEFINITION
     // =======================
     // =======================
@@ -508,7 +543,8 @@
         var allowedMethods = [
         var allowedMethods = [
                 'getSelections',
                 'getSelections',
                 'load', 'append', 'mergeCells',
                 'load', 'append', 'mergeCells',
-                'checkAll', 'uncheckAll'
+                'checkAll', 'uncheckAll',
+                'destroy'
             ],
             ],
             value;
             value;