import layui from '../core.js'; /** * laypage 分页组件 */ var doc = document; var id = 'getElementById'; var tag = 'getElementsByTagName'; var DISABLED = 'layui-disabled'; // 构造器 var Class = function(options){ var that = this; that.config = options || {}; that.config.index = ++laypage.index; that.render(true); }; // 判断传入的容器类型 Class.prototype.type = function(){ var config = this.config; if(typeof config.elem === 'object'){ return config.elem.length === undefined ? 2 : 3; } }; // 分页视图 Class.prototype.view = function(){ var that = this; var config = that.config; // 连续页码个数 var groups = config.groups = 'groups' in config ? (Number(config.groups) || 0) : 5; // 排版 config.layout = typeof config.layout === 'object' ? config.layout : ['prev', 'page', 'next']; config.count = Number(config.count) || 0; // 数据总数 config.curr = Number(config.curr) || 1; // 当前页 // 每页条数的选择项 config.limits = typeof config.limits === 'object' ? config.limits : [10, 20, 30, 40, 50]; // 默认条数 config.limit = Number(config.limit) || 10; // 总页数 config.pages = Math.ceil(config.count/config.limit) || 1; // 当前页不能超过总页数 if(config.curr > config.pages){ config.curr = config.pages; } else if(config.curr < 1) { // 当前分页不能小于 1 config.curr = 1; } // 连续分页个数不能低于 0 且不能大于总页数 if(groups < 0){ groups = 1; } else if (groups > config.pages){ groups = config.pages; } config.prev = 'prev' in config ? config.prev : '上一页'; // 上一页文本 config.next = 'next' in config ? config.next : '下一页'; // 下一页文本 // 计算当前组 var index = config.pages > groups ? Math.ceil( (config.curr + (groups > 1 ? 1 : 0)) / (groups > 0 ? groups : 1) ) : 1; // 视图片段 var views = { // 上一页 prev: function(){ return config.prev ? ''+ config.prev +'' : ''; }(), // 页码 page: function(){ var pager = []; // 数据量为0时,不输出页码 if(config.count < 1){ return ''; } // 首页 if(index > 1 && config.first !== false && groups !== 0){ pager.push(''+ (config.first || 1) +''); } // 计算当前页码组的起始页 var halve = Math.floor((groups-1)/2); // 页码数等分 var start = index > 1 ? config.curr - halve : 1; var end = index > 1 ? (function(){ var max = config.curr + (groups - halve - 1); return max > config.pages ? config.pages : max; }()) : groups; // 防止最后一组出现“不规定”的连续页码数 if(end - start < groups - 1){ start = end - groups + 1; } // 输出左分割符 if(config.first !== false && start > 2){ pager.push('...'); } // 输出连续页码 for(; start <= end; start++){ if(start === config.curr){ // 当前页 pager.push(''+ start +''); } else { pager.push(''+ start +''); } } // 输出输出右分隔符 & 末页 if(config.pages > groups && config.pages > end && config.last !== false){ if(end + 1 < config.pages){ pager.push('...'); } if(groups !== 0){ pager.push(''+ (config.last || config.pages) +''); } } return pager.join(''); }(), // 下一页 next: function(){ return config.next ? ''+ config.next +'' : ''; }(), // 数据总数 count: function(){ var countText = typeof config.countText === 'object' ? config.countText : ['共 ', ' 条']; return ''+ countText[0] + config.count + countText[1] +'' }(), // 每页条数 limit: function(){ var elemArr = [''; }(), // 刷新当前页 refresh: [ '', '', '' ].join(''), // 跳页区域 skip: function(){ var skipText = typeof config.skipText === 'object' ? config.skipText : [ '到第', '页', '确定' ]; return [ ''+ skipText[0], '', skipText[1]+ '', '' ].join(''); }() }; return ['