You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text/web/lay/modules/laypage.js

139 lines
6.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/** layui-v2.5.6 MIT License By https://www.layui.com */
layui.define(function(e){"use strict";
var a = document,
t = "getElementById",
n = "getElementsByTagName",
i = "laypage",
r = "layui-disabled", // 禁用的class
u = function(e) {
var a = this;
a.config = e || {}, a.config.index = ++s.index, a.render(!0);
};
u.prototype.type = function() {
var e = this.config;
// 判断传入的配置元素类型object类型如果只有一个元素就返回2如果有多个返回3
if ("object" == typeof e.elem) return void 0 === e.elem.length ? 2 : 3;
};
u.prototype.view = function() {
var e = this, a = e.config, t = a.groups = "groups" in a ? 0 | a.groups : 5;
// 设置分页的基本配置,包括显示的页数,当前页等
a.layout = "object" == typeof a.layout ? a.layout : ["prev", "page", "next"];
a.count = 0 | a.count;
a.curr = 0 | a.curr || 1;
a.limits = "object" == typeof a.limits ? a.limits : [10, 20, 30, 40, 50];
a.limit = 0 | a.limit || 10;
a.pages = Math.ceil(a.count / a.limit) || 1;
a.curr > a.pages && (a.curr = a.pages);
t < 0 ? t = 1 : t > a.pages && (t = a.pages);
a.prev = "prev" in a ? a.prev : "上一页";
a.next = "next" in a ? a.next : "下一页";
var n = a.pages > t ? Math.ceil((a.curr + (t > 1 ? 1 : 0)) / (t > 0 ? t : 1)) : 1;
// 创建分页的各个部分
var i = {
prev: function() {
return a.prev ? '<a href="javascript:;" class="layui-laypage-prev' + (1 == a.curr ? " " + r : "") + '" data-page="' + (a.curr - 1) + '">' + a.prev + "</a>" : "";
}(),
page: function() {
var e = [];
if (a.count < 1) return "";
n > 1 && a.first !== !1 && 0 !== t && e.push('<a href="javascript:;" class="layui-laypage-first" data-page="1" title="首页">' + (a.first || 1) + "</a>");
var i = Math.floor((t - 1) / 2),
r = n > 1 ? a.curr - i : 1,
u = n > 1 ? function() {
var e = a.curr + (t - i - 1);
return e > a.pages ? a.pages : e;
}() : t;
// 生成分页数字
for (u - r < t - 1 && (r = u - t + 1), a.first !== !1 && r > 2 && e.push('<span class="layui-laypage-spr">…</span>'); r <= u; r++)
r === a.curr ? e.push('<span class="layui-laypage-curr"><em class="layui-laypage-em" ' + (/^#/.test(a.theme) ? 'style="background-color:' + a.theme + ';"' : "") + "></em><em>" + r + "</em></span>") :
e.push('<a href="javascript:;" data-page="' + r + '">' + r + "</a>");
return a.pages > t && a.pages > u && a.last !== !1 && (u + 1 < a.pages && e.push('<span class="layui-laypage-spr">…</span>'), 0 !== t && e.push('<a href="javascript:;" class="layui-laypage-last" title="尾页" data-page="' + a.pages + '">' + (a.last || a.pages) + "</a>")), e.join("");
}(),
next: function() {
return a.next ? '<a href="javascript:;" class="layui-laypage-next' + (a.curr == a.pages ? " " + r : "") + '" data-page="' + (a.curr + 1) + '">' + a.next + "</a>" : "";
}(),
count: '<span class="layui-laypage-count">共 ' + a.count + " 条</span>",
limit: function() {
var e = ['<span class="layui-laypage-limits"><select lay-ignore>'];
layui.each(a.limits, function(t, n) {
e.push('<option value="' + n + '" ' + (n === a.limit ? "selected" : "") + ">" + n + " 条/页</option>");
});
return e.join("") + "</select></span>";
}(),
refresh: ['<a href="javascript:;" data-page="' + a.curr + '" class="layui-laypage-refresh">', '<i class="layui-icon layui-icon-refresh"></i>', "</a>"].join(""),
skip: function() {
return ['<span class="layui-laypage-skip">到第', '<input type="text" min="1" value="' + a.curr + '" class="layui-input">', '页<button type="button" class="layui-laypage-btn">确定</button>', "</span>"].join("");
}()
};
return ['<div class="layui-box layui-laypage layui-laypage-' + (a.theme ? /^#/.test(a.theme) ? "molv" : a.theme : "default") + '" id="layui-laypage-' + a.index + '">', function() {
var e = [];
return layui.each(a.layout, function(a, t) {
i[t] && e.push(i[t]);
}), e.join("");
}(), "</div>"].join("");
};
u.prototype.jump = function(e, a) {
if (e) {
var t = this, i = t.config, r = e.children, u = e[n]("button")[0], l = e[n]("input")[0], p = e[n]("select")[0], c = function() {
var e = 0 | l.value.replace(/\s|\D/g, "");
e && (i.curr = e, t.render());
};
if (a) return c();
for (var o = 0, y = r.length; o < y; o++) {
"a" === r[o].nodeName.toLowerCase() && s.on(r[o], "click", function() {
var e = 0 | this.getAttribute("data-page");
e < 1 || e > i.pages || (i.curr = e, t.render());
});
}
p && s.on(p, "change", function() {
var e = this.value;
i.curr * e > i.count && (i.curr = Math.ceil(i.count / e)), i.limit = e, t.render();
});
u && s.on(u, "click", function() {
c();
});
}
};
u.prototype.skip = function(e) {
if (e) {
var a = this, t = e[n]("input")[0];
t && s.on(t, "keyup", function(t) {
var n = this.value, i = t.keyCode;
/^(37|38|39|40)$/.test(i) || (/\\D/.test(n) && (this.value = n.replace(/\\D/, "")), 13 === i && a.jump(e, !0));
});
}
};
u.prototype.render = function(e) {
var n = this, i = n.config, r = n.type(), u = n.view();
2 === r ? i.elem && (i.elem.innerHTML = u) : 3 === r ? i.elem.html(u) : a[t](i.elem) && (a[t](i.elem).innerHTML = u);
i.jump && i.jump(i, e);
var s = a[t]("layui-laypage-" + i.index);
n.jump(s), i.hash && !e && (location.hash = "!" + i.hash + "=" + i.curr), n.skip(s);
};
var s = {
render: function(e) {
var a = new u(e);
return a.index;
},
index: layui.laypage ? layui.laypage.index + 1e4 : 0,
on: function(e, a, t) {
return e.attachEvent ? e.attachEvent("on" + a, function(a) {
a.target = a.srcElement, t.call(e, a);
}) : e.addEventListener(a, t, !1), this;
}
};
e(i, s);
});