mbkbucket 1.3.0 → 1.5.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.
- package/.env.example +6 -3
- package/.github/PACKAGE.md +0 -4
- package/README.md +59 -14
- package/index.d.ts +192 -39
- package/index.js +4 -79
- package/lib/config/index.js +134 -1
- package/lib/index.js +2 -2
- package/lib/routes/api.js +501 -0
- package/lib/routes/index.js +17 -0
- package/lib/routes/info.js +28 -0
- package/lib/routes/view.js +458 -0
- package/lib/s3.js +297 -54
- package/package.json +3 -2
- package/public/bucketadmin.css +144 -32
- package/public/bucketadmin.js +253 -67
- package/views/bucket.handlebars +3 -3
- package/views/bucketadmin_alerts.handlebars +15 -0
- package/views/bucketadmin_delete_modal.handlebars +40 -0
- package/views/bucketadmin_filelist_skeleton.handlebars +20 -0
- package/views/bucketadmin_preview_modal.handlebars +33 -0
- package/views/bucketadmincontent.handlebars +7 -95
- package/views/mbkbucket_info.handlebars +226 -0
- package/lib/bucket.js +0 -726
- package/views/info.handlebars +0 -1056
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- Delete Confirmation Modal -->
|
|
2
|
+
<div class="modal" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
|
3
|
+
<div class="modal-dialog">
|
|
4
|
+
<div class="modal-content">
|
|
5
|
+
<div class="modal-header">
|
|
6
|
+
<h5 class="modal-title" id="deleteModalLabel">
|
|
7
|
+
<i class="fas fa-exclamation-triangle"></i>
|
|
8
|
+
Confirm Delete
|
|
9
|
+
</h5>
|
|
10
|
+
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"
|
|
11
|
+
onclick="closeModal()">×</button>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="modal-body">
|
|
14
|
+
<i class="fas fa-trash-alt fa-3x"></i>
|
|
15
|
+
<h6>Are you sure you want to delete this file?</h6>
|
|
16
|
+
<p class="modal-body-text-style">
|
|
17
|
+
<strong id="deleteFileName" style="color: var(--dark-color-ml);"></strong>
|
|
18
|
+
</p>
|
|
19
|
+
<p class="modal-body-text-top">
|
|
20
|
+
<small>This action cannot be undone.</small>
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="modal-footer">
|
|
24
|
+
<button type="button" class="btn btn-secondary" onclick="closeModal()">
|
|
25
|
+
<i class="fas fa-times"></i>
|
|
26
|
+
Cancel
|
|
27
|
+
</button>
|
|
28
|
+
<form id="deleteForm" method="post" action="/mbkbucket/delete" style="display: inline;">
|
|
29
|
+
<input type="hidden" name="key" id="deleteKey">
|
|
30
|
+
<input type="hidden" name="prefix" value="{{prefix}}">
|
|
31
|
+
<input type="hidden" name="folder" id="deleteIsFolder" value="">
|
|
32
|
+
<button type="submit" class="btn btn-danger" id="deleteConfirmButton">
|
|
33
|
+
<i class="fas fa-trash"></i>
|
|
34
|
+
<span id="deleteConfirmLabel">Delete File</span>
|
|
35
|
+
</button>
|
|
36
|
+
</form>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div class="table-responsive" aria-label="Loading files" aria-busy="true">
|
|
2
|
+
<div class="skeleton-row">
|
|
3
|
+
<div class="skeleton-box s-40"></div>
|
|
4
|
+
<div class="skeleton-box s-200"></div>
|
|
5
|
+
<div class="skeleton-box s-80"></div>
|
|
6
|
+
<div class="skeleton-box s-200"></div>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="skeleton-row">
|
|
9
|
+
<div class="skeleton-box s-40"></div>
|
|
10
|
+
<div class="skeleton-box s-200"></div>
|
|
11
|
+
<div class="skeleton-box s-80"></div>
|
|
12
|
+
<div class="skeleton-box s-200"></div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="skeleton-row">
|
|
15
|
+
<div class="skeleton-box s-40"></div>
|
|
16
|
+
<div class="skeleton-box s-200"></div>
|
|
17
|
+
<div class="skeleton-box s-80"></div>
|
|
18
|
+
<div class="skeleton-box s-200"></div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- Preview Modal -->
|
|
2
|
+
<div class="modal" id="previewModal" role="dialog" aria-modal="true" aria-labelledby="previewModalLabel" tabindex="-1">
|
|
3
|
+
<div class="modal-dialog preview-modal-dialog" role="document">
|
|
4
|
+
<div class="modal-content">
|
|
5
|
+
<div class="modal-header">
|
|
6
|
+
<h5 class="modal-title" id="previewModalLabel"><i class="fas fa-eye"></i> <span
|
|
7
|
+
id="previewFileName">Preview</span></h5>
|
|
8
|
+
<div class="preview-header-controls">
|
|
9
|
+
<button id="previewFullscreenBtn" class="btn btn-outline-secondary btn-sm" type="button"
|
|
10
|
+
aria-label="Toggle fullscreen"><i class="fas fa-expand"></i></button>
|
|
11
|
+
<button type="button" class="btn-close" aria-label="Close preview" id="previewCloseBtn">×</button>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="modal-body">
|
|
15
|
+
<div class="preview-content" id="previewContent" aria-live="polite">
|
|
16
|
+
<div class="empty-preview">
|
|
17
|
+
<i class="fas fa-spinner fa-spin"></i>
|
|
18
|
+
<div class="modal-header-spacing">Loading preview...</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="modal-footer preview-footer">
|
|
23
|
+
<div class="preview-actions">
|
|
24
|
+
<a id="previewOpenBtn" class="btn btn-outline-secondary" target="_blank" rel="noopener noreferrer" href="#"><i
|
|
25
|
+
class="fas fa-external-link-alt"></i> Open</a>
|
|
26
|
+
<a id="previewDownloadBtn" class="btn btn-success" download href="#"><i class="fas fa-download"></i>
|
|
27
|
+
Download</a>
|
|
28
|
+
<button type="button" class="btn btn-secondary" id="previewCloseFooter">Close</button>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
@@ -13,28 +13,15 @@
|
|
|
13
13
|
<p id="filterInfo">Loading file information...</p>
|
|
14
14
|
</div>
|
|
15
15
|
<div style="margin-left: auto;">
|
|
16
|
-
<
|
|
17
|
-
|
|
16
|
+
<span class="stats-bucket-badge">
|
|
17
|
+
<i class="fas fa-database" style="margin-right:0.4rem;"></i>{{bucketvar}}
|
|
18
|
+
</span>
|
|
18
19
|
</div>
|
|
19
20
|
</div>
|
|
20
21
|
</div>
|
|
21
22
|
</div>
|
|
22
23
|
|
|
23
|
-
{{
|
|
24
|
-
<div class="alert alert-success alert-dismissible fade show" role="alert" id="successAlert">
|
|
25
|
-
<i class="fas fa-check-circle"></i>
|
|
26
|
-
<span id="successMessage">{{message}}</span>
|
|
27
|
-
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">×</button>
|
|
28
|
-
</div>
|
|
29
|
-
{{/if}}
|
|
30
|
-
|
|
31
|
-
{{#if error}}
|
|
32
|
-
<div class="alert alert-danger alert-dismissible fade show" role="alert" id="errorAlert">
|
|
33
|
-
<i class="fas fa-exclamation-triangle"></i>
|
|
34
|
-
<span id="errorMessage">{{error}}</span>
|
|
35
|
-
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">×</button>
|
|
36
|
-
</div>
|
|
37
|
-
{{/if}}
|
|
24
|
+
{{> bucketadmin_alerts }}
|
|
38
25
|
|
|
39
26
|
<div class="mb-4">
|
|
40
27
|
<!-- Upload Form -->
|
|
@@ -141,11 +128,7 @@
|
|
|
141
128
|
</div>
|
|
142
129
|
<div class="card-body" style="padding: 0;">
|
|
143
130
|
<div id="fileListContainer">
|
|
144
|
-
|
|
145
|
-
<i class="fas fa-spinner fa-spin"></i>
|
|
146
|
-
<h4>Loading files...</h4>
|
|
147
|
-
<p>Please wait while we fetch your files.</p>
|
|
148
|
-
</div>
|
|
131
|
+
{{> bucketadmin_filelist_skeleton }}
|
|
149
132
|
</div>
|
|
150
133
|
|
|
151
134
|
<!-- Pagination -->
|
|
@@ -158,80 +141,9 @@
|
|
|
158
141
|
</div>
|
|
159
142
|
</div>
|
|
160
143
|
|
|
161
|
-
|
|
162
|
-
<div class="modal" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
|
163
|
-
<div class="modal-dialog">
|
|
164
|
-
<div class="modal-content">
|
|
165
|
-
<div class="modal-header">
|
|
166
|
-
<h5 class="modal-title" id="deleteModalLabel">
|
|
167
|
-
<i class="fas fa-exclamation-triangle"></i>
|
|
168
|
-
Confirm Delete
|
|
169
|
-
</h5>
|
|
170
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"
|
|
171
|
-
onclick="closeModal()">×</button>
|
|
172
|
-
</div>
|
|
173
|
-
<div class="modal-body">
|
|
174
|
-
<i class="fas fa-trash-alt fa-3x"></i>
|
|
175
|
-
<h6>Are you sure you want to delete this file?</h6>
|
|
176
|
-
<p class="modal-body-text-style">
|
|
177
|
-
<strong id="deleteFileName" style="color: var(--dark-color-ml);"></strong>
|
|
178
|
-
</p>
|
|
179
|
-
<p class="modal-body-text-top">
|
|
180
|
-
<small>This action cannot be undone.</small>
|
|
181
|
-
</p>
|
|
182
|
-
</div>
|
|
183
|
-
<div class="modal-footer">
|
|
184
|
-
<button type="button" class="btn btn-secondary" onclick="closeModal()">
|
|
185
|
-
<i class="fas fa-times"></i>
|
|
186
|
-
Cancel
|
|
187
|
-
</button>
|
|
188
|
-
<form id="deleteForm" method="post" action="/mbkbucket/delete" style="display: inline;">
|
|
189
|
-
<input type="hidden" name="key" id="deleteKey">
|
|
190
|
-
<input type="hidden" name="prefix" value="{{prefix}}">
|
|
191
|
-
<input type="hidden" name="folder" id="deleteIsFolder" value="">
|
|
192
|
-
<button type="submit" class="btn btn-danger" id="deleteConfirmButton">
|
|
193
|
-
<i class="fas fa-trash"></i>
|
|
194
|
-
<span id="deleteConfirmLabel">Delete File</span>
|
|
195
|
-
</button>
|
|
196
|
-
</form>
|
|
197
|
-
</div>
|
|
198
|
-
</div>
|
|
199
|
-
</div>
|
|
200
|
-
</div>
|
|
144
|
+
{{> bucketadmin_delete_modal }}
|
|
201
145
|
|
|
202
|
-
|
|
203
|
-
<div class="modal" id="previewModal" role="dialog" aria-modal="true" aria-labelledby="previewModalLabel" tabindex="-1">
|
|
204
|
-
<div class="modal-dialog preview-modal-dialog" role="document">
|
|
205
|
-
<div class="modal-content">
|
|
206
|
-
<div class="modal-header">
|
|
207
|
-
<h5 class="modal-title" id="previewModalLabel"><i class="fas fa-eye"></i> <span
|
|
208
|
-
id="previewFileName">Preview</span></h5>
|
|
209
|
-
<div class="preview-header-controls">
|
|
210
|
-
<button id="previewFullscreenBtn" class="btn btn-outline-secondary btn-sm" type="button"
|
|
211
|
-
aria-label="Toggle fullscreen"><i class="fas fa-expand"></i></button>
|
|
212
|
-
<button type="button" class="btn-close" aria-label="Close preview" id="previewCloseBtn">×</button>
|
|
213
|
-
</div>
|
|
214
|
-
</div>
|
|
215
|
-
<div class="modal-body">
|
|
216
|
-
<div class="preview-content" id="previewContent" aria-live="polite">
|
|
217
|
-
<div class="empty-preview">
|
|
218
|
-
<i class="fas fa-spinner fa-spin"></i>
|
|
219
|
-
<div class="modal-header-spacing">Loading preview...</div>
|
|
220
|
-
</div>
|
|
221
|
-
</div>
|
|
222
|
-
</div>
|
|
223
|
-
<div class="modal-footer preview-footer">
|
|
224
|
-
<div class="preview-actions">
|
|
225
|
-
<a id="previewOpenBtn" class="btn btn-outline-secondary" target="_blank" rel="noopener noreferrer" href="#"><i
|
|
226
|
-
class="fas fa-external-link-alt"></i> Open</a>
|
|
227
|
-
<a id="previewDownloadBtn" class="btn btn-success" download href="#"><i class="fas fa-download"></i>
|
|
228
|
-
Download</a>
|
|
229
|
-
<button type="button" class="btn btn-secondary" id="previewCloseFooter">Close</button>
|
|
230
|
-
</div>
|
|
231
|
-
</div>
|
|
232
|
-
</div>
|
|
233
|
-
</div>
|
|
234
|
-
</div>
|
|
146
|
+
{{> bucketadmin_preview_modal }}
|
|
235
147
|
|
|
236
148
|
<!-- Toast Container -->
|
|
237
149
|
<div id="toast-container" class="toast-container"></div>
|
|
@@ -0,0 +1,226 @@
|
|
|
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
|
+
<meta name="description"
|
|
8
|
+
content="Log in to portal.mbktech.org to access your resources and manage projects securely.">
|
|
9
|
+
<meta name="keywords" content="MBK Tech, Web-Portal, Web, Portal, Admin-Panel, Admin, login">
|
|
10
|
+
<meta property="og:title" content="Version and Configuration Information | MBK Tech" />
|
|
11
|
+
<meta property="og:image" content="https://mbktech.org/Assets/Images/Icon/logo.png" />
|
|
12
|
+
<meta property="og:url" content="/mbkbucket/info">
|
|
13
|
+
<title>Version and Configuration Information | MBK Tech Portal</title>
|
|
14
|
+
<link rel="icon" type="image/svg+xml" href="/icon.svg">
|
|
15
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
16
|
+
{{> sharedStyles}}
|
|
17
|
+
<style>
|
|
18
|
+
.info-box {
|
|
19
|
+
background: rgba(10, 20, 20, 0.95);
|
|
20
|
+
backdrop-filter: blur(10px);
|
|
21
|
+
border-radius: var(--border-radius);
|
|
22
|
+
padding: 2.5rem;
|
|
23
|
+
width: 100%;
|
|
24
|
+
max-width: 900px;
|
|
25
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
|
26
|
+
border: 1px solid rgba(0, 184, 148, 0.2);
|
|
27
|
+
position: relative;
|
|
28
|
+
z-index: 2;
|
|
29
|
+
transition: var(--transition);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.info-box:hover {
|
|
33
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
|
|
34
|
+
border-color: rgba(0, 184, 148, 0.3);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.info-title {
|
|
38
|
+
text-align: center;
|
|
39
|
+
margin-bottom: 2rem;
|
|
40
|
+
font-size: 2rem;
|
|
41
|
+
position: relative;
|
|
42
|
+
color: var(--light);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.info-title::after {
|
|
46
|
+
content: '';
|
|
47
|
+
position: absolute;
|
|
48
|
+
bottom: -10px;
|
|
49
|
+
left: 50%;
|
|
50
|
+
transform: translateX(-50%);
|
|
51
|
+
width: 100px;
|
|
52
|
+
height: 4px;
|
|
53
|
+
background-color: var(--accent);
|
|
54
|
+
border-radius: 2px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.info-section {
|
|
58
|
+
margin-bottom: 2rem;
|
|
59
|
+
padding: 1.5rem;
|
|
60
|
+
border: 1px solid rgba(0, 184, 148, 0.2);
|
|
61
|
+
border-radius: var(--border-radius);
|
|
62
|
+
background-color: rgba(0, 0, 0, 0.2);
|
|
63
|
+
transition: var(--transition);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.info-section:hover {
|
|
67
|
+
border-color: rgba(0, 184, 148, 0.4);
|
|
68
|
+
background-color: rgba(0, 0, 0, 0.3);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.info-section h2 {
|
|
72
|
+
color: var(--accent);
|
|
73
|
+
border-bottom: 2px solid rgba(0, 184, 148, 0.3);
|
|
74
|
+
padding-bottom: 10px;
|
|
75
|
+
margin-top: 0;
|
|
76
|
+
margin-bottom: 1.5rem;
|
|
77
|
+
font-size: 1.4rem;
|
|
78
|
+
display: flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 10px;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.info-section h2 i {
|
|
84
|
+
font-size: 1.2rem;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.info-row {
|
|
88
|
+
display: flex;
|
|
89
|
+
margin-bottom: 1rem;
|
|
90
|
+
padding-bottom: 1rem;
|
|
91
|
+
border-bottom: 1px solid rgba(0, 184, 148, 0.1);
|
|
92
|
+
align-items: center;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.info-row:last-child {
|
|
96
|
+
border-bottom: none;
|
|
97
|
+
margin-bottom: 0;
|
|
98
|
+
padding-bottom: 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.info-label {
|
|
102
|
+
font-weight: 600;
|
|
103
|
+
color: var(--text-light);
|
|
104
|
+
min-width: 240px;
|
|
105
|
+
font-size: 1rem;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.info-value {
|
|
109
|
+
flex: 1;
|
|
110
|
+
word-break: break-word;
|
|
111
|
+
color: var(--text);
|
|
112
|
+
font-size: 1rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.version-status {
|
|
116
|
+
display: inline-flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
gap: 6px;
|
|
119
|
+
padding: 4px 12px;
|
|
120
|
+
border-radius: 20px;
|
|
121
|
+
font-size: 0.85rem;
|
|
122
|
+
font-weight: 600;
|
|
123
|
+
margin-left: 10px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.version-up-to-date {
|
|
127
|
+
background: rgba(67, 233, 123, 0.2);
|
|
128
|
+
color: var(--success);
|
|
129
|
+
border: 1px solid var(--success);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.version-outdated {
|
|
133
|
+
background: rgba(255, 118, 117, 0.2);
|
|
134
|
+
color: var(--danger);
|
|
135
|
+
border: 1px solid var(--danger);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.version-fetch-error {
|
|
139
|
+
background: rgba(255, 209, 102, 0.2);
|
|
140
|
+
color: var(--warning);
|
|
141
|
+
border: 1px solid var(--warning);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@media (max-width: 768px) {
|
|
145
|
+
.info-box {
|
|
146
|
+
padding: 2rem;
|
|
147
|
+
max-width: 100%;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.info-title {
|
|
151
|
+
font-size: 1.8rem;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.info-row {
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
align-items: flex-start;
|
|
157
|
+
gap: 0.5rem;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.info-label {
|
|
161
|
+
min-width: unset;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.info-section h2 {
|
|
165
|
+
font-size: 1.2rem;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@media (max-width: 576px) {
|
|
170
|
+
.info-box {
|
|
171
|
+
padding: 1.5rem;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.info-section {
|
|
175
|
+
padding: 1rem;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
</style>
|
|
179
|
+
</head>
|
|
180
|
+
|
|
181
|
+
<body>
|
|
182
|
+
<header>
|
|
183
|
+
<div class="header-container">
|
|
184
|
+
<a class="logo">
|
|
185
|
+
<img src="/icon.svg" alt="Logo" class="logo-image" />
|
|
186
|
+
<span class="logo-text">BK <span>Tech</span></span>
|
|
187
|
+
<span class="logo-comp">{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}
|
|
188
|
+
</a>
|
|
189
|
+
|
|
190
|
+
{{> profilemenu}}
|
|
191
|
+
</div>
|
|
192
|
+
</header>
|
|
193
|
+
<section class="login-container">
|
|
194
|
+
<i class="fas fa-info-circle ai-element"></i>
|
|
195
|
+
<i class="fas fa-cogs ai-element"></i>
|
|
196
|
+
<i class="fas fa-server ai-element"></i>
|
|
197
|
+
<i class="fas fa-code-branch ai-element"></i>
|
|
198
|
+
|
|
199
|
+
<div class="info-box">
|
|
200
|
+
<h1 class="info-title">System Information</h1>
|
|
201
|
+
|
|
202
|
+
<div class="info-section">
|
|
203
|
+
<h2><i class="fas fa-code-branch"></i> Version Information</h2>
|
|
204
|
+
<div class="info-row">
|
|
205
|
+
<div class="info-label">Current Version:</div>
|
|
206
|
+
<div class="info-value" id="CurrentVersion">{{CurrentVersion}}</div>
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
<div class="info-row">
|
|
210
|
+
<div class="info-label">Latest Version:</div>
|
|
211
|
+
<div class="info-value">
|
|
212
|
+
{{latestVersion}}
|
|
213
|
+
{{#if (eq latestVersion CurrentVersion)}}
|
|
214
|
+
<span class="version-status version-up-to-date">
|
|
215
|
+
<i class="fas fa-check-circle"></i> Up to date
|
|
216
|
+
</span>
|
|
217
|
+
{{/if}}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
</section>
|
|
223
|
+
|
|
224
|
+
</body>
|
|
225
|
+
|
|
226
|
+
</html>
|