json-crud-ui-comp-table 1.3.2 → 1.3.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/bin/v3/commands/TableComp/template/v3/Index/Configs/Create/config.json +65 -0
- package/bin/v3/commands/TableComp/template/v3/Index/Configs/ShowAll/config.json +60 -0
- package/bin/v3/commands/TableComp/template/v3/Index/Configs/WithSearch/config.json +69 -0
- package/bin/v3/commands/TableComp/template/v3/Index/Configs/WithSerial/config.json +69 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/BuildTable/callKSSubTable.js +13 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/BuildTable/callKSTable.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/BuildTable/formSearchParamsFunc.js +8 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/BuildTable/getKSTableConfig.js +27 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/BuildTable/index.js +34 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/AfterFetch/entryFile.js +7 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/AfterFetch/status200.js +7 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/AfterFetch/status401.js +23 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/AfterFetch/status409.js +9 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/AfterFetch/url.json +4 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/fetchFuncs.js +12 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/getUrl.json +3 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/FetchAsGet/start.js +13 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/clickFunc.js +46 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/AddItemHtmlId/start.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/ShowAllHtmlId/BuildTable/callKSTable.js +5 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/ShowAllHtmlId/BuildTable/getKSTableConfig.js +7 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/ShowAllHtmlId/BuildTable/index.js +10 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/ShowAllHtmlId/clickFunc.js +24 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/ShowAllHtmlId/start.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSearchHtmlId/BuildTable/callKSTable.js +5 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSearchHtmlId/BuildTable/getKSTableConfig.js +7 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSearchHtmlId/BuildTable/index.js +10 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSearchHtmlId/clickFunc.js +24 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSearchHtmlId/start.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSerialHtmlId/BuildTable/callKSTable.js +5 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSerialHtmlId/BuildTable/getKSTableConfig.js +18 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSerialHtmlId/BuildTable/index.js +10 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSerialHtmlId/clickFunc.js +24 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/WithSerialHtmlId/start.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/loginButtonId/clickFunc.js +47 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/loginButtonId/start.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/loginHeaderHtmlId/clickFunc.js +21 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/loginHeaderHtmlId/start.js +11 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/start.js +15 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/CommonFuncs/afterHeadSave.js +33 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/CommonFuncs/onSuccess.js +13 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/buildHeader.js +12 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/runAfterDomLoad.js +12 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/start.js +7 -0
- package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/start.js +5 -0
- package/bin/v3/commands/TableComp/template/v3/Index/headers.json +51 -0
- package/bin/v3/commands/TableComp/template/v3/Index/start.js +7 -0
- package/bin/v3/commands/TableComp/template/v3/index.html +132 -0
- package/bin/v3/commands/TableComp/template/v3/script.js +276 -0
- package/bin/v3/commands/TableComp/template/v3/tailwind-3.css +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const onReadFail = (inResponseStatus) => {
|
|
2
|
+
console.log("onReadFail", inResponseStatus);
|
|
3
|
+
const loginModal =
|
|
4
|
+
document.getElementById("loginModal");
|
|
5
|
+
|
|
6
|
+
loginModal.classList.remove("hidden");
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const getKSTableConfig = async () => {
|
|
10
|
+
|
|
11
|
+
const config = await fetch("./Index/Configs/WithSerial/config.json");
|
|
12
|
+
// debugger;
|
|
13
|
+
const configJson = await config.json();
|
|
14
|
+
|
|
15
|
+
configJson.callbacks.table.onReadFail = onReadFail;
|
|
16
|
+
|
|
17
|
+
return configJson;
|
|
18
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import buildTable from "./BuildTable/index.js";
|
|
2
|
+
|
|
3
|
+
const clickFuncToRun = ({ inCurrentTarget }) => {
|
|
4
|
+
// console.log("inCurrentTarget : ", inCurrentTarget);
|
|
5
|
+
applyActive({ inCurrentTarget });
|
|
6
|
+
// inCurrentTarget.classList.add("active");
|
|
7
|
+
|
|
8
|
+
buildTable().then();
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const applyActive = ({ inCurrentTarget }) => {
|
|
12
|
+
const localCurrentTarget = inCurrentTarget;
|
|
13
|
+
|
|
14
|
+
const menu = localCurrentTarget.closest("#menu");
|
|
15
|
+
|
|
16
|
+
menu.querySelectorAll("li a.active")
|
|
17
|
+
.forEach(a => a.classList.remove("active"));
|
|
18
|
+
|
|
19
|
+
localCurrentTarget.classList.add("active");
|
|
20
|
+
|
|
21
|
+
localCurrentTarget.classList.add("active");
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export { clickFuncToRun };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { clickFuncToRun } from "./clickFunc.js";
|
|
2
|
+
|
|
3
|
+
const funcToRun = () => {
|
|
4
|
+
const htmlElement = document.getElementById('WithSerialHtmlId');
|
|
5
|
+
// debugger;
|
|
6
|
+
htmlElement.addEventListener("click", (event) =>
|
|
7
|
+
clickFuncToRun({ inCurrentTarget: event.currentTarget })
|
|
8
|
+
);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default funcToRun;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const clickFuncToRun = async () => {
|
|
2
|
+
const UserName =
|
|
3
|
+
document.getElementById("Username").value;
|
|
4
|
+
|
|
5
|
+
const Password =
|
|
6
|
+
document.getElementById("Password").value;
|
|
7
|
+
|
|
8
|
+
const response = await fetch("/Secured/V1/GenerateToken/ToCookie", {
|
|
9
|
+
method: "POST",
|
|
10
|
+
headers: {
|
|
11
|
+
"Content-Type": "application/json"
|
|
12
|
+
},
|
|
13
|
+
body: JSON.stringify({
|
|
14
|
+
UserName,
|
|
15
|
+
Password
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
if (response.status === 200) {
|
|
20
|
+
document
|
|
21
|
+
.getElementById("loginError")
|
|
22
|
+
.classList.add("hidden");
|
|
23
|
+
|
|
24
|
+
document
|
|
25
|
+
.getElementById("loginModalContent")
|
|
26
|
+
.classList.remove("border-2", "border-red-500");
|
|
27
|
+
|
|
28
|
+
const loginModal =
|
|
29
|
+
document.getElementById("loginModal");
|
|
30
|
+
|
|
31
|
+
loginModal.classList.add("hidden");
|
|
32
|
+
} else {
|
|
33
|
+
document
|
|
34
|
+
.getElementById("loginError")
|
|
35
|
+
.textContent = "Invalid username or password";
|
|
36
|
+
|
|
37
|
+
document
|
|
38
|
+
.getElementById("loginError")
|
|
39
|
+
.classList.remove("hidden");
|
|
40
|
+
|
|
41
|
+
document
|
|
42
|
+
.getElementById("loginModalContent")
|
|
43
|
+
.classList.add("border-2", "border-red-500");
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { clickFuncToRun };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { clickFuncToRun } from "./clickFunc.js";
|
|
2
|
+
|
|
3
|
+
const funcToRun = () => {
|
|
4
|
+
const htmlElement = document.getElementById('loginButtonId');
|
|
5
|
+
// debugger;
|
|
6
|
+
htmlElement.addEventListener("click", (event) =>
|
|
7
|
+
clickFuncToRun({ inCurrentTarget: event.currentTarget })
|
|
8
|
+
);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default funcToRun;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const clickFuncToRun = ({ inCurrentTarget }) => {
|
|
2
|
+
const loginModal =
|
|
3
|
+
document.getElementById("loginModal");
|
|
4
|
+
|
|
5
|
+
loginModal.classList.remove("hidden");
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const applyActive = ({ inCurrentTarget }) => {
|
|
9
|
+
const localCurrentTarget = inCurrentTarget;
|
|
10
|
+
|
|
11
|
+
const menu = localCurrentTarget.closest("#menu");
|
|
12
|
+
|
|
13
|
+
menu.querySelectorAll("li a.active")
|
|
14
|
+
.forEach(a => a.classList.remove("active"));
|
|
15
|
+
|
|
16
|
+
localCurrentTarget.classList.add("active");
|
|
17
|
+
|
|
18
|
+
localCurrentTarget.classList.add("active");
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { clickFuncToRun };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { clickFuncToRun } from "./clickFunc.js";
|
|
2
|
+
|
|
3
|
+
const funcToRun = () => {
|
|
4
|
+
const htmlElement = document.getElementById('loginHeaderHtmlId');
|
|
5
|
+
// debugger;
|
|
6
|
+
htmlElement.addEventListener("click", (event) =>
|
|
7
|
+
clickFuncToRun({ inCurrentTarget: event.currentTarget })
|
|
8
|
+
);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default funcToRun;
|
package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/AddListeners/start.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import showAllHtmlId from "./ShowAllHtmlId/start.js";
|
|
2
|
+
import withSerialHtmlId from "./WithSerialHtmlId/start.js";
|
|
3
|
+
import withSearchHtmlId from "./WithSearchHtmlId/start.js";
|
|
4
|
+
import loginHeaderHtmlId from "./loginHeaderHtmlId/start.js";
|
|
5
|
+
import loginButtonId from "./loginButtonId/start.js";
|
|
6
|
+
|
|
7
|
+
const hookAllListeners = () => {
|
|
8
|
+
showAllHtmlId();
|
|
9
|
+
withSerialHtmlId();
|
|
10
|
+
withSearchHtmlId();
|
|
11
|
+
loginHeaderHtmlId();
|
|
12
|
+
loginButtonId();
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { hookAllListeners };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import onSuccessFunc from "./onSuccess.js";
|
|
2
|
+
|
|
3
|
+
const afterHeadSave = async (inPk) => {
|
|
4
|
+
const config = await fetch("Index/Configs/AddItem/config.json");
|
|
5
|
+
const configJson = await config.json();
|
|
6
|
+
|
|
7
|
+
configJson.endPoints.findFromParams = configJson.endPoints.findFromParams.replace("{pk}", inPk);
|
|
8
|
+
configJson.callbacks.vertical.onSuccess = onSuccessFunc;
|
|
9
|
+
|
|
10
|
+
if (window.KSTable) {
|
|
11
|
+
console.log("table loaded from cdn");
|
|
12
|
+
|
|
13
|
+
await window.KSTable.initCreate(configJson);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const configForSubTable = await fetch("Index/Configs/AddItem/configForSubTable.json");
|
|
17
|
+
const configForSubTableJson = await configForSubTable.json();
|
|
18
|
+
|
|
19
|
+
const findColumn = configForSubTableJson.columnsConfig.find(element => {
|
|
20
|
+
return element.columnName === "ParentPk";
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
findColumn.defaultValue = inPk.toString();
|
|
24
|
+
configForSubTableJson.endPoints.read += inPk.toString();
|
|
25
|
+
|
|
26
|
+
if (window.KSTable) {
|
|
27
|
+
console.log("table loaded from cdn");
|
|
28
|
+
|
|
29
|
+
await window.KSTable.initTableWithFooter(configForSubTableJson);
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default afterHeadSave;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import afterHeadSave from "./afterHeadSave.js";
|
|
2
|
+
|
|
3
|
+
const onSuccessFunc = async (res) => {
|
|
4
|
+
const fromReponse = await res.json();
|
|
5
|
+
// console.log("fromReponse : ", fromReponse);
|
|
6
|
+
|
|
7
|
+
document.getElementById("htmlId").innerHTML = fromReponse.pk;
|
|
8
|
+
|
|
9
|
+
// window.location.href = `../WithSubTable/index.html?pk=${fromReponse.pk}`;
|
|
10
|
+
await afterHeadSave(fromReponse.pk);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default onSuccessFunc;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// import headerBuild from "/header/v3/initHeader.js";
|
|
2
|
+
|
|
3
|
+
const buildHeader = async () => {
|
|
4
|
+
const fromFetch = await fetch("./Index/headers.json");
|
|
5
|
+
const headerConfig = await fromFetch.json();
|
|
6
|
+
// debugger;
|
|
7
|
+
await window.KSHeader(headerConfig);
|
|
8
|
+
|
|
9
|
+
// await headerBuild(headerConfig);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { buildHeader };
|
package/bin/v3/commands/TableComp/template/v3/Index/FormLoad/DomContentLoaded/runAfterDomLoad.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { buildHeader } from "./buildHeader.js";
|
|
2
|
+
import { hookAllListeners } from "./AddListeners/start.js";
|
|
3
|
+
|
|
4
|
+
const runAfterDomLoad = () => {
|
|
5
|
+
import("../../../script.js").then(fromPromise => {
|
|
6
|
+
buildHeader().then(fromPromise => {
|
|
7
|
+
hookAllListeners();
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { runAfterDomLoad };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"uiClasses": {
|
|
3
|
+
"ulClass1": "[&_svg]:size-6"
|
|
4
|
+
},
|
|
5
|
+
"title": {
|
|
6
|
+
"text": "Items",
|
|
7
|
+
"htmlId": "htmlId"
|
|
8
|
+
},
|
|
9
|
+
"items": [
|
|
10
|
+
{
|
|
11
|
+
"text": "ShowAll",
|
|
12
|
+
"id": "ShowAllHtmlId",
|
|
13
|
+
"icon": [],
|
|
14
|
+
"uiClasses": {
|
|
15
|
+
"aClass": "",
|
|
16
|
+
"svgDivClass": "size-10"
|
|
17
|
+
},
|
|
18
|
+
"svgName": "home"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"text": "WithSerial",
|
|
22
|
+
"id": "WithSerialHtmlId",
|
|
23
|
+
"icon": [],
|
|
24
|
+
"uiClasses": {
|
|
25
|
+
"aClass": "",
|
|
26
|
+
"svgDivClass": "size-10"
|
|
27
|
+
},
|
|
28
|
+
"svgName": "serial"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"text": "WithSearch",
|
|
32
|
+
"id": "WithSearchHtmlId",
|
|
33
|
+
"icon": [],
|
|
34
|
+
"uiClasses": {
|
|
35
|
+
"aClass": "",
|
|
36
|
+
"svgDivClass": "size-10"
|
|
37
|
+
},
|
|
38
|
+
"svgName": "search"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"text": "Login",
|
|
42
|
+
"id": "loginHeaderHtmlId",
|
|
43
|
+
"icon": [],
|
|
44
|
+
"uiClasses": {
|
|
45
|
+
"aClass": "",
|
|
46
|
+
"svgDivClass": "size-8"
|
|
47
|
+
},
|
|
48
|
+
"svgName": "home"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>KeshavSoft8</title>
|
|
8
|
+
|
|
9
|
+
<!-- Tailwind CDN -->
|
|
10
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
11
|
+
|
|
12
|
+
<!-- <link rel="stylesheet" href="./tailwind-3.css"> -->
|
|
13
|
+
|
|
14
|
+
<!-- Heroicons (SVG inline, no extra CDN needed) -->
|
|
15
|
+
|
|
16
|
+
<style>
|
|
17
|
+
tfoot tr {
|
|
18
|
+
background-color: #fff8dc;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
tfoot tr:has(input:focus) {
|
|
22
|
+
background-color: #ffe082;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
input:focus {
|
|
26
|
+
outline: none;
|
|
27
|
+
border: 2px solid #2563eb;
|
|
28
|
+
box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.3);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
mark {
|
|
32
|
+
background-color: yellow;
|
|
33
|
+
color: black;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.active svg {
|
|
37
|
+
stroke: #3b82f6;
|
|
38
|
+
/* Example color */
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.active span {
|
|
42
|
+
color: #3b82f6;
|
|
43
|
+
/* Example color */
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.danger svg {
|
|
47
|
+
stroke: #c41d14;
|
|
48
|
+
/* Example color */
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.danger span {
|
|
52
|
+
color: #c41d14;
|
|
53
|
+
/* Example color */
|
|
54
|
+
}
|
|
55
|
+
</style>
|
|
56
|
+
</head>
|
|
57
|
+
|
|
58
|
+
<body class="bg-gray-100 flex flex-col min-h-screen">
|
|
59
|
+
<main class="flex-grow">
|
|
60
|
+
<!-- NAVBAR -->
|
|
61
|
+
|
|
62
|
+
<div id="header"></div>
|
|
63
|
+
|
|
64
|
+
<!-- body -->
|
|
65
|
+
<section class="mx-auto px-3 py-6
|
|
66
|
+
max-w-3xl
|
|
67
|
+
lg:max-w-5xl
|
|
68
|
+
xl:max-w-6xl">
|
|
69
|
+
|
|
70
|
+
<!-- Table container -->
|
|
71
|
+
|
|
72
|
+
<div id="kSTableContainer">
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div id="kSSubTableContainer">
|
|
76
|
+
</div>
|
|
77
|
+
</section>
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
</main>
|
|
81
|
+
<footer class="bg-gray-200 text-gray-700 text-center py-4">
|
|
82
|
+
<div class="max-w-6xl mx-auto px-4">
|
|
83
|
+
© 2026 KeshavSoft • Contact
|
|
84
|
+
</div>
|
|
85
|
+
</footer>
|
|
86
|
+
|
|
87
|
+
<!-- Login Modal -->
|
|
88
|
+
|
|
89
|
+
<!-- Modal -->
|
|
90
|
+
<div id="loginModal" class="hidden fixed inset-0 z-50 bg-black/40 flex items-center justify-center">
|
|
91
|
+
|
|
92
|
+
<div id="loginModalContent" class="bg-white rounded-lg shadow-lg w-full max-w-sm p-6">
|
|
93
|
+
|
|
94
|
+
<h2 class="text-xl font-semibold mb-4">
|
|
95
|
+
Login
|
|
96
|
+
</h2>
|
|
97
|
+
|
|
98
|
+
<input type="text" placeholder="Username" id="Username" class="w-full border rounded px-3 py-2 mb-3">
|
|
99
|
+
|
|
100
|
+
<input type="password" placeholder="Password" id="Password" class="w-full border rounded px-3 py-2 mb-2">
|
|
101
|
+
|
|
102
|
+
<p id="loginError" class="hidden text-red-600 text-sm mb-3">
|
|
103
|
+
</p>
|
|
104
|
+
|
|
105
|
+
<button class="w-full bg-blue-600 text-white py-2 rounded" id="loginButtonId">
|
|
106
|
+
Login
|
|
107
|
+
</button>
|
|
108
|
+
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<script type="module" src="./Index/start.js"></script>
|
|
114
|
+
|
|
115
|
+
<script>
|
|
116
|
+
const loginModal =
|
|
117
|
+
document.getElementById("loginModal");
|
|
118
|
+
|
|
119
|
+
const showLoginModal = () => {
|
|
120
|
+
loginModal.classList.remove("hidden");
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
loginModal.addEventListener("click", (event) => {
|
|
124
|
+
if (event.target === loginModal) {
|
|
125
|
+
loginModal.classList.add("hidden");
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
</script>
|
|
129
|
+
|
|
130
|
+
</body>
|
|
131
|
+
|
|
132
|
+
</html>
|