mgsdatatable 1.1.2 β 1.1.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/README.md +174 -29
- package/package.json +1 -1
- package/src/index.js +88 -30
package/README.md
CHANGED
|
@@ -9,14 +9,164 @@ All functions are globally accessible via window.
|
|
|
9
9
|
## β¨ Features
|
|
10
10
|
|
|
11
11
|
- π **Search** β Filter rows you type then enter keyword.
|
|
12
|
-
- β
|
|
12
|
+
- β **Sorting** β Click column headers to sort (ascending/descending).
|
|
13
13
|
- π **Pagination** β Navigate between pages easily.
|
|
14
14
|
- π **Rows Limit** β Set how many rows appear per page.
|
|
15
|
-
- π¨ **
|
|
15
|
+
- π¨ **Result summary** β (e.g. Showing 1β10 of 50).
|
|
16
|
+
- π¨ **Custom Serial Number** β (e.g. Sr.No.).
|
|
16
17
|
- π¦ **No Dependencies** β Works in all modern browsers.
|
|
17
18
|
|
|
18
19
|
---
|
|
19
20
|
|
|
21
|
+
## Function Uses
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
<div id="myTable"> </div>
|
|
25
|
+
<script>
|
|
26
|
+
mgsDataTable({
|
|
27
|
+
target: "#myTable", // Required
|
|
28
|
+
url: "http://localhost/mgs/users", // Required
|
|
29
|
+
data: {}, // Optional, if use laravel then send Laravel CSRF Token {token: "{{csrf_token()}}"}, if use api with Bearer Token (Auth API) to send {bearerToken: 'bearerToken'} other wise No auth / extra filters to send your data.
|
|
30
|
+
pageLimits:[2,3,4,5], // Optional, default: [10,20,30,50,100]
|
|
31
|
+
isLimit: true, // Optional, default: true
|
|
32
|
+
isSearch: true, // Optional, default: true
|
|
33
|
+
isResult: true, // Optional, default: true
|
|
34
|
+
isPagination: true, // Optional, default: true
|
|
35
|
+
isSorting: true, // Optional, default: true
|
|
36
|
+
isSrno: true, // Optional, default: false
|
|
37
|
+
isSrnoText: "ID" // Optional, default: "Sr.No"
|
|
38
|
+
});
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
πExplanation of Each Option -
|
|
42
|
+
|
|
43
|
+
1 - target (string) β Required
|
|
44
|
+
|
|
45
|
+
The selector for the table where data will be rendered.
|
|
46
|
+
Example: "#myTable" or ".userTable"
|
|
47
|
+
Without this, the plugin wonβt know which table to build.
|
|
48
|
+
|
|
49
|
+
2 - url (string) β Required
|
|
50
|
+
API endpoint to fetch data.
|
|
51
|
+
Example: "http://localhost/mgs/users"
|
|
52
|
+
The API should return a JSON response.
|
|
53
|
+
Response -
|
|
54
|
+
{
|
|
55
|
+
"status": true,
|
|
56
|
+
"data": {
|
|
57
|
+
"column": [
|
|
58
|
+
"name",
|
|
59
|
+
"role",
|
|
60
|
+
"email",
|
|
61
|
+
"mobile",
|
|
62
|
+
"image",
|
|
63
|
+
"status",
|
|
64
|
+
"action"
|
|
65
|
+
],
|
|
66
|
+
"data": [
|
|
67
|
+
{
|
|
68
|
+
"id": 1,
|
|
69
|
+
"name": "Mangesh",
|
|
70
|
+
"role": "superadmin",
|
|
71
|
+
"email": "mangesh@gmail.com",
|
|
72
|
+
"mobile": "1234567890",
|
|
73
|
+
"image": "<img src='http://localhost/mgs/storage/user/1692380264.avif' style='height: 50px; width: 100px; border-radius: 50px;'>",
|
|
74
|
+
"status": "<span data-id='1' class='status badge badge-sm badge-success' data-status='Inactive'>Active</span>",
|
|
75
|
+
"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>"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": 2,
|
|
79
|
+
"name": "Ashwani",
|
|
80
|
+
"role": "superadmin",
|
|
81
|
+
"email": "ashwani@gmail.com",
|
|
82
|
+
"mobile": "1234567891",
|
|
83
|
+
"image": "<img src='http://localhost/mgs/storage/user/1692380264.avif' style='height: 50px; width: 100px; border-radius: 50px;'>",
|
|
84
|
+
"status": "<span data-id='2' class='status badge badge-sm badge-success' data-status='Inactive'>Active</span>",
|
|
85
|
+
"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>"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"from": 1,
|
|
89
|
+
"to": 10,
|
|
90
|
+
"total": 30
|
|
91
|
+
},
|
|
92
|
+
"message": "Data found"
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
3 - data (object) β Optional
|
|
96
|
+
|
|
97
|
+
Extra parameters sent with API requests.
|
|
98
|
+
Examples:
|
|
99
|
+
Laravel CSRF Token-
|
|
100
|
+
data: { token: "{{csrf_token()}}" }
|
|
101
|
+
|
|
102
|
+
Bearer Token (Auth API) -
|
|
103
|
+
data: { bearerToken: "yourAccessTokenHere" }
|
|
104
|
+
|
|
105
|
+
No auth / extra filters -
|
|
106
|
+
data: {}
|
|
107
|
+
|
|
108
|
+
4 - pageLimits (array) β Optional
|
|
109
|
+
|
|
110
|
+
Defines the dropdown options for "Items per page".
|
|
111
|
+
Default: [10, 20, 30, 50, 100]
|
|
112
|
+
Example: [2,3,4,5] β lets user pick 2, 3, 4, or 5 rows per page.
|
|
113
|
+
|
|
114
|
+
5 - isLimit (boolean) β Optional
|
|
115
|
+
|
|
116
|
+
Default: true
|
|
117
|
+
Example:
|
|
118
|
+
true β Shows the page limit dropdown.
|
|
119
|
+
false β Hides the page limit dropdown.
|
|
120
|
+
|
|
121
|
+
6 - isSearch (boolean) β Optional
|
|
122
|
+
|
|
123
|
+
Default: true
|
|
124
|
+
Shows/hides the search bar above the table.
|
|
125
|
+
Example:
|
|
126
|
+
true β search enabled.
|
|
127
|
+
false β no search bar.
|
|
128
|
+
|
|
129
|
+
7 - isResult (boolean) β Optional
|
|
130
|
+
|
|
131
|
+
Default: true
|
|
132
|
+
Shows/hides the result count summary (e.g., Showing 1β10 of 50).
|
|
133
|
+
Example:
|
|
134
|
+
true β Shows the result count summary.
|
|
135
|
+
false β Hides the result count summary.
|
|
136
|
+
|
|
137
|
+
8 - isPagination (boolean) β Optional
|
|
138
|
+
|
|
139
|
+
Default: true
|
|
140
|
+
Shows/hides pagination controls (next/previous buttons, page numbers).
|
|
141
|
+
Example:
|
|
142
|
+
true β Shows the pagination controls.
|
|
143
|
+
false β Hides the pagination controls.
|
|
144
|
+
|
|
145
|
+
9 - isSorting (boolean) β Optional
|
|
146
|
+
|
|
147
|
+
Default: true
|
|
148
|
+
Enables column sorting (clicking on header sorts ASC/DESC).
|
|
149
|
+
Example:
|
|
150
|
+
true β Enables column sorting.
|
|
151
|
+
false β Disables column sorting.
|
|
152
|
+
|
|
153
|
+
10 - isSrno (boolean) β Optional
|
|
154
|
+
|
|
155
|
+
Default: false
|
|
156
|
+
Adds a Serial Number column at the start of the table.
|
|
157
|
+
Numbers auto-increment row by row.
|
|
158
|
+
|
|
159
|
+
11 - isSrnoText (string) β Optional
|
|
160
|
+
|
|
161
|
+
Default: "Sr.No"
|
|
162
|
+
Lets you rename the serial number column header.
|
|
163
|
+
Example:
|
|
164
|
+
isSrno: true,
|
|
165
|
+
isSrnoText: "User ID"
|
|
166
|
+
Column header will show User ID instead of Sr.No.
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
|
|
20
170
|
## π Usage via CDN
|
|
21
171
|
|
|
22
172
|
```
|
|
@@ -24,25 +174,23 @@ All functions are globally accessible via window.
|
|
|
24
174
|
<html>
|
|
25
175
|
<head>
|
|
26
176
|
<title>mgsDataTable</title>
|
|
27
|
-
<script src="https://cdn.jsdelivr.net/npm/mgsdatatable@1.1.
|
|
177
|
+
<script src="https://cdn.jsdelivr.net/npm/mgsdatatable@1.1.3/dist/mgsdatatable.min.js"></script>
|
|
28
178
|
</head>
|
|
29
179
|
<body>
|
|
30
|
-
<
|
|
180
|
+
<div id="myTable"> </div>
|
|
31
181
|
<script>
|
|
32
182
|
mgsDataTable({
|
|
33
183
|
target: "#myTable", // Required
|
|
34
184
|
url: "http://localhost/mgs/users", // Required
|
|
35
|
-
data: {}, // Optional
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
isPagination: true, // Optional, default is true
|
|
45
|
-
isSorting: true // Optional, default is true
|
|
185
|
+
data: {}, // Optional, if use laravel then send Laravel CSRF Token {token: "{{csrf_token()}}"}, if use api with Bearer Token (Auth API) to send {bearerToken: 'bearerToken'} other wise No auth / extra filters to send your data.
|
|
186
|
+
pageLimits:[2,3,4,5], // Optional, default: [10,20,30,50,100]
|
|
187
|
+
isLimit: true, // Optional, default: true
|
|
188
|
+
isSearch: true, // Optional, default: true
|
|
189
|
+
isResult: true, // Optional, default: true
|
|
190
|
+
isPagination: true, // Optional, default: true
|
|
191
|
+
isSorting: true, // Optional, default: true
|
|
192
|
+
isSrno: true, // Optional, default: false
|
|
193
|
+
isSrnoText: "ID" // Optional, default: "Sr.No"
|
|
46
194
|
});
|
|
47
195
|
</script>
|
|
48
196
|
</body>
|
|
@@ -65,9 +213,8 @@ npm install mgsdatatable
|
|
|
65
213
|
<title>mgsDataTable</title>
|
|
66
214
|
</head>
|
|
67
215
|
<body>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
</div>
|
|
216
|
+
|
|
217
|
+
<div id="myTable"> </div>
|
|
71
218
|
|
|
72
219
|
<script type="module">
|
|
73
220
|
import mgsDataTable from 'mgsdatatable';
|
|
@@ -75,17 +222,15 @@ npm install mgsdatatable
|
|
|
75
222
|
mgsDataTable({
|
|
76
223
|
target: "#myTable", // Required
|
|
77
224
|
url: "http://localhost/mgs/users", // Required
|
|
78
|
-
data: {}, // Optional
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
isPagination: true, // Optional, default is true
|
|
88
|
-
isSorting: true // Optional, default is true
|
|
225
|
+
data: {}, // Optional, if use laravel then send Laravel CSRF Token {token: "{{csrf_token()}}"}, if use api with Bearer Token (Auth API) to send {bearerToken: 'bearerToken'} other wise No auth / extra filters to send your data.
|
|
226
|
+
pageLimits:[2,3,4,5], // Optional, default: [10,20,30,50,100]
|
|
227
|
+
isLimit: true, // Optional, default: true
|
|
228
|
+
isSearch: true, // Optional, default: true
|
|
229
|
+
isResult: true, // Optional, default: true
|
|
230
|
+
isPagination: true, // Optional, default: true
|
|
231
|
+
isSorting: true, // Optional, default: true
|
|
232
|
+
isSrno: true, // Optional, default: false
|
|
233
|
+
isSrnoText: "ID" // Optional, default: "Sr.No"
|
|
89
234
|
});
|
|
90
235
|
</script>
|
|
91
236
|
</body>
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -7,7 +7,7 @@ let _mgsCommonData = {
|
|
|
7
7
|
data : {},
|
|
8
8
|
pageLimits : [10,20,30,50,100],
|
|
9
9
|
page : 1,
|
|
10
|
-
limit :
|
|
10
|
+
limit : null,
|
|
11
11
|
column : '',
|
|
12
12
|
sort : 'asc',
|
|
13
13
|
search: '',
|
|
@@ -18,15 +18,17 @@ let _mgsCommonData = {
|
|
|
18
18
|
isResult: true,
|
|
19
19
|
isPagination: true,
|
|
20
20
|
isSorting: true,
|
|
21
|
+
isSrno: false,
|
|
22
|
+
isSrnoText:'Sr.No.'
|
|
21
23
|
}
|
|
22
24
|
const mgsDataTable = async (_mgsData) => {
|
|
23
25
|
_mgsCommonData = {..._mgsCommonData, ..._mgsData};
|
|
24
26
|
if(!_mgsCommonData?.target){
|
|
25
|
-
|
|
27
|
+
mgsNotifyMessage('Target is requied in function mgsDataTable', 'error');
|
|
26
28
|
return;
|
|
27
29
|
}
|
|
28
30
|
if(!_mgsCommonData?.url){
|
|
29
|
-
|
|
31
|
+
mgsNotifyMessage('URL is required in function mgsDataTable', 'error')
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
32
34
|
let _mgsTarget = _mgsCommonData?.target;
|
|
@@ -34,8 +36,8 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
34
36
|
let { token, bearerToken, ...allData} = {..._mgsCommonData?.data};
|
|
35
37
|
let methodType = _mgsCommonData?.methodType;
|
|
36
38
|
let page = _mgsCommonData?.page ?? 1;
|
|
37
|
-
let limit = _mgsCommonData?.limit ?? 10;
|
|
38
39
|
let pageLimits = _mgsCommonData?.pageLimits ?? [10,20,30,50,100];
|
|
40
|
+
let limit = (_mgsCommonData?.limit) ? _mgsCommonData?.limit : pageLimits[0] ?? 10;
|
|
39
41
|
let search = _mgsCommonData?.search;
|
|
40
42
|
let column = _mgsCommonData?.column;
|
|
41
43
|
let sort = _mgsCommonData?.sort;
|
|
@@ -46,13 +48,15 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
46
48
|
let isResult = _mgsCommonData?.isResult ?? true;
|
|
47
49
|
let isPagination = _mgsCommonData?.isPagination ?? true;
|
|
48
50
|
let isSorting = _mgsCommonData?.isSorting ?? true;
|
|
51
|
+
let isSrno = _mgsCommonData?.isSrno ?? false;
|
|
52
|
+
let isSrnoText = _mgsCommonData?.isSrnoText ?? 'Sr.No.';
|
|
49
53
|
|
|
50
54
|
allData = { ...allData, page, limit }
|
|
51
55
|
if (search != null && search != undefined && search.trim() != '') {
|
|
52
56
|
allData = { ...allData, search }
|
|
53
57
|
}
|
|
54
58
|
if (column != null && column != undefined && column.trim() != '') {
|
|
55
|
-
allData = { ...allData, column, sort }
|
|
59
|
+
allData = { ...allData, column : (isSrno)?column-1:column, sort }
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
const _mgsIsPost = methodType.toLowerCase() === 'post';
|
|
@@ -79,12 +83,13 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
79
83
|
_mgsSpinner.style.cssText = `
|
|
80
84
|
position: fixed;
|
|
81
85
|
z-index: 1031;
|
|
82
|
-
width:
|
|
86
|
+
width: 80%;
|
|
83
87
|
height: 30%;
|
|
84
88
|
display: flex;
|
|
85
89
|
justify-content: center;
|
|
86
90
|
align-items: center;
|
|
87
|
-
font-size:
|
|
91
|
+
font-size: 25px;
|
|
92
|
+
color: #0ec6d5;
|
|
88
93
|
`;
|
|
89
94
|
_mgsContainer.insertAdjacentElement('beforebegin', _mgsSpinner);
|
|
90
95
|
try {
|
|
@@ -92,7 +97,7 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
92
97
|
const _mgsResp = await _mgsResponse.json();
|
|
93
98
|
const _mgsResult = _mgsResp?.data ?? [];
|
|
94
99
|
const _mgsOutput = _mgsResp?.data?.data ?? [];
|
|
95
|
-
|
|
100
|
+
let _mgsColumn = _mgsResp?.column ?? [];
|
|
96
101
|
const _from = (_mgsResult?.from != undefined && _mgsResult?.from != null && _mgsResult?.from != '')?_mgsResult?.from :0;
|
|
97
102
|
const _to = (_mgsResult?.to != undefined && _mgsResult?.to != null && _mgsResult?.to != '')?_mgsResult?.to :0;
|
|
98
103
|
const _total = (_mgsResult?.total != undefined && _mgsResult?.total != null && _mgsResult?.total != '')?_mgsResult?.total :0;
|
|
@@ -157,24 +162,16 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
157
162
|
// Create thead
|
|
158
163
|
const _mgsThead = document.createElement('thead');
|
|
159
164
|
const _mgsHeadRow = document.createElement('tr');
|
|
165
|
+
if(isSrno){
|
|
166
|
+
_mgsColumn.unshift(isSrnoText);
|
|
167
|
+
}
|
|
160
168
|
_mgsColumn.forEach((text, key) => {
|
|
161
169
|
text = mgsCapitalizeFirstLetter (text);
|
|
162
170
|
const th = document.createElement('th');
|
|
163
|
-
if(_mgsOutput?.length > 0 && isSorting &&
|
|
171
|
+
if(_mgsOutput?.length > 0 && isSorting && !['Action',isSrnoText].includes(text)){
|
|
164
172
|
th.classList.add('_mgsSort');
|
|
165
173
|
}
|
|
166
|
-
|
|
167
|
-
th.setAttribute('data-column', key); // or actual key if mapping to backend
|
|
168
|
-
if (column && key == column && sort == 'desc') {
|
|
169
|
-
th.setAttribute('data-sort', 'desc');
|
|
170
|
-
th.innerHTML = `${text} <span style="font-size:14px !important">βΌ</span>`;
|
|
171
|
-
}else{
|
|
172
|
-
th.setAttribute('data-sort', 'asc');
|
|
173
|
-
th.innerHTML = `${text} <span style="font-size:14px !important">β²</span>`;
|
|
174
|
-
}
|
|
175
|
-
}else{
|
|
176
|
-
th.innerHTML = text;
|
|
177
|
-
}
|
|
174
|
+
th.title = text;
|
|
178
175
|
th.style.cssText = `
|
|
179
176
|
background-color: #f8f9fa;
|
|
180
177
|
font-weight: bold;
|
|
@@ -188,7 +185,44 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
188
185
|
text-align:left;
|
|
189
186
|
padding: 2px;
|
|
190
187
|
border-top: 1px solid rgb(222, 226, 230);
|
|
188
|
+
position:relative;
|
|
191
189
|
`;
|
|
190
|
+
if(isSorting && !['Action',isSrnoText].includes(text)){
|
|
191
|
+
th.setAttribute('data-column', key); // or actual key if mapping to backend
|
|
192
|
+
th.innerHTML = `${text} `;
|
|
193
|
+
// Add sort icon
|
|
194
|
+
const _mgsSortIcon = document.createElement("span");
|
|
195
|
+
_mgsSortIcon.style.position = "absolute";
|
|
196
|
+
_mgsSortIcon.style.display = "none";
|
|
197
|
+
_mgsSortIcon.style.fontSize = "12px";
|
|
198
|
+
if (column && key == column && sort == 'desc') {
|
|
199
|
+
th.setAttribute('data-sort', 'desc');
|
|
200
|
+
_mgsSortIcon.innerHTML = "βΌ";
|
|
201
|
+
}else{
|
|
202
|
+
th.setAttribute('data-sort', 'asc');
|
|
203
|
+
_mgsSortIcon.innerHTML = "β²";
|
|
204
|
+
}
|
|
205
|
+
th.addEventListener("mouseenter", () => {
|
|
206
|
+
_mgsSortIcon.style.display = "inline";
|
|
207
|
+
});
|
|
208
|
+
th.addEventListener("mouseleave", () => {
|
|
209
|
+
if(column && key == column){
|
|
210
|
+
_mgsSortIcon.style.display = "inline";
|
|
211
|
+
}else{
|
|
212
|
+
_mgsSortIcon.style.display = "none";
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
if(column && key == column ){
|
|
216
|
+
th.style.color = "#0ec6d5";
|
|
217
|
+
_mgsSortIcon.style.display = "inline";
|
|
218
|
+
}else{
|
|
219
|
+
th.style.color = "default";
|
|
220
|
+
}
|
|
221
|
+
th.appendChild(_mgsSortIcon);
|
|
222
|
+
}else{
|
|
223
|
+
th.innerHTML = text;
|
|
224
|
+
th.style.cursor = 'default'
|
|
225
|
+
}
|
|
192
226
|
_mgsHeadRow.appendChild(th);
|
|
193
227
|
});
|
|
194
228
|
_mgsThead.appendChild(_mgsHeadRow);
|
|
@@ -199,7 +233,7 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
199
233
|
if(_mgsOutput?.length > 0){
|
|
200
234
|
_mgsOutput.forEach((text, key) => {
|
|
201
235
|
let _createRow = document.createElement('tr');
|
|
202
|
-
_mgsColumn.forEach(col => {
|
|
236
|
+
_mgsColumn.forEach((col, ky) => {
|
|
203
237
|
let td = document.createElement('td');
|
|
204
238
|
td.style.cssText = `
|
|
205
239
|
width: 150px;
|
|
@@ -211,7 +245,7 @@ const mgsDataTable = async (_mgsData) => {
|
|
|
211
245
|
padding: 2px;
|
|
212
246
|
border-top: 1px solid rgb(222, 226, 230);
|
|
213
247
|
`;
|
|
214
|
-
td.innerHTML = text[col];
|
|
248
|
+
td.innerHTML = (isSrno && ky == 0)?(_from+key):text[col];
|
|
215
249
|
td.title = text[col];
|
|
216
250
|
_createRow.appendChild(td);
|
|
217
251
|
});
|
|
@@ -451,11 +485,6 @@ document.addEventListener('keyup', function (e) {
|
|
|
451
485
|
let page = 1;
|
|
452
486
|
let column = '';
|
|
453
487
|
let sort = '';
|
|
454
|
-
document.querySelectorAll('._mgsSort').forEach((el) => {
|
|
455
|
-
const text = mgsCapitalizeFirstLetter (el.textContent.trim());
|
|
456
|
-
el.innerHTML = `${text} <span style="font-size:14px !important">β²</span>`;
|
|
457
|
-
el.setAttribute('data-sort', 'asc');
|
|
458
|
-
});
|
|
459
488
|
let prevPage = null;
|
|
460
489
|
let nextPage = null;
|
|
461
490
|
mgsDataTable({page,column, sort, search, prevPage, nextPage});
|
|
@@ -481,9 +510,38 @@ function mgsCapitalizeFirstLetter(str) {
|
|
|
481
510
|
return capitalized;
|
|
482
511
|
}
|
|
483
512
|
|
|
513
|
+
//show message
|
|
514
|
+
function mgsNotifyMessage(message, type = 'success', time=4000) {
|
|
515
|
+
let mgsMessageBox = document.getElementById('_mgsMessage');
|
|
516
|
+
if (!mgsMessageBox) {
|
|
517
|
+
mgsMessageBox = document.createElement('div');
|
|
518
|
+
mgsMessageBox.id = '_mgsMessage';
|
|
519
|
+
mgsMessageBox.style.position = 'fixed';
|
|
520
|
+
mgsMessageBox.style.top = '20px';
|
|
521
|
+
mgsMessageBox.style.right = '20px';
|
|
522
|
+
mgsMessageBox.style.zIndex = '99999';
|
|
523
|
+
mgsMessageBox.style.padding = '15px 20px';
|
|
524
|
+
mgsMessageBox.style.borderRadius = '5px';
|
|
525
|
+
mgsMessageBox.style.minWidth = '200px';
|
|
526
|
+
mgsMessageBox.style.mgsMessageBoxShadow = '0 2px 8px rgba(0,0,0,0.15)';
|
|
527
|
+
mgsMessageBox.style.fontFamily = 'Arial, sans-serif';
|
|
528
|
+
document.body.appendChild(mgsMessageBox);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
mgsMessageBox.style.display = 'block';
|
|
532
|
+
mgsMessageBox.innerText = message;
|
|
533
|
+
mgsMessageBox.style.background = type === 'success' ? '#03741dff' : '#b30b1bff';
|
|
534
|
+
mgsMessageBox.style.color = '#ffff';
|
|
535
|
+
mgsMessageBox.style.border = type === 'success' ? '1px solid #03741dff' : '1px solid #b30b1bff';
|
|
536
|
+
setTimeout(() => {
|
|
537
|
+
mgsMessageBox.style.display = 'none';
|
|
538
|
+
}, time);
|
|
539
|
+
}
|
|
540
|
+
|
|
484
541
|
// Export globally for UMD/IIFE
|
|
485
542
|
window.mgsDataTable = mgsDataTable;
|
|
486
|
-
window.mgsCapitalizeFirstLetter = mgsCapitalizeFirstLetter
|
|
543
|
+
window.mgsCapitalizeFirstLetter = mgsCapitalizeFirstLetter;
|
|
544
|
+
window.mgsNotifyMessage = mgsNotifyMessage;
|
|
487
545
|
|
|
488
546
|
// If using modules
|
|
489
|
-
export { mgsDataTable, mgsCapitalizeFirstLetter };
|
|
547
|
+
export { mgsDataTable, mgsCapitalizeFirstLetter, mgsNotifyMessage };
|