CSS updates, layout tweeks, domain editing/updating
This commit is contained in:
parent
dd648adf91
commit
a3b4214040
@ -19,12 +19,15 @@ class DomainController extends Controller
|
||||
public function add_edit(Request $request,Domain $o)
|
||||
{
|
||||
if ($request->post()) {
|
||||
// @todo Add validation that we can only have 1 "default" domain for a zone.
|
||||
// The default domain is used when a node connects and doesnt use a full 5D address, eg: 10:999/1 vs 10:999/1@private
|
||||
$request->validate([
|
||||
'name' => 'required|unique:domains|max:8',
|
||||
'dnsdomain' => 'nullable|unique:domains|regex:/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i',
|
||||
'active' => 'required',
|
||||
]);
|
||||
|
||||
foreach (['name','dnsdomain','active','notes'] as $key)
|
||||
$o->{$key} = $request->post($key);
|
||||
|
||||
$o->active = TRUE;
|
||||
$o->save();
|
||||
|
||||
return redirect()->action([self::class,'home']);
|
||||
|
@ -9,4 +9,11 @@ use App\Traits\ScopeActive;
|
||||
class Domain extends Model
|
||||
{
|
||||
use ScopeActive;
|
||||
|
||||
/* RELATIONS */
|
||||
|
||||
public function zones()
|
||||
{
|
||||
return $this->hasMany(Zone::class);
|
||||
}
|
||||
}
|
106
public/oldschool/css/main.css
vendored
106
public/oldschool/css/main.css
vendored
@ -46,8 +46,8 @@ a:link {
|
||||
text-transform:uppercase
|
||||
}
|
||||
|
||||
div p:last-child {
|
||||
margin-bottom:0
|
||||
strong.highlight {
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
body {
|
||||
@ -88,7 +88,6 @@ sup:after {
|
||||
z-index: 4;
|
||||
box-sizing: content-box
|
||||
}
|
||||
|
||||
#nav-menu {
|
||||
color:#aaa;
|
||||
padding:0;
|
||||
@ -273,7 +272,7 @@ ul#navlist-desktop {
|
||||
margin:24px auto 40px auto;
|
||||
box-shadow:8px 9px 0 0 #333
|
||||
}
|
||||
#content>h2:first-child {
|
||||
#content h2:first-child {
|
||||
margin-top:8px
|
||||
}
|
||||
#content h3,
|
||||
@ -299,6 +298,13 @@ ul#navlist-desktop {
|
||||
color:#c60;
|
||||
}
|
||||
|
||||
#content>div.row:first-child {
|
||||
padding-top: 0px;
|
||||
}
|
||||
#content>div.row {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
#content ul {
|
||||
margin:0 1ch;
|
||||
padding-left:1ch;
|
||||
@ -402,6 +408,10 @@ form div.row {
|
||||
.greyframe h2.cap+p {
|
||||
margin-top:1em
|
||||
}
|
||||
.greyframe>div.row:last-child,
|
||||
.greyframe>form>div.row:last-child {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
label.form-label {
|
||||
font-size: 75%;
|
||||
@ -414,6 +424,22 @@ p {
|
||||
text-align:left;
|
||||
word-break:break-word
|
||||
}
|
||||
p>small {
|
||||
color: #bbb;
|
||||
}
|
||||
p>small:before {
|
||||
content: '[';
|
||||
}
|
||||
p>small:after {
|
||||
content: ']';
|
||||
}
|
||||
p>small:before,
|
||||
p>small:after {
|
||||
color: #eee;
|
||||
}
|
||||
div p:last-child {
|
||||
margin-bottom:0
|
||||
}
|
||||
|
||||
.pad {
|
||||
padding:1em 1.5ch;
|
||||
@ -450,6 +476,78 @@ p {
|
||||
transition:all .1s ease-in-out
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse:collapse;
|
||||
color:#fff;
|
||||
}
|
||||
th {
|
||||
font-weight:400
|
||||
}
|
||||
td {
|
||||
padding:0 4px
|
||||
}
|
||||
thead {
|
||||
background-color:#222;
|
||||
border-top:1px solid #555;
|
||||
border-bottom:3px double #555;
|
||||
border-left:2px solid #555;
|
||||
border-right:2px solid #555
|
||||
}
|
||||
tbody {
|
||||
border-left:2px solid #555;
|
||||
border-right:2px solid #555;
|
||||
border-bottom:1px solid #555
|
||||
}
|
||||
.monotable {
|
||||
background-color:#1e1e1e;
|
||||
margin-top:.5em;
|
||||
margin-bottom:1.5em;
|
||||
text-indent:0
|
||||
}
|
||||
.monotable.sbm {
|
||||
margin-bottom:.5em
|
||||
}
|
||||
.monotable thead {
|
||||
border-top:1px solid #666;
|
||||
border-left:2px solid #666;
|
||||
border-right:2px solid #666;
|
||||
border-bottom:0;
|
||||
color:#fff;
|
||||
background-color:#000
|
||||
}
|
||||
.monotable th {
|
||||
padding:.5em 1.5ch .4em;
|
||||
border-right:2px solid #666
|
||||
}
|
||||
.monotable tbody {
|
||||
border-top:3px double #666;
|
||||
border-left:2px solid #666;
|
||||
border-right:2px solid #666;
|
||||
border-bottom:1px solid #666;
|
||||
color: #eee;
|
||||
}
|
||||
.monotable tbody td {
|
||||
padding-left:1.5ch!important;
|
||||
padding-right:1.5ch!important;
|
||||
vertical-align:middle!important
|
||||
}
|
||||
.monotable tbody tr:first-child td {
|
||||
padding-top:9px!important
|
||||
}
|
||||
.monotable tbody tr:last-child td {
|
||||
padding-bottom:7px!important
|
||||
}
|
||||
.monotable tr td:not(:last-child) {
|
||||
border-right:2px solid #666
|
||||
}
|
||||
.monotable.cozy {
|
||||
text-align:left
|
||||
}
|
||||
.monotable.cozy td {
|
||||
padding-top:8px!important;
|
||||
padding-bottom:7px!important;
|
||||
border-bottom:1px solid #666
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align:center;
|
||||
|
@ -1,6 +1,6 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('main-content')
|
||||
@section('content')
|
||||
<h2>About the FTN Clearing House</h2>
|
||||
|
||||
<p>Welcome to the FTN Clearing House.</p>
|
||||
|
@ -26,7 +26,7 @@
|
||||
<h2 class="cap">Login</h2>
|
||||
|
||||
<form class="row g-0 needs-validation" method="post" novalidate>
|
||||
{{ csrf_field() }}
|
||||
@csrf
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
@ -74,13 +74,13 @@
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row pt-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a class="link-danger" href="{{ url('password/reset') }}">Forgot Password</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row pt-1 pb-3">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a class="link-danger" href="{{ url('register') }}">Register</a>
|
||||
</div>
|
||||
|
@ -28,7 +28,7 @@
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<div class="input-group has-validation">
|
||||
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
|
||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ old('email') }}" autocomplete="email" autofocus required>
|
||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" autocomplete="email" autofocus required>
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
{{ $message }}
|
||||
@ -49,7 +49,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row pt-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a class="link-danger" href="{{ url('login') }}">Login</a>
|
||||
</div>
|
||||
|
@ -29,7 +29,7 @@
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<div class="input-group has-validation">
|
||||
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
|
||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
|
||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ old('email',$email) }}" required autocomplete="email" autofocus>
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
{{ $message }}
|
||||
@ -75,14 +75,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row pb-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a href="{{ url('/') }}" class="btn btn-danger">Cancel</a>
|
||||
<button type="submit" name="submit" class="btn btn-success mr-0 float-end">Sign In</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -11,14 +11,14 @@
|
||||
<h2 class="cap">Register</h2>
|
||||
|
||||
<form class="row g-0 needs-validation" method="post" novalidate>
|
||||
{{ csrf_field() }}
|
||||
@csrf
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label for="name" class="form-label">Name</label>
|
||||
<div class="input-group has-validation">
|
||||
<span class="input-group-text"><i class="bi bi-person-square"></i></span>
|
||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Full Name" name="name" required autocomplete="name" autofocus>
|
||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Full Name" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
|
||||
@error('name')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
{{ $message }}
|
||||
@ -37,7 +37,7 @@
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<div class="input-group has-validation">
|
||||
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
|
||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" required autocomplete="email">
|
||||
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ old('email') }}" required autocomplete="email">
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
{{ $message }}
|
||||
@ -91,7 +91,7 @@
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row pt-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a class="link-danger" href="{{ url('login') }}">Login</a>
|
||||
</div>
|
||||
|
@ -4,55 +4,79 @@
|
||||
@if($o->exists) Update @else Add @endif Domain
|
||||
@endsection
|
||||
|
||||
@section('main-content')
|
||||
<div class="pb-3">
|
||||
<h2>@if($o->exists) Update @else Add @endif Domain</h2>
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-6 m-auto">
|
||||
<div class="greyframe titledbox shadow0xb0 text-center">
|
||||
<h2 class="cap">@if($o->exists) Update @else Add @endif Domain</h2>
|
||||
|
||||
<form method="POST">
|
||||
{{ csrf_field() }}
|
||||
<form class="row g-0 needs-validation" method="post" novalidate>
|
||||
@csrf
|
||||
|
||||
<div class="row">
|
||||
<div class="col-9 m-auto">
|
||||
<div class="bg-blue">
|
||||
<div class="row m-3">
|
||||
<label class="col-3" for="name">Name:</label>
|
||||
<input class="col-9" type="text" name="name" value="{{ $o->name }}">
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<label class="col-3" for="dnsdomain">DNS Domain:</label>
|
||||
<input class="col-9" type="text" name="dnsdomain" value="{{ $o->dnsdomain }}">
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<label class="col-3" for="active">Active:</label>
|
||||
<div class="form-group col-3">
|
||||
<div class="custom-control custom-radio mb-3">
|
||||
<input type="radio" class="custom-control-input" name="active" id="active_yes" value="1" required @if($o->active)checked @endif>
|
||||
<label class="custom-control-label" for="active_yes">Yes</label>
|
||||
</div>
|
||||
|
||||
<div class="custom-control custom-radio mb-3">
|
||||
<input type="radio" class="custom-control-input" name="active" id="active_no" value="0" required @if(! $o->active)checked @endif>
|
||||
<label class="custom-control-label" for="active_no">No</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<label class="col-3" for="notes">Notes:</label>
|
||||
<textarea class="col-9" rows=3 cols=68 name="notes" placeholder="Notes...">{{ $o->notes }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="row m-3">
|
||||
<div class="col-12">
|
||||
<button type="submit" name="submit" class="btn btn-lg btn-success mr-0 float-right">@if ($o->exists)Save @else Add @endif</button>
|
||||
<a href="{{ url('/') }}" class="btn btn-lg btn-primary float-right">Cancel</a>
|
||||
<label for="name" class="form-label">Name</label>
|
||||
<div class="input-group has-validation">
|
||||
<span class="input-group-text"><i class="bi bi-tag-fill"></i></span>
|
||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Name" name="name" value="{{ old('name',$o->name) }}" required autocomplete="name" autofocus>
|
||||
@error('name')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
{{ $message }}
|
||||
</span>
|
||||
@else
|
||||
<span class="invalid-feedback">
|
||||
A name is required.
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label for="name" class="form-label">DNS Domain</label>
|
||||
<div class="input-group has-validation">
|
||||
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
||||
<input type="text" class="form-control @error('dnsdomain') is-invalid @enderror" id="dnsdomain" placeholder="DNS Domain (if applicable)" name="dnsdomain" value="{{ old('dnsdomain',$o->dnsdomain) }}">
|
||||
@error('dnsdomain')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
{{ $message }}
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label for="active" class="form-label">Active</label>
|
||||
<div class="input-group has-validation">
|
||||
<div class="btn-group" role="group">
|
||||
<input type="radio" class="btn-check" name="active" id="active_yes" value="1" required @if($o->active)checked @endif>
|
||||
<label class="btn btn-outline-success" for="active_yes">Yes</label>
|
||||
|
||||
<input type="radio" class="btn-check btn-danger" name="active" id="active_no" value="0" required @if(! $o->active)checked @endif>
|
||||
<label class="btn btn-outline-danger" for="active_no">No</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label for="notes" class="form-label">Notes</label>
|
||||
<textarea class="form-control" rows=3 cols=68 name="notes" placeholder="Notes...">{{ old('notes',$o->notes) }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a href="{{ url('ftn/domain') }}" class="btn btn-danger">Cancel</a>
|
||||
<button type="submit" name="submit" class="btn btn-success mr-0 float-end">@if ($o->exists)Save @else Add @endif</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
@ -1,21 +1,36 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('main-content')
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2>About the FTN Clearing House</h2>
|
||||
<p>In FTN network addresses, a domain is the 5th dimension and used when a system supports 5D addressing, ie: zone:hub/host@<strong class="highlight">domain</strong>.</p>
|
||||
<p>Domains are used with zones to uniquely identify a FTN network.</p>
|
||||
<p><small>Some legacy Fidonet software is not 5D aware and may behave unexpectedly when a domain is used</small></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<table class="table table-bordered m-5">
|
||||
<p>This system is aware of the following domains:</p>
|
||||
|
||||
@if (\App\Models\Domain::count() == 0)
|
||||
<p>There are no domains setup, to <a href="{{ url('ftn/domain/addedit') }}">set up your first</a>.</p>
|
||||
@else
|
||||
<table class="table monotable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Active</th>
|
||||
<th>Domain</th>
|
||||
<th>DNS domain</th>
|
||||
<th>Zones</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="4"><a href="{{ url('ftn/domain/addedit') }}">Add New Domain</a></td>
|
||||
<td colspan="5"><a href="{{ url('ftn/domain/addedit') }}">Add New Domain</a></td>
|
||||
</tr>
|
||||
@foreach (\App\Models\Domain::cursor() as $oo)
|
||||
<tr>
|
||||
@ -23,23 +38,23 @@
|
||||
<td>{{ $oo->active ? 'YES' : 'NO' }}</td>
|
||||
<td>{{ $oo->name }}</td>
|
||||
<td>{{ $oo->dnsdomain }}</td>
|
||||
<td>{{ join(', ',$oo->zones->pluck('zone_id')->toArray()) }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('page-scripts')
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('table tr').click(function() {
|
||||
var href = $(this).find("a").attr("href");
|
||||
if(href) {
|
||||
var href = $(this).find('a').attr('href');
|
||||
|
||||
if (href)
|
||||
window.location = href;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@append
|
||||
|
@ -1,4 +1,4 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('main-content')
|
||||
@section('content')
|
||||
@endsection
|
@ -10,7 +10,7 @@
|
||||
</div>
|
||||
|
||||
<div id="content" class="with-sidebar">
|
||||
@yield('main-content')
|
||||
@yield('content')
|
||||
</div>
|
||||
|
||||
<div id="footer" class="shifted">
|
||||
|
Loading…
Reference in New Issue
Block a user