!function($){
var MMPaginator = function(element, options){
this.$el = $(element);
this.opts = options;
};
MMPaginator.prototype = {
_initLayout: function(){
var that = this;
var $el = this.$el;
var opts = this.opts;
$el.addClass("mmPaginator");
var pgHtmls = [
'
',
'',
''
];
$el.append($(pgHtmls.join('')));
this.$totalCountLabel = $el.find('.totalCountLabel');
this.$pageList = $el.find('.pageList');
this.$limitList = $el.find('.limit select');
var $limitList = this.$limitList
$.each(opts.limitList, function(){
var $option = $('')
.prop('value',this)
.text(that.formatString(opts.limitLabel,[this]));
$limitList.append($option);
});
$limitList.on('change', function(){
$el.data('page', 1);
that.$mmGrid.load();
});
}
, _plain: function(page, totalCount, limit){
var that = this;
var $el = this.$el;
var $pageList = this.$pageList;
var totalPage = totalCount % limit === 0 ? parseInt(totalCount/limit) : parseInt(totalCount/limit) + 1;
totalPage = totalPage ? totalPage : 0;
if(totalPage === 0){
page = 1;
}else if(page > totalPage){
page = totalPage;
}else if(page < 1 && totalPage != 0){
page = 1;
}
//
var $prev = $('«');
if(page<=1){
$prev.addClass('disable');
}else{
$prev.find('a').on('click', function(){
$el.data('page', page-1);
that.$mmGrid.load();
});
}
$pageList.append($prev);
/////
var list = [1];
if(page > 4 ){
list.push('...');
}
for(var i= 0; i < 5; i++){
var no = page - 2 + i;
if(no > 1 && no <= totalPage-1){
list.push(no);
}
}
if(page+1 < totalPage-1){
list.push('...');
}
if(totalPage>1){
list.push(totalPage);
}
$.each(list, function(index, item){
var $li = $('');
if(item === '...'){
$li.addClass('').html('...');
}else if(item === page){
$li.addClass('active').find('a').text(item);
}else{
$li.find('a').text(item).prop('title','第'+item+'页').on('click', function(e){
$el.data('page', item);
that.$mmGrid.load();
});
}
$pageList.append($li);
});
//
var $next = $('»');
if(page>=totalPage){
$next.addClass('disable');
}else{
$next.find('a').on('click', function(){
$el.data('page', page+1);
that.$mmGrid.load();
});
}
$pageList.append($next);
}
, _search: function(page, totalCount, limit){
}
, load: function(params){
var $el = this.$el;
var $limitList = this.$limitList;
var opts = this.opts;
if(!params){
params = {};
}
var page = params[opts.pageParamName];
if(page === undefined || page === null){
page = $el.data('page');
}
$el.data('page', page);
var totalCount = params[opts.totalCountName];
if(totalCount === undefined){
totalCount = 0;
}
$el.data('totalCount', totalCount);
var limit = params[opts.limitParamName];
if(!limit){
limit = $limitList.val();
}
this.$limitList.val(limit);
this.$totalCountLabel.html(this.formatString(opts.totalCountLabel,[totalCount]));
this.$pageList.empty();
this._plain(page, totalCount, this.$limitList.val());
}
, formatString: function(text, args){
return text.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
}
, params: function(){
var opts = this.opts;
var $el = this.$el;
var $limitList = this.$limitList;
var params = {};
params[opts.pageParamName] = $el.data('page');
params[opts.limitParamName] = $limitList.val();
return params;
}
, init: function($grid){
var that = this;
var opts = that.opts;
this.$mmGrid = $grid;
this._initLayout();
this.$mmGrid.on('loadSuccess', function(e, data){
that.load(data);
});
var params = {};
params[opts.totalCountName] = 0;
params[opts.pageParamName] = opts.page;
params[opts.limitParamName] = opts.limit;
this.load(params);
if($grid.opts.indexCol){
var indexCol = $grid.opts.cols[0];
indexCol.renderer = function(val,item,rowIndex){
var params = that.params();
return '';
};
}
}
};
$.fn.mmPaginator = function(){
if(arguments.length === 0 || typeof arguments[0] === 'object'){
var option = arguments[0]
, data = this.data('mmPaginator')
, options = $.extend(true, {}, $.fn.mmPaginator.defaults, option);
if (!data) {
data = new MMPaginator(this[0], options);
this.data('mmPaginator', data);
}
return $.extend(true, this, data);
}
if(typeof arguments[0] === 'string'){
var data = this.data('mmPaginator');
var fn = data[arguments[0]];
if(fn){
var args = Array.prototype.slice.call(arguments);
return fn.apply(data,args.slice(1));
}
}
};
$.fn.mmPaginator.defaults = {
style: 'plain'
, totalCountName: 'totalCount'
, page: 1
, pageParamName: 'page'
, limitParamName: 'limit'
, limitLabel: '每页{0}条'
, totalCountLabel: '共{0}条记录'
, limit: undefined
, limitList: [20, 30, 40, 50]
};
$.fn.mmPaginator.Constructor = MMPaginator;
}(window.jQuery);