1
0
mirror of https://github.com/Kovah/LinkAce.git synced 2025-01-17 13:18:21 +01:00

Add semantic and suitable classes to many elements for better custom styling (#437)

This commit is contained in:
Kovah 2024-08-16 12:55:02 +02:00
parent eba6d94d80
commit b0c1d4d2cd
No known key found for this signature in database
GPG Key ID: AAAA031BA9830D7B
84 changed files with 874 additions and 948 deletions

View File

@ -227,7 +227,7 @@ class Link extends Model implements Auditable
public function addedAt(): string
{
$output = '<time-ago class="cursor-help"';
$output = '<time-ago class="date cursor-help"';
$output .= ' datetime="' . $this->created_at->toIso8601String() . '"';
$output .= ' title="' . formatDateTime($this->created_at) . '">';
$output .= formatDateTime($this->created_at, true);

View File

@ -1,7 +1,5 @@
@extends('layouts.bookmarklet')
@section('content')
@include('models.links.partials.create-form')
@endsection

View File

@ -1,4 +1,4 @@
<div class="bulk-edit table-responsive" data-type="links">
<div class="bulk-edit search-table table-responsive" data-type="links">
<table class="table mb-0">
<thead>
<tr>
@ -18,11 +18,11 @@
</th>
</tr>
</thead>
<tbody>
<tbody class="link-listing">
@foreach($results as $link)
<tr>
<td>
<a href="{{ route('links.show', [$link->id]) }}">
<a href="{{ route('links.show', [$link->id]) }}" class="title">
{{ $link->title }}
</a>
@if($link->tags->count() > 0)
@ -35,12 +35,12 @@
</div>
@endif
</td>
<td class="text-condensed">
<td class="meta text-condensed">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="small short-text">
{{ $link->shortUrl() }}
</a>
</td>
<td class="text-pale small text-condensed">{!! $link->addedAt() !!}</td>
<td class="meta text-pale small text-condensed">{!! $link->addedAt() !!}</td>
<td class="text-end">
<input type="checkbox" aria-label="@lang('')" class="bulk-edit-model form-check d-inline-block"
data-id="{{ $link->id }}">

View File

@ -5,13 +5,13 @@ use App\Enums\ModelAttribute;
@section('content')
<div class="card">
<div class="search card">
<div class="card-header">
@lang('search.search')
</div>
<div class="card-body">
<form action="{{ route('do-search') }}" method="POST">
<form action="{{ route('do-search') }}" method="POST" class="search-form">
@csrf
<div class="mb-4">

View File

@ -2,111 +2,113 @@
@section('content')
<h2>@lang('trash.trash')</h2>
<div class="trash">
<h2>@lang('trash.trash')</h2>
<div class="alert alert-danger my-4">
@lang('trash.delete_warning')
</div>
<div class="alert alert-danger my-4">
@lang('trash.delete_warning')
</div>
<div class="card">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_links')
<div class="card">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_links')
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="links">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
</div>
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="links">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
<div class="card-body">
@includeWhen($links->isNotempty(), 'app.trash.partials.link-table', ['links' => $links])
@if($links->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card-body">
@includeWhen($links->isNotempty(), 'app.trash.partials.link-table', ['links' => $links])
@if($links->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card mt-5">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_lists')
<div class="card mt-5">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_lists')
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="lists">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
</div>
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="lists">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
<div class="card-body">
@includeWhen($lists->isNotEmpty(), 'app.trash.partials.list-table', ['lists' => $lists])
@if($lists->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card-body">
@includeWhen($lists->isNotEmpty(), 'app.trash.partials.list-table', ['lists' => $lists])
@if($lists->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card mt-5">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_tags')
<div class="card mt-5">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_tags')
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="tags">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
</div>
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="tags">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
<div class="card-body">
@includeWhen($tags->isNotEmpty(), 'app.trash.partials.tag-table', ['tags' => $tags])
@if($tags->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card-body">
@includeWhen($tags->isNotEmpty(), 'app.trash.partials.tag-table', ['tags' => $tags])
@if($tags->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card mt-5">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_notes')
<div class="card mt-5">
<div class="card-header d-flex align-items-center">
<div>
@lang('trash.deleted_notes')
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="notes">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
</div>
</div>
<div class="ms-auto">
<form action="{{ route('clear-trash') }}" method="post">
@csrf
<input type="hidden" name="model" value="notes">
<button class="btn btn-sm btn-danger" title="@lang('trash.clear_trash')">
<x-icon.recycle/> @lang('trash.clear_trash')
</button>
</form>
<div class="card-body">
@includeWhen($notes->isNotEmpty(), 'app.trash.partials.note-table', ['notes' => $notes])
@if($notes->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
<div class="card-body">
@includeWhen($notes->isNotEmpty(), 'app.trash.partials.note-table', ['notes' => $notes])
@if($notes->isEmpty())
<small class="text-pale">@lang('trash.delete_no_entries')</small>
@endif
</div>
</div>
@endsection

View File

@ -1,4 +1,4 @@
<div class="table-responsive">
<div class="links-table table-responsive">
<table class="table table-sm mb-0">
<thead>
<tr>

View File

@ -1,4 +1,4 @@
<div class="table-responsive">
<div class="lists-table table-responsive">
<table class="table table-sm mb-0">
<thead>
<tr>

View File

@ -1,4 +1,4 @@
<div class="table-responsive">
<div class="notes-table table-responsive">
<table class="table table-sm mb-0">
<thead>
<tr>

View File

@ -1,4 +1,4 @@
<div class="table-responsive">
<div class="tags-table table-responsive">
<table class="table table-sm mb-0">
<thead>
<tr>

View File

@ -2,7 +2,7 @@
@section('content')
<div class="row justify-content-center">
<div class="password-confirmation row justify-content-center">
<div class="col-12 col-md-8">
@include('partials.alerts')

View File

@ -3,7 +3,7 @@
@lang('linkace.login')
</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}" aria-label="@lang('linkace.login')">
<form method="POST" action="{{ route('login') }}" aria-label="@lang('linkace.login')" class="login-form">
@csrf
<div class="mb-4">

View File

@ -2,7 +2,7 @@
@section('content')
<div class="row justify-content-center">
<div class="login row justify-content-center">
<div class="col-12 col-md-8">
@if(config('app.demo'))
<div class="alert alert-info small">@lang('linkace.demo_login_hint')</div>

View File

@ -2,7 +2,7 @@
@section('content')
<div class="row justify-content-center">
<div class="password-reset row justify-content-center">
<div class="col-12 col-md-8">
@if($errors->has('email') || session()->has('status'))

View File

@ -2,7 +2,7 @@
@section('content')
<div class="row justify-content-center">
<div class="password-reset row justify-content-center">
<div class="col-12 col-md-8">
@include('partials.alerts')

View File

@ -2,7 +2,7 @@
@section('content')
<div class="row justify-content-center">
<div class="register row justify-content-center">
<div class="col-12 col-md-8">
<div class="card">
<div class="card-header">

View File

@ -2,7 +2,7 @@
@section('content')
<div class="row justify-content-center">
<div class="two-factor row justify-content-center">
<div class="col-12 col-md-8">
@include('partials.alerts')

View File

@ -1,4 +1,4 @@
<div {{ $attributes }}>
<div {{ $attributes->merge(['class' => 'visibility-toggle']) }}>
<label class="form-label {{ $labelClasses }}" for="visibility">@lang('linkace.visibility')</label>
<select id="visibility" name="visibility" class="form-select {{ $inputClasses }}{{ $errors->has('visibility') ? ' is-invalid' : '' }}">
@if($unchangedOption)

View File

@ -1,6 +1,6 @@
@props(['model'])
@if($model->user->trashed())
<span {{ $attributes->merge(['title' => trans('user.is_deleted')]) }}>{{ $model->user->name }}</span>
<span {{ $attributes->merge(['title' => trans('user.is_deleted'), 'class' => 'author']) }}>{{ $model->user->name }}</span>
@else
<a href="{{ route('users.show', ['user' => $model->user]) }}" {{ $attributes }}>{{ $model->user->name }}</a>
<a href="{{ route('users.show', ['user' => $model->user]) }}" {{ $attributes->merge(['class' => 'author']) }}>{{ $model->user->name }}</a>
@endif

View File

@ -1,5 +1,5 @@
@props(['withoutWrapper' => false])
{!! $withoutWrapper ? '<!--' : '' !!}<div {{ $attributes->merge(['class' => 'dropdown']) }}>{!! $withoutWrapper ? '-->' : '' !!}
{!! $withoutWrapper ? '<!--' : '' !!}<div {{ $attributes->merge(['class' => 'link-order-dropdown dropdown']) }}>{!! $withoutWrapper ? '-->' : '' !!}
<button type="button" id="link-index-order-dd"
class="btn btn-sm btn-outline-primary dropdown-toggle dropdown-toggle-split"
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">

View File

@ -1,4 +1,4 @@
@props(['model'])
<div {{ $attributes->merge(['class' => 'd-inline']) }}>
<div {{ $attributes->merge(['class' => 'd-inline author']) }}>
<span class="text-muted text-condensed">{{ $model->user->name }}&sol;</span>{{ $model->name }}
</div>

View File

@ -1,6 +1,6 @@
@props(['model', 'iconClass' => ''])
@if($model->visibility !== \App\Enums\ModelAttribute::VISIBILITY_PUBLIC)
<div {{ $attributes->merge(['class' => '']) }}>
<div {{ $attributes->merge(['class' => 'visibility']) }}>
@if($model->visibility === \App\Enums\ModelAttribute::VISIBILITY_PRIVATE)
<x-icon.lock title="@lang($model->langBase . '.private')" :class="$iconClass"/>
<span class="visually-hidden">@lang($model->langBase . '.private')</span>

View File

@ -1,163 +1,164 @@
@extends('layouts.app')
@section('content')
<div class="dashboard">
<h3 class="mb-4">@lang('user.hello', ['user' => auth()->user()->name])</h3>
<h3 class="mb-4">@lang('user.hello', ['user' => auth()->user()->name])</h3>
<div class="dashboard-header row">
<div class="quick-add col-12 col-md-7">
<form action="{{ route('links.store') }}" method="POST">
@csrf
<div class="row">
<div class="col-12 col-md-7">
<form action="{{ route('links.store') }}" method="POST">
@csrf
<input type="hidden" name="visibility" value="{{ usersettings('links_default_visibility') }}">
<input type="hidden" name="title" value="">
<input type="hidden" name="description" value="">
<input type="hidden" name="lists" value="">
<input type="hidden" name="tags" value="">
<input type="hidden" name="visibility" value="{{ usersettings('links_default_visibility') }}">
<input type="hidden" name="title" value="">
<input type="hidden" name="description" value="">
<input type="hidden" name="lists" value="">
<input type="hidden" name="tags" value="">
<div class="input-group">
<input type="url" id="url" name="url" required
class="form-control{{ $errors->has('url') ? ' is-invalid' : '' }}"
placeholder="@lang('link.url')" value="{{ old('url') }}"
aria-label="@lang('link.url')">
<button class="btn btn-primary" type="submit">
<x-icon.plus class="me-2"/> @lang('link.add_quick')
</button>
</div>
<div class="input-group">
<input type="url" id="url" name="url" required
class="form-control{{ $errors->has('url') ? ' is-invalid' : '' }}"
placeholder="@lang('link.url')" value="{{ old('url') }}"
aria-label="@lang('link.url')">
<button class="btn btn-primary" type="submit">
<x-icon.plus class="me-2"/> @lang('link.add_quick')
</button>
</div>
@if ($errors->has('url'))
<p class="invalid-feedback" role="alert">
{{ $errors->first('url') }}
</p>
@endif
</form>
</div>
<div class="quick-search col-12 col-md-5 mt-4 mt-md-0">
<form action="{{ route('do-search') }}" method="POST">
@csrf
<input type="hidden" name="search_title" value="on">
<input type="hidden" name="search_description" value="on">
@if ($errors->has('url'))
<p class="invalid-feedback" role="alert">
{{ $errors->first('url') }}
</p>
@endif
</form>
<label for="query" class="visually-hidden">@lang('search.query')</label>
<div class="input-group">
<input type="text" name="query" id="query" required minlength="1"
class="form-control" placeholder="@lang('search.query')">
<button class="btn btn-primary" type="submit">
<x-icon.search class="me-2"/>
@lang('search.search')
</button>
</div>
</form>
</div>
</div>
<div class="col-12 col-md-5 mt-4 mt-md-0">
<form action="{{ route('do-search') }}" method="POST">
@csrf
<input type="hidden" name="search_title" value="on">
<input type="hidden" name="search_description" value="on">
<label for="query" class="visually-hidden">@lang('search.query')</label>
<div class="input-group">
<input type="text" name="query" id="query" required minlength="1"
class="form-control" placeholder="@lang('search.query')">
<button class="btn btn-primary" type="submit">
<x-icon.search class="me-2"/>
@lang('search.search')
</button>
</div>
</form>
</div>
</div>
<div class="row">
<div class="col-12 col-md-7">
<div class="row">
<div class="col-12 col-md-7">
<div class="card mt-4">
<div class="card-header">
@lang('link.recent_links')
</div>
<div class="card mt-4">
<div class="card-header">
@lang('link.recent_links')
<ul class="link-listing list-group list-group-flush">
@forelse($recent_links as $link)
<a href="{{ route('links.show', [$link->id]) }}"
class="list-group-item list-group-item-action one-line">
{!! $link->getIcon('me-1') !!}
{{ $link->title }}
</a>
@empty
<li class="list-group-item text-pale">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</li>
@endforelse
</ul>
</div>
<ul class="list-group list-group-flush">
@forelse($recent_links as $link)
<a href="{{ route('links.show', [$link->id]) }}"
class="list-group-item list-group-item-action one-line">
{!! $link->getIcon('me-1') !!}
{{ $link->title }}
</a>
@empty
<li class="list-group-item text-pale">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
<div class="dashboard-stats col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('stats.stats')
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_links')</span>
<span class="badge bg-secondary">{{ $stats['total_links'] }}</span>
</li>
@endforelse
</ul>
</div>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_lists')</span>
<span class="badge bg-secondary">{{ $stats['total_lists'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_tags')</span>
<span class="badge bg-secondary">{{ $stats['total_tags'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_notes')</span>
<span class="badge bg-secondary">{{ $stats['total_notes'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_broken_links')</span>
<form action="{{ route('do-search') }}" method="post" class="d-inline-block">
@csrf
<input type="hidden" name="broken_only" value="on">
<button type="submit"
class="badge border-0 {{ $stats['total_broken_links'] > 0 ? 'bg-danger' : 'bg-secondary' }}">
{{ $stats['total_broken_links'] }}
</button>
</form>
</li>
</ul>
</div>
</div>
</div>
<div class="col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('stats.stats')
<div class="taxonomy row">
<div class="col-12 col-md-7">
<div class="card mt-4">
<div class="card-header">
@lang('list.recent_lists')
</div>
<div class="list-listing card-body btn-cloud">
@forelse($recent_lists as $list)
<a href="{{ route('lists.show', ['list' => $list]) }}" class="single-list btn btn-light btn-sm m-1">
<x-models.name-with-user :model="$list"/>
</a>
@empty
<div class="text-pale">
@lang('linkace.no_results_found', ['model' => trans('list.lists')])
</div>
@endforelse
</div>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_links')</span>
<span class="badge bg-secondary">{{ $stats['total_links'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_lists')</span>
<span class="badge bg-secondary">{{ $stats['total_lists'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_tags')</span>
<span class="badge bg-secondary">{{ $stats['total_tags'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_notes')</span>
<span class="badge bg-secondary">{{ $stats['total_notes'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_broken_links')</span>
<form action="{{ route('do-search') }}" method="post" class="d-inline-block">
@csrf
<input type="hidden" name="broken_only" value="on">
<button type="submit"
class="badge border-0 {{ $stats['total_broken_links'] > 0 ? 'bg-danger' : 'bg-secondary' }}">
{{ $stats['total_broken_links'] }}
</button>
</form>
</li>
</ul>
</div>
<div class="col-12 col-md-5">
</div>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('tag.recent_tags')
</div>
<div class="row">
<div class="col-12 col-md-7">
<div class="card mt-4">
<div class="card-header">
@lang('list.recent_lists')
<div class="tag-listing card-body btn-cloud">
@forelse($recent_tags as $tag)
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="single-tag btn btn-light btn-sm m-1">
<x-models.name-with-user :model="$tag"/>
</a>
@empty
<div class="text-pale">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endforelse
</div>
</div>
<div class="card-body btn-cloud">
@forelse($recent_lists as $list)
<a href="{{ route('lists.show', ['list' => $list]) }}" class="btn btn-light btn-sm m-1">
<x-models.name-with-user :model="$list"/>
</a>
@empty
<div class="text-pale">
@lang('linkace.no_results_found', ['model' => trans('list.lists')])
</div>
@endforelse
</div>
</div>
</div>
<div class="col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('tag.recent_tags')
</div>
<div class="card-body btn-cloud">
@forelse($recent_tags as $tag)
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="btn btn-light btn-sm m-1">
<x-models.name-with-user :model="$tag"/>
</a>
@empty
<div class="text-pale">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endforelse
</div>
</div>
</div>
</div>

View File

@ -6,7 +6,7 @@
@section('content')
<header class="d-flex align-items-center">
<header class="links-header d-flex align-items-center">
<h3 class="mb-0 me-3">
@lang('link.links')
</h3>
@ -18,7 +18,7 @@
<x-models.link-order-dropdown class="ms-1"/>
</header>
<section class="my-4">
<section class="link-listing my-4">
@if($links->isNotEmpty())
<div class="link-wrapper">

View File

@ -1,4 +1,4 @@
<div class="link-list row gy-4">
<div class="link-list links-card row gy-4">
@foreach($links as $link)
@include('guest.links.partials.single-card')
@endforeach

View File

@ -1,4 +1,4 @@
<div class="link-list list-group">
<div class="listing links-detailed list-group">
@foreach($links as $link)
@include('guest.links.partials.single-detailed')
@endforeach

View File

@ -1,4 +1,4 @@
<ul class="link-list list-group">
<ul class="link-list links-simple list-group">
@foreach($links as $link)
@include('guest.links.partials.single-simple')
@endforeach

View File

@ -1,7 +1,7 @@
@php
$shareLinks = getShareLinks($link);
@endphp
<div class="link-card col-12 col-sm-6 col-md-4 mb-4">
<div class="single-link link-card col-12 col-sm-6 col-md-4 mb-4">
<div class="h-100 card">
<div class="link-thumbnail-list-holder-detailed">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="link-thumbnail-list-detailed"

View File

@ -1,7 +1,7 @@
@php
$shareLinks = getShareLinks($link);
@endphp
<div class="link-detailed list-group-item py-3">
<div class="single-link link-detailed list-group-item py-3">
<div class="d-flex w-100">
<div class="me-2 me-lg-3">
{!! $link->getIcon() !!}

View File

@ -1,7 +1,7 @@
@php
$shareLinks = getShareLinks($link);
@endphp
<li class="link-simple list-group-item">
<li class="single-link link-simple list-group-item">
<div class="d-sm-flex align-items-center">
<div class="me-4 one-line-sm">
<a href="{{ $link->url }}" title="{{ $link->url }}" {!! linkTarget() !!}>

View File

@ -1,63 +0,0 @@
<div class="card mb-4">
<div class="card-header">
<div class="d-flex align-items-center">
<div class="me-2">
{!! $link->getIcon('me-1') !!}
<a href="{{ $link->url }}" {!! linkTarget() !!}>{{ $link->title }}</a>
<small>({{ $link->url }})</small>
</div>
<div class="ms-auto text-end">
<button type="button" class="btn btn-xs btn-outline-primary" title="@lang('sharing.share_link')"
data-bs-toggle="collapse" data-bs-target="#sharing-{{ $link->id }}"
aria-expanded="false" aria-controls="sharing-{{ $link->id }}">
<x-icon.share class="fw"/>
</button>
</div>
</div>
</div>
<div class="card-body py-2 px-3">
<div class="row">
<div class="col-xs-12 col-sm-6 small">
<div class="mt-2">
@if($link->tags->count() > 0)
<label>@lang('tag.tags'):</label>
@foreach($link->tags as $tag)
@if(!$tag->is_private)
<a href="{{ route('guest.tags.show', ['tag' => $tag]) }}"
class="badge badge-primary">
{{ $tag->name }}
</a>
@endif
@endforeach
@else
@lang('tag.no_tags')
@endif
</div>
</div>
<div class="col-xs-12 col-sm-6 text-md-right text-pale">
<div>
<small>
@lang('linkace.added_at') {!! $link->addedAt() !!}
</small>
</div>
</div>
</div>
</div>
<div class="collapse" id="sharing-{{ $link->id }}">
<div class="card-footer">
<div class="share-links">
{!! getShareLinks($link) !!}
</div>
</div>
</div>
</div>

View File

@ -6,7 +6,7 @@
@section('content')
<header class="d-flex align-items-center">
<header class="list-header d-flex align-items-center">
<h3 class="mb-0 me-3">
@lang('list.lists')
</h3>
@ -21,7 +21,7 @@
@if(!$lists->isEmpty())
<div class="row my-3">
<div class="list-listing row my-3">
@foreach($lists as $list)
@include('guest.lists.partials.single')
@endforeach

View File

@ -1,15 +1,15 @@
<div class="col-12 col-sm-6 col-md-4 mb-4">
<div class="single-list col-12 col-sm-6 col-md-4 mb-4">
<div class="h-100 card">
<div class="card-body">
<a href="{{ route('guest.lists.show', ['list' => $list]) }}">
<a href="{{ route('guest.lists.show', ['list' => $list]) }}" class="title">
<x-models.name-with-user :model="$list"/>
</a>
@if($list->description)
<div class="small mt-2">{{ $list->description }}</div>
<div class="description small mt-2">{{ $list->description }}</div>
@endif
</div>
<div class="py-2 px-3">
<div class="list-meta py-2 px-3">
<div class="text-xs text-pale text-condensed">
@if($list->links_count > 0)
{{ trans_choice('list.number_links', $list->links_count, ['number' => $list->links_count]) }}

View File

@ -2,7 +2,7 @@
@section('content')
<div class="card">
<div class="list-details card">
<header class="card-header d-flex align-items-center">
<span class="me-3">@lang('list.list')</span>
@ -15,16 +15,16 @@
</header>
<div class="card-body">
<h2 class="mb-0">{{ $list->name }}</h2>
<h2 class="title mb-0">{{ $list->name }}</h2>
@if($list->description)
<p class="mt-2 mb-0">{{ $list->description }}</p>
<p class="description mt-2 mb-0">{{ $list->description }}</p>
@endif
</div>
</div>
<section class="my-4">
<section class="list-links my-4">
@if($links->isNotEmpty())
<div class="d-flex align-items-center mb-4">
<x-models.link-display-toggles class="ms-auto"/>

View File

@ -6,7 +6,7 @@
@section('content')
<header class="d-flex align-items-center">
<header class="tags-header d-flex align-items-center">
<h3 class="mb-0 me-3">
@lang('tag.tags')
</h3>
@ -16,19 +16,15 @@
</a>
</header>
<div class="card my-3 mb-3">
<div class="tags-listing card my-3 mb-3">
<div class="card-table">
@if(!$tags->isEmpty())
@include('guest.tags.partials.table')
@else
<div class="alert alert-info m-3">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endif
</div>

View File

@ -1,6 +1,6 @@
<tr>
<tr class="single-tag">
<td>
<a href="{{ route('guest.tags.show', [$tag]) }}">
<a href="{{ route('guest.tags.show', [$tag]) }}" class="title">
<x-models.name-with-user :model="$tag"/>
</a>
</td>

View File

@ -1,4 +1,4 @@
<div class="table-responsive">
<div class="tags-table table-responsive">
<table class="table mb-0">
<thead>
<tr>

View File

@ -2,7 +2,7 @@
@section('content')
<div class="card">
<div class="tag-details card">
<header class="card-header d-flex align-items-center">
<span class="me-3">@lang('tag.tag')</span>
@ -14,11 +14,11 @@
</header>
<div class="card-body">
<h2 class="mb-0">{{ $tag->name }}</h2>
<h2 class="title mb-0">{{ $tag->name }}</h2>
</div>
</div>
<section class="my-4">
<section class="tag-links my-4">
@if($links->isNotEmpty())
<div class="d-flex align-items-center mb-4">
<x-models.link-display-toggles class="ms-auto"/>

View File

@ -2,101 +2,104 @@
@section('content')
<div class="card">
<div class="card-header">
@lang('user.user')
<div class="user-profile">
<div class="card">
<div class="card-header">
@lang('user.user')
</div>
<div class="card-body">
<h2 class="title mb-0">{{ $user->name }}</h2>
</div>
</div>
<div class="card-body">
<h2 class="mb-0">{{ $user->name }}</h2>
</div>
</div>
<div class="row">
<div class="col-12 col-md-7">
<div class="row">
<div class="col-12 col-md-7">
<div class="card mt-4">
<div class="card-header">
@lang('link.recent_links')
<div class="card mt-4">
<div class="card-header">
@lang('link.recent_links')
</div>
<ul class="user-links list-group list-group-flush">
@forelse($links as $link)
<a href="{{ $link->url }}" class="list-group-item list-group-item-action one-line">
{!! $link->getIcon('me-1') !!}
{{ $link->title }}
</a>
@empty
<li class="list-group-item text-muted">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</li>
@endforelse
</ul>
</div>
<ul class="list-group list-group-flush">
@forelse($links as $link)
<a href="{{ $link->url }}" class="list-group-item list-group-item-action one-line">
{!! $link->getIcon('me-1') !!}
{{ $link->title }}
</a>
@empty
<li class="list-group-item text-muted">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
<div class="meta col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('stats.stats')
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_links')</span>
<span class="badge bg-secondary">{{ $stats['total_links'] }}</span>
</li>
@endforelse
</ul>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_lists')</span>
<span class="badge bg-secondary">{{ $stats['total_lists'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_tags')</span>
<span class="badge bg-secondary">{{ $stats['total_tags'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_notes')</span>
<span class="badge bg-secondary">{{ $stats['total_notes'] }}</span>
</li>
</ul>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('list.recent_lists')
</div>
<div class="card-body">
@forelse($lists as $list)
<a href="{{ route('guest.lists.show', ['list' => $list]) }}"
class="btn btn-light btn-sm m-1">
{{ $list->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('list.lists')])
</div>
@endforelse
</div>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('tag.recent_tags')
</div>
<div class="card-body">
@forelse($tags as $tag)
<a href="{{ route('guest.tags.show', ['tag' => $tag]) }}" class="btn btn-light btn-sm m-1">
{{ $tag->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endforelse
</div>
</div>
</div>
</div>
<div class="col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('stats.stats')
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_links')</span>
<span class="badge bg-secondary">{{ $stats['total_links'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_lists')</span>
<span class="badge bg-secondary">{{ $stats['total_lists'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_tags')</span>
<span class="badge bg-secondary">{{ $stats['total_tags'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_notes')</span>
<span class="badge bg-secondary">{{ $stats['total_notes'] }}</span>
</li>
</ul>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('list.recent_lists')
</div>
<div class="card-body">
@forelse($lists as $list)
<a href="{{ route('guest.lists.show', ['list' => $list]) }}" class="btn btn-light btn-sm m-1">
{{ $list->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('list.lists')])
</div>
@endforelse
</div>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('tag.recent_tags')
</div>
<div class="card-body">
@forelse($tags as $tag)
<a href="{{ route('guest.tags.show', ['tag' => $tag]) }}" class="btn btn-light btn-sm m-1">
{{ $tag->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endforelse
</div>
</div>
</div>
</div>

View File

@ -3,7 +3,7 @@
<head>
@include('partials.header')
</head>
<body>
<body class="app">
<div id="app">
@include('partials.nav')

View File

@ -3,7 +3,7 @@
<head>
@include('partials.header')
</head>
<body>
<body class="auth">
<div id="app">
@include('partials.nav')

View File

@ -11,7 +11,7 @@
@include('partials.favicon')
</head>
<body>
<body class="errors">
<div id="app">
<main class="main container">

View File

@ -3,7 +3,7 @@
<head>
@include('partials.header')
</head>
<body>
<body class="guest">
<div id="app">
@include('guest.partials.nav')

View File

@ -1,7 +1,7 @@
@extends('layouts.app')
@section('content')
<form action="{{ route('bulk-edit.update-links') }}" method="POST" class="card">
<form action="{{ route('bulk-edit.update-links') }}" method="POST" class="card bulk-form link-form">
@csrf
<input type="hidden" name="models" value="{{ old('models', implode(',', $models)) }}">
<header class="card-header">@choice('link.bulk_title', $modelCount, ['count' => $modelCount])</header>

View File

@ -1,7 +1,5 @@
@extends('layouts.app')
@section('content')
@include('models.links.partials.create-form')
@endsection

View File

@ -8,7 +8,8 @@
</header>
<div class="card-body">
<form action="{{ route('links.update', [$link->id]) }}" method="POST" id="link-edit">
<form action="{{ route('links.update', [$link->id]) }}" method="POST" id="link-edit"
class="edit-form link-form">
@method('PATCH')
@csrf

View File

@ -2,7 +2,7 @@
@section('content')
<header class="d-flex align-items-center">
<header class="links-header d-flex align-items-center">
<h3 class="mb-0">
@lang('link.links')
</h3>
@ -17,7 +17,7 @@
</div>
</header>
<section class="mb-4">
<section class="link-listing mb-4">
@if($links->isNotEmpty())
<div class="link-wrapper">

View File

@ -4,7 +4,7 @@
</header>
<div class="card-body">
<form action="{{ route('links.store') }}" method="POST">
<form action="{{ route('links.store') }}" method="POST" class="create-form link-form">
@csrf
<div class="mb-4">

View File

@ -1,2 +1,2 @@
<x-dynamic-component :component="$icon" class="{{ $class }}" title="{{ $title }}"/>
<x-dynamic-component :component="$icon" class="link-icon {{ $class }}" title="{{ $title }}"/>
<span class="visually-hidden">{{ $title }}</span>

View File

@ -1,4 +1,4 @@
<div class="bulk-edit" data-type="links">
<div class="bulk-edit links-cards" data-type="links">
<form class="bulk-edit-form visually-hidden text-end" action="{{ route('bulk-edit.form') }}" method="POST">
@csrf()
<input type="hidden" name="type">

View File

@ -1,4 +1,4 @@
<div class="bulk-edit" data-type="links">
<div class="bulk-edit links-detailed" data-type="links">
<form class="bulk-edit-form visually-hidden text-end" action="{{ route('bulk-edit.form') }}" method="POST">
@csrf()
<input type="hidden" name="type">

View File

@ -1,4 +1,4 @@
<div class="bulk-edit" data-type="links">
<div class="bulk-edit links-simple" data-type="links">
<form class="bulk-edit-form visually-hidden text-end" action="{{ route('bulk-edit.form') }}" method="POST">
@csrf()
<input type="hidden" name="type">

View File

@ -1,4 +1,5 @@
<a href="{!! $href !!}" class="{{ $class }}" title="{{ $title }}" target="_blank" rel="noreferrer nofollow">
<a href="{!! $href !!}" class="link-sharing {{ $class }}" title="{{ $title }}"
target="_blank" rel="noreferrer nofollow">
<x-dynamic-component :component="$icon" class="fw" />
<span class="visually-hidden">{{ $title }}</span>
</a>

View File

@ -0,0 +1,108 @@
<div class="link-details row">
<div class="col-12 col-md-8">
<div class="card">
<div class="card-body">
<div class="d-flex flex-column flex-lg-row mb-3">
@if($link->thumbnail)
<a href="{{ $link->url }}" {!! linkTarget() !!}
class="rounded d-block mt-lg-1 me-lg-2 align-self-center link-thumbnail link-thumbnail-detail"
style="background-image: url('{{ $link->thumbnail }}') ;">
</a>
@endif
<div class="d-sm-inline-block mt-1 mb-2 mb-sm-0">
{!! $link->getIcon('me-1 me-sm-2') !!}
<x-models.visibility-badge :model="$link" class="me-1 me-sm-2 d-inline-block"/>
</div>
<h3 class="title d-inline-block mb-0">
<a href="{{ $link->url }}" {!! linkTarget() !!}>{{ $link->title }}</a>
</h3>
</div>
<div class="text-pale small mt-1 mb-3">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="url">{{ $link->url }}</a>
<br>
@lang('linkace.added_by'): <x-models.author :model="$link"/>
</div>
@if($link->description)
<div class="description">{!! $link->formatted_description !!}</div>
@endif
</div>
</div>
@if(getShareLinks($link) !== '')
<div class="card mt-4">
<div class="card-header">
@lang('sharing.share_link')
</div>
<div class="card-body py-2">
<div class="share-links">
{!! getShareLinks($link) !!}
</div>
</div>
</div>
@endif
</div>
<div class="link-actions col-12 col-md-4">
<div class="btn-group w-100 mb-3 mt-4 mt-md-0">
<a href="{{ route('links.edit', [$link->id]) }}" class="btn btn-sm btn-primary"
aria-label="@lang('link.edit')">
<x-icon.edit class="me-2"/>
<span class="d-none d-sm-inline">@lang('linkace.edit')</span>
</a>
<button type="submit" form="link-delete-{{ $link->id }}" aria-label="@choice('link.delete', 1)"
class="btn btn-sm btn-outline-danger cursor-pointer">
<x-icon.trash class="me-2"/>
<span class="d-none d-sm-inline">@lang('linkace.delete')</span>
</button>
</div>
<form id="link-delete-{{ $link->id }}" method="POST" style="display: none;"
action="{{ route('links.destroy', ['link' => $link]) }}">
@method('DELETE')
@csrf
</form>
<div class="wayback-link mb-3">
<a href="{{ \App\Helper\WaybackMachine::getArchiveLink($link->url) }}"
class="btn btn-sm w-100 btn-outline-info" target="_blank">
@lang('link.wayback')
</a>
</div>
<form action="{{ route('links.toggle-check', [$link->id]) }}" method="POST"
class="mb-2 d-flex align-items-center">
@csrf
@if($link->check_disabled)
<small class="me-3">@lang('link.check_disabled')</small>
<input type="hidden" name="toggle" value="0">
<button type="submit" class="btn btn-xs btn-outline-secondary ms-auto">
@lang('link.check_enable')
</button>
@else
<small class="me-3">@lang('link.check_enabled')</small>
<input type="hidden" name="toggle" value="1">
<button type="submit" class="btn btn-xs btn-outline-secondary ms-auto">
@lang('link.check_disable')
</button>
@endif
</form>
@if($link->status !== 1)
<form action="{{ route('links.mark-working', [$link->id]) }}" method="POST"
class="mt-2 d-flex align-items-center">
@csrf
<small class="me-3">@lang('link.status_is_broken')</small>
<input type="hidden" name="toggle" value="0">
<button type="submit" class="btn btn-xs btn-outline-secondary ms-auto">
@lang('link.status_mark_working')
</button>
</form>
@endif
</div>
</div>

View File

@ -0,0 +1,21 @@
<div class="link-history mt-5">
<h3 class="h6 mb-2">@lang('link.history')</h3>
<div class="history small text-pale">
@foreach($history as $entry)
@if($loop->index === 5 && $loop->count >= 10)
<a data-bs-toggle="collapse" href="#link-history" role="button" class="d-inline-block mb-1"
aria-expanded="false" aria-controls="link-history">
@lang('linkace.more')
<x-icon.caret-down class="fw"/>
</a>
<div id="link-history" class="collapse">
@endif
<x-history.link-entry :entry="$entry"/>
@endforeach
<div>{{ formatDateTime($link->created_at) }}: @lang('link.history_created')</div>
@if(count($history) >= 10)
</div>
@endif
</div>
</div>

View File

@ -0,0 +1,13 @@
<div class="link-notes mt-5">
<h3 class="h6 mb-2">@lang('note.notes')</h3>
@if($link->notes->count())
@foreach($link->notes as $note)
@include('models.notes.partials.single', ['note' =>$note])
@endforeach
@endif
@include('models.notes.partials.create', ['link' => $link])
</div>

View File

@ -0,0 +1,38 @@
<div class="link-taxonomy row mt-4">
<div class="col-12 col-md-6">
<div class="card">
<div class="card-header">
@lang('list.lists')
</div>
<div class="card-body py-2">
@if(!$link->lists->isEmpty())
@foreach($link->lists as $list)
<a href="{{ route('lists.show', ['list' => $list]) }}" class="btn btn-sm btn-light m-1">
<x-models.name-with-user :model="$list"/>
</a>
@endforeach
@else
<div class="text-pale small">@lang('list.no_lists')</div>
@endif
</div>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card">
<div class="card-header">
@lang('tag.tags')
</div>
<div class="card-body py-2">
@if(!$link->tags->isEmpty())
@foreach($link->tags as $tag)
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="btn btn-sm btn-light m-1">
<x-models.name-with-user :model="$tag"/>
</a>
@endforeach
@else
<div class="text-pale small">@lang('tag.no_tags')</div>
@endif
</div>
</div>
</div>
</div>

View File

@ -1,7 +1,7 @@
@php
$shareLinks = getShareLinks($link);
@endphp
<div class="link-card col-12 col-md-6 col-lg-4">
<div class="single-link link-card col-12 col-md-6 col-lg-4">
<div class="h-100 card">
<div class="link-thumbnail-list-holder-detailed">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="link-thumbnail-list-detailed">
@ -19,14 +19,14 @@
</div>
<div class="card-body h-100 border-bottom-0">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="two-lines">{{ $link->title }}</a>
<div class="mt-1 small text-pale w-100 one-line">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="title two-lines">{{ $link->title }}</a>
<div class="url mt-1 small text-pale w-100 one-line">
{{ $link->url }}
</div>
</div>
@if($link->tags->count() > 0)
<div class="px-3 mb-3">
<div class="link-tags px-3 mb-3">
@foreach($link->tags as $tag)
<a href="{{ route('tags.show', [$tag]) }}" class="btn btn-light btn-xs text-condensed">
{{ $tag->name }}
@ -35,7 +35,7 @@
</div>
@endif
<div class="d-flex align-items-center my-1">
<div class="meta d-flex align-items-center my-1">
<div class="text-pale text-xs me-3 ps-3 text-condensed">
@lang('linkace.added') {!! $link->addedAt() !!}
</div>

View File

@ -1,25 +1,25 @@
@php
$shareLinks = getShareLinks($link);
@endphp
<div class="link-detailed list-group-item py-3">
<div class="single-link link-detailed list-group-item py-3">
<div class="d-flex w-100">
<div class="me-2 me-lg-3">
{!! $link->getIcon() !!}
<x-models.visibility-badge :model="$link"/>
</div>
<div class="min-w-0">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="two-lines">{{ $link->title }}</a>
<div class="mt-1 small text-pale w-100 one-line">
<a href="{{ $link->url }}" {!! linkTarget() !!} class="title two-lines">{{ $link->title }}</a>
<div class="url mt-1 small text-pale w-100 one-line">
{{ $link->url }}
</div>
@if($link->description)
<div class="small mt-1 two-lines">{{ $link->description }}</div>
<div class="description small mt-1 two-lines">{{ $link->description }}</div>
@endif
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-sm-6">
<div class="link-tags col-12 col-sm-6">
<div class="d-none d-sm-inline-block me-3 me-lg-4">&nbsp;</div>
@if($link->tags->count() > 0)
@foreach($link->tags as $tag)
@ -29,7 +29,8 @@
@endforeach
@endif
</div>
<div class="col-12 col-sm-6 mt-2 mt-sm-0 d-flex align-items-center justify-content-end flex-wrap">
<div class="meta col-12 col-sm-6 mt-2 mt-sm-0 d-flex align-items-center justify-content-end flex-wrap">
<div class="text-xs text-pale text-condensed">
@lang('linkace.added') {!! $link->addedAt() !!}
@ -57,6 +58,7 @@
data-id="{{ $link->id }}">
</div>
</div>
@if($shareLinks !== '')
<div class="collapse" id="sharing-{{ $link->id }}">
<div class="share-links justify-content-end mt-1">

View File

@ -1,11 +1,11 @@
@php
$shareLinks = getShareLinks($link);
@endphp
<li class="link-simple list-group-item">
<li class="single-link link-simple list-group-item">
<div class="d-sm-flex align-items-center">
<div class="me-4 one-line-sm">
{!! $link->getIcon('me-1') !!}
<a href="{{ $link->url }}" title="{{ $link->url }}" {!! linkTarget() !!}>
<a href="{{ $link->url }}" title="{{ $link->url }}" {!! linkTarget() !!} class="title">
{{ $link->title }}
</a>
</div>

View File

@ -2,188 +2,11 @@
@section('content')
<div class="row">
<div class="col-12 col-md-8">
<div class="card">
<div class="card-body">
<div class="d-flex flex-column flex-lg-row mb-3">
@if($link->thumbnail)
<a href="{{ $link->url }}" {!! linkTarget() !!}
class="rounded d-block mt-lg-1 me-lg-2 align-self-center link-thumbnail link-thumbnail-detail"
style="background-image: url('{{ $link->thumbnail }}') ;">
</a>
@endif
<div class="d-sm-inline-block mt-1 mb-2 mb-sm-0">
{!! $link->getIcon('me-1 me-sm-2') !!}
<x-models.visibility-badge :model="$link" class="me-1 me-sm-2 d-inline-block"/>
</div>
<h3 class="d-inline-block mb-0">
<a href="{{ $link->url }}" {!! linkTarget() !!}>{{ $link->title }}</a>
</h3>
</div>
<div class="text-pale small mt-1 mb-3">
<a href="{{ $link->url }}" {!! linkTarget() !!}>{{ $link->url }}</a>
<br>
@lang('linkace.added_by'): <x-models.author :model="$link"/>
</div>
@if($link->description)
<div>{!! $link->formatted_description !!}</div>
@endif
</div>
</div>
@if(getShareLinks($link) !== '')
<div class="card mt-4">
<div class="card-header">
@lang('sharing.share_link')
</div>
<div class="card-body py-2">
<div class="share-links">
{!! getShareLinks($link) !!}
</div>
</div>
</div>
@endif
</div>
<div class="col-12 col-md-4">
<div class="btn-group w-100 mb-3 mt-4 mt-md-0">
<a href="{{ route('links.edit', [$link->id]) }}" class="btn btn-sm btn-primary"
aria-label="@lang('link.edit')">
<x-icon.edit class="me-2"/>
<span class="d-none d-sm-inline">@lang('linkace.edit')</span>
</a>
<button type="submit" form="link-delete-{{ $link->id }}" aria-label="@choice('link.delete', 1)"
class="btn btn-sm btn-outline-danger cursor-pointer">
<x-icon.trash class="me-2"/>
<span class="d-none d-sm-inline">@lang('linkace.delete')</span>
</button>
</div>
<form id="link-delete-{{ $link->id }}" method="POST" style="display: none;"
action="{{ route('links.destroy', ['link' => $link]) }}">
@method('DELETE')
@csrf
</form>
<div class="mb-3">
<a href="{{ \App\Helper\WaybackMachine::getArchiveLink($link->url) }}"
class="btn btn-sm w-100 btn-outline-info" target="_blank">
@lang('link.wayback')
</a>
</div>
<form action="{{ route('links.toggle-check', [$link->id]) }}" method="POST"
class="mb-2 d-flex align-items-center">
@csrf
@if($link->check_disabled)
<small class="me-3">@lang('link.check_disabled')</small>
<input type="hidden" name="toggle" value="0">
<button type="submit" class="btn btn-xs btn-outline-secondary ms-auto">
@lang('link.check_enable')
</button>
@else
<small class="me-3">@lang('link.check_enabled')</small>
<input type="hidden" name="toggle" value="1">
<button type="submit" class="btn btn-xs btn-outline-secondary ms-auto">
@lang('link.check_disable')
</button>
@endif
</form>
@if($link->status !== 1)
<form action="{{ route('links.mark-working', [$link->id]) }}" method="POST"
class="mt-2 d-flex align-items-center">
@csrf
<small class="me-3">@lang('link.status_is_broken')</small>
<input type="hidden" name="toggle" value="0">
<button type="submit" class="btn btn-xs btn-outline-secondary ms-auto">
@lang('link.status_mark_working')
</button>
</form>
@endif
</div>
</div>
<div class="row mt-4">
<div class="col-12 col-md-6">
<div class="card">
<div class="card-header">
@lang('list.lists')
</div>
<div class="card-body py-2">
@if(!$link->lists->isEmpty())
@foreach($link->lists as $list)
<a href="{{ route('lists.show', ['list' => $list]) }}" class="btn btn-sm btn-light m-1">
<x-models.name-with-user :model="$list"/>
</a>
@endforeach
@else
<div class="text-pale small">@lang('list.no_lists')</div>
@endif
</div>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card">
<div class="card-header">
@lang('tag.tags')
</div>
<div class="card-body py-2">
@if(!$link->tags->isEmpty())
@foreach($link->tags as $tag)
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="btn btn-sm btn-light m-1">
<x-models.name-with-user :model="$tag"/>
</a>
@endforeach
@else
<div class="text-pale small">@lang('tag.no_tags')</div>
@endif
</div>
</div>
</div>
</div>
<div class="link-notes mt-5">
<h3 class="h6 mb-2">@lang('note.notes')</h3>
@if($link->notes->count())
@foreach($link->notes as $note)
@include('models.notes.partials.single', ['note' =>$note])
@endforeach
@endif
@include('models.notes.partials.create', ['link' => $link])
</div>
<div class="link-history mt-5">
<h3 class="h6 mb-2">@lang('link.history')</h3>
<div class="history small text-pale">
@foreach($history as $entry)
@if($loop->index === 5 && $loop->count >= 10)
<a data-bs-toggle="collapse" href="#link-history" role="button" class="d-inline-block mb-1"
aria-expanded="false" aria-controls="link-history">
@lang('linkace.more')
<x-icon.caret-down class="fw"/>
</a>
<div id="link-history" class="collapse">
@endif
<x-history.link-entry :entry="$entry"/>
@endforeach
<div>{{ formatDateTime($link->created_at) }}: @lang('link.history_created')</div>
@if(count($history) >= 10)
</div>
@endif
</div>
<div class="link">
@include('models.links.partials.show.link-details')
@include('models.links.partials.show.link-taxonomy')
@include('models.links.partials.show.link-notes')
@include('models.links.partials.show.link-history')
</div>
@endsection

View File

@ -2,7 +2,7 @@
@section('content')
<form action="{{ route('bulk-edit.update-lists') }}" method="POST" class="card">
<form action="{{ route('bulk-edit.update-lists') }}" method="POST" class="card bulk-form lists-form">
@csrf
<input type="hidden" name="models" value="{{ old('models', implode(',', $models)) }}">
<header class="card-header">@choice('list.bulk_title', $modelCount, ['count' => $modelCount])</header>

View File

@ -8,7 +8,7 @@
</header>
<div class="card-body">
<form action="{{ route('lists.store') }}" method="POST">
<form action="{{ route('lists.store') }}" method="POST" class="create-form list-form">
@csrf
<div class="mb-4">

View File

@ -8,7 +8,7 @@
</header>
<div class="card-body">
<form action="{{ route('lists.update', ['list' => $list]) }}" method="POST">
<form action="{{ route('lists.update', ['list' => $list]) }}" method="POST" class="edit-form list-form">
@method('PATCH')
@csrf

View File

@ -2,7 +2,7 @@
@section('content')
<header class="d-flex align-items-center">
<header class="lists-header d-flex align-items-center">
<h3 class="mb-0 me-3">
@lang('list.lists')
</h3>
@ -35,7 +35,7 @@
@if($lists->isNotEmpty())
<div class="bulk-edit" data-type="lists">
<div class="list-listing bulk-edit" data-type="lists">
<form class="bulk-edit-form visually-hidden text-end" action="{{ route('bulk-edit.form') }}" method="POST">
@csrf()
<input type="hidden" name="type">

View File

@ -0,0 +1,37 @@
<div class="list-details card">
<header class="card-header d-flex align-items-center">
<span class="me-3">
<x-models.visibility-badge :model="$list" class="d-inline-block me-1"/>
@lang('list.list')
</span>
<div class="ms-auto">
<a href="{{ route('lists.edit', ['list' => $list]) }}" class="btn btn-sm btn-primary"
aria-label="@lang('list.edit')">
<x-icon.edit class="me-2"/>
@lang('linkace.edit')
</a>
<a onclick="event.preventDefault();document.getElementById('list-delete-{{ $list->id }}').submit();"
class="btn btn-sm btn-outline-danger" aria-label="@choice('list.delete', 1)">
<x-icon.trash class="me-2"/>
@lang('linkace.delete')
</a>
</div>
<form id="list-delete-{{ $list->id }}" method="POST" style="display: none;"
action="{{ route('lists.destroy', ['list' => $list]) }}">
@method('DELETE')
@csrf
<input type="hidden" name="list_id" value="{{ $list->id }}">
</form>
</header>
<div class="card-body">
<h2 class="list-title mb-0">{{ $list->name }}</h2>
<div class="mt-2 small">@lang('linkace.added_by'): <x-models.author :model="$list"/></div>
@if($list->description)
<div class="mt-2 mb-0">{!! $list->formatted_description !!}</div>
@endif
</div>
</div>

View File

@ -0,0 +1,21 @@
<div class="list-history mt-5">
<h3 class="h6 mb-2">@lang('linkace.history')</h3>
<div class="history small text-muted">
@foreach($history as $entry)
@if($loop->index === 5 && $loop->count >= 10)
<a data-bs-toggle="collapse" href="#list-history" role="button" class="d-inline-block mb-1"
aria-expanded="false" aria-controls="list-history">
@lang('linkace.more')
<x-icon.caret-down class="fw"/>
</a>
<div id="list-history" class="collapse">
@endif
<x-history.list-entry :entry="$entry"/>
@endforeach
<div>{{ formatDateTime($list->created_at) }}: @lang('list.history_created')</div>
@if(count($history) >= 10)
</div>
@endif
</div>
</div>

View File

@ -0,0 +1,28 @@
<section class="list-links my-4">
@if($links->isNotEmpty())
<div class="d-flex align-items-center mb-4">
<x-models.link-display-toggles class="ms-auto"/>
<x-models.link-order-dropdown class="ms-3"/>
</div>
<div class="link-wrapper">
@if(usersettings('link_display_mode') === Link::DISPLAY_CARDS)
@include('models.links.partials.list-cards')
@elseif(usersettings('link_display_mode') === Link::DISPLAY_LIST_SIMPLE)
@include('models.links.partials.list-simple')
@else
@include('models.links.partials.list-detailed')
@endif
</div>
@else
<div class="alert alert-info">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
@endif
@if($links->isNotEmpty())
{!! $links->onEachSide(1)->withQueryString()->links() !!}
@endif
</section>

View File

@ -1,18 +1,18 @@
<div class="col-12 col-sm-6 col-md-4 mb-4">
<div class="single-list col-12 col-sm-6 col-md-4 mb-4">
<div class="h-100 card">
<div class="card-body">
<div class="d-flex">
<x-models.visibility-badge :model="$list" class="d-inline-block me-2"/>
<a href="{{ route('lists.show', ['list' => $list]) }}">
<a href="{{ route('lists.show', ['list' => $list]) }}" class="title">
<x-models.name-with-user :model="$list"/>
</a>
</div>
@if($list->description)
<div class="small mt-2">{{ $list->description }}</div>
<div class="description small mt-2">{{ $list->description }}</div>
@endif
</div>
<div class="d-flex align-items-center">
<div class="meta d-flex align-items-center">
<div class="text-xs text-pale me-3 ps-3 text-condensed">
@if($list->links_count > 0)
{{ trans_choice('list.number_links', $list->links_count, ['number' => $list->links_count]) }}

View File

@ -1,20 +0,0 @@
<div class="table-responsive">
<table class="table mb-0">
<thead>
<tr>
<th>
{!! tableSorter(trans('list.name'), $route, 'name', $orderBy, $orderDir) !!}
</th>
<th>
{!! tableSorter(trans('link.links'), $route, 'links_count', $orderBy, $orderDir) !!}
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($lists as $list)
@include('models.lists.partials.single', ['list' => $list])
@endforeach
</tbody>
</table>
</div>

View File

@ -2,93 +2,8 @@
@section('content')
<div class="card">
<header class="card-header d-flex align-items-center">
<span class="me-3">
<x-models.visibility-badge :model="$list" class="d-inline-block me-1"/>
@lang('list.list')
</span>
<div class="ms-auto">
<a href="{{ route('lists.edit', ['list' => $list]) }}" class="btn btn-sm btn-primary"
aria-label="@lang('list.edit')">
<x-icon.edit class="me-2"/>
@lang('linkace.edit')
</a>
<a onclick="event.preventDefault();document.getElementById('list-delete-{{ $list->id }}').submit();"
class="btn btn-sm btn-outline-danger" aria-label="@choice('list.delete', 1)">
<x-icon.trash class="me-2"/>
@lang('linkace.delete')
</a>
</div>
<form id="list-delete-{{ $list->id }}" method="POST" style="display: none;"
action="{{ route('lists.destroy', ['list' => $list]) }}">
@method('DELETE')
@csrf
<input type="hidden" name="list_id" value="{{ $list->id }}">
</form>
</header>
<div class="card-body">
<h2 class="mb-0">{{ $list->name }}</h2>
<div class="mt-2 small">@lang('linkace.added_by'): <x-models.author :model="$list"/></div>
@if($list->description)
<div class="mt-2 mb-0">{!! $list->formatted_description !!}</div>
@endif
</div>
</div>
<section class="my-4">
@if($links->isNotEmpty())
<div class="d-flex align-items-center mb-4">
<x-models.link-display-toggles class="ms-auto"/>
<x-models.link-order-dropdown class="ms-3"/>
</div>
<div class="link-wrapper">
@if(usersettings('link_display_mode') === Link::DISPLAY_CARDS)
@include('models.links.partials.list-cards')
@elseif(usersettings('link_display_mode') === Link::DISPLAY_LIST_SIMPLE)
@include('models.links.partials.list-simple')
@else
@include('models.links.partials.list-detailed')
@endif
</div>
@else
<div class="alert alert-info">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
@endif
</section>
@if($links->isNotEmpty())
{!! $links->onEachSide(1)->withQueryString()->links() !!}
@endif
<div class="list-history mt-5">
<h3 class="h6 mb-2">@lang('linkace.history')</h3>
<div class="history small text-muted">
@foreach($history as $entry)
@if($loop->index === 5 && $loop->count >= 10)
<a data-bs-toggle="collapse" href="#list-history" role="button" class="d-inline-block mb-1"
aria-expanded="false" aria-controls="list-history">
@lang('linkace.more')
<x-icon.caret-down class="fw"/>
</a>
<div id="list-history" class="collapse">
@endif
<x-history.list-entry :entry="$entry"/>
@endforeach
<div>{{ formatDateTime($list->created_at) }}: @lang('list.history_created')</div>
@if(count($history) >= 10)
</div>
@endif
</div>
</div>
@include('models.lists.partials.show.details')
@include('models.lists.partials.show.links')
@include('models.lists.partials.show.history')
@endsection

View File

@ -8,7 +8,7 @@
</header>
<div class="card-body">
<form action="{{ route('notes.update', [$note->id]) }}" method="POST">
<form action="{{ route('notes.update', [$note->id]) }}" method="POST" class="edit-form note-form">
@method('PATCH')
@csrf

View File

@ -4,7 +4,7 @@
</div>
<div class="card-body p-2">
<form action="{{ route('notes.store') }}" method="post">
<form action="{{ route('notes.store') }}" method="post" class="create-form note-form">
@csrf
<input type="hidden" name="link_id" value="{{ $link->id }}">

View File

@ -1,16 +1,16 @@
<div class="card card-body p-3 mb-3">
<div class="single-note card card-body p-3 mb-3">
<div class="note-content small">
{!! $note->formatted_note !!}
</div>
<div class="note-meta small d-flex align-items-center">
<div class="meta small d-flex align-items-center">
<div class="ms-auto me-2 text-pale text-xs">
<x-models.visibility-badge :model="$note" class="d-inline-block"/>
<span class="mx-1">@lang('linkace.added_by'): <x-models.author :model="$note"/></span>
{!! $note->addedAt() !!}
</div>
<div class="text-end">
<div class="btn-group">
<a href="{{ route('notes.edit', [$note->id]) }}" class="btn btn-xs btn-outline-secondary"
aria-label="@lang('note.edit')">
@ -30,7 +30,6 @@
@csrf
<input type="hidden" name="note_id" value="{{ $note->id }}">
</form>
</div>
</div>

View File

@ -2,7 +2,7 @@
@section('content')
<form action="{{ route('bulk-edit.update-tags') }}" method="POST" class="card">
<form action="{{ route('bulk-edit.update-tags') }}" method="POST" class="card bulk-form tag-form">
@csrf
<input type="hidden" name="models" value="{{ old('models', implode(',', $models)) }}">
<header class="card-header">@choice('tag.bulk_title', $modelCount, ['count' => $modelCount])</header>

View File

@ -8,7 +8,7 @@
</header>
<div class="card-body">
<form action="{{ route('tags.store') }}" method="POST">
<form action="{{ route('tags.store') }}" method="POST" class="create-form tag-form">
@csrf
<div class="row">

View File

@ -8,7 +8,7 @@
</header>
<div class="card-body">
<form action="{{ route('tags.update', ['tag' => $tag]) }}" method="POST">
<form action="{{ route('tags.update', ['tag' => $tag]) }}" method="POST" class="edit-form tag-form">
@method('PATCH')
@csrf

View File

@ -2,7 +2,7 @@
@section('content')
<header class="d-flex align-items-center">
<header class="tags-header d-flex align-items-center">
<h3 class="mb-0 me-3">
@lang('tag.tags')
</h3>
@ -33,7 +33,7 @@
</header>
<div class="card my-3">
<div class="tags-listing card my-3">
<div class="card-table">
@if($tags->isNotEmpty())

View File

@ -0,0 +1,36 @@
<div class="tag-details card">
<header class="card-header d-flex align-items-center">
<span class="me-3">
<x-models.visibility-badge :model="$tag" class="d-inline-block me-1"/>
@lang('tag.tag')
</span>
<div class="ms-auto">
<a href="{{ route('tags.edit', ['tag' => $tag]) }}" class="btn btn-sm btn-primary"
aria-label="@lang('tag.edit')">
<x-icon.edit class="me-2"/>
@lang('linkace.edit')
</a>
<a onclick="event.preventDefault();document.getElementById('tag-delete-{{ $tag->id }}').submit();"
class="btn btn-sm btn-outline-danger" aria-label="@choice('tag.delete', 1)">
<x-icon.trash class="me-2"/>
@lang('linkace.delete')
</a>
</div>
<form id="tag-delete-{{ $tag->id }}" method="POST" style="display: none;"
action="{{ route('tags.destroy', ['tag' => $tag]) }}">
@method('DELETE')
@csrf
<input type="hidden" name="tag_id" value="{{ $tag->id }}">
</form>
</header>
<div class="card-body">
<h2 class="tag-title mb-0">{{ $tag->name }}</h2>
<div class="mt-2 small">
@lang('linkace.added_by'):
<x-models.author :model="$tag"/>
</div>
</div>
</div>

View File

@ -0,0 +1,21 @@
<div class="tag-history mt-5">
<h3 class="h6 mb-2">@lang('linkace.history')</h3>
<div class="history small text-muted">
@foreach($history as $entry)
@if($loop->index === 5 && $loop->count >= 10)
<a data-bs-toggle="collapse" href="#tag-history" role="button" class="d-inline-block mb-1"
aria-expanded="false" aria-controls="tag-history">
@lang('linkace.more')
<x-icon.caret-down class="fw"/>
</a>
<div id="tag-history" class="collapse">
@endif
<x-history.tag-entry :entry="$entry"/>
@endforeach
<div>{{ formatDateTime($tag->created_at) }}: @lang('tag.history_created')</div>
@if(count($history) >= 10)
</div>
@endif
</div>
</div>

View File

@ -0,0 +1,28 @@
<section class="tag-links my-4">
@if($links->isNotEmpty())
<div class="d-flex align-items-center mb-4">
<x-models.link-display-toggles class="ms-auto"/>
<x-models.link-order-dropdown class="ms-3"/>
</div>
<div class="link-wrapper">
@if(usersettings('link_display_mode') === Link::DISPLAY_CARDS)
@include('models.links.partials.list-cards')
@elseif(usersettings('link_display_mode') === Link::DISPLAY_LIST_SIMPLE)
@include('models.links.partials.list-simple')
@else
@include('models.links.partials.list-detailed')
@endif
</div>
@else
<div class="alert alert-info">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
@endif
@if($links->isNotEmpty())
{!! $links->onEachSide(1)->withQueryString()->links() !!}
@endif
</section>

View File

@ -1,14 +1,14 @@
<tr>
<tr class="single-tag">
<td>
<x-models.visibility-badge :model="$tag" class="d-inline-block me-1 small"/>
<a href="{{ route('tags.show', ['tag' => $tag]) }}">
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="title">
<x-models.name-with-user :model="$tag"/>
</a>
</td>
<td>
{{ $tag->links_count }}
</td>
<td class="py-1">
<td class="meta py-1">
<div class="mt-1 d-flex align-items-center justify-content-end">
<div class="btn-group me-1">
<a href="{{ route('tags.edit', [$tag]) }}" class="btn btn-xs btn-link text-condensed">

View File

@ -1,4 +1,4 @@
<div class="bulk-edit table-responsive" data-type="tags">
<div class="bulk-edit tags-table table-responsive" data-type="tags">
<table class="table mb-0">
<thead>
<tr>

View File

@ -2,91 +2,8 @@
@section('content')
<div class="card">
<header class="card-header d-flex align-items-center">
<span class="me-3">
<x-models.visibility-badge :model="$tag" class="d-inline-block me-1"/>
@lang('tag.tag')
</span>
<div class="ms-auto">
<a href="{{ route('tags.edit', ['tag' => $tag]) }}" class="btn btn-sm btn-primary"
aria-label="@lang('tag.edit')">
<x-icon.edit class="me-2"/>
@lang('linkace.edit')
</a>
<a onclick="event.preventDefault();document.getElementById('tag-delete-{{ $tag->id }}').submit();"
class="btn btn-sm btn-outline-danger" aria-label="@choice('tag.delete', 1)">
<x-icon.trash class="me-2"/>
@lang('linkace.delete')
</a>
</div>
<form id="tag-delete-{{ $tag->id }}" method="POST" style="display: none;"
action="{{ route('tags.destroy', ['tag' => $tag]) }}">
@method('DELETE')
@csrf
<input type="hidden" name="tag_id" value="{{ $tag->id }}">
</form>
</header>
<div class="card-body">
<h2 class="mb-0">{{ $tag->name }}</h2>
<div class="mt-2 small">
@lang('linkace.added_by'): <x-models.author :model="$tag"/>
</div>
</div>
</div>
<section class="my-4">
@if($links->isNotEmpty())
<div class="d-flex align-items-center mb-4">
<x-models.link-display-toggles class="ms-auto"/>
<x-models.link-order-dropdown class="ms-3"/>
</div>
<div class="link-wrapper">
@if(usersettings('link_display_mode') === Link::DISPLAY_CARDS)
@include('models.links.partials.list-cards')
@elseif(usersettings('link_display_mode') === Link::DISPLAY_LIST_SIMPLE)
@include('models.links.partials.list-simple')
@else
@include('models.links.partials.list-detailed')
@endif
</div>
@else
<div class="alert alert-info">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
@endif
</section>
@if($links->isNotEmpty())
{!! $links->onEachSide(1)->withQueryString()->links() !!}
@endif
<div class="list-history mt-5">
<h3 class="h6 mb-2">@lang('linkace.history')</h3>
<div class="history small text-muted">
@foreach($history as $entry)
@if($loop->index === 5 && $loop->count >= 10)
<a data-bs-toggle="collapse" href="#tag-history" role="button" class="d-inline-block mb-1"
aria-expanded="false" aria-controls="tag-history">
@lang('linkace.more')
<x-icon.caret-down class="fw"/>
</a>
<div id="tag-history" class="collapse">
@endif
<x-history.tag-entry :entry="$entry"/>
@endforeach
<div>{{ formatDateTime($tag->created_at) }}: @lang('tag.history_created')</div>
@if(count($history) >= 10)
</div>
@endif
</div>
</div>
@include('models.tags.partials.show.details')
@include('models.tags.partials.show.links')
@include('models.tags.partials.show.history')
@endsection

View File

@ -2,102 +2,104 @@
@section('content')
<div class="card">
<div class="card-header">
@lang('user.user')
<div class="user-profile">
<div class="card">
<div class="card-header">
@lang('user.user')
</div>
<div class="card-body">
<h2 class="mb-0">{{ $user->name }}</h2>
</div>
</div>
<div class="card-body">
<h2 class="mb-0">{{ $user->name }}</h2>
</div>
</div>
<div class="row">
<div class="col-12 col-md-7">
<div class="row">
<div class="col-12 col-md-7">
<div class="card mt-4">
<div class="card-header">
@lang('link.recent_links')
<div class="card mt-4">
<div class="card-header">
@lang('link.recent_links')
</div>
<ul class="list-group list-group-flush">
@forelse($links as $link)
<a href="{{ route('links.show', [$link->id]) }}"
class="list-group-item list-group-item-action one-line">
{!! $link->getIcon('me-1') !!}
{{ $link->title }}
</a>
@empty
<li class="list-group-item text-muted">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</li>
@endforelse
</ul>
</div>
<ul class="list-group list-group-flush">
@forelse($links as $link)
<a href="{{ route('links.show', [$link->id]) }}"
class="list-group-item list-group-item-action one-line">
{!! $link->getIcon('me-1') !!}
{{ $link->title }}
</a>
@empty
<li class="list-group-item text-muted">
@lang('linkace.no_results_found', ['model' => trans('link.links')])
</div>
<div class="col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('stats.stats')
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_links')</span>
<span class="badge bg-secondary">{{ $stats['total_links'] }}</span>
</li>
@endforelse
</ul>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_lists')</span>
<span class="badge bg-secondary">{{ $stats['total_lists'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_tags')</span>
<span class="badge bg-secondary">{{ $stats['total_tags'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_notes')</span>
<span class="badge bg-secondary">{{ $stats['total_notes'] }}</span>
</li>
</ul>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('list.recent_lists')
</div>
<div class="card-body">
@forelse($lists as $list)
<a href="{{ route('lists.show', ['list' => $list]) }}" class="btn btn-light btn-sm m-1">
{{ $list->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('list.lists')])
</div>
@endforelse
</div>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('tag.recent_tags')
</div>
<div class="card-body">
@forelse($tags as $tag)
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="btn btn-light btn-sm m-1">
{{ $tag->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endforelse
</div>
</div>
</div>
</div>
<div class="col-12 col-md-5">
<div class="card mt-4">
<div class="card-header">
@lang('stats.stats')
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_links')</span>
<span class="badge bg-secondary">{{ $stats['total_links'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_lists')</span>
<span class="badge bg-secondary">{{ $stats['total_lists'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_tags')</span>
<span class="badge bg-secondary">{{ $stats['total_tags'] }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="me-1">@lang('stats.total_notes')</span>
<span class="badge bg-secondary">{{ $stats['total_notes'] }}</span>
</li>
</ul>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('list.recent_lists')
</div>
<div class="card-body">
@forelse($lists as $list)
<a href="{{ route('lists.show', ['list' => $list]) }}" class="btn btn-light btn-sm m-1">
{{ $list->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('list.lists')])
</div>
@endforelse
</div>
</div>
<div class="card mt-4">
<div class="card-header">
@lang('tag.recent_tags')
</div>
<div class="card-body">
@forelse($tags as $tag)
<a href="{{ route('tags.show', ['tag' => $tag]) }}" class="btn btn-light btn-sm m-1">
{{ $tag->name }}
</a>
@empty
<div class="text-muted">
@lang('linkace.no_results_found', ['model' => trans('tag.tags')])
</div>
@endforelse
</div>
</div>
</div>
</div>