Reorgranised blade view files to form a convention

- Primarily moved and re-organised view files.
- Included readme within views to document the convention.
- Fixed some issues with page field select list in previous commit.
- Tweaked some route names while going through.
- Split some views out further.

Closes #2805
This commit is contained in:
Dan Brown 2021-08-22 13:15:58 +01:00
parent 2036618fbd
commit a61c9c5e98
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
192 changed files with 647 additions and 605 deletions

View File

@ -25,8 +25,8 @@ use Permissions;
*/ */
class Page extends BookChild class Page extends BookChild
{ {
public static $listAttributes = ['name', 'id', 'slug', 'book_id', 'text', 'created_at', 'updated_at']; public static $listAttributes = ['name', 'id', 'slug', 'book_id', 'chapter_id', 'draft', 'template', 'text', 'created_at', 'updated_at'];
public static $contentAttributes = ['name', 'id', 'slug', 'book_id', 'html', 'text', 'created_at', 'updated_at']; public static $contentAttributes = ['name', 'id', 'slug', 'book_id', 'chapter_id', 'draft', 'template', 'html', 'text', 'created_at', 'updated_at'];
protected $fillable = ['name', 'priority', 'markdown']; protected $fillable = ['name', 'priority', 'markdown'];

View File

@ -45,7 +45,7 @@ class BookContents
*/ */
public function getTree(bool $showDrafts = false, bool $renderPages = false): Collection public function getTree(bool $showDrafts = false, bool $renderPages = false): Collection
{ {
$pages = $this->getPages($showDrafts); $pages = $this->getPages($showDrafts, $renderPages);
$chapters = Chapter::visible()->where('book_id', '=', $this->book->id)->get(); $chapters = Chapter::visible()->where('book_id', '=', $this->book->id)->get();
$all = collect()->concat($pages)->concat($chapters); $all = collect()->concat($pages)->concat($chapters);
$chapterMap = $chapters->keyBy('id'); $chapterMap = $chapters->keyBy('id');

View File

@ -223,7 +223,7 @@ class PageContent
*/ */
public function render(bool $blankIncludes = false): string public function render(bool $blankIncludes = false): string
{ {
$content = $this->page->html; $content = $this->page->html ?? '';
if (!config('app.allow_content_scripts')) { if (!config('app.allow_content_scripts')) {
$content = HtmlContentFilter::removeScripts($content); $content = HtmlContentFilter::removeScripts($content);

View File

@ -43,7 +43,7 @@ class BookSortController extends Controller
$book = $this->bookRepo->getBySlug($bookSlug); $book = $this->bookRepo->getBySlug($bookSlug);
$bookChildren = (new BookContents($book))->getTree(); $bookChildren = (new BookContents($book))->getTree();
return view('books.sort-box', ['book' => $book, 'bookChildren' => $bookChildren]); return view('books.parts.sort-box', ['book' => $book, 'bookChildren' => $bookChildren]);
} }
/** /**

View File

@ -82,7 +82,7 @@ class HomeController extends Controller
$shelves = app(BookshelfRepo::class)->getAllPaginated(18, $commonData['sort'], $commonData['order']); $shelves = app(BookshelfRepo::class)->getAllPaginated(18, $commonData['sort'], $commonData['order']);
$data = array_merge($commonData, ['shelves' => $shelves]); $data = array_merge($commonData, ['shelves' => $shelves]);
return view('common.home-shelves', $data); return view('home.shelves', $data);
} }
if ($homepageOption === 'books') { if ($homepageOption === 'books') {
@ -90,7 +90,7 @@ class HomeController extends Controller
$books = $bookRepo->getAllPaginated(18, $commonData['sort'], $commonData['order']); $books = $bookRepo->getAllPaginated(18, $commonData['sort'], $commonData['order']);
$data = array_merge($commonData, ['books' => $books]); $data = array_merge($commonData, ['books' => $books]);
return view('common.home-book', $data); return view('home.books', $data);
} }
if ($homepageOption === 'page') { if ($homepageOption === 'page') {
@ -100,26 +100,24 @@ class HomeController extends Controller
$pageContent = new PageContent($customHomepage); $pageContent = new PageContent($customHomepage);
$customHomepage->html = $pageContent->render(true); $customHomepage->html = $pageContent->render(true);
return view('common.home-custom', array_merge($commonData, ['customHomepage' => $customHomepage])); return view('home.specific-page', array_merge($commonData, ['customHomepage' => $customHomepage]));
} }
return view('common.home', $commonData); return view('home.default', $commonData);
} }
/** /**
* Get custom head HTML, Used in ajax calls to show in editor. * Get custom head HTML, Used in ajax calls to show in editor.
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/ */
public function customHeadContent() public function customHeadContent()
{ {
return view('partials.custom-head'); return view('common.custom-head');
} }
/** /**
* Show the view for /robots.txt. * Show the view for /robots.txt.
*/ */
public function getRobots() public function robots()
{ {
$sitePublic = setting('app-public', false); $sitePublic = setting('app-public', false);
$allowRobots = config('app.allow_robots'); $allowRobots = config('app.allow_robots');
@ -129,14 +127,14 @@ class HomeController extends Controller
} }
return response() return response()
->view('common.robots', ['allowRobots' => $allowRobots]) ->view('misc.robots', ['allowRobots' => $allowRobots])
->header('Content-Type', 'text/plain'); ->header('Content-Type', 'text/plain');
} }
/** /**
* Show the route for 404 responses. * Show the route for 404 responses.
*/ */
public function getNotFound() public function notFound()
{ {
return response()->view('errors.404', [], 404); return response()->view('errors.404', [], 404);
} }

View File

@ -30,7 +30,7 @@ class DrawioImageController extends Controller
$imgData = $this->imageRepo->getEntityFiltered('drawio', $parentTypeFilter, $page, 24, $uploadedToFilter, $searchTerm); $imgData = $this->imageRepo->getEntityFiltered('drawio', $parentTypeFilter, $page, 24, $uploadedToFilter, $searchTerm);
return view('components.image-manager-list', [ return view('pages.parts.image-manager-list', [
'images' => $imgData['images'], 'images' => $imgData['images'],
'hasMore' => $imgData['has_more'], 'hasMore' => $imgData['has_more'],
]); ]);

View File

@ -33,7 +33,7 @@ class GalleryImageController extends Controller
$imgData = $this->imageRepo->getEntityFiltered('gallery', $parentTypeFilter, $page, 24, $uploadedToFilter, $searchTerm); $imgData = $this->imageRepo->getEntityFiltered('gallery', $parentTypeFilter, $page, 24, $uploadedToFilter, $searchTerm);
return view('components.image-manager-list', [ return view('pages.parts.image-manager-list', [
'images' => $imgData['images'], 'images' => $imgData['images'],
'hasMore' => $imgData['has_more'], 'hasMore' => $imgData['has_more'],
]); ]);

View File

@ -65,7 +65,7 @@ class ImageController extends Controller
$this->imageRepo->loadThumbs($image); $this->imageRepo->loadThumbs($image);
return view('components.image-manager-form', [ return view('pages.parts.image-manager-form', [
'image' => $image, 'image' => $image,
'dependantPages' => null, 'dependantPages' => null,
]); ]);
@ -87,7 +87,7 @@ class ImageController extends Controller
$this->imageRepo->loadThumbs($image); $this->imageRepo->loadThumbs($image);
return view('components.image-manager-form', [ return view('pages.parts.image-manager-form', [
'image' => $image, 'image' => $image,
'dependantPages' => $dependantPages ?? null, 'dependantPages' => $dependantPages ?? null,
]); ]);

View File

@ -31,7 +31,7 @@ class PageTemplateController extends Controller
$templates->appends(['search' => $search]); $templates->appends(['search' => $search]);
} }
return view('pages.template-manager-list', [ return view('pages.parts.template-manager-list', [
'templates' => $templates, 'templates' => $templates,
]); ]);
} }

View File

@ -54,7 +54,7 @@ class SearchController extends Controller
$term = $request->get('term', ''); $term = $request->get('term', '');
$results = $this->searchRunner->searchBook($bookId, $term); $results = $this->searchRunner->searchBook($bookId, $term);
return view('partials.entity-list', ['entities' => $results]); return view('entities.list', ['entities' => $results]);
} }
/** /**
@ -65,7 +65,7 @@ class SearchController extends Controller
$term = $request->get('term', ''); $term = $request->get('term', '');
$results = $this->searchRunner->searchChapter($chapterId, $term); $results = $this->searchRunner->searchChapter($chapterId, $term);
return view('partials.entity-list', ['entities' => $results]); return view('entities.list', ['entities' => $results]);
} }
/** /**
@ -86,7 +86,7 @@ class SearchController extends Controller
$entities = (new Popular())->run(20, 0, $entityTypes, $permission); $entities = (new Popular())->run(20, 0, $entityTypes, $permission);
} }
return view('search.entity-ajax-list', ['entities' => $entities]); return view('search.parts.entity-ajax-list', ['entities' => $entities]);
} }
/** /**
@ -99,6 +99,6 @@ class SearchController extends Controller
$entities = (new SiblingFetcher())->fetch($type, $id); $entities = (new SiblingFetcher())->fetch($type, $id);
return view('partials.entity-list-basic', ['entities' => $entities, 'style' => 'compact']); return view('entities.list-basic', ['entities' => $entities, 'style' => 'compact']);
} }
} }

View File

@ -27,6 +27,6 @@ class UserSearchController extends Controller
$users = $query->get(); $users = $query->get();
return view('components.user-select-list', compact('users')); return view('form.user-select-list', compact('users'));
} }
} }

View File

@ -54,7 +54,7 @@ class AppServiceProvider extends ServiceProvider
]); ]);
// View Composers // View Composers
View::composer('partials.breadcrumbs', BreadcrumbsViewComposer::class); View::composer('entities.breadcrumbs', BreadcrumbsViewComposer::class);
} }
/** /**

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
@ -37,148 +37,7 @@
<div style="overflow: auto;"> <div style="overflow: auto;">
<section code-highlighter class="card content-wrap auto-height"> <section code-highlighter class="card content-wrap auto-height">
<h1 class="list-heading text-capitals mb-l">Getting Started</h1> @include('api-docs.parts.getting-started')
<h5 id="authentication" class="text-mono mb-m">Authentication</h5>
<p>
To access the API a user has to have the <em>"Access System API"</em> permission enabled on one of their assigned roles.
Permissions to content accessed via the API is limited by the roles & permissions assigned to the user that's used to access the API.
</p>
<p>Authentication to use the API is primarily done using API Tokens. Once the <em>"Access System API"</em> permission has been assigned to a user, a "API Tokens" section should be visible when editing their user profile. Choose "Create Token" and enter an appropriate name and expiry date, relevant for your API usage then press "Save". A "Token ID" and "Token Secret" will be immediately displayed. These values should be used as a header in API HTTP requests in the following format:</p>
<pre><code class="language-css">Authorization: Token &lt;token_id&gt;:&lt;token_secret&gt;</code></pre>
<p>Here's an example of an authorized cURL request to list books in the system:</p>
<pre><code class="language-shell">curl --request GET \
--url https://example.com/api/books \
--header 'Authorization: Token C6mdvEQTGnebsmVn3sFNeeuelGEBjyQp:NOvD3VlzuSVuBPNaf1xWHmy7nIRlaj22'</code></pre>
<p>If already logged into the system within the browser, via a user account with permission to access the API, the system will also accept an existing session meaning you can browse API endpoints directly in the browser or use the browser devtools to play with the API.</p>
<hr>
<h5 id="request-format" class="text-mono mb-m">Request Format</h5>
<p>The API is primarily design to be interfaced using JSON so the majority of API endpoints, that accept data, will read JSON request data although <code>application/x-www-form-urlencoded</code> request data is also accepted. Endpoints that receive file data will need data sent in a <code>multipart/form-data</code> format although this will be highlighted in the documentation for such endpoints.</p>
<p>For endpoints in this documentation that accept data, a "Body Parameters" table will be available showing the parameters that will accepted in the request. Any rules for the values of such parameters, such as the data-type or if they're required, will be shown alongside the parameter name.</p>
<hr>
<h5 id="listing-endpoints" class="text-mono mb-m">Listing Endpoints</h5>
<p>Some endpoints will return a list of data models. These endpoints will return an array of the model data under a <code>data</code> property along with a numeric <code>total</code> property to indicate the total number of records found for the query within the system. Here's an example of a listing response:</p>
<pre><code class="language-json">{
"data": [
{
"id": 1,
"name": "BookStack User Guide",
"slug": "bookstack-user-guide",
"description": "This is a general guide on using BookStack on a day-to-day basis.",
"created_at": "2019-05-05 21:48:46",
"updated_at": "2019-12-11 20:57:31",
"created_by": 1,
"updated_by": 1,
"image_id": 3
}
],
"total": 16
}</code></pre>
<p>
There are a number of standard URL parameters that can be supplied to manipulate and page through the results returned from a listing endpoint:
</p>
<table class="table">
<tr>
<th>Parameter</th>
<th>Details</th>
<th width="30%">Examples</th>
</tr>
<tr>
<td>count</td>
<td>
Specify how many records will be returned in the response. <br>
(Default: {{ config('api.default_item_count') }}, Max: {{ config('api.max_item_count') }})
</td>
<td>Limit the count to 50<br><code>?count=50</code></td>
</tr>
<tr>
<td>offset</td>
<td>
Specify how many records to skip over in the response. <br>
(Default: 0)
</td>
<td>Skip over the first 100 records<br><code>?offset=100</code></td>
</tr>
<tr>
<td>sort</td>
<td>
Specify what field is used to sort the data and the direction of the sort (Ascending or Descending).<br>
Value is the name of a field, A <code>+</code> or <code>-</code> prefix dictates ordering. <br>
Direction defaults to ascending. <br>
Can use most fields shown in the response.
</td>
<td>
Sort by name ascending<br><code>?sort=+name</code> <br> <br>
Sort by "Created At" date descending<br><code>?sort=-created_at</code>
</td>
</tr>
<tr>
<td>filter[&lt;field&gt;]</td>
<td>
Specify a filter to be applied to the query. Can use most fields shown in the response. <br>
By default a filter will apply a "where equals" query but the below operations are available using the format filter[&lt;field&gt;:&lt;operation&gt;] <br>
<table>
<tr>
<td>eq</td>
<td>Where <code>&lt;field&gt;</code> equals the filter value.</td>
</tr>
<tr>
<td>ne</td>
<td>Where <code>&lt;field&gt;</code> does not equal the filter value.</td>
</tr>
<tr>
<td>gt</td>
<td>Where <code>&lt;field&gt;</code> is greater than the filter value.</td>
</tr>
<tr>
<td>lt</td>
<td>Where <code>&lt;field&gt;</code> is less than the filter value.</td>
</tr>
<tr>
<td>gte</td>
<td>Where <code>&lt;field&gt;</code> is greater than or equal to the filter value.</td>
</tr>
<tr>
<td>lte</td>
<td>Where <code>&lt;field&gt;</code> is less than or equal to the filter value.</td>
</tr>
<tr>
<td>like</td>
<td>
Where <code>&lt;field&gt;</code> is "like" the filter value. <br>
<code>%</code> symbols can be used as wildcards.
</td>
</tr>
</table>
</td>
<td>
Filter where id is 5: <br><code>?filter[id]=5</code><br><br>
Filter where id is not 5: <br><code>?filter[id:ne]=5</code><br><br>
Filter where name contains "cat": <br><code>?filter[name:like]=%cat%</code><br><br>
Filter where created after 2020-01-01: <br><code>?filter[created_at:gt]=2020-01-01</code>
</td>
</tr>
</table>
<hr>
<h5 id="error-handling" class="text-mono mb-m">Error Handling</h5>
<p>
Successful responses will return a 200 or 204 HTTP response code. Errors will return a 4xx or a 5xx HTTP response code depending on the type of error. Errors follow a standard format as shown below. The message provided may be translated depending on the configured language of the system in addition to the API users' language preference. The code provided in the JSON response will match the HTTP response code.
</p>
<pre><code class="language-json">{
"error": {
"code": 401,
"message": "No authorization token found on the request"
}
}
</code></pre>
</section> </section>
@foreach($docs as $model => $endpoints) @foreach($docs as $model => $endpoints)
@ -186,52 +45,7 @@
<h1 class="list-heading text-capitals">{{ $model }}</h1> <h1 class="list-heading text-capitals">{{ $model }}</h1>
@foreach($endpoints as $endpoint) @foreach($endpoints as $endpoint)
<h6 class="text-uppercase text-muted float right">{{ $endpoint['controller_method_kebab'] }}</h6> @include('api-docs.parts.endpoint', ['endpoint' => $endpoint, 'loop' => $loop])
<h5 id="{{ $endpoint['name'] }}" class="text-mono mb-m">
<span class="api-method" data-method="{{ $endpoint['method'] }}">{{ $endpoint['method'] }}</span>
@if($endpoint['controller_method_kebab'] === 'list')
<a style="color: inherit;" target="_blank" rel="noopener" href="{{ url($endpoint['uri']) }}">{{ url($endpoint['uri']) }}</a>
@else
{{ url($endpoint['uri']) }}
@endif
</h5>
<p class="mb-m">{{ $endpoint['description'] ?? '' }}</p>
@if($endpoint['body_params'] ?? false)
<details class="mb-m">
<summary class="text-muted">Body Parameters</summary>
<table class="table">
<tr>
<th>Param Name</th>
<th>Value Rules</th>
</tr>
@foreach($endpoint['body_params'] as $paramName => $rules)
<tr>
<td>{{ $paramName }}</td>
<td>
@foreach($rules as $rule)
<code class="mr-xs">{{ $rule }}</code>
@endforeach
</td>
</tr>
@endforeach
</table>
</details>
@endif
@if($endpoint['example_request'] ?? false)
<details details-highlighter class="mb-m">
<summary class="text-muted">Example Request</summary>
<pre><code class="language-json">{{ $endpoint['example_request'] }}</code></pre>
</details>
@endif
@if($endpoint['example_response'] ?? false)
<details details-highlighter class="mb-m">
<summary class="text-muted">Example Response</summary>
<pre><code class="language-json">{{ $endpoint['example_response'] }}</code></pre>
</details>
@endif
@if(!$loop->last)
<hr>
@endif
@endforeach @endforeach
</section> </section>
@endforeach @endforeach

View File

@ -0,0 +1,52 @@
<h6 class="text-uppercase text-muted float right">{{ $endpoint['controller_method_kebab'] }}</h6>
<h5 id="{{ $endpoint['name'] }}" class="text-mono mb-m">
<span class="api-method" data-method="{{ $endpoint['method'] }}">{{ $endpoint['method'] }}</span>
@if($endpoint['controller_method_kebab'] === 'list')
<a style="color: inherit;" target="_blank" rel="noopener" href="{{ url($endpoint['uri']) }}">{{ url($endpoint['uri']) }}</a>
@else
{{ url($endpoint['uri']) }}
@endif
</h5>
<p class="mb-m">{{ $endpoint['description'] ?? '' }}</p>
@if($endpoint['body_params'] ?? false)
<details class="mb-m">
<summary class="text-muted">Body Parameters</summary>
<table class="table">
<tr>
<th>Param Name</th>
<th>Value Rules</th>
</tr>
@foreach($endpoint['body_params'] as $paramName => $rules)
<tr>
<td>{{ $paramName }}</td>
<td>
@foreach($rules as $rule)
<code class="mr-xs">{{ $rule }}</code>
@endforeach
</td>
</tr>
@endforeach
</table>
</details>
@endif
@if($endpoint['example_request'] ?? false)
<details details-highlighter class="mb-m">
<summary class="text-muted">Example Request</summary>
<pre><code class="language-json">{{ $endpoint['example_request'] }}</code></pre>
</details>
@endif
@if($endpoint['example_response'] ?? false)
<details details-highlighter class="mb-m">
<summary class="text-muted">Example Response</summary>
<pre><code class="language-json">{{ $endpoint['example_response'] }}</code></pre>
</details>
@endif
@if(!$loop->last)
<hr>
@endif

View File

@ -0,0 +1,141 @@
<h1 class="list-heading text-capitals mb-l">Getting Started</h1>
<h5 id="authentication" class="text-mono mb-m">Authentication</h5>
<p>
To access the API a user has to have the <em>"Access System API"</em> permission enabled on one of their assigned roles.
Permissions to content accessed via the API is limited by the roles & permissions assigned to the user that's used to access the API.
</p>
<p>Authentication to use the API is primarily done using API Tokens. Once the <em>"Access System API"</em> permission has been assigned to a user, a "API Tokens" section should be visible when editing their user profile. Choose "Create Token" and enter an appropriate name and expiry date, relevant for your API usage then press "Save". A "Token ID" and "Token Secret" will be immediately displayed. These values should be used as a header in API HTTP requests in the following format:</p>
<pre><code class="language-css">Authorization: Token &lt;token_id&gt;:&lt;token_secret&gt;</code></pre>
<p>Here's an example of an authorized cURL request to list books in the system:</p>
<pre><code class="language-shell">curl --request GET \
--url https://example.com/api/books \
--header 'Authorization: Token C6mdvEQTGnebsmVn3sFNeeuelGEBjyQp:NOvD3VlzuSVuBPNaf1xWHmy7nIRlaj22'</code></pre>
<p>If already logged into the system within the browser, via a user account with permission to access the API, the system will also accept an existing session meaning you can browse API endpoints directly in the browser or use the browser devtools to play with the API.</p>
<hr>
<h5 id="request-format" class="text-mono mb-m">Request Format</h5>
<p>The API is primarily design to be interfaced using JSON so the majority of API endpoints, that accept data, will read JSON request data although <code>application/x-www-form-urlencoded</code> request data is also accepted. Endpoints that receive file data will need data sent in a <code>multipart/form-data</code> format although this will be highlighted in the documentation for such endpoints.</p>
<p>For endpoints in this documentation that accept data, a "Body Parameters" table will be available showing the parameters that will accepted in the request. Any rules for the values of such parameters, such as the data-type or if they're required, will be shown alongside the parameter name.</p>
<hr>
<h5 id="listing-endpoints" class="text-mono mb-m">Listing Endpoints</h5>
<p>Some endpoints will return a list of data models. These endpoints will return an array of the model data under a <code>data</code> property along with a numeric <code>total</code> property to indicate the total number of records found for the query within the system. Here's an example of a listing response:</p>
<pre><code class="language-json">{
"data": [
{
"id": 1,
"name": "BookStack User Guide",
"slug": "bookstack-user-guide",
"description": "This is a general guide on using BookStack on a day-to-day basis.",
"created_at": "2019-05-05 21:48:46",
"updated_at": "2019-12-11 20:57:31",
"created_by": 1,
"updated_by": 1,
"image_id": 3
}
],
"total": 16
}</code></pre>
<p>
There are a number of standard URL parameters that can be supplied to manipulate and page through the results returned from a listing endpoint:
</p>
<table class="table">
<tr>
<th>Parameter</th>
<th>Details</th>
<th width="30%">Examples</th>
</tr>
<tr>
<td>count</td>
<td>
Specify how many records will be returned in the response. <br>
(Default: {{ config('api.default_item_count') }}, Max: {{ config('api.max_item_count') }})
</td>
<td>Limit the count to 50<br><code>?count=50</code></td>
</tr>
<tr>
<td>offset</td>
<td>
Specify how many records to skip over in the response. <br>
(Default: 0)
</td>
<td>Skip over the first 100 records<br><code>?offset=100</code></td>
</tr>
<tr>
<td>sort</td>
<td>
Specify what field is used to sort the data and the direction of the sort (Ascending or Descending).<br>
Value is the name of a field, A <code>+</code> or <code>-</code> prefix dictates ordering. <br>
Direction defaults to ascending. <br>
Can use most fields shown in the response.
</td>
<td>
Sort by name ascending<br><code>?sort=+name</code> <br> <br>
Sort by "Created At" date descending<br><code>?sort=-created_at</code>
</td>
</tr>
<tr>
<td>filter[&lt;field&gt;]</td>
<td>
Specify a filter to be applied to the query. Can use most fields shown in the response. <br>
By default a filter will apply a "where equals" query but the below operations are available using the format filter[&lt;field&gt;:&lt;operation&gt;] <br>
<table>
<tr>
<td>eq</td>
<td>Where <code>&lt;field&gt;</code> equals the filter value.</td>
</tr>
<tr>
<td>ne</td>
<td>Where <code>&lt;field&gt;</code> does not equal the filter value.</td>
</tr>
<tr>
<td>gt</td>
<td>Where <code>&lt;field&gt;</code> is greater than the filter value.</td>
</tr>
<tr>
<td>lt</td>
<td>Where <code>&lt;field&gt;</code> is less than the filter value.</td>
</tr>
<tr>
<td>gte</td>
<td>Where <code>&lt;field&gt;</code> is greater than or equal to the filter value.</td>
</tr>
<tr>
<td>lte</td>
<td>Where <code>&lt;field&gt;</code> is less than or equal to the filter value.</td>
</tr>
<tr>
<td>like</td>
<td>
Where <code>&lt;field&gt;</code> is "like" the filter value. <br>
<code>%</code> symbols can be used as wildcards.
</td>
</tr>
</table>
</td>
<td>
Filter where id is 5: <br><code>?filter[id]=5</code><br><br>
Filter where id is not 5: <br><code>?filter[id:ne]=5</code><br><br>
Filter where name contains "cat": <br><code>?filter[name:like]=%cat%</code><br><br>
Filter where created after 2020-01-01: <br><code>?filter[created_at:gt]=2020-01-01</code>
</td>
</tr>
</table>
<hr>
<h5 id="error-handling" class="text-mono mb-m">Error Handling</h5>
<p>
Successful responses will return a 200 or 204 HTTP response code. Errors will return a 4xx or a 5xx HTTP response code depending on the type of error. Errors follow a standard format as shown below. The message provided may be translated depending on the configured language of the system in addition to the API users' language preference. The code provided in the JSON response will match the HTTP response code.
</p>
<pre><code class="language-json">{
"error": {
"code": 401,
"message": "No authorization token found on the request"
}
}
</code></pre>

View File

@ -22,7 +22,7 @@
<button refs="tabs@toggleLink" type="button" class="tab-item {{ $attachment->external ? 'selected' : '' }}">{{ trans('entities.attachments_set_link') }}</button> <button refs="tabs@toggleLink" type="button" class="tab-item {{ $attachment->external ? 'selected' : '' }}">{{ trans('entities.attachments_set_link') }}</button>
</div> </div>
<div refs="tabs@contentFile" class="mb-m {{ $attachment->external ? 'hidden' : '' }}"> <div refs="tabs@contentFile" class="mb-m {{ $attachment->external ? 'hidden' : '' }}">
@include('components.dropzone', [ @include('form.dropzone', [
'placeholder' => trans('entities.attachments_edit_drop_upload'), 'placeholder' => trans('entities.attachments_edit_drop_upload'),
'url' => url('/attachments/upload/' . $attachment->id), 'url' => url('/attachments/upload/' . $attachment->id),
'successMessage' => trans('entities.attachments_file_updated'), 'successMessage' => trans('entities.attachments_file_updated'),

View File

@ -18,7 +18,7 @@
@include('attachments.manager-list', ['attachments' => $page->attachments->all()]) @include('attachments.manager-list', ['attachments' => $page->attachments->all()])
</div> </div>
<div refs="tabs@contentUpload" class="hidden"> <div refs="tabs@contentUpload" class="hidden">
@include('components.dropzone', [ @include('form.dropzone', [
'placeholder' => trans('entities.attachments_dropzone'), 'placeholder' => trans('entities.attachments_dropzone'),
'url' => url('/attachments/upload?uploaded_to=' . $page->id), 'url' => url('/attachments/upload?uploaded_to=' . $page->id),
'successMessage' => trans('entities.attachments_file_uploaded'), 'successMessage' => trans('entities.attachments_file_uploaded'),

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')
@ -9,7 +9,7 @@
<div class="card content-wrap auto-height"> <div class="card content-wrap auto-height">
<h1 class="list-heading">{{ Str::title(trans('auth.log_in')) }}</h1> <h1 class="list-heading">{{ Str::title(trans('auth.log_in')) }}</h1>
@include('auth.forms.login.' . $authMethod) @include('auth.parts.login-form-' . $authMethod)
@if(count($socialDrivers) > 0) @if(count($socialDrivers) > 0)
<hr class="my-l"> <hr class="my-l">

View File

@ -18,7 +18,7 @@
<div class="grid half collapse-xs gap-xl v-center"> <div class="grid half collapse-xs gap-xl v-center">
<div class="text-left ml-xxs"> <div class="text-left ml-xxs">
@include('components.custom-checkbox', [ @include('form.custom-checkbox', [
'name' => 'remember', 'name' => 'remember',
'checked' => false, 'checked' => false,
'value' => 'on', 'value' => 'on',

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')
<div class="container very-small mt-xl"> <div class="container very-small mt-xl">

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')
<div class="container very-small"> <div class="container very-small">

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')

View File

@ -1,3 +0,0 @@
<div class="breadcrumbs">
<a href="{{$book->getUrl()}}" class="text-book text-button">@icon('book'){{ $book->getShortName() }}</a>
</div>

View File

@ -1,10 +1,10 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@if (isset($bookshelf)) @if (isset($bookshelf))
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$bookshelf, $bookshelf,
$bookshelf->getUrl('/create-book') => [ $bookshelf->getUrl('/create-book') => [
'text' => trans('entities.books_create'), 'text' => trans('entities.books_create'),
@ -12,7 +12,7 @@
] ]
]]) ]])
@else @else
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
'/books' => [ '/books' => [
'text' => trans('entities.books'), 'text' => trans('entities.books'),
'icon' => 'book' 'icon' => 'book'
@ -28,7 +28,7 @@
<main class="content-wrap card"> <main class="content-wrap card">
<h1 class="list-heading">{{ trans('entities.books_create') }}</h1> <h1 class="list-heading">{{ trans('entities.books_create') }}</h1>
<form action="{{ isset($bookshelf) ? $bookshelf->getUrl('/create-book') : url('/books') }}" method="POST" enctype="multipart/form-data"> <form action="{{ isset($bookshelf) ? $bookshelf->getUrl('/create-book') : url('/books') }}" method="POST" enctype="multipart/form-data">
@include('books.form', ['returnLocation' => isset($bookshelf) ? $bookshelf->getUrl() : url('/books')]) @include('books.parts.form', ['returnLocation' => isset($bookshelf) ? $bookshelf->getUrl() : url('/books')])
</form> </form>
</main> </main>
</div> </div>

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
$book->getUrl('/delete') => [ $book->getUrl('/delete') => [
'text' => trans('entities.books_delete'), 'text' => trans('entities.books_delete'),

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
$book->getUrl('/edit') => [ $book->getUrl('/edit') => [
'text' => trans('entities.books_edit'), 'text' => trans('entities.books_edit'),
@ -18,7 +18,7 @@
<h1 class="list-heading">{{ trans('entities.books_edit') }}</h1> <h1 class="list-heading">{{ trans('entities.books_edit') }}</h1>
<form action="{{ $book->getUrl() }}" method="POST" enctype="multipart/form-data"> <form action="{{ $book->getUrl() }}" method="POST" enctype="multipart/form-data">
<input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_method" value="PUT">
@include('books.form', ['model' => $book, 'returnLocation' => $book->getUrl()]) @include('books.parts.form', ['model' => $book, 'returnLocation' => $book->getUrl()])
</form> </form>
</main> </main>
</div> </div>

View File

@ -1,4 +1,4 @@
@extends('export-layout') @extends('layouts.export')
@section('title', $book->name) @section('title', $book->name)

View File

@ -1,21 +1,21 @@
@extends('tri-layout') @extends('layouts.tri')
@section('body') @section('body')
@include('books.list', ['books' => $books, 'view' => $view]) @include('books.parts.list', ['books' => $books, 'view' => $view])
@stop @stop
@section('left') @section('left')
@if($recents) @if($recents)
<div id="recents" class="mb-xl"> <div id="recents" class="mb-xl">
<h5>{{ trans('entities.recently_viewed') }}</h5> <h5>{{ trans('entities.recently_viewed') }}</h5>
@include('partials.entity-list', ['entities' => $recents, 'style' => 'compact']) @include('entities.list', ['entities' => $recents, 'style' => 'compact'])
</div> </div>
@endif @endif
<div id="popular" class="mb-xl"> <div id="popular" class="mb-xl">
<h5>{{ trans('entities.books_popular') }}</h5> <h5>{{ trans('entities.books_popular') }}</h5>
@if(count($popular) > 0) @if(count($popular) > 0)
@include('partials.entity-list', ['entities' => $popular, 'style' => 'compact']) @include('entities.list', ['entities' => $popular, 'style' => 'compact'])
@else @else
<div class="body text-muted">{{ trans('entities.books_popular_empty') }}</div> <div class="body text-muted">{{ trans('entities.books_popular_empty') }}</div>
@endif @endif
@ -24,7 +24,7 @@
<div id="new" class="mb-xl"> <div id="new" class="mb-xl">
<h5>{{ trans('entities.books_new') }}</h5> <h5>{{ trans('entities.books_new') }}</h5>
@if(count($popular) > 0) @if(count($popular) > 0)
@include('partials.entity-list', ['entities' => $new, 'style' => 'compact']) @include('entities.list', ['entities' => $new, 'style' => 'compact'])
@else @else
<div class="body text-muted">{{ trans('entities.books_new_empty') }}</div> <div class="body text-muted">{{ trans('entities.books_new_empty') }}</div>
@endif @endif
@ -43,7 +43,7 @@
</a> </a>
@endif @endif
@include('partials.view-toggle', ['view' => $view, 'type' => 'books']) @include('entities.view-toggle', ['view' => $view, 'type' => 'books'])
</div> </div>
</div> </div>

View File

@ -17,7 +17,7 @@
<div class="collapse-content" collapsible-content> <div class="collapse-content" collapsible-content>
<p class="small">{{ trans('common.cover_image_description') }}</p> <p class="small">{{ trans('common.cover_image_description') }}</p>
@include('components.image-picker', [ @include('form.image-picker', [
'defaultImage' => url('/book_default_cover.png'), 'defaultImage' => url('/book_default_cover.png'),
'currentImage' => (isset($model) && $model->cover) ? $model->getBookCover() : url('/book_default_cover.png') , 'currentImage' => (isset($model) && $model->cover) ? $model->getBookCover() : url('/book_default_cover.png') ,
'name' => 'image', 'name' => 'image',
@ -31,7 +31,7 @@
<label for="tag-manager">{{ trans('entities.book_tags') }}</label> <label for="tag-manager">{{ trans('entities.book_tags') }}</label>
</button> </button>
<div class="collapse-content" collapsible-content> <div class="collapse-content" collapsible-content>
@include('components.tag-manager', ['entity' => $book ?? null]) @include('entities.tag-manager', ['entity' => $book ?? null])
</div> </div>
</div> </div>

View File

@ -3,7 +3,7 @@
<h1 class="list-heading">{{ trans('entities.books') }}</h1> <h1 class="list-heading">{{ trans('entities.books') }}</h1>
<div class="text-m-right my-m"> <div class="text-m-right my-m">
@include('partials.sort', ['options' => [ @include('entities.sort', ['options' => [
'name' => trans('common.sort_name'), 'name' => trans('common.sort_name'),
'created_at' => trans('common.sort_created_at'), 'created_at' => trans('common.sort_created_at'),
'updated_at' => trans('common.sort_updated_at'), 'updated_at' => trans('common.sort_updated_at'),
@ -15,13 +15,13 @@
@if($view === 'list') @if($view === 'list')
<div class="entity-list"> <div class="entity-list">
@foreach($books as $book) @foreach($books as $book)
@include('books.list-item', ['book' => $book]) @include('books.parts.list-item', ['book' => $book])
@endforeach @endforeach
</div> </div>
@else @else
<div class="grid third"> <div class="grid third">
@foreach($books as $key => $book) @foreach($books as $key => $book)
@include('partials.entity-grid-item', ['entity' => $book]) @include('entities.grid-item', ['entity' => $book])
@endforeach @endforeach
</div> </div>
@endif @endif

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container"> <div class="container">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
$book->getUrl('/permissions') => [ $book->getUrl('/permissions') => [
'text' => trans('entities.books_permissions'), 'text' => trans('entities.books_permissions'),

View File

@ -1,4 +1,4 @@
@extends('tri-layout') @extends('layouts.tri')
@section('container-attrs') @section('container-attrs')
component="entity-search" component="entity-search"
@ -16,7 +16,7 @@
@section('body') @section('body')
<div class="mb-s"> <div class="mb-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
]]) ]])
</div> </div>
@ -29,9 +29,9 @@
<div class="entity-list book-contents"> <div class="entity-list book-contents">
@foreach($bookChildren as $childElement) @foreach($bookChildren as $childElement)
@if($childElement->isA('chapter')) @if($childElement->isA('chapter'))
@include('chapters.list-item', ['chapter' => $childElement]) @include('chapters.parts.list-item', ['chapter' => $childElement])
@else @else
@include('pages.list-item', ['page' => $childElement]) @include('pages.parts.list-item', ['page' => $childElement])
@endif @endif
@endforeach @endforeach
</div> </div>
@ -59,7 +59,7 @@
@endif @endif
</div> </div>
@include('partials.entity-search-results') @include('entities.search-results')
</main> </main>
@stop @stop
@ -68,7 +68,7 @@
<div class="mb-xl"> <div class="mb-xl">
<h5>{{ trans('common.details') }}</h5> <h5>{{ trans('common.details') }}</h5>
<div class="text-small text-muted blended-links"> <div class="text-small text-muted blended-links">
@include('partials.entity-meta', ['entity' => $book]) @include('entities.meta', ['entity' => $book])
@if($book->restricted) @if($book->restricted)
<div class="active-restriction"> <div class="active-restriction">
@if(userCan('restrictions-manage', $book)) @if(userCan('restrictions-manage', $book))
@ -126,9 +126,9 @@
<hr class="primary-background"> <hr class="primary-background">
@if(signedInUser()) @if(signedInUser())
@include('partials.entity-favourite-action', ['entity' => $book]) @include('entities.favourite-action', ['entity' => $book])
@endif @endif
@include('partials.entity-export-menu', ['entity' => $book]) @include('entities.export-menu', ['entity' => $book])
</div> </div>
</div> </div>
@ -136,25 +136,25 @@
@section('left') @section('left')
@include('partials.entity-search-form', ['label' => trans('entities.books_search_this')]) @include('entities.search-form', ['label' => trans('entities.books_search_this')])
@if($book->tags->count() > 0) @if($book->tags->count() > 0)
<div class="mb-xl"> <div class="mb-xl">
@include('components.tag-list', ['entity' => $book]) @include('entities.tag-list', ['entity' => $book])
</div> </div>
@endif @endif
@if(count($bookParentShelves) > 0) @if(count($bookParentShelves) > 0)
<div class="actions mb-xl"> <div class="actions mb-xl">
<h5>{{ trans('entities.shelves_long') }}</h5> <h5>{{ trans('entities.shelves_long') }}</h5>
@include('partials.entity-list', ['entities' => $bookParentShelves, 'style' => 'compact']) @include('entities.list', ['entities' => $bookParentShelves, 'style' => 'compact'])
</div> </div>
@endif @endif
@if(count($activity) > 0) @if(count($activity) > 0)
<div class="mb-xl"> <div class="mb-xl">
<h5>{{ trans('entities.recent_activity') }}</h5> <h5>{{ trans('entities.recent_activity') }}</h5>
@include('partials.activity-list', ['activity' => $activity]) @include('common.activity-list', ['activity' => $activity])
</div> </div>
@endif @endif
@stop @stop

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container"> <div class="container">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
$book->getUrl('/sort') => [ $book->getUrl('/sort') => [
'text' => trans('entities.books_sort'), 'text' => trans('entities.books_sort'),
@ -19,7 +19,7 @@
<div book-sort class="card content-wrap"> <div book-sort class="card content-wrap">
<h1 class="list-heading mb-l">{{ trans('entities.books_sort') }}</h1> <h1 class="list-heading mb-l">{{ trans('entities.books_sort') }}</h1>
<div book-sort-boxes> <div book-sort-boxes>
@include('books.sort-box', ['book' => $book, 'bookChildren' => $bookChildren]) @include('books.parts.sort-box', ['book' => $book, 'bookChildren' => $bookChildren])
</div> </div>
<form action="{{ $book->getUrl('/sort') }}" method="POST"> <form action="{{ $book->getUrl('/sort') }}" method="POST">
@ -38,7 +38,7 @@
<main class="card content-wrap"> <main class="card content-wrap">
<h2 class="list-heading mb-m">{{ trans('entities.books_sort_show_other') }}</h2> <h2 class="list-heading mb-m">{{ trans('entities.books_sort_show_other') }}</h2>
@include('components.entity-selector', ['name' => 'books_list', 'selectorSize' => 'compact', 'entityTypes' => 'book', 'entityPermission' => 'update', 'showAdd' => true]) @include('entities.selector', ['name' => 'books_list', 'selectorSize' => 'compact', 'entityTypes' => 'book', 'entityPermission' => 'update', 'showAdd' => true])
</main> </main>
</div> </div>

View File

@ -1,10 +1,10 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
$book->getUrl('create-chapter') => [ $book->getUrl('create-chapter') => [
'text' => trans('entities.chapters_create'), 'text' => trans('entities.chapters_create'),
@ -16,7 +16,7 @@
<main class="content-wrap card"> <main class="content-wrap card">
<h1 class="list-heading">{{ trans('entities.chapters_create') }}</h1> <h1 class="list-heading">{{ trans('entities.chapters_create') }}</h1>
<form action="{{ $book->getUrl('/create-chapter') }}" method="POST"> <form action="{{ $book->getUrl('/create-chapter') }}" method="POST">
@include('chapters.form') @include('chapters.parts.form')
</form> </form>
</main> </main>

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$chapter->book, $chapter->book,
$chapter, $chapter,
$chapter->getUrl('/delete') => [ $chapter->getUrl('/delete') => [

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$book, $book,
$chapter, $chapter,
$chapter->getUrl('/edit') => [ $chapter->getUrl('/edit') => [
@ -19,7 +19,7 @@
<h1 class="list-heading">{{ trans('entities.chapters_edit') }}</h1> <h1 class="list-heading">{{ trans('entities.chapters_edit') }}</h1>
<form action="{{ $chapter->getUrl() }}" method="POST"> <form action="{{ $chapter->getUrl() }}" method="POST">
<input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_method" value="PUT">
@include('chapters.form', ['model' => $chapter]) @include('chapters.parts.form', ['model' => $chapter])
</form> </form>
</main> </main>

View File

@ -1,4 +1,4 @@
@extends('export-layout') @extends('layouts.export')
@section('title', $chapter->name) @section('title', $chapter->name)

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small"> <div class="container small">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$chapter->book, $chapter->book,
$chapter, $chapter,
$chapter->getUrl('/move') => [ $chapter->getUrl('/move') => [
@ -23,7 +23,7 @@
{!! csrf_field() !!} {!! csrf_field() !!}
<input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_method" value="PUT">
@include('components.entity-selector', ['name' => 'entity_selection', 'selectorSize' => 'large', 'entityTypes' => 'book', 'entityPermission' => 'chapter-create']) @include('entities.selector', ['name' => 'entity_selection', 'selectorSize' => 'large', 'entityTypes' => 'book', 'entityPermission' => 'chapter-create'])
<div class="form-group text-right"> <div class="form-group text-right">
<a href="{{ $chapter->getUrl() }}" class="button outline">{{ trans('common.cancel') }}</a> <a href="{{ $chapter->getUrl() }}" class="button outline">{{ trans('common.cancel') }}</a>

View File

@ -6,7 +6,7 @@
<ul class="sub-menu inset-list @if($isOpen) open @endif" @if($isOpen) style="display: block;" @endif role="menu"> <ul class="sub-menu inset-list @if($isOpen) open @endif" @if($isOpen) style="display: block;" @endif role="menu">
@foreach($bookChild->visible_pages as $childPage) @foreach($bookChild->visible_pages as $childPage)
<li class="list-item-page {{ $childPage->isA('page') && $childPage->draft ? 'draft' : '' }}" role="presentation"> <li class="list-item-page {{ $childPage->isA('page') && $childPage->draft ? 'draft' : '' }}" role="presentation">
@include('partials.entity-list-item-basic', ['entity' => $childPage, 'classes' => $current->matches($childPage)? 'selected' : '' ]) @include('entities.list-item-basic', ['entity' => $childPage, 'classes' => $current->matches($childPage)? 'selected' : '' ])
</li> </li>
@endforeach @endforeach
</ul> </ul>

View File

@ -16,7 +16,7 @@
<label for="tags">{{ trans('entities.chapter_tags') }}</label> <label for="tags">{{ trans('entities.chapter_tags') }}</label>
</button> </button>
<div class="collapse-content" collapsible-content> <div class="collapse-content" collapsible-content>
@include('components.tag-manager', ['entity' => $chapter ?? null]) @include('entities.tag-manager', ['entity' => $chapter ?? null])
</div> </div>
</div> </div>

View File

@ -18,7 +18,7 @@
class="text-muted chapter-expansion-toggle">@icon('caret-right') <span>{{ trans_choice('entities.x_pages', $chapter->visible_pages->count()) }}</span></button> class="text-muted chapter-expansion-toggle">@icon('caret-right') <span>{{ trans_choice('entities.x_pages', $chapter->visible_pages->count()) }}</span></button>
<div class="inset-list"> <div class="inset-list">
<div class="entity-list-item-children"> <div class="entity-list-item-children">
@include('partials.entity-list', ['entities' => $chapter->visible_pages]) @include('entities.list', ['entities' => $chapter->visible_pages])
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,11 +1,11 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container"> <div class="container">
<div class="my-s"> <div class="my-s">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$chapter->book, $chapter->book,
$chapter, $chapter,
$chapter->getUrl('/permissions') => [ $chapter->getUrl('/permissions') => [

View File

@ -1,4 +1,4 @@
@extends('tri-layout') @extends('layouts.tri')
@section('container-attrs') @section('container-attrs')
component="entity-search" component="entity-search"
@ -13,7 +13,7 @@
@section('body') @section('body')
<div class="mb-m print-hidden"> <div class="mb-m print-hidden">
@include('partials.breadcrumbs', ['crumbs' => [ @include('entities.breadcrumbs', ['crumbs' => [
$chapter->book, $chapter->book,
$chapter, $chapter,
]]) ]])
@ -26,7 +26,7 @@
@if(count($pages) > 0) @if(count($pages) > 0)
<div class="entity-list book-contents"> <div class="entity-list book-contents">
@foreach($pages as $page) @foreach($pages as $page)
@include('pages.list-item', ['page' => $page]) @include('pages.parts.list-item', ['page' => $page])
@endforeach @endforeach
</div> </div>
@else @else
@ -53,10 +53,10 @@
@endif @endif
</div> </div>
@include('partials.entity-search-results') @include('entities.search-results')
</main> </main>
@include('partials.entity-sibling-navigation', ['next' => $next, 'previous' => $previous]) @include('entities.sibling-navigation', ['next' => $next, 'previous' => $previous])
@stop @stop
@ -65,7 +65,7 @@
<div class="mb-xl"> <div class="mb-xl">
<h5>{{ trans('common.details') }}</h5> <h5>{{ trans('common.details') }}</h5>
<div class="blended-links text-small text-muted"> <div class="blended-links text-small text-muted">
@include('partials.entity-meta', ['entity' => $chapter]) @include('entities.meta', ['entity' => $chapter])
@if($book->restricted) @if($book->restricted)
<div class="active-restriction"> <div class="active-restriction">
@ -130,24 +130,24 @@
<hr class="primary-background"/> <hr class="primary-background"/>
@if(signedInUser()) @if(signedInUser())
@include('partials.entity-favourite-action', ['entity' => $chapter]) @include('entities.favourite-action', ['entity' => $chapter])
@endif @endif
@include('partials.entity-export-menu', ['entity' => $chapter]) @include('entities.export-menu', ['entity' => $chapter])
</div> </div>
</div> </div>
@stop @stop
@section('left') @section('left')
@include('partials.entity-search-form', ['label' => trans('entities.chapters_search_this')]) @include('entities.search-form', ['label' => trans('entities.chapters_search_this')])
@if($chapter->tags->count() > 0) @if($chapter->tags->count() > 0)
<div class="mb-xl"> <div class="mb-xl">
@include('components.tag-list', ['entity' => $chapter]) @include('entities.tag-list', ['entity' => $chapter])
</div> </div>
@endif @endif
@include('partials.book-tree', ['book' => $book, 'sidebarTree' => $sidebarTree]) @include('entities.book-tree', ['book' => $book, 'sidebarTree' => $sidebarTree])
@stop @stop

View File

@ -48,7 +48,7 @@
<div comment-content class="content px-s pb-s"> <div comment-content class="content px-s pb-s">
<div class="form-group loading" style="display: none;"> <div class="form-group loading" style="display: none;">
@include('partials.loading-icon', ['text' => trans('entities.comment_deleting')]) @include('common.loading-icon', ['text' => trans('entities.comment_deleting')])
</div> </div>
{!! $comment->html !!} {!! $comment->html !!}
</div> </div>
@ -64,7 +64,7 @@
<button type="submit" class="button">{{ trans('entities.comment_save') }}</button> <button type="submit" class="button">{{ trans('entities.comment_save') }}</button>
</div> </div>
<div class="form-group loading" style="display: none;"> <div class="form-group loading" style="display: none;">
@include('partials.loading-icon', ['text' => trans('entities.comment_saving')]) @include('common.loading-icon', ['text' => trans('entities.comment_saving')])
</div> </div>
</form> </form>
</div> </div>

View File

@ -24,7 +24,7 @@
<button type="submit" class="button">{{ trans('entities.comment_save') }}</button> <button type="submit" class="button">{{ trans('entities.comment_save') }}</button>
</div> </div>
<div class="form-group loading" style="display: none;"> <div class="form-group loading" style="display: none;">
@include('partials.loading-icon', ['text' => trans('entities.comment_saving')]) @include('common.loading-icon', ['text' => trans('entities.comment_saving')])
</div> </div>
</form> </form>
</div> </div>

View File

@ -3,7 +3,7 @@
<div class="activity-list"> <div class="activity-list">
@foreach($activity as $activityItem) @foreach($activity as $activityItem)
<div class="activity-list-item"> <div class="activity-list-item">
@include('partials.activity-item', ['activity' => $activityItem]) @include('common.activity-item', ['activity' => $activityItem])
</div> </div>
@endforeach @endforeach
</div> </div>

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small pt-xl"> <div class="container small pt-xl">
@ -6,7 +6,7 @@
<h1 class="list-heading">{{ $title }}</h1> <h1 class="list-heading">{{ $title }}</h1>
<div class="book-contents"> <div class="book-contents">
@include('partials.entity-list', ['entities' => $entities, 'style' => 'detailed']) @include('entities.list', ['entities' => $entities, 'style' => 'detailed'])
</div> </div>
<div class="text-center"> <div class="text-center">

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('body') @section('body')
<div class="container small pt-xl"> <div class="container small pt-xl">
@ -6,7 +6,7 @@
<h1 class="list-heading">{{ $title }}</h1> <h1 class="list-heading">{{ $title }}</h1>
<div class="book-contents"> <div class="book-contents">
@include('partials.entity-list', ['entities' => $entities, 'style' => 'detailed']) @include('entities.list', ['entities' => $entities, 'style' => 'detailed'])
</div> </div>
<div class="text-right"> <div class="text-right">

View File

@ -79,7 +79,7 @@
</li> </li>
<li><hr></li> <li><hr></li>
<li> <li>
@include('partials.dark-mode-toggle') @include('common.dark-mode-toggle')
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -7,19 +7,19 @@
<ul class="sidebar-page-list mt-xs menu entity-list"> <ul class="sidebar-page-list mt-xs menu entity-list">
@if (userCan('view', $book)) @if (userCan('view', $book))
<li class="list-item-book book"> <li class="list-item-book book">
@include('partials.entity-list-item-basic', ['entity' => $book, 'classes' => ($current->matches($book)? 'selected' : '')]) @include('entities.list-item-basic', ['entity' => $book, 'classes' => ($current->matches($book)? 'selected' : '')])
</li> </li>
@endif @endif
@foreach($sidebarTree as $bookChild) @foreach($sidebarTree as $bookChild)
<li class="list-item-{{ $bookChild->getType() }} {{ $bookChild->getType() }} {{ $bookChild->isA('page') && $bookChild->draft ? 'draft' : '' }}"> <li class="list-item-{{ $bookChild->getType() }} {{ $bookChild->getType() }} {{ $bookChild->isA('page') && $bookChild->draft ? 'draft' : '' }}">
@include('partials.entity-list-item-basic', ['entity' => $bookChild, 'classes' => $current->matches($bookChild)? 'selected' : '']) @include('entities.list-item-basic', ['entity' => $bookChild, 'classes' => $current->matches($bookChild)? 'selected' : ''])
@if($bookChild->isA('chapter') && count($bookChild->visible_pages) > 0) @if($bookChild->isA('chapter') && count($bookChild->visible_pages) > 0)
<div class="entity-list-item no-hover"> <div class="entity-list-item no-hover">
<span role="presentation" class="icon text-chapter"></span> <span role="presentation" class="icon text-chapter"></span>
<div class="content"> <div class="content">
@include('chapters.child-menu', [ @include('chapters.parts.child-menu', [
'chapter' => $bookChild, 'chapter' => $bookChild,
'current' => $current, 'current' => $current,
'isOpen' => $bookChild->matchesOrContains($current) 'isOpen' => $bookChild->matchesOrContains($current)

View File

@ -16,7 +16,7 @@
type="text"> type="text">
</div> </div>
<div refs="dropdown-search@loading"> <div refs="dropdown-search@loading">
@include('partials.loading-icon') @include('common.loading-icon')
</div> </div>
<div refs="dropdown-search@listContainer" class="dropdown-search-list px-m"></div> <div refs="dropdown-search@listContainer" class="dropdown-search-list px-m"></div>
</div> </div>

View File

@ -40,7 +40,7 @@
</a> </a>
@elseif($isEntity && userCan('view', $crumb)) @elseif($isEntity && userCan('view', $crumb))
@if($breadcrumbCount > 0) @if($breadcrumbCount > 0)
@include('partials.breadcrumb-listing', ['entity' => $crumb]) @include('entities.breadcrumb-listing', ['entity' => $crumb])
@endif @endif
<a href="{{ $crumb->getUrl() }}" class="text-{{$crumb->getType()}} icon-list-item outline-hover"> <a href="{{ $crumb->getUrl() }}" class="text-{{$crumb->getType()}} icon-list-item outline-hover">
<span>@icon($crumb->getType())</span> <span>@icon($crumb->getType())</span>

View File

@ -1,7 +1,7 @@
<div class="entity-list {{ $style ?? '' }}"> <div class="entity-list {{ $style ?? '' }}">
@if(count($entities) > 0) @if(count($entities) > 0)
@foreach($entities as $index => $entity) @foreach($entities as $index => $entity)
@include('partials.entity-list-item-basic', ['entity' => $entity]) @include('entities.list-item-basic', ['entity' => $entity])
@endforeach @endforeach
@else @else
<p class="text-muted empty-text"> <p class="text-muted empty-text">

View File

@ -1,4 +1,4 @@
@component('partials.entity-list-item-basic', ['entity' => $entity]) @component('entities.list-item-basic', ['entity' => $entity])
<div class="entity-item-snippet"> <div class="entity-item-snippet">
@ -16,7 +16,7 @@
@if(($showTags ?? false) && $entity->tags->count() > 0) @if(($showTags ?? false) && $entity->tags->count() > 0)
<div class="entity-item-tags mt-xs"> <div class="entity-item-tags mt-xs">
@include('components.tag-list', ['entity' => $entity, 'linked' => false ]) @include('entities.tag-list', ['entity' => $entity, 'linked' => false ])
</div> </div>
@endif @endif

View File

@ -1,7 +1,7 @@
@if(count($entities) > 0) @if(count($entities) > 0)
<div class="entity-list {{ $style ?? '' }}"> <div class="entity-list {{ $style ?? '' }}">
@foreach($entities as $index => $entity) @foreach($entities as $index => $entity)
@include('partials.entity-list-item', ['entity' => $entity, 'showPath' => $showPath ?? false, 'showTags' => $showTags ?? false]) @include('entities.list-item', ['entity' => $entity, 'showPath' => $showPath ?? false, 'showTags' => $showTags ?? false])
@endforeach @endforeach
</div> </div>
@else @else

View File

@ -9,7 +9,7 @@
</div> </div>
<div refs="entity-search@loadingBlock"> <div refs="entity-search@loadingBlock">
@include('partials.loading-icon') @include('common.loading-icon')
</div> </div>
<div class="book-contents" refs="entity-search@searchResults"></div> <div class="book-contents" refs="entity-search@searchResults"></div>
</div> </div>

View File

@ -5,7 +5,7 @@
<div class="popup-title">{{ trans('entities.entity_select') }}</div> <div class="popup-title">{{ trans('entities.entity_select') }}</div>
<button refs="popup@hide" type="button" class="popup-header-close">x</button> <button refs="popup@hide" type="button" class="popup-header-close">x</button>
</div> </div>
@include('components.entity-selector', ['name' => 'entity-selector']) @include('entities.selector', ['name' => 'entity-selector'])
<div class="popup-footer"> <div class="popup-footer">
<button refs="entity-selector-popup@select" type="button" disabled="true" class="button corner-button">{{ trans('common.select') }}</button> <button refs="entity-selector-popup@select" type="button" disabled="true" class="button corner-button">{{ trans('common.select') }}</button>
</div> </div>

View File

@ -5,7 +5,7 @@
option:entity-selector:entity-permission="{{ $entityPermission ?? 'view' }}"> option:entity-selector:entity-permission="{{ $entityPermission ?? 'view' }}">
<input refs="entity-selector@input" type="hidden" name="{{$name}}" value=""> <input refs="entity-selector@input" type="hidden" name="{{$name}}" value="">
<input type="text" placeholder="{{ trans('common.search') }}" @if($autofocus ?? false) autofocus @endif refs="entity-selector@search"> <input type="text" placeholder="{{ trans('common.search') }}" @if($autofocus ?? false) autofocus @endif refs="entity-selector@search">
<div class="text-center loading" refs="entity-selector@loading">@include('partials.loading-icon')</div> <div class="text-center loading" refs="entity-selector@loading">@include('common.loading-icon')</div>
<div refs="entity-selector@results"></div> <div refs="entity-selector@results"></div>
@if($showAdd ?? false) @if($showAdd ?? false)
<div class="entity-selector-add"> <div class="entity-selector-add">

View File

@ -9,7 +9,7 @@
<div component="sortable-list" <div component="sortable-list"
option:sortable-list:handle-selector=".handle"> option:sortable-list:handle-selector=".handle">
@include('components.tag-manager-list', ['tags' => $entity ? $entity->tags->all() : []]) @include('entities.tag-manager-list', ['tags' => $entity ? $entity->tags->all() : []])
</div> </div>
<button refs="add-remove-rows@add" type="button" class="text-button">{{ trans('entities.tags_add') }}</button> <button refs="add-remove-rows@add" type="button" class="text-button">{{ trans('entities.tags_add') }}</button>

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')
<div class="container mt-l"> <div class="container mt-l">
@ -28,7 +28,7 @@
<div class="card mb-xl"> <div class="card mb-xl">
<h3 class="card-title">{{ trans('entities.pages_popular') }}</h3> <h3 class="card-title">{{ trans('entities.pages_popular') }}</h3>
<div class="px-m"> <div class="px-m">
@include('partials.entity-list', ['entities' => (new \BookStack\Entities\Queries\Popular)->run(10, 0, ['page']), 'style' => 'compact']) @include('entities.list', ['entities' => (new \BookStack\Entities\Queries\Popular)->run(10, 0, ['page']), 'style' => 'compact'])
</div> </div>
</div> </div>
</div> </div>
@ -36,7 +36,7 @@
<div class="card mb-xl"> <div class="card mb-xl">
<h3 class="card-title">{{ trans('entities.books_popular') }}</h3> <h3 class="card-title">{{ trans('entities.books_popular') }}</h3>
<div class="px-m"> <div class="px-m">
@include('partials.entity-list', ['entities' => (new \BookStack\Entities\Queries\Popular)->run(10, 0, ['book']), 'style' => 'compact']) @include('entities.list', ['entities' => (new \BookStack\Entities\Queries\Popular)->run(10, 0, ['book']), 'style' => 'compact'])
</div> </div>
</div> </div>
</div> </div>
@ -44,7 +44,7 @@
<div class="card mb-xl"> <div class="card mb-xl">
<h3 class="card-title">{{ trans('entities.chapters_popular') }}</h3> <h3 class="card-title">{{ trans('entities.chapters_popular') }}</h3>
<div class="px-m"> <div class="px-m">
@include('partials.entity-list', ['entities' => (new \BookStack\Entities\Queries\Popular)->run(10, 0, ['chapter']), 'style' => 'compact']) @include('entities.list', ['entities' => (new \BookStack\Entities\Queries\Popular)->run(10, 0, ['chapter']), 'style' => 'compact'])
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
@extends('base') @extends('layouts.base')
@section('content') @section('content')

View File

@ -1,4 +1,4 @@
@extends('simple-layout') @extends('layouts.simple')
@section('content') @section('content')

View File

@ -4,7 +4,7 @@ $label
$errors? $errors?
$model? $model?
--}} --}}
@include('components.custom-checkbox', [ @include('form.custom-checkbox', [
'name' => $name, 'name' => $name,
'label' => $label, 'label' => $label,
'value' => 'true', 'value' => 'true',

View File

@ -15,7 +15,7 @@
<div> <div>
<div class="form-group"> <div class="form-group">
<label for="owner">{{ trans('entities.permissions_owner') }}</label> <label for="owner">{{ trans('entities.permissions_owner') }}</label>
@include('components.user-select', ['user' => $model->ownedBy, 'name' => 'owned_by', 'compact' => false]) @include('form.user-select', ['user' => $model->ownedBy, 'name' => 'owned_by', 'compact' => false])
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@ $role
$action $action
$model? $model?
--}} --}}
@include('components.custom-checkbox', [ @include('form.custom-checkbox', [
'name' => $name . '[' . $role->id . '][' . $action . ']', 'name' => $name . '[' . $role->id . '][' . $action . ']',
'label' => $label, 'label' => $label,
'value' => 'true', 'value' => 'true',

View File

@ -2,7 +2,7 @@
<div class="toggle-switch-list dual-column-content"> <div class="toggle-switch-list dual-column-content">
@foreach($roles as $role) @foreach($roles as $role)
<div> <div>
@include('components.custom-checkbox', [ @include('form.custom-checkbox', [
'name' => $name . '[' . strval($role->id) . ']', 'name' => $name . '[' . strval($role->id) . ']',
'label' => $role->display_name, 'label' => $role->display_name,
'value' => $role->id, 'value' => $role->id,

View File

@ -27,7 +27,7 @@
type="text"> type="text">
</div> </div>
<div refs="dropdown-search@loading" class="text-center"> <div refs="dropdown-search@loading" class="text-center">
@include('partials.loading-icon') @include('common.loading-icon')
</div> </div>
<div refs="dropdown-search@listContainer" class="dropdown-search-list"></div> <div refs="dropdown-search@listContainer" class="dropdown-search-list"></div>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More