jskelet 0.2.4 → 0.3.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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Önbellek panelinin sözlüğü.
2
+ * Admin panelinin sözlüğü.
3
3
  *
4
4
  * Panel build hattından geçmiyor, bu yüzden hazır bir i18n kütüphanesi yok:
5
5
  * düz bir nesne, `{ad}` yer tutucusu ve `data-i18n` gezintisi kadarı yetiyor.
@@ -13,7 +13,7 @@
13
13
  * sunucuya taşınmasının bir karşılığı yok.
14
14
  */
15
15
 
16
- const STORAGE_KEY = "jskelet.cache-panel.lang";
16
+ const STORAGE_KEY = "jskelet.admin.lang";
17
17
 
18
18
  /**
19
19
  * Sözlükler. Dışa açık, çünkü testler iki dilin anahtar kümesinin birebir
@@ -24,12 +24,20 @@ const STORAGE_KEY = "jskelet.cache-panel.lang";
24
24
  export const MESSAGES = {
25
25
  en: {
26
26
  /* --- kabuk --- */
27
+ "nav.overview": "Overview",
27
28
  "nav.cache": "Cache",
29
+ "nav.routes": "Routes",
30
+ "nav.views": "Views",
31
+ "nav.logs": "Logs",
32
+ "nav.system": "System",
28
33
  "shell.live": "live",
29
34
  "shell.refresh": "Refresh",
30
35
  "shell.signOut": "Sign out",
31
36
  "shell.language": "Language",
32
37
  "chip.up": "up {value}",
38
+ "chip.sse.live": "SSE live",
39
+ "chip.sse.off": "SSE off",
40
+ "chip.sse.error": "SSE error",
33
41
 
34
42
  /* --- kartlar --- */
35
43
  "card.htmlEntries": "HTML entries",
@@ -215,7 +223,7 @@ export const MESSAGES = {
215
223
  "entries.copyKey": "Copy key",
216
224
 
217
225
  /* --- alt bilgi --- */
218
- "footer.panel": "Cache panel",
226
+ "footer.panel": "Admin panel",
219
227
  "footer.rotates": "Password rotates on restart",
220
228
 
221
229
  /* --- bildirimler --- */
@@ -268,14 +276,49 @@ export const MESSAGES = {
268
276
  "msg.action.unknown": "Unknown action: {type}",
269
277
 
270
278
  /* --- giriş --- */
271
- "login.title": "Cache panel",
272
- "login.lead": "This run's password is printed in the server log (<code>[cache-panel]</code>).",
279
+ "login.title": "Admin panel",
280
+ "login.lead": "This run's password is printed in the server log (<code>ADMIN</code> box).",
273
281
  "login.placeholder": "32-character password",
274
282
  "login.submit": "Unlock",
275
283
  "login.hint": "Three failed attempts block this address for 24 hours.",
276
284
  "login.tooMany": "Too many attempts.",
277
285
  "login.invalid": "Invalid password.",
278
286
 
287
+ "upstream.section": "Upstream",
288
+ "upstream.host": "Host",
289
+ "upstream.rate": "Rate",
290
+ "upstream.state": "State",
291
+ "upstream.empty": "No upstream hosts tracked.",
292
+
293
+ "routes.section": "Registered routes",
294
+ "routes.method": "Method",
295
+ "routes.path": "Path",
296
+ "routes.lastStatus": "Last status",
297
+ "routes.lastMs": "Last ms",
298
+ "routes.hits": "Hits",
299
+ "routes.empty": "No routes.",
300
+ "routes.modules": "Route modules",
301
+ "routes.file": "File",
302
+ "routes.openLogs": "Logs",
303
+
304
+ "views.section": "Views",
305
+ "views.path": "Path",
306
+ "views.kind": "Kind",
307
+ "views.search": "Filter views…",
308
+ "views.empty": "No views.",
309
+
310
+ "logs.section": "Live logs",
311
+ "logs.search": "Search url / message…",
312
+ "logs.kind.all": "all kinds",
313
+ "logs.method.all": "all methods",
314
+ "logs.status.all": "all status",
315
+ "logs.cache.all": "all cache",
316
+ "logs.path": "path / route…",
317
+ "logs.pause": "pause",
318
+ "logs.clear": "Clear view",
319
+ "logs.empty": "No log lines.",
320
+ "logs.shown": "{shown} shown · {total} buffered",
321
+
279
322
  /* --- birimler --- */
280
323
  "unit.second": "s",
281
324
  "unit.minute": "m",
@@ -285,12 +328,20 @@ export const MESSAGES = {
285
328
  },
286
329
 
287
330
  tr: {
331
+ "nav.overview": "Özet",
288
332
  "nav.cache": "Önbellek",
333
+ "nav.routes": "Rotalar",
334
+ "nav.views": "Şablonlar",
335
+ "nav.logs": "Loglar",
336
+ "nav.system": "Sistem",
289
337
  "shell.live": "canlı",
290
338
  "shell.refresh": "Yenile",
291
339
  "shell.signOut": "Çıkış",
292
340
  "shell.language": "Dil",
293
341
  "chip.up": "{value} açık",
342
+ "chip.sse.live": "SSE canlı",
343
+ "chip.sse.off": "SSE kapalı",
344
+ "chip.sse.error": "SSE hata",
294
345
 
295
346
  "card.htmlEntries": "HTML girdisi",
296
347
  "card.htmlMemory": "Bellekteki HTML",
@@ -466,7 +517,7 @@ export const MESSAGES = {
466
517
  "entries.drop": "düşür",
467
518
  "entries.copyKey": "Anahtarı kopyala",
468
519
 
469
- "footer.panel": "Önbellek paneli",
520
+ "footer.panel": "Yönetim paneli",
470
521
  "footer.rotates": "Şifre her restart'ta değişir",
471
522
 
472
523
  "toast.keyCopied": "Anahtar kopyalandı",
@@ -516,14 +567,49 @@ export const MESSAGES = {
516
567
  "msg.prewarm.all": "Bütün yollar ısıtılıyor",
517
568
  "msg.action.unknown": "Bilinmeyen işlem: {type}",
518
569
 
519
- "login.title": "Önbellek paneli",
520
- "login.lead": "Bu turun şifresi sunucu logunda (<code>[cache-panel]</code>).",
570
+ "login.title": "Yönetim paneli",
571
+ "login.lead": "Bu turun şifresi sunucu logundaki <code>ADMIN</code> kutusunda.",
521
572
  "login.placeholder": "32 haneli şifre",
522
573
  "login.submit": "Aç",
523
574
  "login.hint": "Üç başarısız deneme bu adresi 24 saat engeller.",
524
575
  "login.tooMany": "Çok fazla deneme.",
525
576
  "login.invalid": "Şifre geçersiz.",
526
577
 
578
+ "upstream.section": "Upstream",
579
+ "upstream.host": "Host",
580
+ "upstream.rate": "Hız",
581
+ "upstream.state": "Durum",
582
+ "upstream.empty": "İzlenen upstream host yok.",
583
+
584
+ "routes.section": "Kayıtlı rotalar",
585
+ "routes.method": "Method",
586
+ "routes.path": "Yol",
587
+ "routes.lastStatus": "Son status",
588
+ "routes.lastMs": "Son ms",
589
+ "routes.hits": "İsabet",
590
+ "routes.empty": "Rota yok.",
591
+ "routes.modules": "Route modülleri",
592
+ "routes.file": "Dosya",
593
+ "routes.openLogs": "Loglar",
594
+
595
+ "views.section": "Şablonlar",
596
+ "views.path": "Yol",
597
+ "views.kind": "Tür",
598
+ "views.search": "Şablon ara…",
599
+ "views.empty": "Şablon yok.",
600
+
601
+ "logs.section": "Canlı loglar",
602
+ "logs.search": "url / mesaj ara…",
603
+ "logs.kind.all": "tüm türler",
604
+ "logs.method.all": "tüm methodlar",
605
+ "logs.status.all": "tüm status",
606
+ "logs.cache.all": "tüm cache",
607
+ "logs.path": "yol / rota…",
608
+ "logs.pause": "duraklat",
609
+ "logs.clear": "Görünümü temizle",
610
+ "logs.empty": "Log satırı yok.",
611
+ "logs.shown": "{shown} görünüyor · {total} tamponda",
612
+
527
613
  "unit.second": "sn",
528
614
  "unit.minute": "dk",
529
615
  "unit.hour": "sa",
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <meta name="robots" content="noindex, nofollow, noarchive, nosnippet" />
7
7
  <meta name="referrer" content="no-referrer" />
8
- <title>Cache · JSkelet</title>
8
+ <title>Admin · JSkelet</title>
9
9
  <link rel="icon" href="logo.png" />
10
10
  <link rel="stylesheet" href="panel.css" />
11
11
  </head>
@@ -16,7 +16,7 @@
16
16
  <span class="wordmark">JSkelet</span>
17
17
  <span id="language"></span>
18
18
  </div>
19
- <h1 data-i18n="login.title">Cache panel</h1>
19
+ <h1 data-i18n="login.title">Admin panel</h1>
20
20
  <p data-i18n-html="login.lead"></p>
21
21
  <input
22
22
  id="password"
@@ -177,7 +177,8 @@ header .spacer {
177
177
 
178
178
  .crumbs {
179
179
  display: flex;
180
- gap: 8px;
180
+ flex-wrap: wrap;
181
+ gap: 4px 10px;
181
182
  align-items: center;
182
183
  padding-left: 12px;
183
184
  border-left: 1px solid var(--line);
@@ -185,6 +186,53 @@ header .spacer {
185
186
  font-size: 13px;
186
187
  }
187
188
 
189
+ .crumbs a {
190
+ color: var(--muted);
191
+ text-decoration: none;
192
+ }
193
+
194
+ .crumbs a:hover {
195
+ color: var(--text);
196
+ }
197
+
198
+ .crumbs a[aria-current="page"] {
199
+ color: var(--accent);
200
+ font-weight: 600;
201
+ }
202
+
203
+ .page[hidden] {
204
+ display: none !important;
205
+ }
206
+
207
+ .filters {
208
+ flex-wrap: wrap;
209
+ }
210
+
211
+ .log-scroll {
212
+ max-height: min(70vh, 640px);
213
+ }
214
+
215
+ .log-list {
216
+ margin: 0;
217
+ padding: 12px 14px;
218
+ overflow: auto;
219
+ color: var(--text);
220
+ font-size: 12px;
221
+ line-height: 1.45;
222
+ white-space: pre;
223
+ }
224
+
225
+ button.linkish {
226
+ padding: 0;
227
+ border: 0;
228
+ background: none;
229
+ color: var(--accent);
230
+ font: inherit;
231
+ cursor: pointer;
232
+ text-decoration: underline;
233
+ text-underline-offset: 2px;
234
+ }
235
+
188
236
  /* ------------------------------------------------------------------ footer */
189
237
 
190
238
  footer {