working basic site admin

This commit is contained in:
2026-06-21 02:56:49 +00:00
parent 53d932655e
commit f52625b37b
38 changed files with 1163 additions and 56 deletions
@@ -0,0 +1,141 @@
<div class="form-overlay" (click)="onClose()">
<div class="form-dialog form-dialog--wide" (click)="$event.stopPropagation()">
<div class="form-header">
<h2>Edit Station Config</h2>
<button type="button" class="btn-close" (click)="onClose()">&times;</button>
</div>
@if (error) {
<div class="form-error" role="alert">{{ error }}</div>
}
@if (success) {
<div class="form-success" role="alert">{{ success }}</div>
}
<form (ngSubmit)="onSubmit()" class="admin-form" #form="ngForm">
<!-- Identity -->
<div class="form-section">
<h3>Identity</h3>
<div class="form-row">
<div class="form-group">
<label for="callsign">Callsign</label>
<input id="callsign" type="text" [(ngModel)]="callsign" name="callsign" required>
</div>
<div class="form-group">
<label for="frequency">Frequency</label>
<input id="frequency" type="text" [(ngModel)]="frequency" name="frequency" placeholder="98.7 FM">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="name_primary">Primary Name</label>
<input id="name_primary" type="text" [(ngModel)]="name_primary" name="name_primary" required>
</div>
<div class="form-group">
<label for="name_secondary">Secondary Name</label>
<input id="name_secondary" type="text" [(ngModel)]="name_secondary" name="name_secondary">
</div>
</div>
<div class="form-group">
<label for="tagline">Tagline</label>
<input id="tagline" type="text" [(ngModel)]="tagline" name="tagline">
</div>
<div class="form-group">
<label for="founded_year">Founded Year</label>
<input id="founded_year" type="number" [(ngModel)]="founded_year" name="founded_year">
</div>
</div>
<!-- Images -->
<div class="form-section">
<h3>Images</h3>
<div class="form-group">
<label for="logo_url">Logo URL</label>
<div class="url-with-upload">
<input id="logo_url" type="text" [(ngModel)]="logo_url" name="logo_url" placeholder="uploads/…">
<label class="btn btn-upload">
Upload
<input type="file" accept="image/*" (change)="onImageUpload($event, 'logo_url')" [disabled]="loading">
</label>
</div>
</div>
<div class="form-group">
<label for="hero_background_url">Hero Background URL</label>
<div class="url-with-upload">
<input id="hero_background_url" type="text" [(ngModel)]="hero_background_url" name="hero_background_url">
<label class="btn btn-upload">
Upload
<input type="file" accept="image/*" (change)="onImageUpload($event, 'hero_background_url')" [disabled]="loading">
</label>
</div>
</div>
<div class="form-group">
<label for="hero_icon_url">Hero Icon URL</label>
<div class="url-with-upload">
<input id="hero_icon_url" type="text" [(ngModel)]="hero_icon_url" name="hero_icon_url">
<label class="btn btn-upload">
Upload
<input type="file" accept="image/*" (change)="onImageUpload($event, 'hero_icon_url')" [disabled]="loading">
</label>
</div>
</div>
<div class="form-group">
<label for="hero_divider_url">Hero Divider URL</label>
<div class="url-with-upload">
<input id="hero_divider_url" type="text" [(ngModel)]="hero_divider_url" name="hero_divider_url">
<label class="btn btn-upload">
Upload
<input type="file" accept="image/*" (change)="onImageUpload($event, 'hero_divider_url')" [disabled]="loading">
</label>
</div>
</div>
</div>
<!-- Nonprofit -->
<div class="form-section">
<h3>Nonprofit</h3>
<div class="form-row">
<div class="form-group">
<label for="nonprofit_type">Nonprofit Type</label>
<input id="nonprofit_type" type="text" [(ngModel)]="nonprofit_type" name="nonprofit_type" placeholder="501(c)(3)">
</div>
<div class="form-group">
<label for="ein">EIN</label>
<input id="ein" type="text" [(ngModel)]="ein" name="ein" placeholder="84-XXXXXXX">
</div>
</div>
</div>
<!-- Contact -->
<div class="form-section">
<h3>Contact</h3>
<div class="form-group">
<label for="address">Address</label>
<textarea id="address" [(ngModel)]="address" name="address" rows="2"></textarea>
</div>
<div class="form-row">
<div class="form-group">
<label for="phone">Phone</label>
<input id="phone" type="text" [(ngModel)]="phone" name="phone">
</div>
<div class="form-group">
<label for="email">Email</label>
<input id="email" type="email" [(ngModel)]="email" name="email">
</div>
</div>
<div class="form-group">
<label for="website">Website</label>
<input id="website" type="text" [(ngModel)]="website" name="website">
</div>
</div>
<div class="form-actions">
<button type="button" class="btn btn-cancel" (click)="onClose()">Cancel</button>
<button type="submit" class="btn btn-save" [disabled]="saving">
{{ saving ? 'Saving…' : 'Save Config' }}
</button>
</div>
</form>
</div>
</div>