1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-11-11 22:02:36 +03:00

Merge branch 'development' into release

This commit is contained in:
Dan Brown
2025-08-11 14:43:13 +01:00
95 changed files with 620 additions and 287 deletions

View File

@@ -438,7 +438,7 @@ javadataherian :: Persian
Ludo-code :: French
hollsten :: Swedish
Ngoc Lan Phung (lanpncz) :: Vietnamese
Worive :: Catalan
Worive :: Catalan; French
Илья Скаба (skabailya) :: Russian
Irjan Olsen (Irch) :: Norwegian Bokmal
Aleksandar Jovanovic (jovanoviczaleksandar) :: Serbian (Cyrillic)
@@ -500,3 +500,6 @@ LiZerui (iamzrli) :: Chinese Traditional
Ticker (ticker.com) :: Hebrew
CrazyComputer :: Chinese Simplified
Firr (FirrV) :: Russian
João Faro (FaroJoaoFaro) :: Portuguese
Danilo dos Santos Barbosa (bozochegou) :: Portuguese, Brazilian
Chris (furesoft) :: German

View File

@@ -57,16 +57,13 @@ class LdapSessionGuard extends ExternalBaseSessionGuard
/**
* Attempt to authenticate a user using the given credentials.
*
* @param array $credentials
* @param bool $remember
*
* @throws LdapException*@throws \BookStack\Exceptions\JsonDebugException
* @throws LdapException
* @throws LoginAttemptException
* @throws JsonDebugException
*
* @return bool
*/
public function attempt(array $credentials = [], $remember = false)
public function attempt(array $credentials = [], $remember = false): bool
{
$username = $credentials['username'];
$userDetails = $this->ldapService->getUserDetails($username);

View File

@@ -11,6 +11,7 @@ use BookStack\Entities\Tools\MixedEntityListLoader;
use BookStack\Permissions\PermissionApplicator;
use BookStack\Users\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\Relation;
class ActivityQueries
@@ -67,6 +68,7 @@ class ActivityQueries
$activity = $query->orderBy('created_at', 'desc')
->with(['loggable' => function (Relation $query) {
/** @var MorphTo<Entity, Activity> $query */
$query->withTrashed();
}, 'user.avatar'])
->skip($count * ($page - 1))

View File

@@ -20,7 +20,8 @@ class PageUpdateNotificationHandler extends BaseNotificationHandler
throw new \InvalidArgumentException("Detail for page update notifications must be a page");
}
// Get last update from activity
// Get the last update from activity
/** @var ?Activity $lastUpdate */
$lastUpdate = $detail->activity()
->where('type', '=', ActivityType::PAGE_UPDATE)
->where('id', '!=', $activity->id)

View File

@@ -50,7 +50,7 @@ class WebhookFormatter
}
if ($this->detail instanceof Model) {
$data['related_item'] = $this->formatModel();
$data['related_item'] = $this->formatModel($this->detail);
}
return $data;
@@ -83,10 +83,8 @@ class WebhookFormatter
);
}
protected function formatModel(): array
protected function formatModel(Model $model): array
{
/** @var Model $model */
$model = $this->detail;
$model->unsetRelations();
foreach ($this->modelFormatters as $formatter) {

View File

@@ -2,6 +2,7 @@
namespace BookStack\Entities\Controllers;
use BookStack\Entities\Models\Book;
use BookStack\Entities\Models\Chapter;
use BookStack\Entities\Queries\ChapterQueries;
use BookStack\Entities\Queries\EntityQueries;
@@ -143,7 +144,10 @@ class ChapterApiController extends ApiController
$chapter->load(['tags']);
$chapter->makeVisible('description_html');
$chapter->setAttribute('description_html', $chapter->descriptionHtml());
$chapter->setAttribute('book_slug', $chapter->book()->first()->slug);
/** @var Book $book */
$book = $chapter->book()->first();
$chapter->setAttribute('book_slug', $book->slug);
return $chapter;
}

View File

@@ -26,6 +26,7 @@ use BookStack\Users\Models\HasOwner;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -283,10 +284,14 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
public function getParent(): ?self
{
if ($this instanceof Page) {
return $this->chapter_id ? $this->chapter()->withTrashed()->first() : $this->book()->withTrashed()->first();
/** @var BelongsTo<Chapter|Book, Page> $builder */
$builder = $this->chapter_id ? $this->chapter() : $this->book();
return $builder->withTrashed()->first();
}
if ($this instanceof Chapter) {
return $this->book()->withTrashed()->first();
/** @var BelongsTo<Book, Page> $builder */
$builder = $this->book();
return $builder->withTrashed()->first();
}
return null;
@@ -295,7 +300,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
/**
* Rebuild the permissions for this entity.
*/
public function rebuildPermissions()
public function rebuildPermissions(): void
{
app()->make(JointPermissionBuilder::class)->rebuildForEntity(clone $this);
}
@@ -303,7 +308,7 @@ abstract class Entity extends Model implements Sluggable, Favouritable, Viewable
/**
* Index the current entity for search.
*/
public function indexForSearch()
public function indexForSearch(): void
{
app()->make(SearchIndex::class)->indexEntity(clone $this);
}

View File

@@ -89,7 +89,7 @@ class ImportController extends Controller
try {
$entity = $this->imports->runImport($import, $parent);
} catch (ZipImportException $exception) {
session()->flush();
session()->forget(['success', 'warning']);
$this->showErrorNotification(trans('errors.import_zip_failed_notification'));
return redirect($import->getUrl())->with('import_errors', $exception->errors);
}

View File

@@ -17,17 +17,17 @@ use BookStack\Uploads\Image;
class ZipExportReferences
{
/** @var ZipExportPage[] */
/** @var array<int, ZipExportPage> */
protected array $pages = [];
/** @var ZipExportChapter[] */
/** @var array<int, ZipExportChapter> */
protected array $chapters = [];
/** @var ZipExportBook[] */
/** @var array<int, ZipExportBook> */
protected array $books = [];
/** @var ZipExportAttachment[] */
/** @var array<int, ZipExportAttachment> */
protected array $attachments = [];
/** @var ZipExportImage[] */
/** @var array<int, ZipExportImage> */
protected array $images = [];
public function __construct(
@@ -134,11 +134,12 @@ class ZipExportReferences
// Find and include images if in visibility
$page = $model->getPage();
if ($page && userCan('view', $page)) {
$pageExportModel = $this->pages[$page->id] ?? ($exportModel instanceof ZipExportPage ? $exportModel : null);
if (isset($this->images[$model->id]) || ($page && $pageExportModel && userCan('view', $page))) {
if (!isset($this->images[$model->id])) {
$exportImage = ZipExportImage::fromModel($model, $files);
$this->images[$model->id] = $exportImage;
$exportModel->images[] = $exportImage;
$pageExportModel->images[] = $exportImage;
}
return "[[bsexport:image:{$model->id}]]";
}

View File

@@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* @property int $created_by
* @property int $updated_by
* @property ?User $createdBy
* @property ?User $updatedBy
*/
trait HasCreatorAndUpdater
{

386
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -467,7 +467,7 @@ License: MIT
License File: vendor/psy/psysh/LICENSE
Copyright: Copyright (c) 2012-2023 Justin Hileman
Source: https://github.com/bobthecow/psysh.git
Link: http://psysh.org
Link: https://psysh.org
-----------
ralouphie/getallheaders
License: MIT

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'سيؤدي هذا إلى حذف مِلَفّ الاستيراد المضغوط ZIP، ولا يمكن التراجع عنه.',
'import_errors' => 'أخطاء الاستيراد',
'import_errors_desc' => 'حدثت الأخطاء التالية خلال محاولة الاستيراد:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'الأذونات',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Права',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissions',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Dozvole',

View File

@@ -13,7 +13,7 @@ return [
'cancel' => 'Cancel·la',
'save' => 'Desa',
'close' => 'Tanca',
'apply' => 'Apply',
'apply' => 'Aplicar',
'undo' => 'Desfés',
'redo' => 'Refés',
'left' => 'Esquerra',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permisos',

View File

@@ -47,8 +47,8 @@ return [
'strikethrough' => 'Proškrtnuté',
'superscript' => 'horní index',
'subscript' => 'Dolní index',
'text_color' => 'Barva textu:',
'highlight_color' => 'Highlight color',
'text_color' => 'Barva textu',
'highlight_color' => 'Barva zvýraznění',
'custom_color' => 'Vlastní barva',
'remove_color' => 'Odstranit barvu',
'background_color' => 'Barva pozadí',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Potvrzením odstraníte nahraný ZIP soubor. Tento krok nelze vrátit zpět.',
'import_errors' => 'Chyby importu',
'import_errors_desc' => 'Při pokusu o import došlo k následujícím chybám:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Oprávnění',
@@ -244,8 +248,8 @@ return [
'pages_edit_delete_draft_confirm' => 'Jste si jisti, že chcete odstranit změny vašich konceptů? Všechny vaše změny, od posledního úplného uložení, budou ztraceny a editor bude aktualizován s nejnovějším stavem nekonceptu stránky.',
'pages_edit_discard_draft' => 'Zahodit koncept',
'pages_edit_switch_to_markdown' => 'Přepnout na Markdown Editor',
'pages_edit_switch_to_markdown_clean' => '(Vytvořený obsah)',
'pages_edit_switch_to_markdown_stable' => '(Stabilní obsah)',
'pages_edit_switch_to_markdown_clean' => '(Prostý zápis)',
'pages_edit_switch_to_markdown_stable' => '(Formátovaný zápis)',
'pages_edit_switch_to_wysiwyg' => 'Přepnout na WYSIWYG Editor',
'pages_edit_switch_to_new_wysiwyg' => 'Přepnout na nový WYSIWYG',
'pages_edit_switch_to_new_wysiwyg_desc' => '(V beta testování)',
@@ -268,7 +272,7 @@ return [
'pages_md_insert_drawing' => 'Vložit kresbu',
'pages_md_show_preview' => 'Zobrazit náhled',
'pages_md_sync_scroll' => 'Synchronizovat náhled',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_md_plain_editor' => 'Upravovat prostý text',
'pages_drawing_unsaved' => 'Nalezen neuložený výkres',
'pages_drawing_unsaved_confirm' => 'Byly nalezeny neuložené kresby z předchozí neúspěšné pokusu o uložení kresby. Chcete je obnovit a pokračovat v úpravě této neuložené kresby?',
'pages_not_in_chapter' => 'Stránka není v kapitole',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Bydd hwn yn dileu\'r mewnforyn ffeil ZIP sy wedi\'i lwytho i fyny, a fydd e ddim gallu cael ei ddadwneud.',
'import_errors' => 'Gwallau Mewnforyn',
'import_errors_desc' => 'Digwyddodd y gwallau canlynol yn ystod cynnig y mewnforyn:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Caniatâd',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Dette vil slette den uploadede ZIP-fil og kan ikke fortrydes.',
'import_errors' => 'Importfejl',
'import_errors_desc' => 'Følgende fejl opstod under importforsøget:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Rettigheder',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Hochgestellt',
'subscript' => 'Tiefgestellt',
'text_color' => 'Schriftfarbe',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Markierungsfarbe',
'custom_color' => 'Benutzerdefinierte Farbe',
'remove_color' => 'Farbe entfernen',
'background_color' => 'Hintergrundfarbe',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Dies löscht die hochgeladene ZIP-Datei und kann nicht rückgängig gemacht werden.',
'import_errors' => 'Importfehler',
'import_errors_desc' => 'Die folgenden Fehler sind während des Importversuchs aufgetreten:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Berechtigungen',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Hochgestellt',
'subscript' => 'Tiefgestellt',
'text_color' => 'Textfarbe',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Markierungsfarbe',
'custom_color' => 'Benutzerdefinierte Farbe',
'remove_color' => 'Farbe entfernen',
'background_color' => 'Hintergrundfarbe',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Dies löscht die hochgeladene ZIP-Datei und kann nicht rückgängig gemacht werden.',
'import_errors' => 'Importfehler',
'import_errors_desc' => 'Die folgenden Fehler sind während des Importversuchs aufgetreten:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Berechtigungen',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Δικαιώματα',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissions',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Superíndice',
'subscript' => 'Subíndice',
'text_color' => 'Color de texto',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Color de resaltado',
'custom_color' => 'Color personalizado',
'remove_color' => 'Eliminar color',
'background_color' => 'Color de fondo',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Esto eliminará el archivo ZIP de importación subido y no se puede deshacer.',
'import_errors' => 'Errores de Importación',
'import_errors_desc' => 'Se han producido los siguientes errores durante el intento de importación:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permisos',
@@ -268,7 +272,7 @@ return [
'pages_md_insert_drawing' => 'Insertar Dibujo',
'pages_md_show_preview' => 'Mostrar vista previa',
'pages_md_sync_scroll' => 'Sincronizar desplazamiento de vista previa',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_md_plain_editor' => 'Editor de texto plano',
'pages_drawing_unsaved' => 'Encontrado dibujo sin guardar',
'pages_drawing_unsaved_confirm' => 'Se encontraron datos no guardados del dibujo de un intento de guardado fallido. ¿Desea restaurar y continuar editando el dibujo no guardado?',
'pages_not_in_chapter' => 'La página no está en un capítulo',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Superíndice',
'subscript' => 'Subíndice',
'text_color' => 'Color del texto',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Color de resaltado',
'custom_color' => 'Color personalizado',
'remove_color' => 'Eliminar color',
'background_color' => 'Color de fondo',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Esto eliminará el archivo ZIP de importación subido y no se puede deshacer.',
'import_errors' => 'Errores de Importación',
'import_errors_desc' => 'Se produjeron los siguientes errores durante el intento de importación:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permisos',
@@ -268,7 +272,7 @@ return [
'pages_md_insert_drawing' => 'Insertar Dibujo',
'pages_md_show_preview' => 'Mostrar vista previa',
'pages_md_sync_scroll' => 'Sincronizar desplazamiento de vista previa',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_md_plain_editor' => 'Editor de texto plano',
'pages_drawing_unsaved' => 'Encontrado dibujo sin guardar',
'pages_drawing_unsaved_confirm' => 'Se encontraron datos del dibujo no guardados durante un intento de guardado fallido anterior. ¿Desea restaurar y continuar editando el dibujo no guardado?',
'pages_not_in_chapter' => 'La página no esá en el capítulo',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Ülaindeks',
'subscript' => 'Alaindeks',
'text_color' => 'Teksti värv',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Esiletõstuvärv',
'custom_color' => 'Kohandatud värv',
'remove_color' => 'Eemalda värv',
'background_color' => 'Taustavärv',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'See kustutab üleslaaditud ZIP-faili, ja seda ei saa tagasi võtta.',
'import_errors' => 'Importimise vead',
'import_errors_desc' => 'Importimisel esinesid järgmised vead:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Õigused',
@@ -268,7 +272,7 @@ return [
'pages_md_insert_drawing' => 'Lisa joonis',
'pages_md_show_preview' => 'Näita eelvaadet',
'pages_md_sync_scroll' => 'Sünkrooni eelvaate kerimine',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_md_plain_editor' => 'Lihttekstiredaktor',
'pages_drawing_unsaved' => 'Leiti salvestamata joonis',
'pages_drawing_unsaved_confirm' => 'Varasemast ebaõnnestunud salvestuskatsest leiti salvestamata joonis. Kas soovid salvestamata joonise taastada ja selle muutmist jätkata?',
'pages_not_in_chapter' => 'Leht ei kuulu peatüki alla',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Baimenak',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'با انجام این کار، فایل ZIP واردشده حذف می‌شود و این عمل بازگشت‌ناپذیر است.',
'import_errors' => 'خطای انتقال ورودی',
'import_errors_desc' => 'در جریان تلاش برای انتقال ورودی، خطاهای زیر رخ داد:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'مجوزها',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Käyttöoikeudet',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Exposant',
'subscript' => 'Indice',
'text_color' => 'Couleur Texte',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Couleur de surlignage',
'custom_color' => 'Couleur personnalisée',
'remove_color' => 'Supprimer la couleur',
'background_color' => 'Couleur d\'arrière-plan',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Ceci supprimera le fichier ZIP importé et ne pourra pas être annulé.',
'import_errors' => 'Erreurs d\'importation',
'import_errors_desc' => 'Les erreurs suivantes se sont produites lors de la tentative d\'importation :',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Autorisations',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'תקלות יבוא',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'הרשאות',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Dopuštenja',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Jogosultságok',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Izin',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Þetta mun eyða innsendri ZIP skrá, þessa aðgerð er ekki hægt að afturkalla.',
'import_errors' => 'Villur í innflutningi',
'import_errors_desc' => 'Eftirfarandi villur komu upp við innflutning:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Réttindi',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Apice',
'subscript' => 'Pedice',
'text_color' => 'Colore del testo',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Colore evidenziazione',
'custom_color' => 'Colore personalizzato',
'remove_color' => 'Rimuovi colore',
'background_color' => 'Colore di sfondo',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Questa operazione cancella il file ZIP di importazione caricato e non può essere annullata.',
'import_errors' => 'Errori di importazione',
'import_errors_desc' => 'Gli seguenti errori si sono verificati durante il tentativo di importazione:',
'breadcrumb_siblings_for_page' => 'Naviga tra le pagine correlate',
'breadcrumb_siblings_for_chapter' => 'Naviga tra i capitoli correlati',
'breadcrumb_siblings_for_book' => 'Naviga tra i libri correlati',
'breadcrumb_siblings_for_bookshelf' => 'Naviga tra le librerie correlate',
// Permissions and restrictions
'permissions' => 'Permessi',

View File

@@ -47,8 +47,8 @@ return [
'strikethrough' => '取消線',
'superscript' => '上付き',
'subscript' => '下付き',
'text_color' => 'テキスト色',
'highlight_color' => 'Highlight color',
'text_color' => 'テキスト色',
'highlight_color' => 'テキスト背景色',
'custom_color' => 'カスタムカラー',
'remove_color' => '色設定を解除',
'background_color' => '背景色',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'アップロードされたインポートZIPファイルは削除され、元に戻すことはできません。',
'import_errors' => 'インポートエラー',
'import_errors_desc' => 'インポート中に次のエラーが発生しました:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => '権限',
@@ -261,14 +265,14 @@ return [
'pages_save' => 'ページを保存',
'pages_title' => 'ページタイトル',
'pages_name' => 'ページ名',
'pages_md_editor' => 'エディタ',
'pages_md_editor' => 'エディタ',
'pages_md_preview' => 'プレビュー',
'pages_md_insert_image' => '画像を挿入',
'pages_md_insert_link' => 'エンティティへのリンクを挿入',
'pages_md_insert_drawing' => '図を追加',
'pages_md_show_preview' => 'プレビューを表示',
'pages_md_sync_scroll' => 'プレビューとスクロールを同期',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_md_plain_editor' => 'プレーンテキスト エディタ',
'pages_drawing_unsaved' => '未保存の図が見つかりました',
'pages_drawing_unsaved_confirm' => '以前に保存操作が失敗した、未保存の図が見つかりました。
未保存の図面を復元して編集を続けますか?',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissions',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => '업로드된 ZIP 파일이 삭제되며, 실행 취소할 수 없습니다.',
'import_errors' => '가져오기 오류',
'import_errors_desc' => '가져오기 중 에러가 발생했습니다.',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => '권한',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissions',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Leidimai',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Šis izdzēsīs augšupielādēto importa ZIP failu, un šo darbību nevarēs atcelt.',
'import_errors' => 'Importa kļūdas',
'import_errors_desc' => 'Importa mēģinājumā atgadījās šīs kļūdas:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Atļaujas',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Dette vil slette den opplastede importen av ZIP-filen og kan ikke angres.',
'import_errors' => 'Import feil',
'import_errors_desc' => 'Feil oppstod under importforsøket:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Tilganger',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'यो अपलोड गरिएको आयात ZIP फाइल मेट्नेछ, र यो कार्य नकारात्मक हुन सक्दैन।',
'import_errors' => 'आयात त्रुटिहरू',
'import_errors_desc' => 'आयात प्रयासको क्रममा निम्न त्रुटिहरू उत्पन्न भएका छन्:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'अनुमतिहरू',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Dit zal het Zip-bestand van de import permanent verwijderen.',
'import_errors' => 'Importeerfouten',
'import_errors_desc' => 'De volgende fouten deden zich voor tijdens het importeren:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Machtigingen',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Tilgongar',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Uprawnienia',

View File

@@ -30,7 +30,7 @@ return [
// Books
'book_create' => 'livro criado',
'book_create_notification' => 'Livro criado com sucesso',
'book_create_from_chapter' => 'capítulo convertido para lívro',
'book_create_from_chapter' => 'capítulo convertido para livro',
'book_create_from_chapter_notification' => 'Capítulo convertido em livro com sucesso',
'book_update' => 'livro atualizado',
'book_update_notification' => 'Livro atualizado com sucesso',
@@ -46,12 +46,12 @@ return [
'bookshelf_create_from_book_notification' => 'Livro convertido em prateleira com sucesso',
'bookshelf_update' => 'estante atualizada',
'bookshelf_update_notification' => 'Estante atualizada com sucesso',
'bookshelf_delete' => 'prateleira excluída',
'bookshelf_delete' => 'excluiu a estante',
'bookshelf_delete_notification' => 'Estante eliminada com sucesso',
// Revisions
'revision_restore' => 'revisão restaurada',
'revision_delete' => 'revisão eliminada',
'revision_restore' => 'restaurou a revisão',
'revision_delete' => 'eliminou a revisão',
'revision_delete_notification' => 'Revisão eliminada com sucesso',
// Favourites
@@ -62,7 +62,7 @@ return [
'watch_update_level_notification' => 'Ver preferências atualizadas com sucesso',
// Auth
'auth_login' => 'sessão iniciada',
'auth_login' => 'iniciou sessão',
'auth_register' => 'registado como novo utilizador',
'auth_password_reset_request' => 'pedido a redefinição da palavra-passe',
'auth_password_reset_update' => 'redifinir palavra-passe do utilizador',
@@ -85,12 +85,12 @@ return [
'webhook_delete_notification' => 'Webhook criado com sucesso',
// Imports
'import_create' => 'created import',
'import_create_notification' => 'Import successfully uploaded',
'import_run' => 'updated import',
'import_run_notification' => 'Content successfully imported',
'import_delete' => 'deleted import',
'import_delete_notification' => 'Import successfully deleted',
'import_create' => 'importação criada',
'import_create_notification' => 'Importação carregada com sucesso',
'import_run' => 'importação atualizada',
'import_run_notification' => 'Conteúdo importado com sucesso',
'import_delete' => 'importação apagada',
'import_delete_notification' => 'Importação eliminada com sucesso',
// Users
'user_create' => 'utilizador criado',
@@ -101,11 +101,11 @@ return [
'user_delete_notification' => 'Utilizador removido com sucesso',
// API Tokens
'api_token_create' => 'created API token',
'api_token_create' => 'token API criado',
'api_token_create_notification' => 'API token criado com sucesso',
'api_token_update' => 'updated API token',
'api_token_update' => 'token API atualizado',
'api_token_update_notification' => 'API token atualizado com sucesso',
'api_token_delete' => 'deleted API token',
'api_token_delete' => 'token API apagado',
'api_token_delete_notification' => 'API token atualizado com sucesso',
// Roles
@@ -128,12 +128,12 @@ return [
'comment_delete' => 'comentário eliminado',
// Sort Rules
'sort_rule_create' => 'created sort rule',
'sort_rule_create_notification' => 'Sort rule successfully created',
'sort_rule_update' => 'updated sort rule',
'sort_rule_update_notification' => 'Sort rule successfully updated',
'sort_rule_delete' => 'deleted sort rule',
'sort_rule_delete_notification' => 'Sort rule successfully deleted',
'sort_rule_create' => 'regra de ordenação criada',
'sort_rule_create_notification' => 'Regra de ordenação criada com sucesso',
'sort_rule_update' => 'regra de ordenação atualizada',
'sort_rule_update_notification' => 'Regra de ordenação atualizada com sucesso',
'sort_rule_delete' => 'regra de ordenação apagada',
'sort_rule_delete_notification' => 'Regra de ordenação apagada com sucesso',
// Other
'permissions_update' => 'permissões atualizadas',

View File

@@ -91,7 +91,7 @@ return [
'mfa_option_totp_title' => 'Aplicação móvel',
'mfa_option_totp_desc' => 'Para usar a autenticação multi-fator, você precisa de uma aplicação móvel que suporte TOTP como o Autenticador do Google, Authy ou o autenticador Microsoft.',
'mfa_option_backup_codes_title' => 'Códigos de Backup',
'mfa_option_backup_codes_desc' => 'Generates a set of one-time-use backup codes which you\'ll enter on login to verify your identity. Make sure to store these in a safe & secure place.',
'mfa_option_backup_codes_desc' => 'Gera um conjunto de códigos de reserva de utilização única, que deverá usar no início de sessão para verificar a sua identidade. Certifique-se de que os guarda num local seguro.',
'mfa_gen_confirm_and_enable' => 'Confirmar e ativar',
'mfa_gen_backup_codes_title' => 'Configuração dos Códigos de Backup',
'mfa_gen_backup_codes_desc' => 'Armazene a lista de códigos abaixo em um lugar seguro. Ao acessar o sistema você poderá usar um dos códigos como um segundo mecanismo de autenticação.',

View File

@@ -111,5 +111,5 @@ return [
'terms_of_service' => 'Termos de Utilização',
// OpenSearch
'opensearch_description' => 'Search :appName',
'opensearch_description' => 'Procurar :appName',
];

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissões',

View File

@@ -48,7 +48,7 @@ return [
'superscript' => 'Sobrescrito',
'subscript' => 'Subscrito',
'text_color' => 'Cor do texto',
'highlight_color' => 'Highlight color',
'highlight_color' => 'Cor de destaque',
'custom_color' => 'Cor personalizada',
'remove_color' => 'Remover cor',
'background_color' => 'Cor de fundo',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Isto irá excluir o arquivo ZIP de importação carregado e não poderá ser desfeito.',
'import_errors' => 'Erros de importação',
'import_errors_desc' => 'Os seguintes erros ocorreram durante a tentativa de importação:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissões',
@@ -268,7 +272,7 @@ return [
'pages_md_insert_drawing' => 'Inserir Diagrama',
'pages_md_show_preview' => 'Mostrar pré-visualização',
'pages_md_sync_scroll' => 'Sincronizar pré-visualização',
'pages_md_plain_editor' => 'Plaintext editor',
'pages_md_plain_editor' => 'Editor de texto simples',
'pages_drawing_unsaved' => 'Diagrama não-salvo encontrado',
'pages_drawing_unsaved_confirm' => 'Foram encontrados dados não-salvos de uma tentativa anterior de salvar o diagrama. Você gostaria de restaurá-los e continuar editando este diagrama?',
'pages_not_in_chapter' => 'Página não está dentro de um capítulo',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permisiuni',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Разрешения',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Oprávnenia',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Dovoljenja',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissions',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Дозволе',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Detta kommer att ta bort den uppladdade ZIP-baserade importfilen och kan inte ångras.',
'import_errors' => 'Importfel',
'import_errors_desc' => 'Följande fel inträffade under importförsöket:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Rättigheter',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Permissions',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'İzinler',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Це видалить завантажений імпорт файлу ZIP, і його не можна буде скасувати.',
'import_errors' => 'Помилки імпорту',
'import_errors_desc' => 'Під час спроби імпорту відбулися наступні помилки:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Дозволи',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
'import_errors' => 'Import Errors',
'import_errors_desc' => 'The follow errors occurred during the import attempt:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Huquqlar',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => 'Thao tác này sẽ xóa tệp ZIP nhập đã tải lên và không thể hoàn tác.',
'import_errors' => 'Lỗi nhập',
'import_errors_desc' => 'Các lỗi sau đã xảy ra trong quá trình nhập:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => 'Quyền',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => '这将删除上传的ZIP文件不能撤消。',
'import_errors' => '导入错误',
'import_errors_desc' => '在尝试导入过程中出现了以下错误:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => '权限',
@@ -166,7 +170,7 @@ return [
'books_search_this' => '搜索这本书',
'books_navigation' => '图书导航',
'books_sort' => '排序图书内容',
'books_sort_desc' => 'Move chapters and pages within a book to reorganise its contents. Other books can be added which allows easy moving of chapters and pages between books. Optionally an auto sort rule can be set to automatically sort this book\'s contents upon changes.',
'books_sort_desc' => '在书籍内部移动章节与页面以重组内容;支持添加其他书籍,实现跨书籍便捷移动章节与页面;还可设置自动排序规则,在内容发生变更时自动对本书内容进行排序。',
'books_sort_auto_sort' => '自动排序选项',
'books_sort_auto_sort_active' => '自动排序已激活:::sortName',
'books_sort_named' => '排序图书「:bookName」',

View File

@@ -63,6 +63,10 @@ return [
'import_delete_desc' => '這將會刪除已上傳的匯入 ZIP 檔案,且無法還原。',
'import_errors' => '匯入錯誤',
'import_errors_desc' => '嘗試匯入時發生以下錯誤:',
'breadcrumb_siblings_for_page' => 'Navigate siblings for page',
'breadcrumb_siblings_for_chapter' => 'Navigate siblings for chapter',
'breadcrumb_siblings_for_book' => 'Navigate siblings for book',
'breadcrumb_siblings_for_bookshelf' => 'Navigate siblings for shelf',
// Permissions and restrictions
'permissions' => '權限',

View File

@@ -21,6 +21,7 @@
<server name="DB_CONNECTION" value="mysql_testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="MAIL_PORT" value="587"/>
<server name="MAIL_VERIFY_SSL" value="true"/>
<server name="LOG_CHANNEL" value="single"/>
<server name="AUTH_METHOD" value="standard"/>

View File

@@ -5,7 +5,7 @@
[![Crowdin](https://badges.crowdin.net/bookstack/localized.svg)](https://crowdin.com/project/bookstack)
[![Build Status](https://github.com/BookStackApp/BookStack/workflows/test-php/badge.svg)](https://github.com/BookStackApp/BookStack/actions)
[![Lint Status](https://github.com/BookStackApp/BookStack/workflows/lint-php/badge.svg)](https://github.com/BookStackApp/BookStack/actions)
[![Maintainability](https://api.codeclimate.com/v1/badges/5551731994dd22fa1f4f/maintainability)](https://codeclimate.com/github/BookStackApp/BookStack/maintainability)
[![php-metrics](https://img.shields.io/static/v1?label=Metrics&message=php&color=4F5B93)](https://source.bookstackapp.com/php-stats/index.html)
<br>
[![Alternate Source](https://img.shields.io/static/v1?label=Alt+Source&message=Git&color=ef391a&logo=git)](https://source.bookstackapp.com/)
[![Repo Stats](https://img.shields.io/static/v1?label=GitHub+project&message=stats&color=f27e3f)](https://gh-stats.bookstackapp.com/)

View File

@@ -904,8 +904,11 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
border-radius: 4px;
line-height: normal;
padding: vars.$xs;
opacity: 0.6;
cursor: pointer;
&:hover {
border-color: #DDD;
opacity: 1;
@include mixins.lightDark(border-color, #DDD, #444);
}
.svg-icon {
margin-inline-end: 0;

View File

@@ -65,6 +65,7 @@ header {
margin: 0 (-(vars.$s));
border-radius: 3px;
gap: vars.$xs;
color: #FFF;
> span {
padding-inline-start: vars.$xs;
display: inline-block;

View File

@@ -232,13 +232,15 @@ $loadingSize: 10px;
.list-sort-label {
font-weight: bold;
display: inline-block;
}
.list-sort-label, .list-sort-toggle {
@include mixins.lightDark(color, #555, #888);
}
.list-sort-type {
text-align: start;
}
.list-sort-type, .list-sort-dir {
padding: vars.$xs vars.$s;
.list-sort-toggle, .list-sort-dir {
padding: (vars.$xs + 2) vars.$s;
cursor: pointer;
}
.list-sort-dir {
@@ -252,6 +254,11 @@ $loadingSize: 10px;
transform: rotate(180deg);
}
}
.list-sort-toggle {
display: block;
width: 100%;
text-align: start;
}
}
.import-item {

View File

@@ -3,8 +3,8 @@
{{ method_field('patch') }}
<input type="hidden" name="_return" value="{{ url()->current() }}">
@if(setting()->getForCurrentUser('dark-mode-enabled'))
<button class="{{ $classes ?? '' }}"><span>@icon('light-mode')</span><span>{{ trans('common.light_mode') }}</span></button>
<button class="{{ $classes ?? '' }}" role="{{ $butonRole ?? '' }}"><span>@icon('light-mode')</span><span>{{ trans('common.light_mode') }}</span></button>
@else
<button class="{{ $classes ?? '' }}"><span>@icon('dark-mode')</span><span>{{ trans('common.dark_mode') }}</span></button>
<button class="{{ $classes ?? '' }}" role="{{ $butonRole ?? '' }}"><span>@icon('dark-mode')</span><span>{{ trans('common.dark_mode') }}</span></button>
@endif
</form>

View File

@@ -29,10 +29,14 @@
<div class="list-sort">
<div component="dropdown" class="list-sort-type dropdown-container">
<div refs="dropdown@toggle" aria-haspopup="true" aria-expanded="false" aria-label="{{ trans('common.sort_options') }}" tabindex="0">{{ $options[$selectedSort] }}</div>
<ul refs="dropdown@menu list-sort-control@menu" class="dropdown-menu">
<button refs="dropdown@toggle"
aria-haspopup="true"
aria-expanded="false"
aria-label="{{ trans('common.sort_options') }}"
class="list-sort-toggle">{{ $options[$selectedSort] }}</button>
<ul refs="dropdown@menu list-sort-control@menu" class="dropdown-menu" role="menu">
@foreach($options as $key => $label)
<li @if($key === $selectedSort) class="active" @endif><a href="#" data-sort-value="{{$key}}" class="text-item">{{ $label }}</a></li>
<li @if($key === $selectedSort) class="active" @endif><a href="#" data-sort-value="{{$key}}" role="menuitem" class="text-item">{{ $label }}</a></li>
@endforeach
</ul>
</div>

View File

@@ -2,11 +2,14 @@
option:dropdown-search:url="/search/entity/siblings?entity_type={{$entity->getType()}}&entity_id={{ $entity->id }}"
option:dropdown-search:local-search-selector=".entity-list-item"
class="dropdown-search">
<div class="dropdown-search-toggle-breadcrumb" refs="dropdown@toggle"
aria-haspopup="true" aria-expanded="false" tabindex="0">
<div class="separator">@icon('chevron-right')</div>
</div>
<div refs="dropdown@menu" class="dropdown-search-dropdown card" role="menu">
<button class="dropdown-search-toggle-breadcrumb"
refs="dropdown@toggle"
aria-haspopup="true"
aria-expanded="false"
title="{{ trans('entities.breadcrumb_siblings_for_' . $entity->getType()) }}">
<div role="presentation" class="separator">@icon('chevron-right')</div>
</button>
<div refs="dropdown@menu" class="dropdown-search-dropdown card">
<div class="dropdown-search-search">
@icon('search')
<input refs="dropdown-search@searchInput"
@@ -18,6 +21,6 @@
<div refs="dropdown-search@loading">
@include('common.loading-icon')
</div>
<div refs="dropdown-search@listContainer" class="dropdown-search-list px-m" tabindex="-1"></div>
<div refs="dropdown-search@listContainer" class="dropdown-search-list px-m" tabindex="-1" role="list"></div>
</div>
</div>

View File

@@ -2,23 +2,22 @@
class="dropdown-container"
id="export-menu">
<div refs="dropdown@toggle"
class="icon-list-item"
<button refs="dropdown@toggle"
class="icon-list-item text-link"
aria-haspopup="true"
aria-expanded="false"
aria-label="{{ trans('entities.export') }}"
data-shortcut="export"
tabindex="0">
data-shortcut="export">
<span>@icon('export')</span>
<span>{{ trans('entities.export') }}</span>
</div>
</button>
<ul refs="dropdown@menu" class="wide dropdown-menu" role="menu">
<li><a href="{{ $entity->getUrl('/export/html') }}" target="_blank" class="label-item"><span>{{ trans('entities.export_html') }}</span><span>.html</span></a></li>
<li><a href="{{ $entity->getUrl('/export/pdf') }}" target="_blank" class="label-item"><span>{{ trans('entities.export_pdf') }}</span><span>.pdf</span></a></li>
<li><a href="{{ $entity->getUrl('/export/plaintext') }}" target="_blank" class="label-item"><span>{{ trans('entities.export_text') }}</span><span>.txt</span></a></li>
<li><a href="{{ $entity->getUrl('/export/markdown') }}" target="_blank" class="label-item"><span>{{ trans('entities.export_md') }}</span><span>.md</span></a></li>
<li><a href="{{ $entity->getUrl('/export/zip') }}" target="_blank" class="label-item"><span>{{ trans('entities.export_zip') }}</span><span>.zip</span></a></li>
<li><a href="{{ $entity->getUrl('/export/html') }}" target="_blank" role="menuitem" class="label-item"><span>{{ trans('entities.export_html') }}</span><span>.html</span></a></li>
<li><a href="{{ $entity->getUrl('/export/pdf') }}" target="_blank" role="menuitem" class="label-item"><span>{{ trans('entities.export_pdf') }}</span><span>.pdf</span></a></li>
<li><a href="{{ $entity->getUrl('/export/plaintext') }}" target="_blank" role="menuitem" class="label-item"><span>{{ trans('entities.export_text') }}</span><span>.txt</span></a></li>
<li><a href="{{ $entity->getUrl('/export/markdown') }}" target="_blank" role="menuitem" class="label-item"><span>{{ trans('entities.export_md') }}</span><span>.md</span></a></li>
<li><a href="{{ $entity->getUrl('/export/zip') }}" target="_blank" role="menuitem" class="label-item"><span>{{ trans('entities.export_zip') }}</span><span>.zip</span></a></li>
</ul>
</div>

View File

@@ -1,5 +1,8 @@
<?php $type = $entity->getType(); ?>
<a href="{{ $entity->getUrl() }}" class="{{$type}} {{$type === 'page' && $entity->draft ? 'draft' : ''}} {{$classes ?? ''}} entity-list-item" data-entity-type="{{$type}}" data-entity-id="{{$entity->id}}">
<a href="{{ $entity->getUrl() }}"
class="{{$type}} {{$type === 'page' && $entity->draft ? 'draft' : ''}} {{$classes ?? ''}} entity-list-item"
data-entity-type="{{$type}}"
data-entity-id="{{$entity->id}}">
<span role="presentation" class="icon text-{{$type}}">@icon($type)</span>
<div class="content">
<h4 class="entity-list-item-name break-text">{{ $entity->preview_name ?? $entity->name }}</h4>

View File

@@ -1,6 +1,11 @@
<div component="dropdown"
class="dropdown-container block my-xxs">
<a refs="dropdown@toggle" href="#" class="entity-meta-item my-none">
<a refs="dropdown@toggle"
aria-haspopup="menu"
aria-expanded="false"
role="button"
href="#"
class="entity-meta-item my-none">
@icon(($ignoring ? 'watch-ignore' : 'watch'))
<span>{{ $label }}</span>
</a>
@@ -10,10 +15,10 @@
<input type="hidden" name="type" value="{{ $entity->getMorphClass() }}">
<input type="hidden" name="id" value="{{ $entity->id }}">
<ul refs="dropdown@menu" class="dropdown-menu xl-limited anchor-left pb-none">
<ul refs="dropdown@menu" class="dropdown-menu xl-limited anchor-left pb-none" role="menu">
@foreach(\BookStack\Activity\WatchLevels::allSuitedFor($entity) as $option => $value)
<li>
<button name="level" value="{{ $option }}" class="icon-item">
<button name="level" value="{{ $option }}" class="icon-item" role="menuitem">
@if($watchLevel === $option)
<span class="text-pos pt-m"
title="{{ trans('common.status_active') }}">@icon('check-circle')</span>
@@ -32,12 +37,13 @@
</div>
</button>
</li>
<li>
<li role="presentation">
<hr class="my-none">
</li>
@endforeach
<li>
<a href="{{ url('/my-account/notifications') }}"
role="menuitem"
target="_blank"
class="text-item text-muted text-small break-text">{{ trans('entities.watch_change_default') }}</a>
</li>

View File

@@ -1,33 +1,43 @@
<div class="dropdown-container" component="dropdown" option:dropdown:bubble-escapes="true">
<span class="user-name py-s hide-under-l" refs="dropdown@toggle"
aria-haspopup="true" aria-expanded="false" aria-label="{{ trans('common.profile_menu') }}" tabindex="0">
<button class="user-name py-s hide-under-l" refs="dropdown@toggle"
aria-haspopup="menu"
aria-expanded="false"
aria-label="{{ trans('common.profile_menu') }}">
<img class="avatar" src="{{$user->getAvatar(30)}}" alt="{{ $user->name }}">
<span class="name">{{ $user->getShortName(9) }}</span> @icon('caret-down')
</span>
<ul refs="dropdown@menu" class="dropdown-menu" role="menu">
</button>
<ul refs="dropdown@menu" class="dropdown-menu" role="menu" aria-label="{{ trans('common.profile_menu') }}">
<li>
<a href="{{ url('/favourites') }}" data-shortcut="favourites_view" class="icon-item">
<a href="{{ url('/favourites') }}"
role="menuitem"
data-shortcut="favourites_view"
class="icon-item">
@icon('star')
<div>{{ trans('entities.my_favourites') }}</div>
</a>
</li>
<li>
<a href="{{ $user->getProfileUrl() }}" data-shortcut="profile_view" class="icon-item">
<a href="{{ $user->getProfileUrl() }}"
role="menuitem"
data-shortcut="profile_view"
class="icon-item">
@icon('user')
<div>{{ trans('common.view_profile') }}</div>
</a>
</li>
<li>
<a href="{{ url('/my-account') }}" class="icon-item">
<a href="{{ url('/my-account') }}"
role="menuitem"
class="icon-item">
@icon('user-preferences')
<div>{{ trans('preferences.my_account') }}</div>
</a>
</li>
<li><hr></li>
<li role="presentation"><hr></li>
<li>
@include('common.dark-mode-toggle', ['classes' => 'icon-item'])
@include('common.dark-mode-toggle', ['classes' => 'icon-item', 'buttonRole' => 'menuitem'])
</li>
<li><hr></li>
<li role="presentation"><hr></li>
<li>
@php
$logoutPath = match (config('auth.method')) {
@@ -38,7 +48,7 @@
@endphp
<form action="{{ url($logoutPath) }}" method="post">
{{ csrf_field() }}
<button class="icon-item" data-shortcut="logout">
<button class="icon-item" role="menuitem" data-shortcut="logout">
@icon('logout')
<div>{{ trans('auth.logout') }}</div>
</button>

View File

@@ -13,7 +13,7 @@
</button>
<ul refs="dropdown@menu code-editor@historyList" class="dropdown-menu"></ul>
</div>
<button class="popup-header-close" refs="popup@hide">@icon('close')</button>
<button class="popup-header-close" refs="popup@hide" title="{{ trans('common.close') }}">@icon('close')</button>
</div>
<div class="code-editor-body-wrap flex-container-row flex-fill">
@@ -34,8 +34,8 @@
@foreach($languages as $language)
<div class="relative">
<button type="button" refs="code-editor@language-button" data-favourite="false" data-lang="{{ strtolower($language) }}">{{ $language }}</button>
<button class="lang-option-favorite-toggle action-favourite" data-title="{{ trans('common.favourite') }}">@icon('star-outline')</button>
<button class="lang-option-favorite-toggle action-unfavourite" data-title="{{ trans('common.unfavourite') }}">@icon('star')</button>
<button class="lang-option-favorite-toggle action-favourite" title="{{ trans('common.favourite') }}">@icon('star-outline')</button>
<button class="lang-option-favorite-toggle action-unfavourite" title="{{ trans('common.unfavourite') }}">@icon('star')</button>
</div>
@endforeach
</div>

View File

@@ -14,7 +14,7 @@
<div class="flex-container-row items-center justify-center">
<button type="button"
refs="dropdown@toggle"
aria-haspopup="true"
aria-haspopup="menu"
aria-expanded="false"
title="{{ trans('entities.pages_edit_draft_options') }}"
class="text-link icon-list-item">
@@ -25,38 +25,38 @@
</div>
<ul refs="dropdown@menu" class="dropdown-menu" role="menu">
<li>
<button refs="page-editor@saveDraft" type="button" class="text-pos icon-item">
<button refs="page-editor@saveDraft" type="button" role="menuitem" class="text-pos icon-item">
@icon('save')
<div>{{ trans('entities.pages_edit_save_draft') }}</div>
</button>
</li>
@if($isDraft)
<li>
<a href="{{ $model->getUrl('/delete') }}" class="text-neg icon-item">
<a href="{{ $model->getUrl('/delete') }}" role="menuitem" class="text-neg icon-item">
@icon('delete')
{{ trans('entities.pages_edit_delete_draft') }}
</a>
</li>
@endif
<li refs="page-editor@discard-draft-wrap" {{ $isDraftRevision ? '' : 'hidden' }}>
<button refs="page-editor@discard-draft" type="button" class="text-warn icon-item">
<button refs="page-editor@discard-draft" type="button" role="menuitem" class="text-warn icon-item">
@icon('cancel')
<div>{{ trans('entities.pages_edit_discard_draft') }}</div>
</button>
</li>
<li refs="page-editor@delete-draft-wrap" {{ $isDraftRevision ? '' : 'hidden' }}>
<button refs="page-editor@delete-draft" type="button" class="text-neg icon-item">
<button refs="page-editor@delete-draft" type="button" role="menuitem" class="text-neg icon-item">
@icon('delete')
<div>{{ trans('entities.pages_edit_delete_draft') }}</div>
</button>
</li>
@if(userCan('editor-change'))
<li>
<li role="presentation">
<hr>
</li>
<li>
@if($editor !== \BookStack\Entities\Tools\PageEditorType::Markdown)
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=markdown-clean" refs="page-editor@changeEditor" class="icon-item">
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=markdown-clean" refs="page-editor@changeEditor" role="menuitem" class="icon-item">
@icon('swap-horizontal')
<div>
{{ trans('entities.pages_edit_switch_to_markdown') }}
@@ -64,7 +64,7 @@
<small>{{ trans('entities.pages_edit_switch_to_markdown_clean') }}</small>
</div>
</a>
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=markdown-stable" refs="page-editor@changeEditor" class="icon-item">
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=markdown-stable" refs="page-editor@changeEditor" role="menuitem" class="icon-item">
@icon('swap-horizontal')
<div>
{{ trans('entities.pages_edit_switch_to_markdown') }}
@@ -74,13 +74,13 @@
</a>
@endif
@if($editor !== \BookStack\Entities\Tools\PageEditorType::WysiwygTinymce)
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=wysiwyg" refs="page-editor@changeEditor" class="icon-item">
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=wysiwyg" refs="page-editor@changeEditor" role="menuitem" class="icon-item">
@icon('swap-horizontal')
<div>{{ trans('entities.pages_edit_switch_to_wysiwyg') }}</div>
</a>
@endif
@if($editor !== \BookStack\Entities\Tools\PageEditorType::WysiwygLexical)
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=wysiwyg2024" refs="page-editor@changeEditor" class="icon-item">
<a href="{{ $model->getUrl($isDraft ? '' : '/edit') }}?editor=wysiwyg2024" refs="page-editor@changeEditor" role="menuitem" class="icon-item">
@icon('swap-horizontal')
<div>
{{ trans('entities.pages_edit_switch_to_new_wysiwyg') }}
@@ -112,6 +112,7 @@
id="summary-input"
rows="2"
maxlength="180"
title="{{ trans('entities.pages_edit_enter_changelog') }}"
placeholder="{{ trans('entities.pages_edit_enter_changelog') }}"
></textarea>
<small refs="page-editor@changelogCounter" class="text-muted mt-xs">0 / 180</small>

View File

@@ -38,10 +38,14 @@
<div class="flex px-m py-xs min-width-s"><strong class="hide-over-l">{{ trans('settings.recycle_bin_deleted_at') }}:<br></strong>{{ $deletion->created_at }}</div>
<div class="flex px-m py-xs text-m-right min-width-s">
<div component="dropdown" class="dropdown-container">
<button type="button" refs="dropdown@toggle" class="button outline">{{ trans('common.actions') }}</button>
<ul refs="dropdown@menu" class="dropdown-menu">
<li><a class="text-item" href="{{ $deletion->getUrl('/restore') }}">{{ trans('settings.recycle_bin_restore') }}</a></li>
<li><a class="text-item" href="{{ $deletion->getUrl('/destroy') }}">{{ trans('settings.recycle_bin_permanently_delete') }}</a></li>
<button type="button"
refs="dropdown@toggle"
aria-haspopup="menu"
aria-expanded="false"
class="button outline">{{ trans('common.actions') }}</button>
<ul refs="dropdown@menu" class="dropdown-menu" role="menu">
<li><a class="text-item" href="{{ $deletion->getUrl('/restore') }}" role="menuitem">{{ trans('settings.recycle_bin_restore') }}</a></li>
<li><a class="text-item" href="{{ $deletion->getUrl('/destroy') }}" role="menuitem">{{ trans('settings.recycle_bin_permanently_delete') }}</a></li>
</ul>
</div>
</div>

View File

@@ -24,6 +24,7 @@
<form method="get" action="{{ url("/settings/roles") }}">
<input type="text"
name="search"
title="{{ trans('common.search') }}"
placeholder="{{ trans('common.search') }}"
value="{{ $listOptions->getSearch() }}">
</form>

View File

@@ -22,6 +22,7 @@
<form method="get" action="{{ url("/settings/users") }}">
<input type="text"
name="search"
title="{{ trans('settings.users_search') }}"
placeholder="{{ trans('settings.users_search') }}"
value="{{ $listOptions->getSearch() }}">
</form>