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 ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "presets": ["@babel/preset-env"]
3
+ }
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> &nbsp; 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
+ }
@@ -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> &nbsp; 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 };