mdkcontroller 1.0.0

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.
Files changed (126) hide show
  1. package/Cores/file/dk.css +99 -0
  2. package/Cores/file/dk.js +154 -0
  3. package/Cores/file/dk_table.css +63 -0
  4. package/Cores/file/dk_table.js +252 -0
  5. package/Cores/file/error.png +0 -0
  6. package/Cores/file/information.png +0 -0
  7. package/Cores/file/jquery-3.2.1.min.js +4 -0
  8. package/Cores/file/success.png +0 -0
  9. package/Cores/file/warning.png +0 -0
  10. package/Cores/login/css/main.css +462 -0
  11. package/Cores/login/css/util.css +2993 -0
  12. package/Cores/login/fonts/font-awesome-4.7.0/HELP-US-OUT.txt +7 -0
  13. package/Cores/login/fonts/font-awesome-4.7.0/css/font-awesome.css +2337 -0
  14. package/Cores/login/fonts/font-awesome-4.7.0/css/font-awesome.min.css +4 -0
  15. package/Cores/login/fonts/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  16. package/Cores/login/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  17. package/Cores/login/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +2671 -0
  18. package/Cores/login/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  19. package/Cores/login/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  20. package/Cores/login/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  21. package/Cores/login/fonts/font-awesome-4.7.0/less/animated.less +34 -0
  22. package/Cores/login/fonts/font-awesome-4.7.0/less/bordered-pulled.less +25 -0
  23. package/Cores/login/fonts/font-awesome-4.7.0/less/core.less +12 -0
  24. package/Cores/login/fonts/font-awesome-4.7.0/less/fixed-width.less +6 -0
  25. package/Cores/login/fonts/font-awesome-4.7.0/less/font-awesome.less +18 -0
  26. package/Cores/login/fonts/font-awesome-4.7.0/less/icons.less +789 -0
  27. package/Cores/login/fonts/font-awesome-4.7.0/less/larger.less +13 -0
  28. package/Cores/login/fonts/font-awesome-4.7.0/less/list.less +19 -0
  29. package/Cores/login/fonts/font-awesome-4.7.0/less/mixins.less +60 -0
  30. package/Cores/login/fonts/font-awesome-4.7.0/less/path.less +15 -0
  31. package/Cores/login/fonts/font-awesome-4.7.0/less/rotated-flipped.less +20 -0
  32. package/Cores/login/fonts/font-awesome-4.7.0/less/screen-reader.less +5 -0
  33. package/Cores/login/fonts/font-awesome-4.7.0/less/stacked.less +20 -0
  34. package/Cores/login/fonts/font-awesome-4.7.0/less/variables.less +800 -0
  35. package/Cores/login/fonts/font-awesome-4.7.0/scss/_animated.scss +34 -0
  36. package/Cores/login/fonts/font-awesome-4.7.0/scss/_bordered-pulled.scss +25 -0
  37. package/Cores/login/fonts/font-awesome-4.7.0/scss/_core.scss +12 -0
  38. package/Cores/login/fonts/font-awesome-4.7.0/scss/_fixed-width.scss +6 -0
  39. package/Cores/login/fonts/font-awesome-4.7.0/scss/_icons.scss +789 -0
  40. package/Cores/login/fonts/font-awesome-4.7.0/scss/_larger.scss +13 -0
  41. package/Cores/login/fonts/font-awesome-4.7.0/scss/_list.scss +19 -0
  42. package/Cores/login/fonts/font-awesome-4.7.0/scss/_mixins.scss +60 -0
  43. package/Cores/login/fonts/font-awesome-4.7.0/scss/_path.scss +15 -0
  44. package/Cores/login/fonts/font-awesome-4.7.0/scss/_rotated-flipped.scss +20 -0
  45. package/Cores/login/fonts/font-awesome-4.7.0/scss/_screen-reader.scss +5 -0
  46. package/Cores/login/fonts/font-awesome-4.7.0/scss/_stacked.scss +20 -0
  47. package/Cores/login/fonts/font-awesome-4.7.0/scss/_variables.scss +800 -0
  48. package/Cores/login/fonts/font-awesome-4.7.0/scss/font-awesome.scss +18 -0
  49. package/Cores/login/fonts/montserrat/Montserrat-Black.ttf +0 -0
  50. package/Cores/login/fonts/montserrat/Montserrat-BlackItalic.ttf +0 -0
  51. package/Cores/login/fonts/montserrat/Montserrat-Bold.ttf +0 -0
  52. package/Cores/login/fonts/montserrat/Montserrat-BoldItalic.ttf +0 -0
  53. package/Cores/login/fonts/montserrat/Montserrat-ExtraBold.ttf +0 -0
  54. package/Cores/login/fonts/montserrat/Montserrat-ExtraBoldItalic.ttf +0 -0
  55. package/Cores/login/fonts/montserrat/Montserrat-ExtraLight.ttf +0 -0
  56. package/Cores/login/fonts/montserrat/Montserrat-ExtraLightItalic.ttf +0 -0
  57. package/Cores/login/fonts/montserrat/Montserrat-Italic.ttf +0 -0
  58. package/Cores/login/fonts/montserrat/Montserrat-Light.ttf +0 -0
  59. package/Cores/login/fonts/montserrat/Montserrat-LightItalic.ttf +0 -0
  60. package/Cores/login/fonts/montserrat/Montserrat-Medium.ttf +0 -0
  61. package/Cores/login/fonts/montserrat/Montserrat-MediumItalic.ttf +0 -0
  62. package/Cores/login/fonts/montserrat/Montserrat-Regular.ttf +0 -0
  63. package/Cores/login/fonts/montserrat/Montserrat-SemiBold.ttf +0 -0
  64. package/Cores/login/fonts/montserrat/Montserrat-SemiBoldItalic.ttf +0 -0
  65. package/Cores/login/fonts/montserrat/Montserrat-Thin.ttf +0 -0
  66. package/Cores/login/fonts/montserrat/Montserrat-ThinItalic.ttf +0 -0
  67. package/Cores/login/fonts/montserrat/OFL.txt +93 -0
  68. package/Cores/login/fonts/poppins/Poppins-Black.ttf +0 -0
  69. package/Cores/login/fonts/poppins/Poppins-BlackItalic.ttf +0 -0
  70. package/Cores/login/fonts/poppins/Poppins-Bold.ttf +0 -0
  71. package/Cores/login/fonts/poppins/Poppins-BoldItalic.ttf +0 -0
  72. package/Cores/login/fonts/poppins/Poppins-ExtraBold.ttf +0 -0
  73. package/Cores/login/fonts/poppins/Poppins-ExtraBoldItalic.ttf +0 -0
  74. package/Cores/login/fonts/poppins/Poppins-ExtraLight.ttf +0 -0
  75. package/Cores/login/fonts/poppins/Poppins-ExtraLightItalic.ttf +0 -0
  76. package/Cores/login/fonts/poppins/Poppins-Italic.ttf +0 -0
  77. package/Cores/login/fonts/poppins/Poppins-Light.ttf +0 -0
  78. package/Cores/login/fonts/poppins/Poppins-LightItalic.ttf +0 -0
  79. package/Cores/login/fonts/poppins/Poppins-Medium.ttf +0 -0
  80. package/Cores/login/fonts/poppins/Poppins-MediumItalic.ttf +0 -0
  81. package/Cores/login/fonts/poppins/Poppins-Regular.ttf +0 -0
  82. package/Cores/login/fonts/poppins/Poppins-SemiBold.ttf +0 -0
  83. package/Cores/login/fonts/poppins/Poppins-SemiBoldItalic.ttf +0 -0
  84. package/Cores/login/fonts/poppins/Poppins-Thin.ttf +0 -0
  85. package/Cores/login/fonts/poppins/Poppins-ThinItalic.ttf +0 -0
  86. package/Cores/login/images/icons/favicon.ico +0 -0
  87. package/Cores/login/images/img-01.png +0 -0
  88. package/Cores/login/index.html +146 -0
  89. package/Cores/login/js/main.js +57 -0
  90. package/Cores/login/register.html +191 -0
  91. package/Cores/login/vendor/animate/animate.css +1579 -0
  92. package/Cores/login/vendor/bootstrap/css/bootstrap-grid.css +1353 -0
  93. package/Cores/login/vendor/bootstrap/css/bootstrap-grid.css.map +1 -0
  94. package/Cores/login/vendor/bootstrap/css/bootstrap-grid.min.css +2 -0
  95. package/Cores/login/vendor/bootstrap/css/bootstrap-grid.min.css.map +1 -0
  96. package/Cores/login/vendor/bootstrap/css/bootstrap-reboot.css +330 -0
  97. package/Cores/login/vendor/bootstrap/css/bootstrap-reboot.css.map +1 -0
  98. package/Cores/login/vendor/bootstrap/css/bootstrap-reboot.min.css +2 -0
  99. package/Cores/login/vendor/bootstrap/css/bootstrap-reboot.min.css.map +1 -0
  100. package/Cores/login/vendor/bootstrap/css/bootstrap.css +8185 -0
  101. package/Cores/login/vendor/bootstrap/css/bootstrap.css.map +1 -0
  102. package/Cores/login/vendor/bootstrap/css/bootstrap.min.css +7 -0
  103. package/Cores/login/vendor/bootstrap/css/bootstrap.min.css.map +1 -0
  104. package/Cores/login/vendor/bootstrap/js/bootstrap.js +3831 -0
  105. package/Cores/login/vendor/bootstrap/js/bootstrap.min.js +6 -0
  106. package/Cores/login/vendor/bootstrap/js/popper.js +2448 -0
  107. package/Cores/login/vendor/bootstrap/js/popper.min.js +5 -0
  108. package/Cores/login/vendor/bootstrap/js/tooltip.js +539 -0
  109. package/Cores/login/vendor/css-hamburgers/hamburgers.css +626 -0
  110. package/Cores/login/vendor/css-hamburgers/hamburgers.min.css +7 -0
  111. package/Cores/login/vendor/jquery/jquery-3.2.1.min.js +4 -0
  112. package/Cores/login/vendor/select2/select2.css +484 -0
  113. package/Cores/login/vendor/select2/select2.js +6450 -0
  114. package/Cores/login/vendor/select2/select2.min.css +1 -0
  115. package/Cores/login/vendor/select2/select2.min.js +3 -0
  116. package/Cores/login/vendor/tilt/tilt.jquery.min.js +1 -0
  117. package/app.js +105 -0
  118. package/dk_modules/authorization.js +47 -0
  119. package/dk_modules/autoSequence.js +23 -0
  120. package/dk_modules/autohtml.js +99 -0
  121. package/dk_modules/dkdb.js +7 -0
  122. package/dk_modules/dkvar.js +50 -0
  123. package/dk_modules/users.js +143 -0
  124. package/package.json +17 -0
  125. package/projectDB.js +5 -0
  126. package/projectVar.js +3 -0
@@ -0,0 +1,99 @@
1
+ .dk-loader {
2
+ position: absolute;
3
+ width: 350px;
4
+ height: 350px;
5
+ border-radius: 50%;
6
+ background: linear-gradient(#f07e6e, #84cdfa, #5ad1cd);
7
+ animation: dk-animate 1.2s linear infinite;
8
+ }
9
+
10
+ @keyframes dk-animate {
11
+ 0% {
12
+ transform: rotate(0deg);
13
+ }
14
+ 100% {
15
+ transform: rotate(360deg);
16
+ }
17
+ }
18
+
19
+ .dk-loader span {
20
+ position: absolute;
21
+ width: 100%;
22
+ height: 100%;
23
+ border-radius: 50%;
24
+ background: linear-gradient(#f07e6e, #84cdfa, #5ad1cd);
25
+ }
26
+
27
+ .dk-loader span:nth-child(1) {
28
+ filter: blur(5px);
29
+ }
30
+
31
+ .dk-loader span:nth-child(2) {
32
+ filter: blur(10px);
33
+ }
34
+
35
+ .dk-loader span:nth-child(3) {
36
+ filter: blur(25px);
37
+ }
38
+
39
+ .dk-loader span:nth-child(4) {
40
+ filter: blur(50px);
41
+ }
42
+
43
+ .dk-loader:after {
44
+ content: "";
45
+ position: absolute;
46
+ top: 10px;
47
+ left: 10px;
48
+ right: 10px;
49
+ bottom: 10px;
50
+ background: #f1f1f1;
51
+ border: solid white 10px;
52
+ border-radius: 50%;
53
+ }
54
+
55
+ .dk-overlay {
56
+ display: none;
57
+ position: fixed;
58
+ top: 0;
59
+ left: 0;
60
+ width: 100%;
61
+ height: 100%;
62
+ backdrop-filter: blur(3px);
63
+ z-index: 9999;
64
+ color: black;
65
+ }
66
+
67
+ .dk-overlay .dk-overlay_boder {
68
+ width: 100%;
69
+ height: 100%;
70
+ display: flex;
71
+ flex-direction: column;
72
+ justify-content: center;
73
+ align-items: center;
74
+ }
75
+ .dk-overlay .dk-overlay_boder > strong {
76
+ z-index: 10;
77
+ }
78
+
79
+ .dk-overlay .dk-overlay_boder .dk-overlay_box {
80
+ border: 2px solid #8f32b0ba;
81
+ border-radius: 10px;
82
+ box-shadow: 0 0 9px 6px #8f32b0a3;
83
+ padding: 15px;
84
+ background-color: white;
85
+ min-width: 380px;
86
+ min-height: 200px;
87
+ }
88
+
89
+ .dk-overlay .dk-overlay_boder > span {
90
+ font-size: 40px;
91
+ cursor: pointer;
92
+ }
93
+
94
+ .dk-transiton500 {
95
+ transition: all ease 0.5s;
96
+ }
97
+ .dk-transiton300 {
98
+ transition: all ease 0.3s;
99
+ }
@@ -0,0 +1,154 @@
1
+ const DK = {
2
+ varHide: {
3
+ showBusyCache: {},
4
+ currentScriptPath: ''
5
+ },
6
+ showBusy: (show, mess) => {
7
+ const temp = DK.varHide.showBusyCache;
8
+ if (show) {
9
+ temp[mess] = (temp[mess] ?? 0) + 1;
10
+ } else {
11
+ temp[mess] = (temp[mess] ?? 0) - 1;
12
+ if (temp[mess] <= 0)
13
+ delete temp[mess];
14
+ }
15
+ const keys = Object.keys(temp);
16
+ let textShow = '';
17
+ keys.forEach((k) => {
18
+ textShow += `${k} x ${temp[k]} <br/>`;
19
+ });
20
+ const overlayId = 'dkoverlay_busy';
21
+ let dk_overlay = document.getElementById(overlayId);
22
+ if (!dk_overlay) {
23
+ dk_overlay = document.createElement('div');
24
+ dk_overlay.style.zIndex = 10000;
25
+ dk_overlay.id = overlayId;
26
+ dk_overlay.classList.add('dk-overlay');
27
+ const overlay_boder = document.createElement('div');
28
+ overlay_boder.classList.add('dk-overlay_boder');
29
+ const loader = document.createElement('div');
30
+ loader.classList.add('dk-loader');
31
+ const span1 = document.createElement('span');
32
+ const span2 = document.createElement('span');
33
+ const span3 = document.createElement('span');
34
+ const span4 = document.createElement('span');
35
+
36
+ const strong = document.createElement('strong');
37
+ strong.id = dk_overlay.id + '_content';
38
+ loader.appendChild(span1);
39
+ loader.appendChild(span2);
40
+ loader.appendChild(span3);
41
+ loader.appendChild(span4);
42
+ overlay_boder.appendChild(loader);
43
+ overlay_boder.appendChild(strong);
44
+ dk_overlay.appendChild(overlay_boder);
45
+ document.body.appendChild(dk_overlay);
46
+ }
47
+ const strongContent = document.getElementById(overlayId + '_content');
48
+ if (textShow) {
49
+ strongContent.innerHTML = textShow;
50
+ dk_overlay.style.display = 'block';
51
+ } else {
52
+ dk_overlay.style.display = 'none';
53
+ }
54
+ },
55
+ generateRandomToken: (length = 20) => {
56
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()?<>:{}/*-+';
57
+ let token = '';
58
+ for (let i = 0; i < length; i++) {
59
+ const randomIndex = Math.floor(Math.random() * characters.length);
60
+ token += characters.charAt(randomIndex);
61
+ }
62
+ return token;
63
+ },
64
+ showMessage: (mess, type = 1, layer = 10001) => {
65
+ let imageName = 'information.png';
66
+ switch (type) {
67
+ case 1: imageName = 'information.png'; break;
68
+ case 2: imageName = 'success.png'; break;
69
+ case 3: imageName = 'warning.png'; break;
70
+ case 4: imageName = 'error.png'; break;
71
+ default: break;
72
+ }
73
+ const overlayId = 'dkoverlay_message_' + DK.generateRandomToken();
74
+ let dk_overlay = document.getElementById(overlayId);
75
+ if (!dk_overlay) {
76
+ dk_overlay = document.createElement('div');
77
+ dk_overlay.style.zIndex = layer;
78
+ dk_overlay.id = overlayId;
79
+ dk_overlay.classList.add('dk-overlay');
80
+ const overlay_boder = document.createElement('div');
81
+ overlay_boder.classList.add('dk-overlay_boder');
82
+ if (overlay_boder) {
83
+ const overlay_box = document.createElement('div');
84
+ overlay_box.classList.add('dk-overlay_box');
85
+ if (overlay_box) {
86
+ const closeX = document.createElement('span');
87
+ closeX.innerText = 'X';
88
+ closeX.onclick = () => {
89
+ document.body.removeChild(dk_overlay);
90
+ };
91
+ closeX.style.cssText = `font-size: 25px;cursor: pointer;float: right;font-weight: bold;color: #157272a6;margin: -18px -8px 0 0;`;
92
+
93
+ const divImage = document.createElement('div');
94
+ divImage.style.cssText = `height: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;`;
95
+ divImage.innerHTML = `<img style='position: fixed;opacity: 0.1;width: 150px;' src='${(DK.varHide.currentScriptPath + '/' + imageName)}'/>`;
96
+ const overlay_inner = document.createElement('span');
97
+ overlay_inner.style.cssText = 'font-weight: bold;overflow-wrap: anywhere;max-width: 500px;z-index: 1;overflow: auto;';
98
+ overlay_inner.classList.add('dk-overlay_inner');
99
+
100
+ overlay_box.appendChild(closeX);
101
+ overlay_box.appendChild(divImage);
102
+ divImage.appendChild(overlay_inner);
103
+ }
104
+ overlay_boder.appendChild(overlay_box);
105
+ }
106
+
107
+ dk_overlay.appendChild(overlay_boder);
108
+ document.body.appendChild(dk_overlay);
109
+ }
110
+ var dialog = dk_overlay.getElementsByClassName('dk-overlay_inner')[0];
111
+ dialog.innerHTML = mess;
112
+ const scripts = dialog.getElementsByTagName('script');
113
+ for (let i = 0; i < scripts.length; i++) {
114
+ const script = scripts[i];
115
+ const scriptContent = script.textContent || script.innerText;
116
+ const scriptFunction = new Function(scriptContent);
117
+ scriptFunction();
118
+ }
119
+ const maxWidthSpan = document.body.clientWidth - 60;
120
+ dialog.style.maxWidth = (maxWidthSpan > 800 ? 800 : maxWidthSpan) + 'px';
121
+ dk_overlay.style.display = 'block';
122
+ const imgTag = dk_overlay.getElementsByTagName('img')[0];
123
+ imgTag.style.height = dialog.parentNode.parentNode.clientHeight + 'px';
124
+ },
125
+ ImportCss: (src) => {
126
+ var link = document.createElement("link");
127
+ link.href = src;
128
+ link.type = "text/css";
129
+ link.rel = "stylesheet";
130
+ link.media = "screen,print";
131
+
132
+ document.getElementsByTagName("head")[0].appendChild(link);
133
+ },
134
+ ImportJS: (src) => {
135
+ var scriptJS = document.createElement("script");
136
+ scriptJS.src = src;
137
+ document.getElementsByTagName("head")[0].appendChild(scriptJS);
138
+ }
139
+ }
140
+ document.addEventListener('DOMContentLoaded', () => {
141
+ const scriptElements = document.getElementsByTagName('script');
142
+ for (let x = 0; x < scriptElements.length; x++) {
143
+ const currentScript = scriptElements[x];
144
+ const scriptPath = currentScript.src;
145
+ if (scriptPath.endsWith('/dk.js')) {
146
+ DK.varHide.currentScriptPath = scriptPath.substring(0, scriptPath.lastIndexOf('/dk.js'))
147
+ DK.ImportCss(DK.varHide.currentScriptPath + '/dk.css');
148
+ setTimeout(() => {
149
+ DK.ImportJS(DK.varHide.currentScriptPath + '/dk_table.js');
150
+ DK.ImportCss(DK.varHide.currentScriptPath + '/dk_table.css');
151
+ }, 100);
152
+ }
153
+ }
154
+ });
@@ -0,0 +1,63 @@
1
+ .dk-table-x1 {
2
+ font-family: Arial, Helvetica, sans-serif;
3
+ border-collapse: collapse;
4
+ width: 100%;
5
+ min-width: 800px;
6
+ }
7
+
8
+ .dk-table-x1 th {
9
+ padding: 5px;
10
+ font-size: 15px;
11
+ }
12
+ .dk-table-x1 td {
13
+ font-size: 13px;
14
+ border: 1px solid #ddd;
15
+ }
16
+ .dk-table-x1 tr:nth-child(even) {
17
+ background-color: #f2f2f2;
18
+ }
19
+
20
+ .dk-table-x1 tr:hover {
21
+ background-color: #ddd;
22
+ }
23
+
24
+ .dk-table-x1 th {
25
+ padding-top: 12px;
26
+ padding-bottom: 12px;
27
+ text-align: left;
28
+ background-color: #04aa6d;
29
+ color: white;
30
+ font-weight: bold;
31
+ border: 1px solid;
32
+ }
33
+
34
+ .dk-table-x1 input[type="checkbox"] {
35
+ min-height: 22px;
36
+ width: 30px;
37
+ margin: auto;
38
+ display: block;
39
+ }
40
+ .dk-table-x1 input[type="checkbox"]:disabled {
41
+ cursor: not-allowed;
42
+ }
43
+ .dk-table-x1 input:not([type="checkbox"]) {
44
+ width: 100%;
45
+ }
46
+ .dk-table-x1 input:not(:disabled) {
47
+ display: block;
48
+ color: #495057;
49
+ background-color: #fff;
50
+ background-image: none;
51
+ background-clip: padding-box;
52
+ border: 1px solid rgba(0, 0, 0, 0.15);
53
+ border-radius: 0.25rem;
54
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
55
+ }
56
+ .dk-actionsBar {
57
+ padding: 5px 10px;
58
+ width: max-content;
59
+ }
60
+ .dk-actionsBar button {
61
+ border-radius: 6px;
62
+ border: none;
63
+ }
@@ -0,0 +1,252 @@
1
+ const DKTable = {
2
+ rowOnFocus: {},
3
+ rowClick: (sender) => {
4
+ const trTag = sender.currentTarget;
5
+ const table = trTag.upParent('table');
6
+ if (trTag.dataset.editting == "true") return;
7
+ const cellIndex = sender.target.cellIndex;
8
+ if (DKTable.rowOnFocus[table.id]) {
9
+ const lastRow = DKTable.rowOnFocus[table.id];
10
+ DKTable.hideUpdateRecord(lastRow, table, false);
11
+ }
12
+ DKTable.rowOnFocus[table.id] = trTag;
13
+
14
+ const storeData = JSON.parse(table.dataset.store);
15
+ const fieldTypes = JSON.parse(table.dataset.fieldType);
16
+ const primaryKey = table.dataset.primaryKey;
17
+ const currentKeyValue = trTag.dataset.primaryValue;
18
+
19
+ const cache = JSON.parse(table.dataset.cache || JSON.stringify({ updated: [], deleted: [] }));
20
+ let objectCurrent = cache.updated.find(f => f[primaryKey] == currentKeyValue);
21
+ if (!objectCurrent) {
22
+ objectCurrent = storeData.find(f => f[primaryKey] == currentKeyValue);
23
+ }
24
+ DKTable.hideLoadRecord(trTag, objectCurrent, fieldTypes, sender.target);
25
+ console.log('Your input is: ', sender.target);
26
+ var cell = trTag.cells[cellIndex];
27
+ if (cell?.children[0]) {
28
+ cell.children[0].focus();
29
+ }
30
+ },
31
+ hideUpdateRecord: (trTag = new HTMLElement(), table = new HTMLElement(), isClear = false) => {
32
+ if (trTag.dataset.editting == 'false') {
33
+ return;
34
+ }
35
+ const storeData = JSON.parse(table.dataset.store);
36
+ const fieldTypes = JSON.parse(table.dataset.fieldType);
37
+ const primaryKey = table.dataset.primaryKey;
38
+ const currentKeyValue = trTag.dataset.primaryValue;
39
+ const objectCurrent = storeData.find(f => f[primaryKey] == currentKeyValue) || {};
40
+ ///
41
+ const cache = JSON.parse(table.dataset.cache || JSON.stringify({ updated: [], deleted: [] }));
42
+ let itemOnCache = cache.updated.find(f => f[primaryKey] == currentKeyValue);
43
+ if (!itemOnCache) {
44
+ if (isClear) {
45
+ itemOnCache = objectCurrent;
46
+ DKTable.rowOnFocus[table.id] = undefined;
47
+ } else {
48
+ cache.updated.push({ ...objectCurrent });
49
+ itemOnCache = cache.updated.find(f => f[primaryKey] == currentKeyValue);
50
+ }
51
+ }
52
+ if (!isClear) {
53
+ fieldTypes.forEach(field => {
54
+ const input = trTag.querySelector(`input[name="${field.fieldName}"]`).closest('input');
55
+ if (input) {
56
+ switch (input.type) {
57
+ case 'checkbox':
58
+ itemOnCache[field.fieldName] = input.checked;
59
+ break;
60
+ default:
61
+ itemOnCache[field.fieldName] = input.value;
62
+ break;
63
+ }
64
+ }
65
+ });
66
+ }
67
+ trTag.dataset.primaryValue = itemOnCache[primaryKey];
68
+ trTag.innerHTML = "";
69
+ fieldTypes.forEach(field => {
70
+ const td = document.createElement('td');
71
+ switch (field.dataType) {
72
+ case "boolean":
73
+ td.innerHTML = `<input type="checkbox" ${(itemOnCache[field.fieldName] ? 'checked' : '')} onclick='DKTable.inputCheckboxReadOnly(event)'>`; break;
74
+ default:
75
+ td.innerText = itemOnCache[field.fieldName]; break;
76
+ }
77
+ trTag.appendChild(td);
78
+ });
79
+
80
+ let areEqual = true;
81
+ let hasChild = false;
82
+ for (const key in itemOnCache) {
83
+ hasChild = true;
84
+ if (objectCurrent[key] !== itemOnCache[key]) {
85
+ areEqual = false;
86
+ break;
87
+ }
88
+ }
89
+ if (areEqual && hasChild) {
90
+ cache.updated = cache.updated.filter(obj => obj[primaryKey] !== itemOnCache[primaryKey]);
91
+ }
92
+ trTag.dataset.editting = "false";
93
+ table.dataset.cache = JSON.stringify(cache);
94
+ },
95
+ hideLoadRecord: (trTag = new HTMLElement(), data = {}, fieldTypes = []) => {
96
+ const inputWs = [];
97
+ for (let index = 0; index < trTag.children.length; index++) {
98
+ const element = trTag.children[index];
99
+ inputWs.push(element.clientWidth);
100
+ }
101
+ trTag.innerHTML = "";
102
+ let firsttd = null;
103
+ let ccinput = 0;
104
+ fieldTypes.forEach(field => {
105
+ const td = document.createElement('td');
106
+ td.style.minWidth = inputWs[ccinput++] + 'px';
107
+ switch (field.dataType) {
108
+ case "boolean":
109
+ td.innerHTML = `<input name="${field.fieldName}" type="checkbox" ${data[field.fieldName] ? 'checked' : ''}>`;
110
+ break;
111
+ case "number":
112
+ td.innerHTML = `<input name="${field.fieldName}" type='number' value='${data[field.fieldName] || 0}'>`;
113
+ break;
114
+ case "date":
115
+ td.innerHTML = `<input name="${field.fieldName}" type='date' value='${data[field.fieldName] || ""}'>`;
116
+ break;
117
+ default:
118
+ td.innerHTML = `<input name="${field.fieldName}" type='text' value='${data[field.fieldName] || ""}'>`;
119
+ break;
120
+ }
121
+ firsttd = firsttd || td;
122
+ trTag.appendChild(td);
123
+ });
124
+ // firsttd.children[0].focus();
125
+ trTag.dataset.editting = "true";
126
+ },
127
+ CommitDataTable: (table = new HTMLElement()) => {
128
+ const storeData = JSON.parse(table.dataset.store);
129
+ if (DKTable.rowOnFocus[table.id]) {
130
+ const lastRow = DKTable.rowOnFocus[table.id];
131
+ DKTable.hideUpdateRecord(lastRow, table, false);
132
+ }
133
+
134
+ const cache = JSON.parse(table.dataset.cache || JSON.stringify({ updated: [], deleted: [] }));
135
+ const host = document.location.origin;
136
+ DK.showBusy(true, "Đang cập nhật thông tin phân quyền video");
137
+ fetch(host + table.dataset.postTo, {
138
+ method: "POST",
139
+ headers: {
140
+ 'Content-Type': 'application/json'
141
+ },
142
+ body: JSON.stringify(cache)
143
+ })
144
+ .then(response => {
145
+ if (response.ok) {
146
+ return response.json();
147
+ } else {
148
+ throw new Error('API request failed');
149
+ }
150
+ })
151
+ .then(res => {
152
+ DK.showBusy(false, "Đang cập nhật thông tin phân quyền video");
153
+ if (res.success) {
154
+ DK.showMessage("Đã cập nhật thành công", 1);
155
+ }
156
+ else {
157
+ DK.showMessage(res.message, 4);
158
+ }
159
+ })
160
+ .catch(error => {
161
+ DK.showBusy(false, "Đang cập nhật thông tin phân quyền video");
162
+ DK.showMessage(error, 4);
163
+ });;
164
+ },
165
+ DeleteRowCurrent: (table = new HTMLElement()) => {
166
+ if (DKTable.rowOnFocus[table.id]) {
167
+ const storeData = JSON.parse(table.dataset.store);
168
+ const primaryKey = table.dataset.primaryKey;
169
+ const lastRow = DKTable.rowOnFocus[table.id];
170
+ const currentKeyValue = lastRow.dataset.primaryValue;
171
+ const objectOriginal = storeData.find(f => f[primaryKey] == currentKeyValue);
172
+ ///
173
+ const cache = JSON.parse(table.dataset.cache || JSON.stringify({ updated: [], deleted: [] }));
174
+ let objectCache = cache.updated.find(f => f[primaryKey] == currentKeyValue);
175
+ if (objectOriginal) {
176
+ cache.deleted.push(objectOriginal);
177
+ }
178
+ cache.updated = cache.updated.filter(obj => obj[primaryKey] !== objectCache[primaryKey]);
179
+ table.dataset.cache = JSON.stringify(cache);
180
+ lastRow.remove();
181
+ delete DKTable.rowOnFocus[table.id];
182
+ }
183
+ },
184
+ AddNewRow: (table = new HTMLElement()) => {
185
+ const fieldTypes = JSON.parse(table.dataset.fieldType);
186
+ const primaryKey = table.dataset.primaryKey;
187
+ const cache = JSON.parse(table.dataset.cache || JSON.stringify({ updated: [], deleted: [] }));
188
+
189
+ const tbody = table.downChild('tbody');
190
+ const trTag = document.createElement('tr');
191
+ trTag.onclick = () => { DKTable.rowClick(trTag) };
192
+ const currentTicks = new Date().getTime();
193
+ if (!fieldTypes.find(f => f.fieldName == primaryKey)) {
194
+ trTag.dataset.primaryValue = "AutoGenerate_" + currentTicks.toString();
195
+ cache.updated.push(JSON.parse(`{"${primaryKey}":"${trTag.dataset.primaryValue}"}`));
196
+ table.dataset.cache = JSON.stringify(cache);
197
+ }
198
+ trTag.innerHTML = "";
199
+ fieldTypes.forEach(field => {
200
+ const td = document.createElement('td');
201
+ switch (field.dataType) {
202
+ case "boolean":
203
+ td.innerHTML = `<input type="checkbox" disabled>`;
204
+ break;
205
+ case "number":
206
+ td.innerText = 0;
207
+ break;
208
+ default:
209
+ td.innerText = "";
210
+ break;
211
+ }
212
+ trTag.appendChild(td);
213
+ });
214
+ trTag.dataset.editting = "false";
215
+ tbody.appendChild(trTag);
216
+ },
217
+ keyDownOnTable: (keyCode, sender) => {
218
+ // ESC
219
+ if (keyCode == 27) {
220
+ const table = sender;
221
+ if (DKTable.rowOnFocus[table.id]) {
222
+ const lastRow = DKTable.rowOnFocus[table.id];
223
+ DKTable.hideUpdateRecord(lastRow, table, true);
224
+ }
225
+ }
226
+ },
227
+ inputCheckboxReadOnly: (event) => {
228
+ event.preventDefault();
229
+ }
230
+ }
231
+ HTMLElement.prototype.upParent = function (name) {
232
+ if (this.parentNode.tagName.toLowerCase() == name.toLowerCase()) {
233
+ return this.parentNode;
234
+ }
235
+ if (this.parentNode) {
236
+ return this.parentNode.upParent(name);
237
+ }
238
+ return null;
239
+ }
240
+ HTMLElement.prototype.downChild = function (name) {
241
+ for (let index = 0; index < this.children.length; index++) {
242
+ const element = this.children[index];
243
+ if (element.tagName.toLowerCase() == name.toLowerCase()) {
244
+ return element;
245
+ }
246
+
247
+ const downTry = element.downChild(name);
248
+ if (downTry)
249
+ return downTry;
250
+ }
251
+ return null;
252
+ }
Binary file
Binary file