Add tag & tag group creation

This commit is contained in:
yuriko 🦊 2025-05-24 21:35:29 -04:00
parent f64afa649a
commit f2950ec7eb
15 changed files with 330 additions and 22 deletions

View file

@ -0,0 +1,11 @@
<wa-card>
<div class="wa-flank wa-align-items-start">
<wa-avatar shape="rounded">
<wa-icon slot="icon" name="{{ $icon }}"></wa-icon>
</wa-avatar>
<div class="wa-stack wa-gap-2xs">
<h3 class="wa-caption-m">{{ $title }}</h3>
<wa-format-number class="wa-heading-l" :$value></wa-format-number>
</div>
</div>
</wa-card>

View file

@ -19,7 +19,7 @@
Upload
</wa-button>
<wa-button appearance="plain">
<wa-button appearance="plain" href="{{ route('tags.home') }}" wire:navigate.hover>
<wa-icon slot="prefix" name="tags"></wa-icon>
Tags
</wa-button>

View file

@ -1,25 +1,8 @@
<div class="wa-stack">
<h1>{{ $user->name }}</h1>
<div class="wa-grid">
<wa-card>
<span class="wa-heading-m">
<wa-format-number value="{{ $user->posts->count() }}"></wa-format-number> {{ Str::plural('post', $user->posts->count()) }}
</span>
</wa-card>
<wa-card>
<span class="wa-heading-m">
<wa-format-number value="{{ $user->comments->count() }}"></wa-format-number> {{ Str::plural('comment', $user->comments->count()) }}
</span>
</wa-card>
<wa-card>
<span class="wa-heading-m">
Last seen {{ $user->updated_at->diffForHumans() }}
</span>
</wa-card>
<div class="wa-grid" style="--min-column-size: 30ch;">
<livewire:app.data-card icon="images" title="Posts" value="{{ $user->posts->count() }}" />
<livewire:app.data-card icon="comments" title="Comments" value="{{ $user->comments->count() }}" />
</div>
</div>

View file

@ -8,7 +8,7 @@
<span>Changes are automatically saved.</span>
</wa-callout>
<form wire:submit class="wa-stack">
<form wire:submit class="wa-stack wa-gap-xl">
<wa-select wire:model.live="rating" label="Rating" value="{{ $post->rating }}" wire:loading.attr="disabled" @error('rating') hint="{{ $message }}" @enderror>
<wa-option value="safe">Safe</wa-option>
<wa-option value="suggestive">Suggestive</wa-option>

View file

@ -0,0 +1,52 @@
<div class="wa-stack">
<h1 class="wa-cluster wa-gap-3xl" style="--wa-link-decoration-default: none; --wa-color-text-link: var(--wa-color-text-quiet)">
<a href="{{ route('tags.home') }}" wire:navigate.hover>Tags</a>
<span>Tag groups</span>
</h1>
<div class="wa-flank:end wa-align-items-start">
{{-- List tag groups --}}
<table class="wa-table">
<thead>
<tr>
<td>Name</td>
<td>Description</td>
<td>Tag count</td>
<td>Actions</td>
</tr>
</thead>
<tbody>
@foreach ($groups as $group)
<tr>
<td style="color: {{ $group->color }};">{{ $group->name }}</td>
<td>{{ $group->description }}</td>
<td><wa-format-number value="{{ $group->tags->count() }}"></wa-format-number> {{ Str::plural('tag', $group->tags->count()) }}</td>
<td>
<wa-icon-button name="times" style="color: var(--wa-color-danger-on-normal);" href="{{ url("/delete/group/$group->id") }}" wire:navigate></wa-icon-button>
</td>
</tr>
@endforeach
</tbody>
</table>
{{-- Create tag group --}}
<div class="wa-stack">
<span class="wa-heading-m">Create a tag group</span>
<form wire:submit="create" class="wa-stack wa-gap-2xl">
<wa-input wire:model="name" type="text" label="Group name"></wa-input>
<wa-color-picker
wire:model="color"
label="Group color"
swatches="#d0021b; #f5a623; #f8e71c; #8b572a; #7ed321; #417505; #bd10e0; #9013fe; #4a90e2; #50e3c2; #b8e986; #000; #444; #888; #ccc; #fff;">
</wa-color-picker>
<wa-input wire:model="description" type="text" label="Group description (optional)"></wa-input>
<wa-button type="submit" appearance="outlined" variant="brand">
<wa-icon name="plus" slot="prefix"></wa-icon>
Create tag group
</wa-button>
</form>
</div>
</div>
</div>

View file

@ -0,0 +1,69 @@
@php use App\Models\Tag; @endphp
<div class="wa-stack">
<h1 class="wa-cluster wa-gap-3xl" style="--wa-link-decoration-default: none; --wa-color-text-link: var(--wa-color-text-quiet)">
<span>Tags</span>
<a href="{{ route('tags.groups') }}" wire:navigate.hover>Tag groups</a>
</h1>
<div class="wa-flank:end wa-align-items-start">
<table class="wa-table">
<thead>
<tr>
<td>Name</td>
<td>Implies</td>
<td>Post count</td>
<td>Actions</td>
</tr>
</thead>
<tbody>
{{-- Untagged posts --}}
<tr>
<td class="wa-caption-m">-- Untagged --</td>
<td></td>
<td><wa-format-number value="{{ $untaggedPosts->count() }}"></wa-format-number> {{ Str::plural('post', $untaggedPosts->count()) }}</td>
<td></td>
</tr>
@foreach ($tags as $tag)
<tr>
<td style="color: {{ $tag->tagGroup->color }}">{{ $tag->name }}</td>
<td>
@if ($tag->implies)
@foreach ($tag->implies as $impliesTagId)
@php $impliedTag = Tag::find($impliesTagId); @endphp
<span style="color: {{ $impliedTag->tagGroup->color }}">{{ $impliedTag->name }}</span>
@endforeach
@endif
</td>
<td><wa-format-number value="{{ $tag->posts->count() }}"></wa-format-number> {{ Str::plural('post', $tag->posts->count()) }}</td>
<td>
<wa-icon-button name="times" style="color: var(--wa-color-danger-on-normal);" href="{{ url("/delete/tag/$tag->id") }}" wire:navigate></wa-icon-button>
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="wa-stack">
<span class="wa-heading-m">Create a tag</span>
<form wire:submit="create" class="wa-stack wa-gap-2xl">
<wa-input wire:model="name" type="text" label="Tag name" @error('name') hint="{{ $message }}" @enderror></wa-input>
<wa-select wire:model="group" label="Tag group" @error('group') hint="{{ $message }}" @enderror>
@foreach ($tagGroups as $tagGroup)
<wa-option value="{{ $tagGroup->id }}" style="color: {{ $tagGroup->color }};">{{ $tagGroup->name }}</wa-option>
@endforeach
</wa-select>
<wa-select wire:model="implies" label="Implied tags" multiple clearable @error('implies') hint="{{ $message }}" @enderror>
@foreach ($tags->all() as $tagToImply)
<wa-option value="{{ $tagToImply->id }}" style="color: {{ $tagToImply->tagGroup->color }};">{{ $tagToImply->name }}</wa-option>
@endforeach
</wa-select>
<wa-button type="submit" variant="brand" appearance="outlined">
<wa-icon name="plus" slot="prefix"></wa-icon>
Create tag
</wa-button>
</form>
</div>
</div>
</div>