mirror of
https://github.com/alexhopeoconnor/dnsmasq-webui.git
synced 2026-10-04 04:18:13 +10:00
- Process: Add IProcessHandle, ProcessOutputLine, StartAsync; RunAsync via StartAsync+WaitForExitAsync. Wait for stdout/stderr stream close before reading to fix empty restart output. ProcessTimeouts; ReloadService/StatusController/LogsService use config timeouts. - Effective config: Rename reload→restart in save/restore result types and UI. Save modal: show restart output, danger alert, Stop editing/Continue editing (yellow), footer one-line; fallback exit code when no output; ensure pre visibility (CSS). Restore failed: combined output helper. - Status script: When dnsmasq dead, run dnsmasq --test and show config error in status block (Docker harness; DNSMASQ_CONF). - listen-address: Allow IPv6 (ValidateDraftValue accepts InterNetworkV6). - Docker test: RestartCommand uses DnsmasqOptions timeout; DnsmasqOptions RestartTimeoutSeconds.
28 lines
916 B
Plaintext
28 lines
916 B
Plaintext
@namespace DnsmasqWebUI.Components.EffectiveConfig
|
|
@inject IJSRuntime JSRuntime
|
|
|
|
<div class="d-flex align-items-center gap-1 @CssClass">
|
|
<code class="flex-grow-1 text-break @CodeCssClass">@Text</code>
|
|
<button type="button" class="btn btn-sm btn-outline-secondary py-0" @onclick="CopyAsync" title="@CopyTitle"><i class="bi bi-clipboard me-1" aria-hidden="true"></i>Copy</button>
|
|
</div>
|
|
|
|
@code {
|
|
[Parameter] public string Text { get; set; } = "";
|
|
[Parameter] public string? CssClass { get; set; }
|
|
[Parameter] public string? CodeCssClass { get; set; }
|
|
[Parameter] public string CopyTitle { get; set; } = "Copy";
|
|
|
|
private async Task CopyAsync()
|
|
{
|
|
if (string.IsNullOrEmpty(Text)) return;
|
|
try
|
|
{
|
|
await JSRuntime.InvokeVoidAsync("copyToClipboard", Text);
|
|
}
|
|
catch
|
|
{
|
|
// Clipboard not available or failed
|
|
}
|
|
}
|
|
}
|