@whitesev/data-paging 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -1,258 +1,263 @@
1
- 'use strict';
2
-
3
- const PagingDefaultConfig = () => {
4
- return {
5
- data: [],
6
- pageShowDataMaxCount: 5,
7
- pageMaxStep: 3,
8
- currentPage: 1,
9
- pageChangeCallBack: function () { },
10
- prevBtn: {
11
- enable: true,
12
- callBack: function () { },
13
- },
14
- nextBtn: {
15
- enable: true,
16
- callBack: function () { },
17
- },
18
- firstBtn: {
19
- enable: true,
20
- callBack: function () { },
21
- },
22
- lastBtn: {
23
- enable: true,
24
- callBack: function () { },
25
- },
26
- };
27
- };
28
-
29
- const PagingUtils = {
30
- /**
31
- * 设置安全的html
32
- */
33
- setSafeHTML($el, text) {
34
- // 创建 TrustedHTML 策略(需 CSP 允许)
35
- try {
36
- $el.innerHTML = text;
37
- }
38
- catch {
39
- // @ts-ignore
40
- if (globalThis.trustedTypes) {
41
- // @ts-ignore
42
- const policy = globalThis.trustedTypes.createPolicy("safe-innerHTML", {
43
- createHTML: (html) => html,
44
- });
45
- $el.innerHTML = policy.createHTML(text);
46
- }
47
- else {
48
- throw new Error("PagingUtils trustedTypes is not defined");
49
- }
50
- }
51
- },
52
- };
53
-
54
- const version = "0.0.1";
55
-
56
- class Paging {
57
- version = version;
58
- CONFIG;
59
- PAGE_CONFIG = {
60
- /**
61
- * 获取当前所在页
62
- */
63
- currentPage: () => {
64
- return this.DOM_CONFIG.getAttributeWithPageId(this.DOM_CONFIG.getAttributeWithCurrentPage());
65
- },
66
- /** 最大页码 */
67
- maxPage: 1,
68
- };
69
- DOM_CONFIG = {
70
- /* 整个分页元素 */
71
- $pageWrapper: {
72
- localName: "div",
73
- id: "data-paging-wrapper",
74
- dom: null,
75
- },
76
- /* 第一页按钮 */
77
- firstBtnNode: {
78
- localName: "a",
79
- className: "pg-first",
80
- svgHTML: `<svg t="1694497357294" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4758" width="20"><path d="M730.639277 211.376748l60.943177 60.943176-301.698894 301.698893L428.940384 513.075641z" p-id="4759"></path><path d="M730.496772 814.924547l60.943176-60.943176-301.698893-301.698893L428.797879 513.225654z" p-id="4760"></path><path d="M298.666667 213.333333h85.333333v597.333334H298.666667z" p-id="4761"></path></svg>`,
81
- get: () => {
82
- return this.DOM_CONFIG.$pageWrapper.dom.querySelector(`${this.DOM_CONFIG.firstBtnNode.localName}.${this.DOM_CONFIG.firstBtnNode.className}`);
83
- },
84
- },
85
- /* 上一页按钮 */
86
- prevBtnNode: {
87
- localName: "a",
88
- className: "pg-prev",
89
- svgHTML: `<svg t="1694497840770" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5272" width="20"><path d="M620.322607 151.04875l60.943176 60.943176-362.038672 362.038672L258.283935 513.087422z" p-id="5273"></path><path d="M620.180101 875.252545l60.943177-60.943176-362.038672-362.038672L258.141429 513.213873z" p-id="5274"></path></svg>`,
90
- get: () => {
91
- return this.DOM_CONFIG.$pageWrapper.dom.querySelector(`${this.DOM_CONFIG.prevBtnNode.localName}.${this.DOM_CONFIG.prevBtnNode.className}`);
92
- },
93
- },
94
- /* 下一页按钮 */
95
- nextBtnNode: {
96
- localName: "a",
97
- className: "pg-next",
98
- svgHTML: `<svg t="1694497949481" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5465" width="20"><path d="M403.399239 151.02258l-60.943177 60.943177 362.038672 362.038672L765.437911 513.061252z" p-id="5466"></path><path d="M403.576858 875.263008l-60.943176-60.943176 362.038672-362.038672L765.61553 513.224336z" p-id="5467"></path></svg>`,
99
- get: () => {
100
- return this.DOM_CONFIG.$pageWrapper.dom.querySelector(`${this.DOM_CONFIG.nextBtnNode.localName}.${this.DOM_CONFIG.nextBtnNode.className}`);
101
- },
102
- },
103
- /* 最后一页按钮 */
104
- lastBtnNode: {
105
- localName: "a",
106
- className: "pg-last",
107
- svgHTML: `<svg t="1694498035538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2299" width="20"><path d="M516.266667 490.666667L256 230.4 315.733333 170.666667l320 320L315.733333 810.666667 256 750.933333l260.266667-260.266666zM678.4 170.666667h85.333333v640h-85.333333V170.666667z" p-id="2300"></path></svg>`,
108
- get: () => {
109
- return this.DOM_CONFIG.$pageWrapper.dom.querySelector(`${this.DOM_CONFIG.lastBtnNode.localName}.${this.DOM_CONFIG.lastBtnNode.className}`);
110
- },
111
- },
112
- /**
113
- * 设置 元素的 页码 值
114
- * @param $el
115
- * @param page
116
- */
117
- setAttributeWithPageId: ($el, page) => {
118
- $el.setAttribute("page-id", String(page));
119
- },
120
- /**
121
- * 获取 元素 的页码属性
122
- * @param $el
123
- */
124
- getAttributeWithPageId: ($el) => {
125
- const pageId = $el?.getAttribute("page-id");
126
- return pageId ? parseInt(pageId) : null;
127
- },
128
- /**
129
- * 判断 元素 是否存在页码属性
130
- * @param $el
131
- */
132
- hasAttributeWithPageId: ($el) => {
133
- return $el.hasAttribute("page-id");
134
- },
135
- /**
136
- * 设置 元素的属性 为当前所在页码
137
- * @param $el
138
- */
139
- setAttributeWithCurrentPage: ($el) => {
140
- $el.setAttribute("data-current-page", "");
141
- },
142
- /**
143
- * 获取当前页码的元素
144
- * @param $pageWrapper
145
- */
146
- getAttributeWithCurrentPage: ($pageWrapper) => {
147
- return ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelector("a[data-current-page]");
148
- },
149
- /**
150
- * 判断 元素 是否存在 当前页的属性
151
- * @param $el
152
- */
153
- hasAttributeWithCurrentPage: ($el) => {
154
- return $el.hasAttribute("data-current-page");
155
- },
156
- /**
157
- * 移除 当前页码的属性
158
- * @param $el
159
- */
160
- removeAttributeWithCurrentPage: ($el) => {
161
- $el.removeAttribute("data-current-page");
162
- },
163
- /**
164
- * 设置 元素 禁用
165
- * @param $el
166
- */
167
- setAttributeWithDisabled: ($el) => {
168
- $el.setAttribute("disabled", "true");
169
- },
170
- /**
171
- * 移除当前页面的禁用的元素
172
- * @param $pageWrapper
173
- */
174
- removeAllAttributeWithDisabled: ($pageWrapper) => {
175
- ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom)
176
- ?.querySelectorAll("a[class][disabled]")
177
- .forEach((item) => {
178
- item.removeAttribute("disabled");
179
- });
180
- },
181
- /**
182
- * 获取 第一页 元素节点
183
- * @param $pageWrapper
184
- */
185
- getFirstPageNode: ($pageWrapper) => {
186
- return ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelector("a[page-id='1']");
187
- },
188
- /**
189
- * 获取 最后一页 元素节点
190
- * @param {$pageWrapper
191
- */
192
- getLastPageNode: ($pageWrapper) => {
193
- return ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelector(`a[page-id='${this.PAGE_CONFIG.maxPage}']`);
194
- },
195
- /**
196
- * 获取当前所有的页码元素节点
197
- * @param $pageWrapper
198
- */
199
- getAllPageNode: ($pageWrapper) => {
200
- return Array.from(($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelectorAll("a[page-id]"));
201
- },
202
- };
203
- /**
204
- * @param config
205
- */
206
- constructor(config) {
207
- this.CONFIG = PagingDefaultConfig();
208
- this.changeConfig(config);
209
- }
210
- /**
211
- * 隐藏分页容器
212
- * @param $wrapper 分页容器
213
- */
214
- hide($wrapper = this.DOM_CONFIG.$pageWrapper.dom) {
215
- if (!$wrapper)
216
- return;
217
- $wrapper.style.display = "none";
218
- }
219
- /**
220
- * 显示分页容器
221
- * @param $wrapper 分页容器
222
- */
223
- show($wrapper = this.DOM_CONFIG.$pageWrapper.dom) {
224
- if (!$wrapper)
225
- return;
226
- $wrapper.style.display = "";
227
- }
228
- /**
229
- * 判断分页容器是否隐藏
230
- * @param $wrapper 分页容器
231
- */
232
- isHide($wrapper = this.DOM_CONFIG.$pageWrapper.dom) {
233
- if (!$wrapper)
234
- return;
235
- return $wrapper.style.display.includes("none");
236
- }
237
- /**
238
- * 销毁分页容器
239
- */
240
- destory() {
241
- const $wrapper = this.DOM_CONFIG.$pageWrapper.dom;
242
- if (!$wrapper)
243
- return;
244
- const $parent = $wrapper.parentElement;
245
- $parent?.removeChild?.($wrapper);
246
- this.DOM_CONFIG.$pageWrapper.dom = null;
247
- }
248
- /**
249
- * 添加CSS
250
- * @param $parent 添加到目标元素
251
- */
252
- addCSS($parent = document.head) {
253
- const $style = document.createElement("style");
254
- $style.setAttribute("type", "text/css");
255
- const cssText = /*css*/ `@charset "utf-8";
1
+ "use strict";
2
+
3
+ const PagingDefaultConfig = () => {
4
+ return {
5
+ data: [],
6
+ pageShowDataMaxCount: 5,
7
+ pageMaxStep: 3,
8
+ currentPage: 1,
9
+ pageChangeCallBack: function () {},
10
+ prevBtn: {
11
+ enable: true,
12
+ callBack: function () {},
13
+ },
14
+ nextBtn: {
15
+ enable: true,
16
+ callBack: function () {},
17
+ },
18
+ firstBtn: {
19
+ enable: true,
20
+ callBack: function () {},
21
+ },
22
+ lastBtn: {
23
+ enable: true,
24
+ callBack: function () {},
25
+ },
26
+ };
27
+ };
28
+
29
+ const PagingUtils = {
30
+ /**
31
+ * 设置安全的html
32
+ */
33
+ setSafeHTML($el, text) {
34
+ // 创建 TrustedHTML 策略(需 CSP 允许)
35
+ try {
36
+ $el.innerHTML = text;
37
+ } catch {
38
+ // @ts-ignore
39
+ if (globalThis.trustedTypes) {
40
+ // @ts-ignore
41
+ const policy = globalThis.trustedTypes.createPolicy("safe-innerHTML", {
42
+ createHTML: (html) => html,
43
+ });
44
+ $el.innerHTML = policy.createHTML(text);
45
+ } else {
46
+ throw new Error("PagingUtils trustedTypes is not defined");
47
+ }
48
+ }
49
+ },
50
+ };
51
+
52
+ const version = "0.0.3";
53
+
54
+ class Paging {
55
+ version = version;
56
+ CONFIG;
57
+ PAGE_CONFIG = {
58
+ /**
59
+ * 获取当前所在页
60
+ */
61
+ currentPage: () => {
62
+ const $page = this.DOM_CONFIG.getAttributeWithCurrentPage();
63
+ const page = this.DOM_CONFIG.getAttributeWithPageId($page);
64
+ // 如果未获取到元素,那么固定页码为1
65
+ return page ?? 1;
66
+ },
67
+ /** 最大页码 */
68
+ maxPage: 1,
69
+ };
70
+ DOM_CONFIG = {
71
+ /* 整个分页元素 */
72
+ $pageWrapper: {
73
+ localName: "div",
74
+ id: "data-paging-wrapper",
75
+ dom: null,
76
+ },
77
+ /* 第一页按钮 */
78
+ firstBtnNode: {
79
+ localName: "a",
80
+ className: "pg-first",
81
+ svgHTML: `<svg t="1694497357294" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4758" width="20"><path d="M730.639277 211.376748l60.943177 60.943176-301.698894 301.698893L428.940384 513.075641z" p-id="4759"></path><path d="M730.496772 814.924547l60.943176-60.943176-301.698893-301.698893L428.797879 513.225654z" p-id="4760"></path><path d="M298.666667 213.333333h85.333333v597.333334H298.666667z" p-id="4761"></path></svg>`,
82
+ get: () => {
83
+ return this.DOM_CONFIG.$pageWrapper.dom.querySelector(
84
+ `${this.DOM_CONFIG.firstBtnNode.localName}.${this.DOM_CONFIG.firstBtnNode.className}`
85
+ );
86
+ },
87
+ },
88
+ /* 上一页按钮 */
89
+ prevBtnNode: {
90
+ localName: "a",
91
+ className: "pg-prev",
92
+ svgHTML: `<svg t="1694497840770" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5272" width="20"><path d="M620.322607 151.04875l60.943176 60.943176-362.038672 362.038672L258.283935 513.087422z" p-id="5273"></path><path d="M620.180101 875.252545l60.943177-60.943176-362.038672-362.038672L258.141429 513.213873z" p-id="5274"></path></svg>`,
93
+ get: () => {
94
+ return this.DOM_CONFIG.$pageWrapper.dom.querySelector(
95
+ `${this.DOM_CONFIG.prevBtnNode.localName}.${this.DOM_CONFIG.prevBtnNode.className}`
96
+ );
97
+ },
98
+ },
99
+ /* 下一页按钮 */
100
+ nextBtnNode: {
101
+ localName: "a",
102
+ className: "pg-next",
103
+ svgHTML: `<svg t="1694497949481" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5465" width="20"><path d="M403.399239 151.02258l-60.943177 60.943177 362.038672 362.038672L765.437911 513.061252z" p-id="5466"></path><path d="M403.576858 875.263008l-60.943176-60.943176 362.038672-362.038672L765.61553 513.224336z" p-id="5467"></path></svg>`,
104
+ get: () => {
105
+ return this.DOM_CONFIG.$pageWrapper.dom.querySelector(
106
+ `${this.DOM_CONFIG.nextBtnNode.localName}.${this.DOM_CONFIG.nextBtnNode.className}`
107
+ );
108
+ },
109
+ },
110
+ /* 最后一页按钮 */
111
+ lastBtnNode: {
112
+ localName: "a",
113
+ className: "pg-last",
114
+ svgHTML: `<svg t="1694498035538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2299" width="20"><path d="M516.266667 490.666667L256 230.4 315.733333 170.666667l320 320L315.733333 810.666667 256 750.933333l260.266667-260.266666zM678.4 170.666667h85.333333v640h-85.333333V170.666667z" p-id="2300"></path></svg>`,
115
+ get: () => {
116
+ return this.DOM_CONFIG.$pageWrapper.dom.querySelector(
117
+ `${this.DOM_CONFIG.lastBtnNode.localName}.${this.DOM_CONFIG.lastBtnNode.className}`
118
+ );
119
+ },
120
+ },
121
+ /**
122
+ * 设置 元素的 页码 值
123
+ * @param $el
124
+ * @param page
125
+ */
126
+ setAttributeWithPageId: ($el, page) => {
127
+ $el.setAttribute("page-id", String(page));
128
+ },
129
+ /**
130
+ * 获取 元素 的页码属性
131
+ * @param $el
132
+ */
133
+ getAttributeWithPageId: ($el) => {
134
+ const pageId = $el?.getAttribute("page-id");
135
+ return pageId ? parseInt(pageId) : null;
136
+ },
137
+ /**
138
+ * 判断 元素 是否存在页码属性
139
+ * @param $el
140
+ */
141
+ hasAttributeWithPageId: ($el) => {
142
+ return $el.hasAttribute("page-id");
143
+ },
144
+ /**
145
+ * 设置 元素的属性 为当前所在页码
146
+ * @param $el
147
+ */
148
+ setAttributeWithCurrentPage: ($el) => {
149
+ $el.setAttribute("data-current-page", "");
150
+ },
151
+ /**
152
+ * 获取当前页码的元素
153
+ * @param $pageWrapper
154
+ */
155
+ getAttributeWithCurrentPage: ($pageWrapper) => {
156
+ return ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelector("a[data-current-page]");
157
+ },
158
+ /**
159
+ * 判断 元素 是否存在 当前页的属性
160
+ * @param $el
161
+ */
162
+ hasAttributeWithCurrentPage: ($el) => {
163
+ return $el.hasAttribute("data-current-page");
164
+ },
165
+ /**
166
+ * 移除 当前页码的属性
167
+ * @param $el
168
+ */
169
+ removeAttributeWithCurrentPage: ($el) => {
170
+ $el.removeAttribute("data-current-page");
171
+ },
172
+ /**
173
+ * 设置 元素 禁用
174
+ * @param $el
175
+ */
176
+ setAttributeWithDisabled: ($el) => {
177
+ $el.setAttribute("disabled", "true");
178
+ },
179
+ /**
180
+ * 移除当前页面的禁用的元素
181
+ * @param $pageWrapper
182
+ */
183
+ removeAllAttributeWithDisabled: ($pageWrapper) => {
184
+ ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom)?.querySelectorAll("a[class][disabled]").forEach((item) => {
185
+ item.removeAttribute("disabled");
186
+ });
187
+ },
188
+ /**
189
+ * 获取 第一页 元素节点
190
+ * @param $pageWrapper
191
+ */
192
+ getFirstPageNode: ($pageWrapper) => {
193
+ return ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelector("a[page-id='1']");
194
+ },
195
+ /**
196
+ * 获取 最后一页 元素节点
197
+ * @param {$pageWrapper
198
+ */
199
+ getLastPageNode: ($pageWrapper) => {
200
+ return ($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelector(
201
+ `a[page-id='${this.PAGE_CONFIG.maxPage}']`
202
+ );
203
+ },
204
+ /**
205
+ * 获取当前所有的页码元素节点
206
+ * @param $pageWrapper
207
+ */
208
+ getAllPageNode: ($pageWrapper) => {
209
+ return Array.from(($pageWrapper || this.DOM_CONFIG.$pageWrapper.dom).querySelectorAll("a[page-id]"));
210
+ },
211
+ };
212
+ /**
213
+ * @param config
214
+ */
215
+ constructor(config) {
216
+ this.CONFIG = PagingDefaultConfig();
217
+ this.changeConfig(config);
218
+ }
219
+ /**
220
+ * 隐藏分页容器
221
+ * @param $wrapper 分页容器
222
+ */
223
+ hide($wrapper = this.DOM_CONFIG.$pageWrapper.dom) {
224
+ if (!$wrapper) return;
225
+ $wrapper.style.display = "none";
226
+ }
227
+ /**
228
+ * 显示分页容器
229
+ * @param $wrapper 分页容器
230
+ */
231
+ show($wrapper = this.DOM_CONFIG.$pageWrapper.dom) {
232
+ if (!$wrapper) return;
233
+ $wrapper.style.display = "";
234
+ }
235
+ /**
236
+ * 判断分页容器是否隐藏
237
+ * @param $wrapper 分页容器
238
+ */
239
+ isHide($wrapper = this.DOM_CONFIG.$pageWrapper.dom) {
240
+ if (!$wrapper) return;
241
+ return $wrapper.style.display.includes("none");
242
+ }
243
+ /**
244
+ * 销毁分页容器
245
+ */
246
+ destory() {
247
+ const $wrapper = this.DOM_CONFIG.$pageWrapper.dom;
248
+ if (!$wrapper) return;
249
+ const $parent = $wrapper.parentElement;
250
+ $parent?.removeChild?.($wrapper);
251
+ this.DOM_CONFIG.$pageWrapper.dom = null;
252
+ }
253
+ /**
254
+ * 添加CSS
255
+ * @param $parent 添加到目标元素
256
+ */
257
+ addCSS($parent = document.head) {
258
+ const $style = document.createElement("style");
259
+ $style.setAttribute("type", "text/css");
260
+ const cssText = /*css*/ `@charset "utf-8";
256
261
  #${this.DOM_CONFIG.$pageWrapper.id} {
257
262
  text-align: center;
258
263
  display: inline-block;
@@ -310,388 +315,378 @@ class Paging {
310
315
  border: 1px solid transparent;
311
316
  color: #c9c9c9;
312
317
  }
313
- `;
314
- PagingUtils.setSafeHTML($style, cssText);
315
- $parent.appendChild($style);
316
- }
317
- /**
318
- * 创建分页元素
319
- */
320
- createDataPagingWrapper() {
321
- const $pageWrapper = document.createElement(this.DOM_CONFIG.$pageWrapper.localName);
322
- this.DOM_CONFIG.$pageWrapper.dom = $pageWrapper;
323
- $pageWrapper.id = this.DOM_CONFIG.$pageWrapper.id;
324
- /* 第一页 */
325
- const $firstPage = document.createElement(this.DOM_CONFIG.firstBtnNode.localName);
326
- PagingUtils.setSafeHTML($firstPage, this.DOM_CONFIG.firstBtnNode.svgHTML);
327
- /* 上一页 */
328
- const $prevPage = document.createElement(this.DOM_CONFIG.prevBtnNode.localName);
329
- PagingUtils.setSafeHTML($prevPage, this.DOM_CONFIG.prevBtnNode.svgHTML);
330
- /* 下一页 */
331
- const $nextPage = document.createElement(this.DOM_CONFIG.nextBtnNode.localName);
332
- PagingUtils.setSafeHTML($nextPage, this.DOM_CONFIG.nextBtnNode.svgHTML);
333
- /* 最后一页 */
334
- const $lastPage = document.createElement(this.DOM_CONFIG.lastBtnNode.localName);
335
- PagingUtils.setSafeHTML($lastPage, this.DOM_CONFIG.lastBtnNode.svgHTML);
336
- $firstPage.className = this.DOM_CONFIG.firstBtnNode.className;
337
- $prevPage.className = this.DOM_CONFIG.prevBtnNode.className;
338
- $nextPage.className = this.DOM_CONFIG.nextBtnNode.className;
339
- $lastPage.className = this.DOM_CONFIG.lastBtnNode.className;
340
- /* 计算总数据量除以显示的数据量 得出分页的数量 */
341
- this.PAGE_CONFIG.maxPage = Math.ceil(this.CONFIG.data.length / this.CONFIG.pageShowDataMaxCount);
342
- /* 校正超出或小于的当前页码 */
343
- if (this.CONFIG.currentPage < 1) {
344
- this.CONFIG.currentPage = 1;
345
- }
346
- else if (this.CONFIG.currentPage > this.PAGE_CONFIG.maxPage) {
347
- this.CONFIG.currentPage = this.PAGE_CONFIG.maxPage;
348
- }
349
- /* 超过1 才开启分页 */
350
- if (this.PAGE_CONFIG.maxPage < 2) {
351
- return $pageWrapper;
352
- }
353
- /* 判断第一页按钮 是否开启 */
354
- if (this.CONFIG.firstBtn.enable) {
355
- this.setFirstBtnClickEvent($firstPage, $pageWrapper);
356
- $pageWrapper.appendChild($firstPage);
357
- }
358
- /* 判断上一页按钮 是否开启 */
359
- if (this.CONFIG.prevBtn.enable) {
360
- this.setPrevBtnClickEvent($prevPage, $pageWrapper);
361
- $pageWrapper.appendChild($prevPage);
362
- }
363
- let currentPage = this.CONFIG.currentPage;
364
- /* 计算出的最大页码在限制的显示页码数量内 */
365
- /* 比如计算出的页码总共有5个,设置中当前能显示出的页码按钮元素为3个 */
366
- if (this.CONFIG.pageMaxStep > this.PAGE_CONFIG.maxPage) {
367
- for (let index = currentPage; index <= this.PAGE_CONFIG.maxPage; index++) {
368
- const $page = document.createElement("a");
369
- this.DOM_CONFIG.setAttributeWithPageId($page, index);
370
- $page.innerText = String(index);
371
- if (this.CONFIG.currentPage === index) {
372
- this.DOM_CONFIG.setAttributeWithCurrentPage($page);
373
- }
374
- this.setPageBtnClickEvent($page, $pageWrapper);
375
- $pageWrapper.appendChild($page);
376
- }
377
- }
378
- else {
379
- /* 如果 当前页 + 限制显示的页码 大于等于 最大页,那么 从最后一页倒序着添加 */
380
- if (currentPage + this.CONFIG.pageMaxStep > this.PAGE_CONFIG.maxPage) {
381
- currentPage = this.PAGE_CONFIG.maxPage;
382
- const needAppendNodeList = [];
383
- for (let index = 0; index < this.CONFIG.pageMaxStep; index++) {
384
- const $page = document.createElement("a");
385
- this.DOM_CONFIG.setAttributeWithPageId($page, currentPage);
386
- $page.innerText = String(currentPage);
387
- if (this.CONFIG.currentPage === currentPage) {
388
- this.DOM_CONFIG.setAttributeWithCurrentPage($page);
389
- }
390
- this.setPageBtnClickEvent($page, $pageWrapper);
391
- needAppendNodeList.push($page);
392
- currentPage--;
393
- }
394
- needAppendNodeList.reverse();
395
- needAppendNodeList.forEach((item) => {
396
- $pageWrapper.appendChild(item);
397
- });
398
- }
399
- else {
400
- /* 当前页 在计算出的页码内 */
401
- for (let index = 0; index < this.CONFIG.pageMaxStep; index++) {
402
- const $page = document.createElement("a");
403
- this.DOM_CONFIG.setAttributeWithPageId($page, currentPage);
404
- $page.innerText = String(currentPage);
405
- if (this.CONFIG.currentPage === currentPage) {
406
- this.DOM_CONFIG.setAttributeWithCurrentPage($page);
407
- }
408
- this.setPageBtnClickEvent($page, $pageWrapper);
409
- $pageWrapper.appendChild($page);
410
- currentPage++;
411
- }
412
- }
413
- }
414
- /* 判断下一页按钮 是否开启 */
415
- if (this.CONFIG.nextBtn.enable) {
416
- this.setNextBtnClickEvent($nextPage, $pageWrapper);
417
- $pageWrapper.appendChild($nextPage);
418
- }
419
- /* 判断最后一页按钮 是否开启 */
420
- if (this.CONFIG.lastBtn.enable) {
421
- this.setLastBtnClickEvent($lastPage, $pageWrapper);
422
- $pageWrapper.appendChild($lastPage);
423
- }
424
- /* 配置中的当前页码为1时 设置 第一页、上一页按钮禁用 */
425
- if (this.CONFIG.currentPage === 1) {
426
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
427
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
428
- }
429
- else if (this.CONFIG.currentPage === this.PAGE_CONFIG.maxPage) {
430
- /* 如果为最大的页码 下一页、最后一页禁用 */
431
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
432
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
433
- }
434
- return $pageWrapper;
435
- }
436
- /**
437
- * 设置 第一页 点击事件
438
- * @param $page 分页元素
439
- * @param $pageWrapper 分页按钮的容器元素
440
- */
441
- setFirstBtnClickEvent($page, $pageWrapper) {
442
- $page.addEventListener("click", async (event) => {
443
- const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
444
- /* 当前页为第一页时无效 */
445
- if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === 1) {
446
- return;
447
- }
448
- await this.CONFIG.firstBtn?.callBack?.(event);
449
- const $allPage = this.DOM_CONFIG.getAllPageNode($pageWrapper);
450
- for (let index = 0; index < this.CONFIG.pageMaxStep; index++) {
451
- const $page = $allPage[index];
452
- if ($page == null) {
453
- continue;
454
- }
455
- /* 设置当前页码为第一页 */
456
- if (index === 0) {
457
- this.DOM_CONFIG.setAttributeWithCurrentPage($page);
458
- }
459
- else {
460
- /* 移除其它设置的第一页 */
461
- this.DOM_CONFIG.removeAttributeWithCurrentPage($page);
462
- }
463
- this.DOM_CONFIG.setAttributeWithPageId($page, index + 1);
464
- $page.innerText = String(index + 1);
465
- }
466
- this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
467
- /* 可视区域存在第一页的页码时,禁用第一页、上一页按钮 */
468
- if (this.DOM_CONFIG.getFirstPageNode($pageWrapper)) {
469
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
470
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
471
- }
472
- this.CONFIG.pageChangeCallBack(1);
473
- });
474
- }
475
- /**
476
- * 设置 上一页 点击事件
477
- * @param $page 分页元素
478
- * @param $pageWrapper 分页按钮的容器元素
479
- */
480
- setPrevBtnClickEvent($page, $pageWrapper) {
481
- $page.addEventListener("click", async (event) => {
482
- const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
483
- /* 当前页为第一页时无效 */
484
- if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === 1) {
485
- return;
486
- }
487
- await this.CONFIG.prevBtn?.callBack?.(event);
488
- const $prev = $currentPage.previousElementSibling;
489
- if ($prev && this.DOM_CONFIG.hasAttributeWithPageId($prev)) {
490
- $prev.click();
491
- }
492
- else {
493
- const $allPage = this.DOM_CONFIG.getAllPageNode($pageWrapper);
494
- $allPage.forEach((item) => {
495
- let page = this.DOM_CONFIG.getAttributeWithPageId(item);
496
- page--;
497
- this.DOM_CONFIG.setAttributeWithPageId(item, page);
498
- item.innerText = String(page);
499
- });
500
- this.CONFIG.pageChangeCallBack(this.PAGE_CONFIG.currentPage());
501
- }
502
- this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
503
- /* 如果当前第1页可见,且当前所在页不是第1页,则禁用上一页按钮和第一页按钮 */
504
- if (this.DOM_CONFIG.getFirstPageNode($pageWrapper) && this.PAGE_CONFIG.currentPage() == 1) {
505
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
506
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
507
- }
508
- });
509
- }
510
- /**
511
- * 设置 下一页 点击事件
512
- * @param $page 分页元素
513
- * @param $pageWrapper 分页按钮的容器元素
514
- */
515
- setNextBtnClickEvent($page, $pageWrapper) {
516
- $page.addEventListener("click", async (event) => {
517
- const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
518
- /* 当前页出于最后一页时 无效点击 */
519
- if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === this.PAGE_CONFIG.maxPage) {
520
- return;
521
- }
522
- await this.CONFIG.nextBtn?.callBack?.(event);
523
- /* 如果后面的按钮存在页码属性 点击 */
524
- const $next = $currentPage.nextElementSibling;
525
- if ($next && this.DOM_CONFIG.hasAttributeWithPageId($next)) {
526
- $next.click();
527
- }
528
- else {
529
- const allPageNode = this.DOM_CONFIG.getAllPageNode($pageWrapper);
530
- allPageNode.forEach((item) => {
531
- let page = this.DOM_CONFIG.getAttributeWithPageId(item);
532
- page++;
533
- if (page > this.PAGE_CONFIG.maxPage) {
534
- return;
535
- }
536
- this.DOM_CONFIG.setAttributeWithPageId(item, page);
537
- item.innerText = String(page);
538
- });
539
- this.CONFIG.pageChangeCallBack(this.PAGE_CONFIG.currentPage());
540
- }
541
- this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
542
- if (this.DOM_CONFIG.getLastPageNode() && this.PAGE_CONFIG.currentPage() == this.PAGE_CONFIG.maxPage) {
543
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
544
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
545
- }
546
- });
547
- }
548
- /**
549
- * 设置 最后一页 点击事件
550
- * @param $page 分页元素
551
- * @param $pageWrapper 分页按钮的容器元素
552
- */
553
- setLastBtnClickEvent($page, $pageWrapper) {
554
- $page.addEventListener("click", async (event) => {
555
- const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
556
- if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === this.PAGE_CONFIG.maxPage) {
557
- return;
558
- }
559
- await this.CONFIG.lastBtn?.callBack?.(event);
560
- const $allPage = Array.from(this.DOM_CONFIG.getAllPageNode($pageWrapper));
561
- $allPage.reverse();
562
- let pageCount = this.PAGE_CONFIG.maxPage;
563
- let index = 0;
564
- while (true) {
565
- if (this.PAGE_CONFIG.maxPage - pageCount > 3) {
566
- break;
567
- }
568
- const $page = $allPage[index];
569
- if ($page == null) {
570
- break;
571
- }
572
- if (index === 0) {
573
- this.DOM_CONFIG.setAttributeWithCurrentPage($page);
574
- }
575
- else {
576
- this.DOM_CONFIG.removeAttributeWithCurrentPage($page);
577
- }
578
- this.DOM_CONFIG.setAttributeWithPageId($page, pageCount);
579
- $page.innerText = String(pageCount);
580
- pageCount--;
581
- index++;
582
- }
583
- this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
584
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
585
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
586
- this.CONFIG.pageChangeCallBack(this.PAGE_CONFIG.maxPage);
587
- });
588
- }
589
- /**
590
- * 设置 点击事件
591
- * @param $page 分页元素
592
- * @param $pageWrapper 分页按钮的容器元素
593
- */
594
- setPageBtnClickEvent($page, $pageWrapper) {
595
- $page.addEventListener("click", async () => {
596
- const $clickButton = $page;
597
- const $allPageList = this.DOM_CONFIG.getAllPageNode($pageWrapper);
598
- for (const item of $allPageList) {
599
- /* 是当前点击的页码 */
600
- if (item == $clickButton) {
601
- /* 如果 当前点击的页码不是current */
602
- if (!this.DOM_CONFIG.hasAttributeWithCurrentPage($clickButton)) {
603
- this.DOM_CONFIG.setAttributeWithCurrentPage($clickButton);
604
- const currentPage = this.PAGE_CONFIG.currentPage();
605
- await this.CONFIG?.pageChangeCallBack?.(currentPage);
606
- }
607
- }
608
- else {
609
- this.DOM_CONFIG.removeAttributeWithCurrentPage(item);
610
- }
611
- }
612
- this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
613
- /* 如果当前第1页可见,且当前所在页不是第1页,则禁用上一页按钮和第一页按钮 */
614
- if (this.DOM_CONFIG.getFirstPageNode($pageWrapper) && this.PAGE_CONFIG.currentPage() == 1) {
615
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
616
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
617
- }
618
- /* 如果当前最后一页可见,且当前所在页不是最后一页,则禁用下一页按钮和最后一页按钮 */
619
- if (this.DOM_CONFIG.getLastPageNode() && this.PAGE_CONFIG.currentPage() == this.PAGE_CONFIG.maxPage) {
620
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
621
- this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
622
- }
623
- });
624
- }
625
- /**
626
- * 把分页添加到某个父元素下
627
- * @param $parent
628
- */
629
- append($parent) {
630
- const isHide = this.isHide();
631
- // 销毁旧的
632
- this.destory();
633
- const $pageWrapper = this.createDataPagingWrapper();
634
- if (isHide) {
635
- // 旧的是隐藏状态
636
- // 继承该状态
637
- this.hide($pageWrapper);
638
- }
639
- $parent.appendChild($pageWrapper);
640
- }
641
- /**
642
- * 把分页添加到某个元素之后
643
- */
644
- after($el) {
645
- const isHide = this.isHide();
646
- const $parent = $el.parentElement;
647
- const $nextSlibling = $el.nextSibling;
648
- // 销毁旧的
649
- this.destory();
650
- const $pageWrapper = this.createDataPagingWrapper();
651
- if (isHide) {
652
- // 旧的是隐藏状态
653
- // 继承该状态
654
- this.hide($pageWrapper);
655
- }
656
- if (!$parent || $nextSlibling) {
657
- // 任意一个不行
658
- $el.after($pageWrapper);
659
- }
660
- else {
661
- $parent.insertBefore($pageWrapper, $nextSlibling);
662
- }
663
- }
664
- /**
665
- * 动态修改配置,注意,修改后需要.append修改原来的元素
666
- * @param config 配置
667
- */
668
- changeConfig(config) {
669
- Object.assign(this.CONFIG, config);
670
- }
671
- /**
672
- * 刷新页面,重新渲染分页元素
673
- * @param data 新的数据
674
- * @example
675
- * 当总页数5页,当前在第3页,把第3页的数据删完,后面2页的数据会自动往前,需要重新计算数据
676
- * 且重新计算的数据的页数大于当前页(第3页)时,当前页不变,若小于当前页(第3页),则当前页为计算好的最大页
677
- */
678
- refresh(data) {
679
- this.CONFIG.data = [];
680
- this.CONFIG.data = data;
681
- let currentPage = this.PAGE_CONFIG.currentPage();
682
- const maxPage = Math.ceil(data.length / this.CONFIG.pageShowDataMaxCount);
683
- if (currentPage > maxPage) {
684
- currentPage = maxPage;
685
- }
686
- this.CONFIG.currentPage = currentPage;
687
- const $pageWrapper = this.DOM_CONFIG.$pageWrapper.dom;
688
- if ($pageWrapper) {
689
- this.after($pageWrapper);
690
- }
691
- }
692
- }
693
-
694
- const DataPaging = Paging;
695
-
696
- module.exports = DataPaging;
697
- //# sourceMappingURL=index.cjs.js.map
318
+ `;
319
+ PagingUtils.setSafeHTML($style, cssText);
320
+ $parent.appendChild($style);
321
+ }
322
+ /**
323
+ * 创建分页元素
324
+ */
325
+ createDataPagingWrapper() {
326
+ const $pageWrapper = document.createElement(this.DOM_CONFIG.$pageWrapper.localName);
327
+ this.DOM_CONFIG.$pageWrapper.dom = $pageWrapper;
328
+ $pageWrapper.id = this.DOM_CONFIG.$pageWrapper.id;
329
+ /* 第一页 */
330
+ const $firstPage = document.createElement(this.DOM_CONFIG.firstBtnNode.localName);
331
+ PagingUtils.setSafeHTML($firstPage, this.DOM_CONFIG.firstBtnNode.svgHTML);
332
+ /* 上一页 */
333
+ const $prevPage = document.createElement(this.DOM_CONFIG.prevBtnNode.localName);
334
+ PagingUtils.setSafeHTML($prevPage, this.DOM_CONFIG.prevBtnNode.svgHTML);
335
+ /* 下一页 */
336
+ const $nextPage = document.createElement(this.DOM_CONFIG.nextBtnNode.localName);
337
+ PagingUtils.setSafeHTML($nextPage, this.DOM_CONFIG.nextBtnNode.svgHTML);
338
+ /* 最后一页 */
339
+ const $lastPage = document.createElement(this.DOM_CONFIG.lastBtnNode.localName);
340
+ PagingUtils.setSafeHTML($lastPage, this.DOM_CONFIG.lastBtnNode.svgHTML);
341
+ $firstPage.className = this.DOM_CONFIG.firstBtnNode.className;
342
+ $prevPage.className = this.DOM_CONFIG.prevBtnNode.className;
343
+ $nextPage.className = this.DOM_CONFIG.nextBtnNode.className;
344
+ $lastPage.className = this.DOM_CONFIG.lastBtnNode.className;
345
+ /* 计算总数据量除以显示的数据量 得出分页的数量 */
346
+ this.PAGE_CONFIG.maxPage = Math.ceil(this.CONFIG.data.length / this.CONFIG.pageShowDataMaxCount);
347
+ /* 校正超出或小于的当前页码 */
348
+ if (this.CONFIG.currentPage < 1) {
349
+ this.CONFIG.currentPage = 1;
350
+ } else if (this.CONFIG.currentPage > this.PAGE_CONFIG.maxPage) {
351
+ this.CONFIG.currentPage = this.PAGE_CONFIG.maxPage;
352
+ }
353
+ /* 超过1 才开启分页 */
354
+ if (this.PAGE_CONFIG.maxPage < 2) {
355
+ return $pageWrapper;
356
+ }
357
+ /* 判断第一页按钮 是否开启 */
358
+ if (this.CONFIG.firstBtn.enable) {
359
+ this.setFirstBtnClickEvent($firstPage, $pageWrapper);
360
+ $pageWrapper.appendChild($firstPage);
361
+ }
362
+ /* 判断上一页按钮 是否开启 */
363
+ if (this.CONFIG.prevBtn.enable) {
364
+ this.setPrevBtnClickEvent($prevPage, $pageWrapper);
365
+ $pageWrapper.appendChild($prevPage);
366
+ }
367
+ let currentPage = this.CONFIG.currentPage;
368
+ /* 计算出的最大页码在限制的显示页码数量内 */
369
+ /* 比如计算出的页码总共有5个,设置中当前能显示出的页码按钮元素为3个 */
370
+ if (this.CONFIG.pageMaxStep > this.PAGE_CONFIG.maxPage) {
371
+ for (let index = currentPage; index <= this.PAGE_CONFIG.maxPage; index++) {
372
+ const $page = document.createElement("a");
373
+ this.DOM_CONFIG.setAttributeWithPageId($page, index);
374
+ $page.innerText = String(index);
375
+ if (this.CONFIG.currentPage === index) {
376
+ this.DOM_CONFIG.setAttributeWithCurrentPage($page);
377
+ }
378
+ this.setPageBtnClickEvent($page, $pageWrapper);
379
+ $pageWrapper.appendChild($page);
380
+ }
381
+ } else {
382
+ /* 如果 当前页 + 限制显示的页码 大于等于 最大页,那么 从最后一页倒序着添加 */
383
+ if (currentPage + this.CONFIG.pageMaxStep > this.PAGE_CONFIG.maxPage) {
384
+ currentPage = this.PAGE_CONFIG.maxPage;
385
+ const needAppendNodeList = [];
386
+ for (let index = 0; index < this.CONFIG.pageMaxStep; index++) {
387
+ const $page = document.createElement("a");
388
+ this.DOM_CONFIG.setAttributeWithPageId($page, currentPage);
389
+ $page.innerText = String(currentPage);
390
+ if (this.CONFIG.currentPage === currentPage) {
391
+ this.DOM_CONFIG.setAttributeWithCurrentPage($page);
392
+ }
393
+ this.setPageBtnClickEvent($page, $pageWrapper);
394
+ needAppendNodeList.push($page);
395
+ currentPage--;
396
+ }
397
+ needAppendNodeList.reverse();
398
+ needAppendNodeList.forEach((item) => {
399
+ $pageWrapper.appendChild(item);
400
+ });
401
+ } else {
402
+ /* 当前页 在计算出的页码内 */
403
+ for (let index = 0; index < this.CONFIG.pageMaxStep; index++) {
404
+ const $page = document.createElement("a");
405
+ this.DOM_CONFIG.setAttributeWithPageId($page, currentPage);
406
+ $page.innerText = String(currentPage);
407
+ if (this.CONFIG.currentPage === currentPage) {
408
+ this.DOM_CONFIG.setAttributeWithCurrentPage($page);
409
+ }
410
+ this.setPageBtnClickEvent($page, $pageWrapper);
411
+ $pageWrapper.appendChild($page);
412
+ currentPage++;
413
+ }
414
+ }
415
+ }
416
+ /* 判断下一页按钮 是否开启 */
417
+ if (this.CONFIG.nextBtn.enable) {
418
+ this.setNextBtnClickEvent($nextPage, $pageWrapper);
419
+ $pageWrapper.appendChild($nextPage);
420
+ }
421
+ /* 判断最后一页按钮 是否开启 */
422
+ if (this.CONFIG.lastBtn.enable) {
423
+ this.setLastBtnClickEvent($lastPage, $pageWrapper);
424
+ $pageWrapper.appendChild($lastPage);
425
+ }
426
+ /* 配置中的当前页码为1时 设置 第一页、上一页按钮禁用 */
427
+ if (this.CONFIG.currentPage === 1) {
428
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
429
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
430
+ } else if (this.CONFIG.currentPage === this.PAGE_CONFIG.maxPage) {
431
+ /* 如果为最大的页码 下一页、最后一页禁用 */
432
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
433
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
434
+ }
435
+ return $pageWrapper;
436
+ }
437
+ /**
438
+ * 设置 第一页 点击事件
439
+ * @param $page 分页元素
440
+ * @param $pageWrapper 分页按钮的容器元素
441
+ */
442
+ setFirstBtnClickEvent($page, $pageWrapper) {
443
+ $page.addEventListener("click", async (event) => {
444
+ const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
445
+ /* 当前页为第一页时无效 */
446
+ if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === 1) {
447
+ return;
448
+ }
449
+ await this.CONFIG.firstBtn?.callBack?.(event);
450
+ const $allPage = this.DOM_CONFIG.getAllPageNode($pageWrapper);
451
+ for (let index = 0; index < this.CONFIG.pageMaxStep; index++) {
452
+ const $page = $allPage[index];
453
+ if ($page == null) {
454
+ continue;
455
+ }
456
+ /* 设置当前页码为第一页 */
457
+ if (index === 0) {
458
+ this.DOM_CONFIG.setAttributeWithCurrentPage($page);
459
+ } else {
460
+ /* 移除其它设置的第一页 */
461
+ this.DOM_CONFIG.removeAttributeWithCurrentPage($page);
462
+ }
463
+ this.DOM_CONFIG.setAttributeWithPageId($page, index + 1);
464
+ $page.innerText = String(index + 1);
465
+ }
466
+ this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
467
+ /* 可视区域存在第一页的页码时,禁用第一页、上一页按钮 */
468
+ if (this.DOM_CONFIG.getFirstPageNode($pageWrapper)) {
469
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
470
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
471
+ }
472
+ this.CONFIG.pageChangeCallBack(1);
473
+ });
474
+ }
475
+ /**
476
+ * 设置 上一页 点击事件
477
+ * @param $page 分页元素
478
+ * @param $pageWrapper 分页按钮的容器元素
479
+ */
480
+ setPrevBtnClickEvent($page, $pageWrapper) {
481
+ $page.addEventListener("click", async (event) => {
482
+ const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
483
+ /* 当前页为第一页时无效 */
484
+ if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === 1) {
485
+ return;
486
+ }
487
+ await this.CONFIG.prevBtn?.callBack?.(event);
488
+ const $prev = $currentPage.previousElementSibling;
489
+ if ($prev && this.DOM_CONFIG.hasAttributeWithPageId($prev)) {
490
+ $prev.click();
491
+ } else {
492
+ const $allPage = this.DOM_CONFIG.getAllPageNode($pageWrapper);
493
+ $allPage.forEach((item) => {
494
+ let page = this.DOM_CONFIG.getAttributeWithPageId(item);
495
+ page--;
496
+ this.DOM_CONFIG.setAttributeWithPageId(item, page);
497
+ item.innerText = String(page);
498
+ });
499
+ this.CONFIG.pageChangeCallBack(this.PAGE_CONFIG.currentPage());
500
+ }
501
+ this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
502
+ /* 如果当前第1页可见,且当前所在页不是第1页,则禁用上一页按钮和第一页按钮 */
503
+ if (this.DOM_CONFIG.getFirstPageNode($pageWrapper) && this.PAGE_CONFIG.currentPage() == 1) {
504
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
505
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
506
+ }
507
+ });
508
+ }
509
+ /**
510
+ * 设置 下一页 点击事件
511
+ * @param $page 分页元素
512
+ * @param $pageWrapper 分页按钮的容器元素
513
+ */
514
+ setNextBtnClickEvent($page, $pageWrapper) {
515
+ $page.addEventListener("click", async (event) => {
516
+ const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
517
+ /* 当前页出于最后一页时 无效点击 */
518
+ if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === this.PAGE_CONFIG.maxPage) {
519
+ return;
520
+ }
521
+ await this.CONFIG.nextBtn?.callBack?.(event);
522
+ /* 如果后面的按钮存在页码属性 点击 */
523
+ const $next = $currentPage.nextElementSibling;
524
+ if ($next && this.DOM_CONFIG.hasAttributeWithPageId($next)) {
525
+ $next.click();
526
+ } else {
527
+ const allPageNode = this.DOM_CONFIG.getAllPageNode($pageWrapper);
528
+ allPageNode.forEach((item) => {
529
+ let page = this.DOM_CONFIG.getAttributeWithPageId(item);
530
+ page++;
531
+ if (page > this.PAGE_CONFIG.maxPage) {
532
+ return;
533
+ }
534
+ this.DOM_CONFIG.setAttributeWithPageId(item, page);
535
+ item.innerText = String(page);
536
+ });
537
+ this.CONFIG.pageChangeCallBack(this.PAGE_CONFIG.currentPage());
538
+ }
539
+ this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
540
+ if (this.DOM_CONFIG.getLastPageNode() && this.PAGE_CONFIG.currentPage() == this.PAGE_CONFIG.maxPage) {
541
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
542
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
543
+ }
544
+ });
545
+ }
546
+ /**
547
+ * 设置 最后一页 点击事件
548
+ * @param $page 分页元素
549
+ * @param $pageWrapper 分页按钮的容器元素
550
+ */
551
+ setLastBtnClickEvent($page, $pageWrapper) {
552
+ $page.addEventListener("click", async (event) => {
553
+ const $currentPage = this.DOM_CONFIG.getAttributeWithCurrentPage();
554
+ if (this.DOM_CONFIG.getAttributeWithPageId($currentPage) === this.PAGE_CONFIG.maxPage) {
555
+ return;
556
+ }
557
+ await this.CONFIG.lastBtn?.callBack?.(event);
558
+ const $allPage = Array.from(this.DOM_CONFIG.getAllPageNode($pageWrapper));
559
+ $allPage.reverse();
560
+ let pageCount = this.PAGE_CONFIG.maxPage;
561
+ let index = 0;
562
+ while (true) {
563
+ if (this.PAGE_CONFIG.maxPage - pageCount > 3) {
564
+ break;
565
+ }
566
+ const $page = $allPage[index];
567
+ if ($page == null) {
568
+ break;
569
+ }
570
+ if (index === 0) {
571
+ this.DOM_CONFIG.setAttributeWithCurrentPage($page);
572
+ } else {
573
+ this.DOM_CONFIG.removeAttributeWithCurrentPage($page);
574
+ }
575
+ this.DOM_CONFIG.setAttributeWithPageId($page, pageCount);
576
+ $page.innerText = String(pageCount);
577
+ pageCount--;
578
+ index++;
579
+ }
580
+ this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
581
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
582
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
583
+ this.CONFIG.pageChangeCallBack(this.PAGE_CONFIG.maxPage);
584
+ });
585
+ }
586
+ /**
587
+ * 设置 页 点击事件
588
+ * @param $page 分页元素
589
+ * @param $pageWrapper 分页按钮的容器元素
590
+ */
591
+ setPageBtnClickEvent($page, $pageWrapper) {
592
+ $page.addEventListener("click", async () => {
593
+ const $clickButton = $page;
594
+ const $allPageList = this.DOM_CONFIG.getAllPageNode($pageWrapper);
595
+ for (const item of $allPageList) {
596
+ /* 是当前点击的页码 */
597
+ if (item == $clickButton) {
598
+ /* 如果 当前点击的页码不是current */
599
+ if (!this.DOM_CONFIG.hasAttributeWithCurrentPage($clickButton)) {
600
+ this.DOM_CONFIG.setAttributeWithCurrentPage($clickButton);
601
+ const currentPage = this.PAGE_CONFIG.currentPage();
602
+ await this.CONFIG?.pageChangeCallBack?.(currentPage);
603
+ }
604
+ } else {
605
+ this.DOM_CONFIG.removeAttributeWithCurrentPage(item);
606
+ }
607
+ }
608
+ this.DOM_CONFIG.removeAllAttributeWithDisabled($pageWrapper);
609
+ /* 如果当前第1页可见,且当前所在页不是第1页,则禁用上一页按钮和第一页按钮 */
610
+ if (this.DOM_CONFIG.getFirstPageNode($pageWrapper) && this.PAGE_CONFIG.currentPage() == 1) {
611
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.firstBtnNode.get());
612
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.prevBtnNode.get());
613
+ }
614
+ /* 如果当前最后一页可见,且当前所在页不是最后一页,则禁用下一页按钮和最后一页按钮 */
615
+ if (this.DOM_CONFIG.getLastPageNode() && this.PAGE_CONFIG.currentPage() == this.PAGE_CONFIG.maxPage) {
616
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.nextBtnNode.get());
617
+ this.DOM_CONFIG.setAttributeWithDisabled(this.DOM_CONFIG.lastBtnNode.get());
618
+ }
619
+ });
620
+ }
621
+ /**
622
+ * 把分页添加到某个父元素下
623
+ * @param $parent
624
+ */
625
+ append($parent) {
626
+ const isHide = this.isHide();
627
+ // 销毁旧的
628
+ this.destory();
629
+ const $pageWrapper = this.createDataPagingWrapper();
630
+ if (isHide) {
631
+ // 旧的是隐藏状态
632
+ // 继承该状态
633
+ this.hide($pageWrapper);
634
+ }
635
+ $parent.appendChild($pageWrapper);
636
+ }
637
+ /**
638
+ * 把分页添加到某个元素之后
639
+ */
640
+ after($el) {
641
+ const isHide = this.isHide();
642
+ const $parent = $el.parentElement;
643
+ const $nextSlibling = $el.nextSibling;
644
+ // 销毁旧的
645
+ this.destory();
646
+ const $pageWrapper = this.createDataPagingWrapper();
647
+ if (isHide) {
648
+ // 旧的是隐藏状态
649
+ // 继承该状态
650
+ this.hide($pageWrapper);
651
+ }
652
+ if (!$parent || $nextSlibling) {
653
+ // 任意一个不行
654
+ $el.after($pageWrapper);
655
+ } else {
656
+ $parent.insertBefore($pageWrapper, $nextSlibling);
657
+ }
658
+ }
659
+ /**
660
+ * 动态修改配置,注意,修改后需要.append修改原来的元素
661
+ * @param config 配置
662
+ */
663
+ changeConfig(config) {
664
+ Object.assign(this.CONFIG, config);
665
+ }
666
+ /**
667
+ * 刷新页面,重新渲染分页元素
668
+ * @param data 新的数据
669
+ * @example
670
+ * 当总页数5页,当前在第3页,把第3页的数据删完,后面2页的数据会自动往前,需要重新计算数据
671
+ * 且重新计算的数据的页数大于当前页(第3页)时,当前页不变,若小于当前页(第3页),则当前页为计算好的最大页
672
+ */
673
+ refresh(data) {
674
+ this.CONFIG.data = [];
675
+ this.CONFIG.data = data;
676
+ let currentPage = this.PAGE_CONFIG.currentPage();
677
+ const maxPage = Math.ceil(data.length / this.CONFIG.pageShowDataMaxCount);
678
+ if (currentPage > maxPage) {
679
+ currentPage = maxPage;
680
+ }
681
+ this.CONFIG.currentPage = currentPage;
682
+ const $pageWrapper = this.DOM_CONFIG.$pageWrapper.dom;
683
+ if ($pageWrapper) {
684
+ this.after($pageWrapper);
685
+ }
686
+ }
687
+ }
688
+
689
+ const DataPaging = Paging;
690
+
691
+ module.exports = DataPaging;
692
+ //# sourceMappingURL=index.cjs.js.map