Skip to content

Commit 96c5d42

Browse files
committed
Merge branch 'preview'
2 parents 3233e09 + eb060de commit 96c5d42

32 files changed

Lines changed: 1669 additions & 31 deletions

File tree

app/composables/useFieldHelpers.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { AnyFieldApi } from '@/types'
2+
3+
export function useFieldHelpers() {
4+
function isInvalid(field: AnyFieldApi) {
5+
return field.state.meta.isTouched && !field.state.meta.isValid
6+
}
7+
8+
function getAriaInvalid(field: AnyFieldApi) {
9+
return isInvalid(field) ? 'true' : undefined
10+
}
11+
12+
return {
13+
isInvalid,
14+
getAriaInvalid,
15+
}
16+
}

app/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from '#layers/dashboard/shared/types'
22
export * from '#shared/types/link'
3+
export * from '#shared/types/link-check'
34
export * from '#shared/types/traffic'

app/utils/link-check.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function getDashboardLinkDetailUrl(slug: string): string {
2+
return `/dashboard/link?slug=${encodeURIComponent(slug)}`
3+
}

i18n/locales/de-DE.json

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"links": "Links",
5555
"analysis": "Analyse",
5656
"realtime": "Echtzeit",
57+
"check": "Check",
5758
"migrate": "Import/Export"
5859
},
5960
"sidebar": {
@@ -293,6 +294,73 @@
293294
"ai_og_failed": "Fehler beim Generieren des KI-OpenGraph",
294295
"ai_og_success": "KI-OpenGraph erfolgreich generiert"
295296
},
297+
"check": {
298+
"title": "Link Check",
299+
"description": "Check whether existing destination URLs are reachable. Results are displayed only and will not modify links.",
300+
"config": {
301+
"timeout": "Timeout (seconds)",
302+
"timeout_description": "Timeout for each link. Default is 6 seconds.",
303+
"batch_size": "Batch size",
304+
"batch_size_description": "Links checked per request. Maximum is 10."
305+
},
306+
"actions": {
307+
"start": "Start Check",
308+
"checking": "Checking...",
309+
"stop": "Stop",
310+
"reload": "Reload Links",
311+
"loading": "Loading...",
312+
"clear": "Clear Results",
313+
"export": "Export CSV",
314+
"detail": "Detail",
315+
"original": "Original"
316+
},
317+
"stats": {
318+
"total": "Total",
319+
"checked": "Checked",
320+
"normal": "Normal",
321+
"abnormal": "Abnormal",
322+
"network_error": "Network Error"
323+
},
324+
"progress": {
325+
"title": "Progress",
326+
"description": "{checked} of {total} links checked",
327+
"stopped": "Check stopped"
328+
},
329+
"results": {
330+
"title": "Results",
331+
"description": "Abnormal results are shown by default. Use tabs to filter by status code."
332+
},
333+
"tabs": {
334+
"abnormal": "Abnormal ({count})",
335+
"status": "{status} ({count})",
336+
"all": "All ({count})"
337+
},
338+
"table": {
339+
"slug": "Slug",
340+
"url": "URL",
341+
"status": "Status",
342+
"result": "Result",
343+
"duration": "Duration",
344+
"error": "Error",
345+
"action": "Action"
346+
},
347+
"result": {
348+
"normal": "Normal",
349+
"broken": "Broken",
350+
"network_error": "Network Error"
351+
},
352+
"empty": {
353+
"not_started": "No results yet.",
354+
"no_broken_links": "No broken links found.",
355+
"no_matching_results": "No matching results."
356+
},
357+
"messages": {
358+
"load_failed": "Failed to load links",
359+
"completed": "Link check completed",
360+
"stopped": "Link check stopped"
361+
},
362+
"duration_ms": "{duration} ms"
363+
},
296364
"migrate": {
297365
"access_export": {
298366
"title": "Export Access Data",

i18n/locales/en-US.json

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"links": "Links",
5555
"analysis": "Analysis",
5656
"realtime": "Realtime",
57+
"check": "Check",
5758
"migrate": "Import/Export"
5859
},
5960
"sidebar": {
@@ -293,6 +294,73 @@
293294
"ai_og_failed": "Failed to generate AI OpenGraph",
294295
"ai_og_success": "AI OpenGraph generated successfully"
295296
},
297+
"check": {
298+
"title": "Link Check",
299+
"description": "Check whether existing destination URLs are reachable. Results are displayed only and will not modify links.",
300+
"config": {
301+
"timeout": "Timeout (seconds)",
302+
"timeout_description": "Timeout for each link. Default is 6 seconds.",
303+
"batch_size": "Batch size",
304+
"batch_size_description": "Links checked per request. Maximum is 10."
305+
},
306+
"actions": {
307+
"start": "Start Check",
308+
"checking": "Checking...",
309+
"stop": "Stop",
310+
"reload": "Reload Links",
311+
"loading": "Loading...",
312+
"clear": "Clear Results",
313+
"export": "Export CSV",
314+
"detail": "Detail",
315+
"original": "Original"
316+
},
317+
"stats": {
318+
"total": "Total",
319+
"checked": "Checked",
320+
"normal": "Normal",
321+
"abnormal": "Abnormal",
322+
"network_error": "Network Error"
323+
},
324+
"progress": {
325+
"title": "Progress",
326+
"description": "{checked} of {total} links checked",
327+
"stopped": "Check stopped"
328+
},
329+
"results": {
330+
"title": "Results",
331+
"description": "Abnormal results are shown by default. Use tabs to filter by status code."
332+
},
333+
"tabs": {
334+
"abnormal": "Abnormal ({count})",
335+
"status": "{status} ({count})",
336+
"all": "All ({count})"
337+
},
338+
"table": {
339+
"slug": "Slug",
340+
"url": "URL",
341+
"status": "Status",
342+
"result": "Result",
343+
"duration": "Duration",
344+
"error": "Error",
345+
"action": "Action"
346+
},
347+
"result": {
348+
"normal": "Normal",
349+
"broken": "Broken",
350+
"network_error": "Network Error"
351+
},
352+
"empty": {
353+
"not_started": "No results yet.",
354+
"no_broken_links": "No broken links found.",
355+
"no_matching_results": "No matching results."
356+
},
357+
"messages": {
358+
"load_failed": "Failed to load links",
359+
"completed": "Link check completed",
360+
"stopped": "Link check stopped"
361+
},
362+
"duration_ms": "{duration} ms"
363+
},
296364
"migrate": {
297365
"access_export": {
298366
"title": "Export Access Data",

i18n/locales/fr-FR.json

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"links": "Liens",
5555
"analysis": "Statistiques",
5656
"realtime": "Realtime",
57+
"check": "Check",
5758
"migrate": "Import/Export"
5859
},
5960
"sidebar": {
@@ -293,6 +294,73 @@
293294
"ai_og_failed": "Échec de la génération de l'OpenGraph IA",
294295
"ai_og_success": "OpenGraph IA généré avec succès"
295296
},
297+
"check": {
298+
"title": "Link Check",
299+
"description": "Check whether existing destination URLs are reachable. Results are displayed only and will not modify links.",
300+
"config": {
301+
"timeout": "Timeout (seconds)",
302+
"timeout_description": "Timeout for each link. Default is 6 seconds.",
303+
"batch_size": "Batch size",
304+
"batch_size_description": "Links checked per request. Maximum is 10."
305+
},
306+
"actions": {
307+
"start": "Start Check",
308+
"checking": "Checking...",
309+
"stop": "Stop",
310+
"reload": "Reload Links",
311+
"loading": "Loading...",
312+
"clear": "Clear Results",
313+
"export": "Export CSV",
314+
"detail": "Detail",
315+
"original": "Original"
316+
},
317+
"stats": {
318+
"total": "Total",
319+
"checked": "Checked",
320+
"normal": "Normal",
321+
"abnormal": "Abnormal",
322+
"network_error": "Network Error"
323+
},
324+
"progress": {
325+
"title": "Progress",
326+
"description": "{checked} of {total} links checked",
327+
"stopped": "Check stopped"
328+
},
329+
"results": {
330+
"title": "Results",
331+
"description": "Abnormal results are shown by default. Use tabs to filter by status code."
332+
},
333+
"tabs": {
334+
"abnormal": "Abnormal ({count})",
335+
"status": "{status} ({count})",
336+
"all": "All ({count})"
337+
},
338+
"table": {
339+
"slug": "Slug",
340+
"url": "URL",
341+
"status": "Status",
342+
"result": "Result",
343+
"duration": "Duration",
344+
"error": "Error",
345+
"action": "Action"
346+
},
347+
"result": {
348+
"normal": "Normal",
349+
"broken": "Broken",
350+
"network_error": "Network Error"
351+
},
352+
"empty": {
353+
"not_started": "No results yet.",
354+
"no_broken_links": "No broken links found.",
355+
"no_matching_results": "No matching results."
356+
},
357+
"messages": {
358+
"load_failed": "Failed to load links",
359+
"completed": "Link check completed",
360+
"stopped": "Link check stopped"
361+
},
362+
"duration_ms": "{duration} ms"
363+
},
296364
"migrate": {
297365
"access_export": {
298366
"title": "Export Access Data",

i18n/locales/id-ID.json

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"links": "Tautan",
5555
"analysis": "Analisis",
5656
"realtime": "Real-time",
57+
"check": "Check",
5758
"migrate": "Impor/Ekspor"
5859
},
5960
"sidebar": {
@@ -293,6 +294,73 @@
293294
"ai_og_failed": "Gagal membuat OpenGraph AI",
294295
"ai_og_success": "OpenGraph AI berhasil dibuat"
295296
},
297+
"check": {
298+
"title": "Link Check",
299+
"description": "Check whether existing destination URLs are reachable. Results are displayed only and will not modify links.",
300+
"config": {
301+
"timeout": "Timeout (seconds)",
302+
"timeout_description": "Timeout for each link. Default is 6 seconds.",
303+
"batch_size": "Batch size",
304+
"batch_size_description": "Links checked per request. Maximum is 10."
305+
},
306+
"actions": {
307+
"start": "Start Check",
308+
"checking": "Checking...",
309+
"stop": "Stop",
310+
"reload": "Reload Links",
311+
"loading": "Loading...",
312+
"clear": "Clear Results",
313+
"export": "Export CSV",
314+
"detail": "Detail",
315+
"original": "Original"
316+
},
317+
"stats": {
318+
"total": "Total",
319+
"checked": "Checked",
320+
"normal": "Normal",
321+
"abnormal": "Abnormal",
322+
"network_error": "Network Error"
323+
},
324+
"progress": {
325+
"title": "Progress",
326+
"description": "{checked} of {total} links checked",
327+
"stopped": "Check stopped"
328+
},
329+
"results": {
330+
"title": "Results",
331+
"description": "Abnormal results are shown by default. Use tabs to filter by status code."
332+
},
333+
"tabs": {
334+
"abnormal": "Abnormal ({count})",
335+
"status": "{status} ({count})",
336+
"all": "All ({count})"
337+
},
338+
"table": {
339+
"slug": "Slug",
340+
"url": "URL",
341+
"status": "Status",
342+
"result": "Result",
343+
"duration": "Duration",
344+
"error": "Error",
345+
"action": "Action"
346+
},
347+
"result": {
348+
"normal": "Normal",
349+
"broken": "Broken",
350+
"network_error": "Network Error"
351+
},
352+
"empty": {
353+
"not_started": "No results yet.",
354+
"no_broken_links": "No broken links found.",
355+
"no_matching_results": "No matching results."
356+
},
357+
"messages": {
358+
"load_failed": "Failed to load links",
359+
"completed": "Link check completed",
360+
"stopped": "Link check stopped"
361+
},
362+
"duration_ms": "{duration} ms"
363+
},
296364
"migrate": {
297365
"access_export": {
298366
"title": "Export Access Data",

0 commit comments

Comments
 (0)