mgsdatatable 1.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/.babelrc +3 -0
- package/README.md +98 -0
- package/dist/mgsdatatable.min.js +3 -0
- package/package.json +38 -0
- package/rollup.config.js +15 -0
- package/src/index.js +481 -0
package/.babelrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# mgsDataTable
|
|
2
|
+
|
|
3
|
+
A simple, lightweight JavaScript library to create tables with **pagination**, **sorting**, **searching**, and **rows-per-page limits** โ all with minimal setup and no external dependencies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## โจ Features
|
|
8
|
+
|
|
9
|
+
- ๐ **Search** โ Filter rows you type then enter keyword.
|
|
10
|
+
- โ **Sorting** โ Click column headers to sort (ascending/descending).
|
|
11
|
+
- ๐ **Pagination** โ Navigate between pages easily.
|
|
12
|
+
- ๐ **Rows Limit** โ Set how many rows appear per page.
|
|
13
|
+
- ๐จ **Customizable** โ Fully styleable with your own CSS.
|
|
14
|
+
- ๐ฆ **No Dependencies** โ Works in all modern browsers.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## ๐ฆ Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install mgsdatatable
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
## after installation then use it-
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
<div id="tableContainer"></div>
|
|
28
|
+
|
|
29
|
+
<script type="module">
|
|
30
|
+
import mgsDataTable from 'mgsdatatable';
|
|
31
|
+
|
|
32
|
+
// Call the function to render table
|
|
33
|
+
mgsDataTable({
|
|
34
|
+
target:"#tableContainer",
|
|
35
|
+
url:'http://localhost/mgs/users',
|
|
36
|
+
data: {},
|
|
37
|
+
methodType:'post', // Optional, default is post
|
|
38
|
+
pageLimits : [10,20,30,50,100], // Optional
|
|
39
|
+
page : 1, // Optional, default is 1
|
|
40
|
+
limit:10, // Optional, default is 10
|
|
41
|
+
column : '', // Optional, default is ''
|
|
42
|
+
sort : 'asc', // Optional, default is asc
|
|
43
|
+
search: '', // Optional, default is ''
|
|
44
|
+
prevPage: null, // Optional, default is null
|
|
45
|
+
nextPage: null, // Optional, default is null
|
|
46
|
+
isLimit:true, // Optional, default true
|
|
47
|
+
isSearch:true, // Optional, default true
|
|
48
|
+
isResult:true, // Optional, default true
|
|
49
|
+
isPagination:true, // Optional, default true
|
|
50
|
+
isSorting:true // Optional, default true
|
|
51
|
+
});
|
|
52
|
+
</script>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## api 'http://localhost/mgs/users' responsed like this format -
|
|
56
|
+
```
|
|
57
|
+
{
|
|
58
|
+
"status": true,
|
|
59
|
+
"data": {
|
|
60
|
+
"column": [
|
|
61
|
+
"name",
|
|
62
|
+
"role",
|
|
63
|
+
"email",
|
|
64
|
+
"mobile",
|
|
65
|
+
"image",
|
|
66
|
+
"status",
|
|
67
|
+
"action"
|
|
68
|
+
],
|
|
69
|
+
"data": [
|
|
70
|
+
{
|
|
71
|
+
"id": 1,
|
|
72
|
+
"name": "Mangesh",
|
|
73
|
+
"role": "superadmin",
|
|
74
|
+
"email": "mangesh@gmail.com",
|
|
75
|
+
"mobile": "1234567890",
|
|
76
|
+
"image": "<img src='http://localhost/mgs/storage/user/1692380264.avif' style='height: 50px;width:100px; border-radius:50px;'>",
|
|
77
|
+
"status": "<span data-id='1' class='status badge badge-sm badge-success' data-status='Inactive'>Active</span>",
|
|
78
|
+
"action": "<span data-id='1' class='btn-danger badge badge-sm badge-danger delete title='Delete'><i class='fa fa-trash'></i> </span> <a href='http://localhost/mgs/user-update/1' class='btn-success badge badge-sm badge-success title='Update'><i class='fa fa-edit'></i> </a>"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": 2,
|
|
82
|
+
"name": "Ashwani",
|
|
83
|
+
"role": "superadmin",
|
|
84
|
+
"email": "ashwani@gmail.com",
|
|
85
|
+
"mobile": "1234567891",
|
|
86
|
+
"image": "<img src='http://localhost/mgs/storage/user/1692380264.avif' style='height: 50px;width:100px; border-radius:50px;'>",
|
|
87
|
+
"status": "<span data-id='2' class='status badge badge-sm badge-success' data-status='Inactive'>Active</span>",
|
|
88
|
+
"action": "<span data-id='2' class='btn-danger badge badge-sm badge-danger delete title='Delete'><i class='fa fa-trash'></i> </span> <a href='http://localhost/mgs/user-update/2' class='btn-success badge badge-sm badge-success title='Update'><i class='fa fa-edit'></i> </a>"
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
"current_page:1,
|
|
92
|
+
"from": 1,
|
|
93
|
+
"to": 5,
|
|
94
|
+
"total": 27
|
|
95
|
+
},
|
|
96
|
+
"msg": "Data found"
|
|
97
|
+
}
|
|
98
|
+
```
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).mgsDataTable={})}(this,function(e){"use strict";function t(e,t,n,o,r,i,a){try{var l=e[i](a),c=l.value}catch(e){return void n(e)}l.done?t(c):Promise.resolve(c).then(o,r)}function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function i(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(-1!==t.indexOf(o))continue;n[o]=e[o]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function a(){
|
|
2
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
3
|
+
var e,t,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function i(n,o,r,i){var a=o&&o.prototype instanceof s?o:s,d=Object.create(a.prototype);return l(d,"_invoke",function(n,o,r){var i,a,l,s=0,d=r||[],u=!1,p={p:0,n:0,v:e,a:g,f:g.bind(e,4),d:function(t,n){return i=t,a=0,l=e,p.n=n,c}};function g(n,o){for(a=n,l=o,t=0;!u&&s&&!r&&t<d.length;t++){var r,i=d[t],g=p.p,f=i[2];n>3?(r=f===o)&&(l=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=g&&((r=n<2&&g<i[1])?(a=0,p.v=o,p.n=i[1]):g<f&&(r=n<3||i[0]>o||o>f)&&(i[4]=n,i[5]=o,p.n=f,a=0))}if(r||n>1)return c;throw u=!0,o}return function(r,d,f){if(s>1)throw TypeError("Generator is already running");for(u&&1===d&&g(d,f),a=d,l=f;(t=a<2?e:l)||!u;){i||(a?a<3?(a>1&&(p.n=-1),g(a,l)):p.n=l:p.v=l);try{if(s=2,i){if(a||(r="next"),t=i[r]){if(!(t=t.call(i,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,a<2&&(a=0)}else 1===a&&(t=i.return)&&t.call(i),a<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),a=1);i=e}else if((t=(u=p.n<0)?l:n.call(o,p))!==c)break}catch(t){i=e,a=1,l=t}finally{s=1}}return{value:t,done:u}}}(n,r,i),!0),d}var c={};function s(){}function d(){}function u(){}t=Object.getPrototypeOf;var p=[][o]?t(t([][o]())):(l(t={},o,function(){return this}),t),g=u.prototype=s.prototype=Object.create(p);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,l(e,r,"GeneratorFunction")),e.prototype=Object.create(g),e}return d.prototype=u,l(g,"constructor",u),l(u,"constructor",d),d.displayName="GeneratorFunction",l(u,r,"GeneratorFunction"),l(g),l(g,r,"Generator"),l(g,o,function(){return this}),l(g,"toString",function(){return"[object Generator]"}),(a=function(){return{w:i,m:f}})()}function l(e,t,n,o){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}l=function(e,t,n,o){function i(t,n){l(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!o,configurable:!o,writable:!o}):e[t]=n:(i("next",0),i("throw",1),i("return",2))},l(e,t,n,o)}var c=["token"],s={target:"",url:"",methodType:"post",data:{},pageLimits:[10,20,30,50,100],page:1,limit:10,column:"",sort:"asc",search:"",prevPage:null,nextPage:null,isSearch:!0,isLimit:!0,isResult:!0,isPagination:!0,isSorting:!0},d=0,u=function(){var e,o=(e=a().m(function e(t){var o,l,u,g,f,m,v,y,h,b,x,P,w,_,L,S,T,j,O,k,E,C,A,I,M,H,D,N,R,q,F,z,G,U,B,J,X,K,Q,V,W,Y,Z,$,ee,te,ne,oe,re,ie,ae,le,ce,se,de,ue,pe,ge,fe,me,ve,ye,he,be,xe,Pe,we,_e,Le,Se,Te,je,Oe,ke,Ee,Ce,Ae,Ie,Me,He,De,Ne,Re,qe,Fe,ze,Ge,Ue,Be,Je,Xe,Ke,Qe,Ve,We,Ye;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(s=r(r({},s),t),null!==(o=s)&&void 0!==o&&o.target){e.n=1;break}return alert("Target is requied."),e.a(2);case 1:if(null!==(l=s)&&void 0!==l&&l.url){e.n=2;break}return alert("URL is requied."),e.a(2);case 2:return z=null===(u=s)||void 0===u?void 0:u.target,G=null!==(g=null===(f=s)||void 0===f?void 0:f.url)&&void 0!==g?g:"/",U=r({},null===(m=s)||void 0===m?void 0:m.data),B=U.token,J=i(U,c),X=null===(v=s)||void 0===v?void 0:v.methodType,K=null!==(y=null===(h=s)||void 0===h?void 0:h.page)&&void 0!==y?y:1,Q=null!==(b=null===(x=s)||void 0===x?void 0:x.limit)&&void 0!==b?b:10,V=null!==(P=null===(w=s)||void 0===w?void 0:w.pageLimits)&&void 0!==P?P:[10,20,30,50,100],W=null===(_=s)||void 0===_?void 0:_.search,Y=null===(L=s)||void 0===L?void 0:L.column,Z=null===(S=s)||void 0===S?void 0:S.sort,$=null!==(T=null===(j=s)||void 0===j?void 0:j.nextPage)&&void 0!==T?T:null,ee=null!==(O=null===(k=s)||void 0===k?void 0:k.prevPage)&&void 0!==O?O:null,te=null===(E=null===(C=s)||void 0===C?void 0:C.isSearch)||void 0===E||E,ne=null===(A=null===(I=s)||void 0===I?void 0:I.isLimit)||void 0===A||A,oe=null===(M=null===(H=s)||void 0===H?void 0:H.isResult)||void 0===M||M,re=null===(D=null===(N=s)||void 0===N?void 0:N.isPagination)||void 0===D||D,ie=null===(R=null===(q=s)||void 0===q?void 0:q.isSorting)||void 0===R||R,J=r(r({},J),{},{page:K,limit:Q}),null!=W&&null!=W&&""!=W.trim()&&(J=r(r({},J),{},{search:W})),null!=Y&&null!=Y&&""!=Y.trim()&&(J=r(r({},J),{},{column:Y,sort:Z})),ae="post"===X.toLowerCase(),(le=new Headers).append("Content-Type","application/json"),ae&&le.append("X-CSRF-Token",B),ce={method:null===(F=s)||void 0===F?void 0:F.methodType,headers:le,body:JSON.stringify(J)},se=document.querySelector(z),(de=se.nextElementSibling)&&de.classList.contains("_mgsPaginateResult")&&de.remove(),(ue=se.querySelector("tbody"))&&ue.remove(),(pe=document.createElement("div")).className="_mgsSpinner",pe.innerHTML='<i class="fa fa-spinner fa-spin"></i> Loading...',pe.style.cssText="\n position: fixed;\n z-index: 1031;\n width: 70%;\n height: 30%;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 20px;\n ",e.p=3,e.n=4,fetch(G,ce);case 4:return ye=e.v,e.n=5,ye.json();case 5:if(he=e.v,be=null!==(ge=null==he?void 0:he.data)&&void 0!==ge?ge:[],xe=null!==(fe=null==he||null===(me=he.data)||void 0===me?void 0:me.data)&&void 0!==fe?fe:[],Pe=null!==(ve=null==he?void 0:he.column)&&void 0!==ve?ve:[],we=null!=(null==be?void 0:be.from)&&null!=(null==be?void 0:be.from)&&""!=(null==be?void 0:be.from)?null==be?void 0:be.from:0,_e=null!=(null==be?void 0:be.to)&&null!=(null==be?void 0:be.to)&&""!=(null==be?void 0:be.to)?null==be?void 0:be.to:0,Le=null!=(null==be?void 0:be.total)&&null!=(null==be?void 0:be.total)&&""!=(null==be?void 0:be.total)?null==be?void 0:be.total:0,Se=Math.ceil(Le/Q),Te=Se+2,$=Se>0&&null==$&&null==ee?2:$,se.insertAdjacentElement("beforebegin",pe),0==d&&(te||ne)&&(je="",ne&&V.forEach(function(e){je+='<option value="'.concat(e,'">').concat(e,"</option>")}),Oe='\n <div class="row _mgsPerPageSearch"> \n '.concat(ne?'<div class="_mgsPerPageStyle"> \n <span>Show</span>\n <select class="_mgsPerPageLimit form-control" name="_mgsPerPageLimit" style="width:100px !important">'.concat(je,"</select>\n </div>"):"","\n ").concat(te?'<div class="_mgsSearchStyle"> \n <span>Search</span> \n <input type="text" class="form-control _mgsSearchAnyField" name="_mgsSearchAnyField" value="'.concat(W,'" placeholder="Search any field...">\n </div> '):"","\n </div>\n "),se.insertAdjacentHTML("beforebegin",Oe),(ke=document.querySelector("._mgsPerPageSearch"))&&(ke.style.display="flex",ke.style.justifyContent="space-between",ke.style.alignItems="center",ke.style.gap="10px",ke.style.paddingLeft="14px",ke.style.paddingRight="14px",ke.style.marginBottom="10px",(Ee=ke.querySelector('input[type="search"]'))&&(Ee.style.flex="1",Ee.style.padding="6px 10px",Ee.style.border="1px solid #ccc",Ee.style.borderRadius="4px"),(Ce=ke.querySelector("select"))&&(Ce.style.padding="6px 10px",Ce.style.border="1px solid #ccc",Ce.style.borderRadius="4px"))),(Ae=document.createElement("table")).style.cssText="\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n padding: 10px 5px;\n vertical-align: top;\n border: 1px solid rgb(222, 226, 230);\n background-color: #fff;\n color: #212529;\n border-collapse: collapse;\n ",Ie=document.createElement("thead"),Me=document.createElement("tr"),Pe.forEach(function(e,t){e=p(e);var n=document.createElement("th");(null==xe?void 0:xe.length)>0&&ie&&n.classList.add("_mgsSort"),ie?(n.setAttribute("data-column",t),Y&&t==Y&&"desc"==Z?(n.setAttribute("data-sort","desc"),n.innerHTML="".concat(e,' <i class="fa fa-arrow-down" style="font-size:10px !important"></i>')):(n.setAttribute("data-sort","asc"),n.innerHTML="".concat(e,' <i class="fa fa-arrow-up" style="font-size:10px !important"></i>'))):n.innerHTML=e,n.style.cssText="\n background-color: #f8f9fa;\n font-weight: bold;\n cursor: ".concat((null==xe?void 0:xe.length)>0?"pointer":"not-allowed",";\n width: 150px;\n min-width: 150px;\n max-width: 150px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 2px;\n border-top: 1px solid rgb(222, 226, 230);\n "),Me.appendChild(n)}),Ie.appendChild(Me),Ae.appendChild(Ie),He=document.createElement("tbody"),(null==xe?void 0:xe.length)>0?xe.forEach(function(e,t){var n=document.createElement("tr");Pe.forEach(function(t){var o=document.createElement("td");o.style.cssText="\n width: 150px;\n min-width: 150px;\n max-width: 150px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 2px;\n border-top: 1px solid rgb(222, 226, 230);\n ",o.innerHTML=e[t],o.title=e[t],n.appendChild(o)}),He.appendChild(n)}):(De=document.createElement("tr"),(Ne=document.createElement("td")).innerHTML="Data not Found",Ne.setAttribute("colspan",null==Pe?void 0:Pe.length),Ne.style.cssText="\n width: 100%;\n padding: 2px;\n border-top: 1px solid rgb(222, 226, 230);\n text-align: center;\n color:red;\n ",De.appendChild(Ne),He.appendChild(De)),Ae.appendChild(He),se.innerHTML="",se.appendChild(Ae),setTimeout(function(){pe.remove()},500),d++,Re="",Te>0)for((qe=document.createElement("style")).textContent="\n ._mgsPagination {\n display: flex;\n list-style: none;\n padding: 0;\n gap: 6px;\n }\n ._mgsPageItem {\n display: inline-block;\n }\n ._mgsPageLink {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 36px;\n padding: 0 10px;\n border: 1px solid #0ec6d5;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #0ec6d5;\n text-decoration: none;\n transition: all 0.2s ease-in-out;\n }\n ._mgsPageLink:hover {\n background-color: #0ec6d5;\n color: #fff;\n }\n ._mgsPageItem.active ._mgsPageLink {\n background-color: #0ec6d5;\n color: #fff;\n border-color: #0ec6d5;\n }\n ._mgsPageItem.disabled ._mgsPageLink {\n border-color: #ccc;\n color: #ccc;\n pointer-events: none;\n cursor: not-allowed;\n }\n ",document.head.appendChild(qe),Fe=!0,ze=0;ze<Te;ze++)Ge=n({0:"ยซ Previous"},Te-1,"Next ยป"),Ue=Ge[ze]?Ge[ze]:ze,Be="ยซ Previous"==Ge[ze]?ee:"Next ยป"==Ge[ze]?$:ze,Je=null==Be?"cursor: not-allowed !important;":"cursor: pointer !important;",Xe=null==Be?"disabled":Be==K?"active":"",Ke=Ue,2==Te&&(Be=null,Xe="disabled"),Se>5&&["ยซ Previous",1,2,3,"Next ยป"].includes(Ue)&&K<3?(Ke=Ue,Re+='<li class="_mgsPageItem '.concat(Xe,'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="').concat(Be,'">').concat(Ke,"</a>\n </li>")):Se>5&&K>2?(Xe=null==Be?"disabled":Be+1==K?"active":"",Ke=K>=3&&!["ยซ Previous","Next ยป"].includes(Ue)?Ue+1:Ue,1==ze?Re+='<li class="_mgsPageItem '.concat(Xe,'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="1">1</a>\n </li>'):K-1<=ze&&K>=ze&&ze<=K+1&&ze<Se-2&&!["ยซ Previous","Next ยป"].includes(Ue)?Re+='<li class="_mgsPageItem '.concat(Xe,'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="').concat(Be+1,'">').concat(Ke,"</a>\n </li>"):Se>5&&ze>3&&ze<Se-1&&!["ยซ Previous","Next ยป"].includes(Ue)?Fe&&(Fe=!1,Ke="...",Re+='<li class="_mgsPageItem '.concat(Xe,'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="').concat(Be+1,'">').concat(Ke,"</a>\n </li>")):(Ke=Ue,Re+='<li class="_mgsPageItem '.concat(Xe=null==Be?"disabled":Be==K?"active":"",'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="').concat(Be,'">').concat(Ke,"</a>\n </li>"))):Se>5&&ze>3&&ze<Se-1&&!["ยซ Previous","Next ยป"].includes(Ue)?Fe&&(Fe=!1,Ke="...",Re+='<li class="_mgsPageItem '.concat(Xe,'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="').concat(Be,'">').concat(Ke,"</a>\n </li>")):(Ke=Ue,Re+='<li class="_mgsPageItem '.concat(Xe,'" style="').concat(Je,'">\n <a class="_mgsPageLink" data-mxpage="').concat(Se,'" href="').concat(Be,'">').concat(Ke,"</a>\n </li>"));Qe='\n <div class="row _mgsPaginateResult">\n '.concat(oe?"<div>Showing ".concat(we," to ").concat(_e," of ").concat(Le," results</div>"):"","\n ").concat(re?'<div style="margin-top:10px;"> \n <ul class="mgsPagination" style="margin-left: auto !important"> \n '.concat(Re,"\n </ul> \n </div> "):"","\n </div>"),se.insertAdjacentHTML("afterend",Qe),(Ve=document.querySelector("._mgsPaginateResult"))&&(Ve.style.display="flex",Ve.style.justifyContent="space-between",Ve.style.alignItems="center",Ve.style.gap="10px",Ve.style.paddingLeft="14px",Ve.style.paddingRight="14px"),e.n=7;break;case 6:e.p=6,Ye=e.v,We='\n <div class="row" style="text-align: center; display: block; margin: 10px auto; font-weight: bold; margin-top:50px;"> \n <p>Error Message : <span style=\'color: red; margin-left:10px;\'>'.concat(Ye.message,"</span></p>\n </div>\n "),se.innerHTML="",se.insertAdjacentHTML("beforebegin",We),pe.remove();case 7:return e.a(2)}},e,null,[[3,6]])}),function(){var n=this,o=arguments;return new Promise(function(r,i){var a=e.apply(n,o);function l(e){t(a,r,i,l,c,"next",e)}function c(e){t(a,r,i,l,c,"throw",e)}l(void 0)})});return function(e){return o.apply(this,arguments)}}();function p(e){return e.replace(/_/g," ").replace(/\b\w/g,function(e){return e.toUpperCase()})}document.addEventListener("click",function(e){var t=e.target.closest("._mgsPageItem");if(t){e.preventDefault(),t.textContent.trim();var n=t.querySelector("._mgsPageLink"),o=null==n?void 0:n.getAttribute("href"),r=null==n?void 0:n.getAttribute("data-mxpage");if(!o||"null"===o)return n.setAttribute("disabled",!0),void(n.style.cssText="cursor: not-allowed !important;");var i=parseInt(o),a=i>=r?null:i+1,l=i<=1?null:i-1;null==n||n.setAttribute("href",a),n.style.cssText=null==a||null==l?"cursor: not-allowed !important;":"cursor: pointer !important;",u({page:i,prevPage:l,nextPage:a})}}),document.addEventListener("change",function(e){var t=e.target;if(t.classList.contains("_mgsPerPageLimit")){e.preventDefault();var n=parseInt(t.value,10);u({page:1,limit:n,prevPage:null,nextPage:null})}}),document.addEventListener("keyup",function(e){var t=e.target;if(t.classList.contains("_mgsSearchAnyField")&&(e.preventDefault(),"Enter"===e.key)){var n=t.value;document.querySelectorAll("._mgsSort").forEach(function(e){var t=p(e.textContent.trim());e.innerHTML="".concat(t,' <i class="fa fa-arrow-up" style="font-size:10px !important"></i>'),e.setAttribute("data-sort","asc")}),u({page:1,column:"",sort:"",search:n})}}),document.addEventListener("click",function(e){var t=e.target.closest("._mgsSort");if(t){e.preventDefault();var n=t.getAttribute("data-column"),o=t.getAttribute("data-sort");u({page:1,column:n,sort:"asc"===o?"desc":"asc"})}}),window.mgsDataTable=u,window._mgsCapitalizeFirstLetter=p,e._mgsCapitalizeFirstLetter=p,e.mgsDataTable=u,Object.defineProperty(e,"__esModule",{value:!0})});
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mgsdatatable",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"main": "dist/mgsdatatable.min.js",
|
|
5
|
+
"browser": "dist/mgsdatatable.min.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"description": "A lightweight and beginner-friendly JavaScript table generator with built-in pagination, sorting, searching, and row-limit controls. This library helps you quickly display tabular data with a clean, responsive design and minimal setup โ no external dependencies required. Simply pass your data array and the library will handle rendering, filtering, sorting, and page navigation automatically.",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"mgsdatatable",
|
|
10
|
+
"datatable",
|
|
11
|
+
"table",
|
|
12
|
+
"javascript",
|
|
13
|
+
"pagination",
|
|
14
|
+
"sorting",
|
|
15
|
+
"browser",
|
|
16
|
+
"UMD"
|
|
17
|
+
],
|
|
18
|
+
"homepage": "https://github.com/Mangeshwar22102022/mgsDataTable#readme",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/Mangeshwar22102022/mgsDataTable/issues"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/Mangeshwar22102022/mgsDataTable.git"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"author": "Mangesh",
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "rollup -c"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@babel/core": "^7.28.0",
|
|
33
|
+
"@babel/preset-env": "^7.28.0",
|
|
34
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
35
|
+
"rollup": "^2.79.2",
|
|
36
|
+
"rollup-plugin-terser": "^7.0.2"
|
|
37
|
+
}
|
|
38
|
+
}
|
package/rollup.config.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import babel from '@rollup/plugin-babel';
|
|
2
|
+
import { terser } from 'rollup-plugin-terser';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
input: 'src/index.js',
|
|
6
|
+
output: {
|
|
7
|
+
file: 'dist/mgsdatatable.min.js',
|
|
8
|
+
format: 'umd',
|
|
9
|
+
name: 'mgsDataTable',
|
|
10
|
+
},
|
|
11
|
+
plugins: [
|
|
12
|
+
babel({ babelHelpers: 'bundled' }),
|
|
13
|
+
terser()
|
|
14
|
+
]
|
|
15
|
+
};
|
package/src/index.js
ADDED
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
let _mgsCommonData = {
|
|
2
|
+
target : '',
|
|
3
|
+
url : '',
|
|
4
|
+
methodType : 'post',
|
|
5
|
+
data : {},
|
|
6
|
+
pageLimits : [10,20,30,50,100],
|
|
7
|
+
page : 1,
|
|
8
|
+
limit : 10,
|
|
9
|
+
column : '',
|
|
10
|
+
sort : 'asc',
|
|
11
|
+
search: '',
|
|
12
|
+
prevPage: null,
|
|
13
|
+
nextPage: null,
|
|
14
|
+
isSearch: true,
|
|
15
|
+
isLimit: true,
|
|
16
|
+
isResult: true,
|
|
17
|
+
isPagination: true,
|
|
18
|
+
isSorting: true,
|
|
19
|
+
}
|
|
20
|
+
let _mgsCountsCheck = 0;
|
|
21
|
+
const mgsDataTable = async (data) => {
|
|
22
|
+
_mgsCommonData = {..._mgsCommonData, ...data};
|
|
23
|
+
if(!_mgsCommonData?.target){
|
|
24
|
+
alert('Target is requied.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if(!_mgsCommonData?.url){
|
|
28
|
+
alert('URL is requied.');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let _mgsTarget = _mgsCommonData?.target;
|
|
32
|
+
let _mgsFullUrl = _mgsCommonData?.url ?? '/';
|
|
33
|
+
let { token, ...allData} = {..._mgsCommonData?.data};
|
|
34
|
+
let methodType = _mgsCommonData?.methodType;
|
|
35
|
+
let page = _mgsCommonData?.page ?? 1;
|
|
36
|
+
let limit = _mgsCommonData?.limit ?? 10;
|
|
37
|
+
let pageLimits = _mgsCommonData?.pageLimits ?? [10,20,30,50,100];
|
|
38
|
+
let search = _mgsCommonData?.search;
|
|
39
|
+
let column = _mgsCommonData?.column;
|
|
40
|
+
let sort = _mgsCommonData?.sort;
|
|
41
|
+
let nextPage = _mgsCommonData?.nextPage ?? null;
|
|
42
|
+
let prevPage = _mgsCommonData?.prevPage ?? null;
|
|
43
|
+
let isSearch = _mgsCommonData?.isSearch ?? true;
|
|
44
|
+
let isLimit = _mgsCommonData?.isLimit ?? true;
|
|
45
|
+
let isResult = _mgsCommonData?.isResult ?? true;
|
|
46
|
+
let isPagination = _mgsCommonData?.isPagination ?? true;
|
|
47
|
+
let isSorting = _mgsCommonData?.isSorting ?? true;
|
|
48
|
+
|
|
49
|
+
allData = { ...allData, page, limit }
|
|
50
|
+
if (search != null && search != undefined && search.trim() != '') {
|
|
51
|
+
allData = { ...allData, search }
|
|
52
|
+
}
|
|
53
|
+
if (column != null && column != undefined && column.trim() != '') {
|
|
54
|
+
allData = { ...allData, column, sort }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const _mgsIsPost = methodType.toLowerCase() === 'post';
|
|
58
|
+
// Prepare headers and body
|
|
59
|
+
const headers = new Headers();
|
|
60
|
+
headers.append("Content-Type", "application/json");
|
|
61
|
+
if (_mgsIsPost) headers.append("X-CSRF-Token", token);
|
|
62
|
+
|
|
63
|
+
const _mgsOptions = {
|
|
64
|
+
method: _mgsCommonData?.methodType,
|
|
65
|
+
headers: headers,
|
|
66
|
+
body: JSON.stringify(allData)
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// Clean up previous results
|
|
70
|
+
const _mgsContainer = document.querySelector(_mgsTarget);
|
|
71
|
+
const nextPaginate = _mgsContainer.nextElementSibling;
|
|
72
|
+
if (nextPaginate && nextPaginate.classList.contains('_mgsPaginateResult')) {
|
|
73
|
+
nextPaginate.remove();
|
|
74
|
+
}
|
|
75
|
+
const tbody = _mgsContainer.querySelector('tbody');
|
|
76
|
+
if (tbody) tbody.remove();
|
|
77
|
+
|
|
78
|
+
// Initial setup for first time
|
|
79
|
+
const spinner = document.createElement('div');
|
|
80
|
+
spinner.className = '_mgsSpinner';
|
|
81
|
+
spinner.innerHTML = `<i class="fa fa-spinner fa-spin"></i> Loading...`;
|
|
82
|
+
spinner.style.cssText = `
|
|
83
|
+
position: fixed;
|
|
84
|
+
z-index: 1031;
|
|
85
|
+
width: 70%;
|
|
86
|
+
height: 30%;
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: center;
|
|
89
|
+
align-items: center;
|
|
90
|
+
font-size: 20px;
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
const _mgsResponse = await fetch(_mgsFullUrl, _mgsOptions);
|
|
95
|
+
const _mgsResp = await _mgsResponse.json();
|
|
96
|
+
const _mgsResult = _mgsResp?.data ?? [];
|
|
97
|
+
const _mgsOutput = _mgsResp?.data?.data ?? [];
|
|
98
|
+
const _mgsColumn = _mgsResp?.column ?? [];
|
|
99
|
+
const _from = (_mgsResult?.from != undefined && _mgsResult?.from != null && _mgsResult?.from != '')?_mgsResult?.from :0;
|
|
100
|
+
const _to = (_mgsResult?.to != undefined && _mgsResult?.to != null && _mgsResult?.to != '')?_mgsResult?.to :0;
|
|
101
|
+
const _total = (_mgsResult?.total != undefined && _mgsResult?.total != null && _mgsResult?.total != '')?_mgsResult?.total :0;
|
|
102
|
+
const _mgsTotalPage = Math.ceil(_total/limit);
|
|
103
|
+
const _mgsPagination = (_mgsTotalPage+2);
|
|
104
|
+
nextPage = (_mgsTotalPage > 0 && nextPage == null && prevPage == null)? 2 : nextPage;
|
|
105
|
+
|
|
106
|
+
//create limit and search
|
|
107
|
+
_mgsContainer.insertAdjacentElement('beforebegin', spinner);
|
|
108
|
+
if (_mgsCountsCheck == 0 && (isSearch || isLimit)) {
|
|
109
|
+
let pageLimitData = '';
|
|
110
|
+
if(isLimit){
|
|
111
|
+
pageLimits.forEach(element => {
|
|
112
|
+
pageLimitData += `<option value="${element}">${element}</option>`;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const _mgsPerPageSearch = `
|
|
117
|
+
<div class="row _mgsPerPageSearch">
|
|
118
|
+
${isLimit ? `<div class="_mgsPerPageStyle">
|
|
119
|
+
<span>Show</span>
|
|
120
|
+
<select class="_mgsPerPageLimit form-control" name="_mgsPerPageLimit" style="width:100px !important">${pageLimitData}</select>
|
|
121
|
+
</div>`:``}
|
|
122
|
+
${isSearch ? `<div class="_mgsSearchStyle">
|
|
123
|
+
<span>Search</span>
|
|
124
|
+
<input type="text" class="form-control _mgsSearchAnyField" name="_mgsSearchAnyField" value="${search}" placeholder="Search any field...">
|
|
125
|
+
</div> `:``}
|
|
126
|
+
</div>
|
|
127
|
+
`;
|
|
128
|
+
_mgsContainer.insertAdjacentHTML('beforebegin', _mgsPerPageSearch);
|
|
129
|
+
const target = document.querySelector('._mgsPerPageSearch');
|
|
130
|
+
if (target) {
|
|
131
|
+
target.style.display = 'flex';
|
|
132
|
+
target.style.justifyContent = 'space-between';
|
|
133
|
+
target.style.alignItems = 'center';
|
|
134
|
+
target.style.gap = '10px';
|
|
135
|
+
target.style.paddingLeft = '14px';
|
|
136
|
+
target.style.paddingRight = '14px';
|
|
137
|
+
target.style.marginBottom = '10px';
|
|
138
|
+
|
|
139
|
+
// Optional: style search input
|
|
140
|
+
const searchInput = target.querySelector('input[type="search"]');
|
|
141
|
+
if (searchInput) {
|
|
142
|
+
searchInput.style.flex = '1';
|
|
143
|
+
searchInput.style.padding = '6px 10px';
|
|
144
|
+
searchInput.style.border = '1px solid #ccc';
|
|
145
|
+
searchInput.style.borderRadius = '4px';
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Optional: style select dropdown
|
|
149
|
+
const select = target.querySelector('select');
|
|
150
|
+
if (select) {
|
|
151
|
+
select.style.padding = '6px 10px';
|
|
152
|
+
select.style.border = '1px solid #ccc';
|
|
153
|
+
select.style.borderRadius = '4px';
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
//create table
|
|
159
|
+
const _mgsCreateTable = document.createElement('table');
|
|
160
|
+
_mgsCreateTable.style.cssText = `
|
|
161
|
+
width: 100%;
|
|
162
|
+
min-width: 100%;
|
|
163
|
+
max-width: 100%;
|
|
164
|
+
padding: 10px 5px;
|
|
165
|
+
vertical-align: top;
|
|
166
|
+
border: 1px solid rgb(222, 226, 230);
|
|
167
|
+
background-color: #fff;
|
|
168
|
+
color: #212529;
|
|
169
|
+
border-collapse: collapse;
|
|
170
|
+
`;
|
|
171
|
+
|
|
172
|
+
// Create thead
|
|
173
|
+
const _mgsThead = document.createElement('thead');
|
|
174
|
+
const _mgsHeadRow = document.createElement('tr');
|
|
175
|
+
_mgsColumn.forEach((text, key) => {
|
|
176
|
+
text = _mgsCapitalizeFirstLetter (text);
|
|
177
|
+
const th = document.createElement('th');
|
|
178
|
+
if(_mgsOutput?.length > 0 && isSorting){
|
|
179
|
+
th.classList.add('_mgsSort');
|
|
180
|
+
}
|
|
181
|
+
if(isSorting){
|
|
182
|
+
th.setAttribute('data-column', key); // or actual key if mapping to backend
|
|
183
|
+
if (column && key == column && sort == 'desc') {
|
|
184
|
+
th.setAttribute('data-sort', 'desc');
|
|
185
|
+
th.innerHTML = `${text} <i class="fa fa-arrow-down" style="font-size:10px !important"></i>`;
|
|
186
|
+
}else{
|
|
187
|
+
th.setAttribute('data-sort', 'asc');
|
|
188
|
+
th.innerHTML = `${text} <i class="fa fa-arrow-up" style="font-size:10px !important"></i>`;
|
|
189
|
+
}
|
|
190
|
+
}else{
|
|
191
|
+
th.innerHTML = text;
|
|
192
|
+
}
|
|
193
|
+
th.style.cssText = `
|
|
194
|
+
background-color: #f8f9fa;
|
|
195
|
+
font-weight: bold;
|
|
196
|
+
cursor: ${(_mgsOutput?.length > 0)?'pointer':'not-allowed'};
|
|
197
|
+
width: 150px;
|
|
198
|
+
min-width: 150px;
|
|
199
|
+
max-width: 150px;
|
|
200
|
+
white-space: nowrap;
|
|
201
|
+
overflow: hidden;
|
|
202
|
+
text-overflow: ellipsis;
|
|
203
|
+
padding: 2px;
|
|
204
|
+
border-top: 1px solid rgb(222, 226, 230);
|
|
205
|
+
`;
|
|
206
|
+
_mgsHeadRow.appendChild(th);
|
|
207
|
+
});
|
|
208
|
+
_mgsThead.appendChild(_mgsHeadRow);
|
|
209
|
+
_mgsCreateTable.appendChild(_mgsThead);
|
|
210
|
+
|
|
211
|
+
// Create tbody
|
|
212
|
+
const _mgsTbody = document.createElement('tbody');
|
|
213
|
+
if(_mgsOutput?.length > 0){
|
|
214
|
+
_mgsOutput.forEach((text, key) => {
|
|
215
|
+
let _createRow = document.createElement('tr');
|
|
216
|
+
_mgsColumn.forEach(col => {
|
|
217
|
+
let td = document.createElement('td');
|
|
218
|
+
td.style.cssText = `
|
|
219
|
+
width: 150px;
|
|
220
|
+
min-width: 150px;
|
|
221
|
+
max-width: 150px;
|
|
222
|
+
white-space: nowrap;
|
|
223
|
+
overflow: hidden;
|
|
224
|
+
text-overflow: ellipsis;
|
|
225
|
+
padding: 2px;
|
|
226
|
+
border-top: 1px solid rgb(222, 226, 230);
|
|
227
|
+
`;
|
|
228
|
+
td.innerHTML = text[col];
|
|
229
|
+
td.title = text[col];
|
|
230
|
+
_createRow.appendChild(td);
|
|
231
|
+
});
|
|
232
|
+
_mgsTbody.appendChild(_createRow);
|
|
233
|
+
});
|
|
234
|
+
}else{
|
|
235
|
+
let _createRow = document.createElement('tr');
|
|
236
|
+
let td = document.createElement('td');
|
|
237
|
+
td.innerHTML = 'Data not Found';
|
|
238
|
+
td.setAttribute('colspan', _mgsColumn?.length)
|
|
239
|
+
td.style.cssText = `
|
|
240
|
+
width: 100%;
|
|
241
|
+
padding: 2px;
|
|
242
|
+
border-top: 1px solid rgb(222, 226, 230);
|
|
243
|
+
text-align: center;
|
|
244
|
+
color:red;
|
|
245
|
+
`;
|
|
246
|
+
_createRow.appendChild(td);
|
|
247
|
+
_mgsTbody.appendChild(_createRow);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
_mgsCreateTable.appendChild(_mgsTbody);
|
|
251
|
+
|
|
252
|
+
// Append the table to the container
|
|
253
|
+
_mgsContainer.innerHTML = ''; // clear previous content
|
|
254
|
+
_mgsContainer.appendChild(_mgsCreateTable);
|
|
255
|
+
|
|
256
|
+
setTimeout(() => {
|
|
257
|
+
spinner.remove();
|
|
258
|
+
}, 500);
|
|
259
|
+
|
|
260
|
+
_mgsCountsCheck++;
|
|
261
|
+
let _mgsPaginationHtml = ``;
|
|
262
|
+
if (_mgsPagination > 0) {
|
|
263
|
+
let style = document.createElement('style');
|
|
264
|
+
style.textContent = `
|
|
265
|
+
._mgsPagination {
|
|
266
|
+
display: flex;
|
|
267
|
+
list-style: none;
|
|
268
|
+
padding: 0;
|
|
269
|
+
gap: 6px;
|
|
270
|
+
}
|
|
271
|
+
._mgsPageItem {
|
|
272
|
+
display: inline-block;
|
|
273
|
+
}
|
|
274
|
+
._mgsPageLink {
|
|
275
|
+
display: flex;
|
|
276
|
+
align-items: center;
|
|
277
|
+
justify-content: center;
|
|
278
|
+
min-width: 36px;
|
|
279
|
+
height: 36px;
|
|
280
|
+
padding: 0 10px;
|
|
281
|
+
border: 1px solid #0ec6d5;
|
|
282
|
+
border-radius: 6px;
|
|
283
|
+
font-size: 14px;
|
|
284
|
+
font-weight: 500;
|
|
285
|
+
color: #0ec6d5;
|
|
286
|
+
text-decoration: none;
|
|
287
|
+
transition: all 0.2s ease-in-out;
|
|
288
|
+
}
|
|
289
|
+
._mgsPageLink:hover {
|
|
290
|
+
background-color: #0ec6d5;
|
|
291
|
+
color: #fff;
|
|
292
|
+
}
|
|
293
|
+
._mgsPageItem.active ._mgsPageLink {
|
|
294
|
+
background-color: #0ec6d5;
|
|
295
|
+
color: #fff;
|
|
296
|
+
border-color: #0ec6d5;
|
|
297
|
+
}
|
|
298
|
+
._mgsPageItem.disabled ._mgsPageLink {
|
|
299
|
+
border-color: #ccc;
|
|
300
|
+
color: #ccc;
|
|
301
|
+
pointer-events: none;
|
|
302
|
+
cursor: not-allowed;
|
|
303
|
+
}
|
|
304
|
+
`;
|
|
305
|
+
document.head.appendChild(style);
|
|
306
|
+
let _mgsCheckCreate = true;
|
|
307
|
+
for (let _mgsIndex = 0; _mgsIndex < _mgsPagination; _mgsIndex++) {
|
|
308
|
+
let _mgsPrevNextPage = {0:'ยซ Previous', [_mgsPagination-1]:'Next ยป'};
|
|
309
|
+
let _mgsLabel = (_mgsPrevNextPage[_mgsIndex])?_mgsPrevNextPage[_mgsIndex]:_mgsIndex;
|
|
310
|
+
let _mgsPage = (_mgsPrevNextPage[_mgsIndex] == 'ยซ Previous')?prevPage:((_mgsPrevNextPage[_mgsIndex] == 'Next ยป')? nextPage :_mgsIndex);
|
|
311
|
+
let _mgsCursorStye = (_mgsPage == null)?`cursor: not-allowed !important;`:`cursor: pointer !important;`;
|
|
312
|
+
let _mgsActiveDisablePage = (_mgsPage == null)?'disabled':((_mgsPage == page)?'active':'');
|
|
313
|
+
let _mgsMoreThenFive = _mgsLabel;
|
|
314
|
+
if(_mgsPagination == 2){
|
|
315
|
+
_mgsPage = null;
|
|
316
|
+
_mgsActiveDisablePage = 'disabled';
|
|
317
|
+
}
|
|
318
|
+
if(_mgsTotalPage > 5 && ['ยซ Previous',1,2,3,'Next ยป'].includes(_mgsLabel) && page < 3){
|
|
319
|
+
_mgsMoreThenFive = _mgsLabel;
|
|
320
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
321
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="${_mgsPage}">${_mgsMoreThenFive}</a>
|
|
322
|
+
</li>`;
|
|
323
|
+
}else if(_mgsTotalPage > 5 && page > 2){
|
|
324
|
+
_mgsActiveDisablePage = (_mgsPage == null)?'disabled':((_mgsPage+1 == page)?'active':'');
|
|
325
|
+
_mgsMoreThenFive = (page >= 3 && !['ยซ Previous','Next ยป'].includes(_mgsLabel))?_mgsLabel+1:_mgsLabel;
|
|
326
|
+
if(_mgsIndex == 1){
|
|
327
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
328
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="1">1</a>
|
|
329
|
+
</li>`;
|
|
330
|
+
}else if((page-1) <= _mgsIndex && page >= _mgsIndex && _mgsIndex <= (page+1) && _mgsIndex < (_mgsTotalPage-2) && !['ยซ Previous','Next ยป'].includes(_mgsLabel)){
|
|
331
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
332
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="${_mgsPage+1}">${_mgsMoreThenFive}</a>
|
|
333
|
+
</li>`;
|
|
334
|
+
}else if(_mgsTotalPage > 5 && _mgsIndex > 3 && _mgsIndex < _mgsTotalPage-1 && !['ยซ Previous','Next ยป'].includes(_mgsLabel)){
|
|
335
|
+
if(_mgsCheckCreate){
|
|
336
|
+
_mgsCheckCreate = false;
|
|
337
|
+
_mgsMoreThenFive = '...';
|
|
338
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
339
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="${_mgsPage+1}">${_mgsMoreThenFive}</a>
|
|
340
|
+
</li>`;
|
|
341
|
+
}
|
|
342
|
+
}else {
|
|
343
|
+
_mgsActiveDisablePage = (_mgsPage == null)?'disabled':((_mgsPage == page)?'active':'');
|
|
344
|
+
_mgsMoreThenFive = _mgsLabel;
|
|
345
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
346
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="${_mgsPage}">${_mgsMoreThenFive}</a>
|
|
347
|
+
</li>`;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
}else if(_mgsTotalPage > 5 && _mgsIndex > 3 && _mgsIndex < _mgsTotalPage-1 && !['ยซ Previous','Next ยป'].includes(_mgsLabel)){
|
|
351
|
+
if(_mgsCheckCreate){
|
|
352
|
+
_mgsCheckCreate = false;
|
|
353
|
+
_mgsMoreThenFive = '...';
|
|
354
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
355
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="${_mgsPage}">${_mgsMoreThenFive}</a>
|
|
356
|
+
</li>`;
|
|
357
|
+
}
|
|
358
|
+
}else{
|
|
359
|
+
_mgsMoreThenFive = _mgsLabel;
|
|
360
|
+
_mgsPaginationHtml += `<li class="_mgsPageItem ${_mgsActiveDisablePage}" style="${_mgsCursorStye}">
|
|
361
|
+
<a class="_mgsPageLink" data-mxpage="${_mgsTotalPage}" href="${_mgsPage}">${_mgsMoreThenFive}</a>
|
|
362
|
+
</li>`;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
const paginationResult = `
|
|
368
|
+
<div class="row _mgsPaginateResult">
|
|
369
|
+
${isResult ? `<div>Showing ${_from} to ${_to} of ${_total} results</div>`:``}
|
|
370
|
+
${isPagination? `<div style="margin-top:10px;">
|
|
371
|
+
<ul class="mgsPagination" style="margin-left: auto !important">
|
|
372
|
+
${_mgsPaginationHtml}
|
|
373
|
+
</ul>
|
|
374
|
+
</div> `:``}
|
|
375
|
+
</div>`;
|
|
376
|
+
_mgsContainer.insertAdjacentHTML('afterend', paginationResult);
|
|
377
|
+
const target = document.querySelector('._mgsPaginateResult');
|
|
378
|
+
if (target) {
|
|
379
|
+
target.style.display = 'flex';
|
|
380
|
+
target.style.justifyContent = 'space-between';
|
|
381
|
+
target.style.alignItems = 'center';
|
|
382
|
+
target.style.gap = '10px';
|
|
383
|
+
target.style.paddingLeft = '14px';
|
|
384
|
+
target.style.paddingRight = '14px';
|
|
385
|
+
}
|
|
386
|
+
} catch (error) {
|
|
387
|
+
const _mgsErrorMessage = `
|
|
388
|
+
<div class="row" style="text-align: center; display: block; margin: 10px auto; font-weight: bold; margin-top:50px;">
|
|
389
|
+
<p>Error Message : <span style='color: red; margin-left:10px;'>${error.message}</span></p>
|
|
390
|
+
</div>
|
|
391
|
+
`;
|
|
392
|
+
_mgsContainer.innerHTML = '';
|
|
393
|
+
_mgsContainer.insertAdjacentHTML('beforebegin', _mgsErrorMessage);
|
|
394
|
+
spinner.remove();
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
//for per page
|
|
399
|
+
document.addEventListener('click', function (e) {
|
|
400
|
+
const target = e.target.closest('._mgsPageItem');
|
|
401
|
+
if (!target) return;
|
|
402
|
+
e.preventDefault();
|
|
403
|
+
let page = target.textContent.trim();
|
|
404
|
+
const pageLink = target.querySelector('._mgsPageLink');
|
|
405
|
+
const href = pageLink?.getAttribute('href');
|
|
406
|
+
const totalPage = pageLink?.getAttribute('data-mxpage');
|
|
407
|
+
if (href && href !== 'null') {
|
|
408
|
+
let page = parseInt(href);
|
|
409
|
+
let nextPage = (page >= totalPage)?null:page+1;
|
|
410
|
+
let prevPage = (page <= 1)?null:page-1;
|
|
411
|
+
pageLink?.setAttribute('href', nextPage);
|
|
412
|
+
if(nextPage == null || prevPage == null){
|
|
413
|
+
pageLink.style.cssText = `cursor: not-allowed !important;`;
|
|
414
|
+
}else{
|
|
415
|
+
pageLink.style.cssText = `cursor: pointer !important;`;
|
|
416
|
+
}
|
|
417
|
+
mgsDataTable({page, prevPage, nextPage});
|
|
418
|
+
}else{
|
|
419
|
+
pageLink.setAttribute('disabled', true);
|
|
420
|
+
pageLink.style.cssText = `cursor: not-allowed !important;`;
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
//for limit
|
|
426
|
+
document.addEventListener('change', function (e) {
|
|
427
|
+
const target = e.target;
|
|
428
|
+
if (target.classList.contains('_mgsPerPageLimit')) {
|
|
429
|
+
e.preventDefault();
|
|
430
|
+
let limit = parseInt(target.value, 10);
|
|
431
|
+
let page = 1;
|
|
432
|
+
let prevPage = null;
|
|
433
|
+
let nextPage = null;
|
|
434
|
+
mgsDataTable({page,limit, prevPage, nextPage});
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
//for searching
|
|
439
|
+
document.addEventListener('keyup', function (e) {
|
|
440
|
+
const target = e.target;
|
|
441
|
+
if (target.classList.contains('_mgsSearchAnyField')) {
|
|
442
|
+
e.preventDefault();
|
|
443
|
+
if(e.key === "Enter"){
|
|
444
|
+
let search = target.value;
|
|
445
|
+
let page = 1;
|
|
446
|
+
let column = '';
|
|
447
|
+
let sort = '';
|
|
448
|
+
document.querySelectorAll('._mgsSort').forEach((el) => {
|
|
449
|
+
const text = _mgsCapitalizeFirstLetter (el.textContent.trim());
|
|
450
|
+
el.innerHTML = `${text} <i class="fa fa-arrow-up" style="font-size:10px !important"></i>`;
|
|
451
|
+
el.setAttribute('data-sort', 'asc');
|
|
452
|
+
});
|
|
453
|
+
mgsDataTable({page,column, sort, search});
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
//for sorting
|
|
459
|
+
document.addEventListener('click', function (e) {
|
|
460
|
+
const target = e.target.closest('._mgsSort');
|
|
461
|
+
if (!target) return;
|
|
462
|
+
e.preventDefault();
|
|
463
|
+
const page = 1;
|
|
464
|
+
const column = target.getAttribute('data-column');
|
|
465
|
+
const columnSortType = target.getAttribute('data-sort');
|
|
466
|
+
let sort = columnSortType === 'asc'?'desc':'asc';
|
|
467
|
+
mgsDataTable({page, column, sort});
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
// string to convert first letter of a string to uppercase
|
|
471
|
+
function _mgsCapitalizeFirstLetter(str) {
|
|
472
|
+
const capitalized = str.replace(/_/g,' ').replace(/\b\w/g, function(match) {return match.toUpperCase();});
|
|
473
|
+
return capitalized;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// Export globally for UMD/IIFE
|
|
477
|
+
window.mgsDataTable = mgsDataTable;
|
|
478
|
+
window._mgsCapitalizeFirstLetter = _mgsCapitalizeFirstLetter ;
|
|
479
|
+
|
|
480
|
+
// If using modules
|
|
481
|
+
export { mgsDataTable, _mgsCapitalizeFirstLetter };
|