From 880d4f35dab43378c8b3b8ec6e7bb8e30ea7f07e Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sat, 2 Feb 2019 15:49:57 +0000 Subject: [PATCH] Started the migration of the setting views --- resources/assets/icons/check.svg | 1 + .../assets/js/components/toggle-switch.js | 8 +- resources/assets/sass/_buttons.scss | 7 +- resources/assets/sass/_forms.scss | 88 ++--- resources/assets/sass/_grid.scss | 10 +- resources/assets/sass/_lists.scss | 15 + resources/assets/sass/_tables.scss | 9 +- resources/assets/sass/_text.scss | 4 + resources/lang/en/settings.php | 4 +- .../views/components/toggle-switch.blade.php | 8 +- .../views/form/entity-permissions.blade.php | 2 + .../views/form/restriction-checkbox.blade.php | 2 +- resources/views/settings/index.blade.php | 245 +++++++++----- .../views/settings/maintenance.blade.php | 69 ++-- resources/views/settings/navbar.blade.php | 10 +- .../views/settings/roles/create.blade.php | 19 +- .../views/settings/roles/delete.blade.php | 48 +-- resources/views/settings/roles/edit.blade.php | 21 +- resources/views/settings/roles/form.blade.php | 315 +++++++++--------- .../views/settings/roles/index.blade.php | 52 +-- resources/views/users/create.blade.php | 2 + resources/views/users/edit.blade.php | 2 + resources/views/users/index.blade.php | 114 +++---- resources/views/users/profile.blade.php | 140 ++++---- 24 files changed, 666 insertions(+), 529 deletions(-) create mode 100644 resources/assets/icons/check.svg diff --git a/resources/assets/icons/check.svg b/resources/assets/icons/check.svg new file mode 100644 index 000000000..93607ef7e --- /dev/null +++ b/resources/assets/icons/check.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.86 4.118l-9.733 9.609-3.951-3.995-2.98 2.966 6.93 7.184L21.805 7.217z"/></svg> \ No newline at end of file diff --git a/resources/assets/js/components/toggle-switch.js b/resources/assets/js/components/toggle-switch.js index 957a41642..3be67d5dc 100644 --- a/resources/assets/js/components/toggle-switch.js +++ b/resources/assets/js/components/toggle-switch.js @@ -3,15 +3,15 @@ class ToggleSwitch { constructor(elem) { this.elem = elem; - this.input = elem.querySelector('input'); + this.input = elem.querySelector('input[type=hidden]'); + this.checkbox = elem.querySelector('input[type=checkbox]'); - this.elem.onclick = this.onClick.bind(this); + this.checkbox.addEventListener('change', this.onClick.bind(this)); } onClick(event) { - let checked = this.input.value !== 'true'; + let checked = this.checkbox.checked; this.input.value = checked ? 'true' : 'false'; - checked ? this.elem.classList.add('active') : this.elem.classList.remove('active'); } } diff --git a/resources/assets/sass/_buttons.scss b/resources/assets/sass/_buttons.scss index 2c20c3f41..49615fc9d 100644 --- a/resources/assets/sass/_buttons.scss +++ b/resources/assets/sass/_buttons.scss @@ -31,7 +31,8 @@ $button-border-radius: 2px; font-size: $fs-m; line-height: 1.4em; padding: $-xs*1.3 $-m; - margin: $-xs $-xs $-xs 0; + margin-top: $-xs; + margin-bottom: $-xs; display: inline-block; border: none; font-weight: 400; @@ -62,6 +63,10 @@ $button-border-radius: 2px; } } +.button + .button { + margin-left: $-s; +} + .button.outline { background-color: transparent; color: #888; diff --git a/resources/assets/sass/_forms.scss b/resources/assets/sass/_forms.scss index d955b7efc..2c612f533 100644 --- a/resources/assets/sass/_forms.scss +++ b/resources/assets/sass/_forms.scss @@ -139,64 +139,68 @@ input[type=date] { } .toggle-switch { - display: inline-block; - background-color: #BBB; - width: 36px; - height: 14px; - border-radius: 7px; - position: relative; - transition: all ease-in-out 120ms; - cursor: pointer; user-select: none; - &:after { - content: ''; - display: block; - position: relative; - left: 0; - margin-top: -3px; - width: 20px; - height: 20px; - border-radius: 50%; - background-color: #fafafa; - border: 1px solid #CCC; - box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12); - transition: all ease-in-out 120ms; - } - &.active { - background-color: rgba($positive, 0.4); - &:after { - left: 16px; - background-color: $positive; - border: darken($positive, 20%); + display: inline-grid; + grid-template-columns: (16px + $-s) 1fr; + align-items: center; + margin: $-m 0; + .custom-checkbox { + width: 16px; + height: 16px; + border-radius: 2px; + display: inline-block; + border: 2px solid #999; + overflow: hidden; + fill: #888; + .svg-icon { + width: 100%; + height: 100%; + margin: 0; + bottom: auto; + top: -1.5px; + left: 0; + transition: transform ease-in-out 120ms; + transform: scale(0); + transform-origin: center center; } } -} -.toggle-switch-checkbox { - display: none; -} -input:checked + .toggle-switch { - background-color: rgba($positive, 0.4); - &:after { - left: 16px; - background-color: $positive; - border: darken($positive, 20%); + input[type=checkbox] { + display: none; + } + input[type=checkbox]:checked + .custom-checkbox .svg-icon { + transform: scale(1); + } + .custom-checkbox:hover { + background-color: rgba(0, 0, 0, 0.05); } } .form-group { margin-bottom: $-s; - textarea { - display: block; - width: 100%; - min-height: 64px; +} + +.setting-list > div { + border-bottom: 1px solid #DDD; + padding: $-xl 0; + &:last-child { + border-bottom: none; } } +.setting-list-label { + color: #444; + font-size: 1rem; +} +.setting-list-label + p.small { + margin-bottom: 0; +} .simple-code-input { background-color: #F8F8F8; font-family: monospace; font-size: 12px; min-height: 100px; + display: block; + width: 100%; } .form-group { diff --git a/resources/assets/sass/_grid.scss b/resources/assets/sass/_grid.scss index dfe02fab1..1bcfefe64 100644 --- a/resources/assets/sass/_grid.scss +++ b/resources/assets/sass/_grid.scss @@ -60,6 +60,9 @@ body.flexbox { &.auto-height { min-height: 0; } + &.fill-width { + width: 100%; + } } .tri-layout-container { @@ -211,7 +214,6 @@ div[class^="col-"] img { &.large-gap { grid-column-gap: $-xl; grid-row-gap: $-xl; - justify-items: start; } } @@ -272,6 +274,12 @@ div[class^="col-"] img { .grid.left-focus, .grid.right-focus { grid-template-columns: 1fr; } + .grid.right-focus.reverse-collapse > *:nth-child(2) { + order: 0; + } + .grid.right-focus.reverse-collapse > *:nth-child(1) { + order: 1; + } } @include smaller-than($s) { diff --git a/resources/assets/sass/_lists.scss b/resources/assets/sass/_lists.scss index 9bae934d8..3392d831c 100644 --- a/resources/assets/sass/_lists.scss +++ b/resources/assets/sass/_lists.scss @@ -396,3 +396,18 @@ ul.pagination { padding: $-m 0; } +.active-link-list { + a { + display: inline-block; + padding: $-s; + } + a:not(.active) { + color: #444; + fill: #444; + } + a:hover { + background-color: rgba(0, 0, 0, 0.05); + border-radius: 3px; + text-decoration: none; + } +} \ No newline at end of file diff --git a/resources/assets/sass/_tables.scss b/resources/assets/sass/_tables.scss index ec24e2fa6..a1a2fef0a 100644 --- a/resources/assets/sass/_tables.scss +++ b/resources/assets/sass/_tables.scss @@ -19,13 +19,13 @@ table { table.table { width: 100%; - tr { - border-bottom: 1px solid #DDD; + tr td, tr th { + border-bottom: 1px solid rgba(0, 0, 0, 0.05); } th, td { text-align: left; border: none; - padding: $-xs $-xs; + padding: $-s $-s; vertical-align: middle; margin: 0; } @@ -44,6 +44,9 @@ table.table { td.actions { overflow: visible; } + a { + display: inline-block; + } } table.no-style { diff --git a/resources/assets/sass/_text.scss b/resources/assets/sass/_text.scss index 43b3e5898..683c8077a 100644 --- a/resources/assets/sass/_text.scss +++ b/resources/assets/sass/_text.scss @@ -83,6 +83,10 @@ h5, h6 { font-size: 2rem; } +h2.list-heading { + font-size: 1.333rem; +} + /* * Link styling */ diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index ef947829d..c5dba1dd5 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -14,8 +14,8 @@ return [ // App Settings 'app_settings' => 'App Settings', 'app_name' => 'Application name', - 'app_name_desc' => 'This name is shown in the header and any emails.', - 'app_name_header' => 'Show Application name in header?', + 'app_name_desc' => 'This name is shown in the header and in any system-sent emails.', + 'app_name_header' => 'Show name in header', 'app_public_viewing' => 'Allow public viewing?', 'app_secure_images' => 'Enable higher security image uploads?', 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', diff --git a/resources/views/components/toggle-switch.blade.php b/resources/views/components/toggle-switch.blade.php index c5a30a60f..c6d78f1b9 100644 --- a/resources/views/components/toggle-switch.blade.php +++ b/resources/views/components/toggle-switch.blade.php @@ -1,4 +1,6 @@ -<div toggle-switch="{{$name}}" class="toggle-switch @if($value) active @endif"> +<label toggle-switch="{{$name}}" class="toggle-switch"> <input type="hidden" name="{{$name}}" value="{{$value?'true':'false'}}"/> - <div class="switch-handle"></div> -</div> \ No newline at end of file + <input type="checkbox" @if($value) checked="checked" @endif> + <span class="custom-checkbox ">@icon('check')</span> + <span class="label">{{ $label ?? '' }}</span> {{-- TODO - remove default operataor backup --}} +</label> \ No newline at end of file diff --git a/resources/views/form/entity-permissions.blade.php b/resources/views/form/entity-permissions.blade.php index 9dce0b59e..92af4d592 100644 --- a/resources/views/form/entity-permissions.blade.php +++ b/resources/views/form/entity-permissions.blade.php @@ -8,6 +8,8 @@ @include('form/checkbox', ['name' => 'restricted', 'label' => trans('entities.permissions_enable')]) </div> + {{--TODO - Add global and role "Select All" options--}} + <table class="table"> <tr> <th>{{ trans('common.role') }}</th> diff --git a/resources/views/form/restriction-checkbox.blade.php b/resources/views/form/restriction-checkbox.blade.php index 5a8662b56..aab5a0729 100644 --- a/resources/views/form/restriction-checkbox.blade.php +++ b/resources/views/form/restriction-checkbox.blade.php @@ -1,4 +1,4 @@ - +{{--TODO - Make custom--}} <label> <input value="true" id="{{$name}}[{{$role->id}}][{{$action}}]" type="checkbox" name="{{$name}}[{{$role->id}}][{{$action}}]" @if(isset($model) && $model->hasRestriction($role->id, $action)) checked="checked" @endif> diff --git a/resources/views/settings/index.blade.php b/resources/views/settings/index.blade.php index 26b81899e..b72e462bf 100644 --- a/resources/views/settings/index.blade.php +++ b/resources/views/settings/index.blade.php @@ -1,85 +1,138 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'settings']) -@stop +{{--TODO - Reorder--}} @section('body') -<div class="container small"> + <div class="container small"> - <div class="text-right text-muted container"> - <br> - BookStack @if(strpos($version, 'v') !== 0) version @endif {{ $version }} - </div> - <div class="card"> - <h3>@icon('settings') {{ trans('settings.app_settings') }}</h3> - <div class="body"> + <div class="grid left-focus v-center"> + <div class="py-m"> + @include('settings/navbar', ['selected' => 'settings']) + </div> + <div class="text-right mb-l px-m"> + <br> + BookStack @if(strpos($version, 'v') !== 0) version @endif {{ $version }} + </div> + </div> + + <div class="card content-wrap"> + <h2 class="list-heading">{{ trans('settings.app_settings') }}</h2> <form action="{{ baseUrl("/settings") }}" method="POST"> - {!! csrf_field() !!} - <div class="row"> + {!! csrf_field() !!} - <div class="col-md-6"> - <div class="form-group"> - <label for="setting-app-name">{{ trans('settings.app_name') }}</label> + <div class="setting-list"> + + <div class="grid half large-gap"> + <div> + <label for="setting-app-name" class="setting-list-label">{{ trans('settings.app_name') }}</label> <p class="small">{{ trans('settings.app_name_desc') }}</p> + </div> + <div> <input type="text" value="{{ setting('app-name', 'BookStack') }}" name="setting-app-name" id="setting-app-name"> + @include('components.toggle-switch', [ + 'name' => 'setting-app-name-header', + 'value' => setting('app-name-header'), + 'label' => trans('settings.app_name_header'), + ]) </div> - <div class="form-group"> - <label>{{ trans('settings.app_name_header') }}</label> - @include('components.toggle-switch', ['name' => 'setting-app-name-header', 'value' => setting('app-name-header')]) + </div> + + <div class="grid half large-gap"> + <div> + <label for="setting-app-public" class="setting-list-label">{{ trans('settings.app_public_viewing') }}</label> + {{--<p class="small">{{ trans('settings.app_name_desc') }}</p>--}} </div> - <div class="form-group"> - <label for="setting-app-public">{{ trans('settings.app_public_viewing') }}</label> - @include('components.toggle-switch', ['name' => 'setting-app-public', 'value' => setting('app-public')]) + <div> + @include('components.toggle-switch', [ + 'name' => 'setting-app-public', + 'value' => setting('app-public'), + 'label' => trans('settings.app_public_viewing'), + ]) + {{--TODO - Text --}} </div> - <div class="form-group"> - <label>{{ trans('settings.app_secure_images') }}</label> + </div> + + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.app_secure_images') }}</label> <p class="small">{{ trans('settings.app_secure_images_desc') }}</p> - @include('components.toggle-switch', ['name' => 'setting-app-secure-images', 'value' => setting('app-secure-images')]) </div> - <div class="form-group"> - <label>{{ trans('settings.app_disable_comments') }}</label> + <div> + @include('components.toggle-switch', [ + 'name' => 'setting-app-secure-images', + 'value' => setting('app-secure-images'), + 'label' => trans('settings.app_secure_images'), + ]) + {{--TODO - Text --}} + </div> + </div> + + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.app_disable_comments') }}</label> <p class="small">{{ trans('settings.app_disable_comments_desc') }}</p> - @include('components.toggle-switch', ['name' => 'setting-app-disable-comments', 'value' => setting('app-disable-comments')]) </div> - <div class="form-group"> - <label for="setting-app-editor">{{ trans('settings.app_editor') }}</label> + <div> + @include('components.toggle-switch', [ + 'name' => 'setting-app-disable-comments', + 'value' => setting('app-disable-comments'), + 'label' => trans('settings.app_disable_comments'), + ]) + {{--TODO - Text --}} + </div> + </div> + + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.app_editor') }}</label> <p class="small">{{ trans('settings.app_editor_desc') }}</p> + </div> + <div> <select name="setting-app-editor" id="setting-app-editor"> <option @if(setting('app-editor') === 'wysiwyg') selected @endif value="wysiwyg">WYSIWYG</option> <option @if(setting('app-editor') === 'markdown') selected @endif value="markdown">Markdown</option> </select> + {{--TODO - Text --}} </div> </div> - <div class="col-md-6"> - <div class="form-group" id="logo-control"> - <label for="setting-app-logo">{{ trans('settings.app_logo') }}</label> - <p class="small">{!! trans('settings.app_logo_desc') !!}</p> - - @include('components.image-picker', [ - 'resizeHeight' => '43', - 'resizeWidth' => '200', - 'showRemove' => true, - 'defaultImage' => baseUrl('/logo.png'), - 'currentImage' => setting('app-logo'), - 'name' => 'setting-app-logo', - 'imageClass' => 'logo-image', - 'currentId' => false - ]) - + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.app_logo') }}</label> + <p class="small">{{ trans('settings.app_logo_desc') }}</p> </div> - <div class="form-group" id="color-control"> - <label for="setting-app-color">{{ trans('settings.app_primary_color') }}</label> + <div> + @include('components.image-picker', [ + 'resizeHeight' => '43', + 'resizeWidth' => '200', + 'showRemove' => true, + 'defaultImage' => baseUrl('/logo.png'), + 'currentImage' => setting('app-logo'), + 'name' => 'setting-app-logo', + 'imageClass' => 'logo-image', + 'currentId' => false + ]) + </div> + </div> + + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.app_primary_color') }}</label> <p class="small">{!! trans('settings.app_primary_color_desc') !!}</p> + </div> + <div> <input type="text" value="{{ setting('app-color') }}" name="setting-app-color" id="setting-app-color" placeholder="#0288D1"> <input type="hidden" value="{{ setting('app-color-light') }}" name="setting-app-color-light" id="setting-app-color-light"> </div> - <div homepage-control class="form-group" id="homepage-control"> - <label for="setting-app-homepage">{{ trans('settings.app_homepage') }}</label> - <p class="small">{{ trans('settings.app_homepage_desc') }}</p> + </div> + <div homepage-control id="homepage-control" class="grid half large-gap"> + <div> + <label for="setting-app-homepage" class="setting-list-label">{{ trans('settings.app_homepage') }}</label> + <p class="small">{{ trans('settings.app_homepage_desc') }}</p> + </div> + <div> <select name="setting-app-homepage-type" id="setting-app-homepage-type"> <option @if(setting('app-homepage-type') === 'default') selected @endif value="default">{{ trans('common.default') }}</option> <option @if(setting('app-homepage-type') === 'books') selected @endif value="books">{{ trans('entities.books') }}</option> @@ -87,45 +140,56 @@ <option @if(setting('app-homepage-type') === 'page') selected @endif value="page">{{ trans('entities.pages_specific') }}</option> </select> - <br><br> - - <div page-picker-container style="display: none;"> + <div page-picker-container style="display: none;" class="mt-m"> @include('components.page-picker', ['name' => 'setting-app-homepage', 'placeholder' => trans('settings.app_homepage_select'), 'value' => setting('app-homepage')]) </div> </div> </div> - </div> - <div class="form-group"> - <label for="setting-app-custom-head">{{ trans('settings.app_custom_html') }}</label> - <p class="small">{{ trans('settings.app_custom_html_desc') }}</p> - <textarea class="simple-code-input" name="setting-app-custom-head" id="setting-app-custom-head">{{ setting('app-custom-head', '') }}</textarea> + <div> + <label for="setting-app-custom-head" class="setting-list-label">{{ trans('settings.app_custom_html') }}</label> + <p class="small">{{ trans('settings.app_custom_html_desc') }}</p> + <textarea name="setting-app-custom-head" id="setting-app-custom-head" class="simple-code-input mt-m">{{ setting('app-custom-head', '') }}</textarea> + </div> + + </div> <div class="form-group text-right"> - <button type="submit" class="button pos">{{ trans('settings.settings_save') }}</button> + <button type="submit" class="button primary">{{ trans('settings.settings_save') }}</button> </div> </form> </div> - </div> - <p> </p> - <div class="card"> - <h3>@icon('users-add') {{ trans('settings.reg_settings') }}</h3> - <div class="body"> + <div class="card content-wrap"> + <h2 class="list-heading">{{ trans('settings.reg_settings') }}</h2> <form action="{{ baseUrl("/settings") }}" method="POST"> {!! csrf_field() !!} - <div class="row"> - <div class="col-md-6"> - <div class="form-group"> - <label for="setting-registration-enabled">{{ trans('settings.reg_allow') }}</label> - @include('components.toggle-switch', ['name' => 'setting-registration-enabled', 'value' => setting('registration-enabled')]) + <div class="setting-list"> + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.reg_allow') }}</label> + {{--<p class="small">{!! trans('settings.app_primary_color_desc') !!}</p>--}}{{-- TODO--}} </div> - <div class="form-group"> - <label for="setting-registration-role">{{ trans('settings.reg_default_role') }}</label> + <div> + @include('components.toggle-switch', [ + 'name' => 'setting-registration-enabled', + 'value' => setting('registration-enabled'), + 'label' => trans('settings.reg_allow') + ]) + {{--TODO - label --}} + </div> + </div> + + <div class="grid half large-gap"> + <div> + <label for="setting-registration-role" class="setting-list-label">{{ trans('settings.reg_default_role') }}</label> + {{--<p class="small">{!! trans('settings.app_primary_color_desc') !!}</p>--}}{{-- TODO--}} + </div> + <div> <select id="setting-registration-role" name="setting-registration-role" @if($errors->has('setting-registration-role')) class="neg" @endif> @foreach(\BookStack\Auth\Role::all() as $role) <option value="{{$role->id}}" data-role-name="{{ $role->name }}" @@ -136,37 +200,48 @@ @endforeach </select> </div> - <div class="form-group"> - <label for="setting-registration-confirmation">{{ trans('settings.reg_confirm_email') }}</label> + </div> + + <div class="grid half large-gap"> + <div> + <label class="setting-list-label">{{ trans('settings.reg_confirm_email') }}</label> <p class="small">{{ trans('settings.reg_confirm_email_desc') }}</p> - @include('components.toggle-switch', ['name' => 'setting-registration-confirmation', 'value' => setting('registration-confirmation')]) + </div> + <div> + @include('components.toggle-switch', [ + 'name' => 'setting-registration-confirmation', + 'value' => setting('registration-confirmation'), + 'label' => trans('settings.reg_confirm_email') + ]) + {{--TODO - label --}} </div> </div> - <div class="col-md-6"> - <div class="form-group"> - <label for="setting-registration-restrict">{{ trans('settings.reg_confirm_restrict_domain') }}</label> + + <div class="grid half large-gap"> + <div> + <label for="setting-registration-restrict" class="setting-list-label">{{ trans('settings.reg_confirm_restrict_domain') }}</label> <p class="small">{!! trans('settings.reg_confirm_restrict_domain_desc') !!}</p> + </div> + <div> <input type="text" id="setting-registration-restrict" name="setting-registration-restrict" placeholder="{{ trans('settings.reg_confirm_restrict_domain_placeholder') }}" value="{{ setting('registration-restrict', '') }}"> </div> </div> </div> <div class="form-group text-right"> - <button type="submit" class="button pos">{{ trans('settings.settings_save') }}</button> + <button type="submit" class="button primary">{{ trans('settings.settings_save') }}</button> </div> </form> </div> + </div> - -</div> - -@include('components.image-manager', ['imageType' => 'system']) -@include('components.entity-selector-popup', ['entityTypes' => 'page']) - + @include('components.image-manager', ['imageType' => 'system']) + @include('components.entity-selector-popup', ['entityTypes' => 'page']) @stop @section('scripts') + {{--TODO - Merge into JS--}} <script src="{{ baseUrl("/libs/jq-color-picker/tiny-color-picker.min.js?version=1.0.0") }}"></script> <script type="text/javascript"> $('#setting-app-color').colorPicker({ diff --git a/resources/views/settings/maintenance.blade.php b/resources/views/settings/maintenance.blade.php index abf793ade..6e408d1f4 100644 --- a/resources/views/settings/maintenance.blade.php +++ b/resources/views/settings/maintenance.blade.php @@ -1,46 +1,45 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'maintenance']) -@stop - @section('body') <div class="container small"> - <div class="text-right text-muted container"> - <br> - BookStack @if(strpos($version, 'v') !== 0) version @endif {{ $version }} + <div class="grid left-focus v-center"> + <div class="py-m"> + @include('settings/navbar', ['selected' => 'maintenance']) + </div> + <div class="text-right mb-l px-m"> + <br> + BookStack @if(strpos($version, 'v') !== 0) version @endif {{ $version }} + </div> </div> - <div class="card" id="image-cleanup"> - <h3>@icon('images') {{ trans('settings.maint_image_cleanup') }}</h3> - <div class="body"> - <div class="row"> - <div class="col-sm-6"> - <p class="small muted">{{ trans('settings.maint_image_cleanup_desc') }}</p> - </div> - <div class="col-sm-6"> - <form method="POST" action="{{ baseUrl('/settings/maintenance/cleanup-images') }}"> - {!! csrf_field() !!} - <input type="hidden" name="_method" value="DELETE"> - <div> - @if(session()->has('cleanup-images-warning')) - <p class="text neg"> - {{ session()->get('cleanup-images-warning') }} - </p> - <input type="hidden" name="ignore_revisions" value="{{ session()->getOldInput('ignore_revisions', 'false') }}"> - <input type="hidden" name="confirm" value="true"> - @else - <label> - <input type="checkbox" name="ignore_revisions" value="true"> - {{ trans('settings.maint_image_cleanup_ignore_revisions') }} - </label> - @endif - </div> - <button class="button outline">{{ trans('settings.maint_image_cleanup_run') }}</button> - </form> - </div> + <div id="image-cleanup" class="card content-wrap auto-height"> + <h2 class="list-heading">{{ trans('settings.maint_image_cleanup') }}</h2> + <div class="grid half large-gap"> + <div> + <p class="small muted">{{ trans('settings.maint_image_cleanup_desc') }}</p> + </div> + <div> + <form method="POST" action="{{ baseUrl('/settings/maintenance/cleanup-images') }}"> + {!! csrf_field() !!} + <input type="hidden" name="_method" value="DELETE"> + <div> + @if(session()->has('cleanup-images-warning')) + <p class="text neg"> + {{ session()->get('cleanup-images-warning') }} + </p> + <input type="hidden" name="ignore_revisions" value="{{ session()->getOldInput('ignore_revisions', 'false') }}"> + <input type="hidden" name="confirm" value="true"> + @else + <label> + <input type="checkbox" name="ignore_revisions" value="true"> + {{ trans('settings.maint_image_cleanup_ignore_revisions') }} + </label> + @endif + </div> + <button class="button outline">{{ trans('settings.maint_image_cleanup_run') }}</button> + </form> </div> </div> </div> diff --git a/resources/views/settings/navbar.blade.php b/resources/views/settings/navbar.blade.php index f9db96894..ddbaa3f2a 100644 --- a/resources/views/settings/navbar.blade.php +++ b/resources/views/settings/navbar.blade.php @@ -1,13 +1,13 @@ -<div class="col-md-12 setting-nav nav-tabs"> +<div class="active-link-list"> @if($currentUser->can('settings-manage')) - <a href="{{ baseUrl('/settings') }}" @if($selected == 'settings') class="selected text-button" @endif>@icon('settings'){{ trans('settings.settings') }}</a> - <a href="{{ baseUrl('/settings/maintenance') }}" @if($selected == 'maintenance') class="selected text-button" @endif>@icon('spanner'){{ trans('settings.maint') }}</a> + <a href="{{ baseUrl('/settings') }}" @if($selected == 'settings') class="active" @endif>@icon('settings'){{ trans('settings.settings') }}</a> + <a href="{{ baseUrl('/settings/maintenance') }}" @if($selected == 'maintenance') class="active" @endif>@icon('spanner'){{ trans('settings.maint') }}</a> @endif @if($currentUser->can('users-manage')) - <a href="{{ baseUrl('/settings/users') }}" @if($selected == 'users') class="selected text-button" @endif>@icon('users'){{ trans('settings.users') }}</a> + <a href="{{ baseUrl('/settings/users') }}" @if($selected == 'users') class="active" @endif>@icon('users'){{ trans('settings.users') }}</a> @endif @if($currentUser->can('user-roles-manage')) - <a href="{{ baseUrl('/settings/roles') }}" @if($selected == 'roles') class="selected text-button" @endif>@icon('lock-open'){{ trans('settings.roles') }}</a> + <a href="{{ baseUrl('/settings/roles') }}" @if($selected == 'roles') class="active" @endif>@icon('lock-open'){{ trans('settings.roles') }}</a> @endif </div> \ No newline at end of file diff --git a/resources/views/settings/roles/create.blade.php b/resources/views/settings/roles/create.blade.php index e61922da6..0c7ec9739 100644 --- a/resources/views/settings/roles/create.blade.php +++ b/resources/views/settings/roles/create.blade.php @@ -1,17 +1,16 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'roles']) -@stop - @section('body') - <form action="{{ baseUrl("/settings/roles/new") }}" method="POST"> - <div class="container"> - <div class="row"> - @include('settings/roles/form', ['title' => trans('settings.role_create'), 'icon' => 'plus']) - </div> + <div class="container"> + + <div class="py-m"> + @include('settings.navbar', ['selected' => 'roles']) </div> - </form> + + <form action="{{ baseUrl("/settings/roles/new") }}" method="POST"> + @include('settings.roles.form', ['title' => trans('settings.role_create')]) + </form> + </div> @stop diff --git a/resources/views/settings/roles/delete.blade.php b/resources/views/settings/roles/delete.blade.php index 6e447c379..e6cb5bf6c 100644 --- a/resources/views/settings/roles/delete.blade.php +++ b/resources/views/settings/roles/delete.blade.php @@ -1,35 +1,39 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'roles']) -@stop +{{--TODO - Looks strange--}} @section('body') <div class="container small"> - <p> </p> - <div class="card"> - <h3>@icon('delete') {{ trans('settings.role_delete') }}</h3> - <div class="body"> - <p>{{ trans('settings.role_delete_confirm', ['roleName' => $role->display_name]) }}</p> - <form action="{{ baseUrl("/settings/roles/delete/{$role->id}") }}" method="POST"> - {!! csrf_field() !!} - <input type="hidden" name="_method" value="DELETE"> + <div class="py-m"> + @include('settings.navbar', ['selected' => 'roles']) + </div> - @if($role->users->count() > 0) - <div class="form-group"> - <p>{{ trans('settings.role_delete_users_assigned', ['userCount' => $role->users->count()]) }}</p> - @include('form/role-select', ['options' => $roles, 'name' => 'migration_role_id']) - </div> - @endif + <div class="card content-wrap auto-height"> + <h1 class="list-heading"> {{ trans('settings.role_delete') }}</h1> - <p class="text-neg">{{ trans('settings.role_delete_sure') }}</p> + <p>{{ trans('settings.role_delete_confirm', ['roleName' => $role->display_name]) }}</p> + + <form action="{{ baseUrl("/settings/roles/delete/{$role->id}") }}" method="POST"> + {!! csrf_field() !!} + <input type="hidden" name="_method" value="DELETE"> + + @if($role->users->count() > 0) <div class="form-group"> - <a href="{{ baseUrl("/settings/roles/{$role->id}") }}" class="button outline">{{ trans('common.cancel') }}</a> - <button type="submit" class="button neg">{{ trans('common.confirm') }}</button> + <p>{{ trans('settings.role_delete_users_assigned', ['userCount' => $role->users->count()]) }}</p> + @include('form/role-select', ['options' => $roles, 'name' => 'migration_role_id']) </div> - </form> - </div> + @endif + + <p class="text-neg"> + <strong>{{ trans('settings.role_delete_sure') }}</strong> + </p> + + <div class="form-group text-right"> + <a href="{{ baseUrl("/settings/roles/{$role->id}") }}" class="button outline">{{ trans('common.cancel') }}</a> + <button type="submit" class="button primary">{{ trans('common.confirm') }}</button> + </div> + </form> </div> </div> diff --git a/resources/views/settings/roles/edit.blade.php b/resources/views/settings/roles/edit.blade.php index 01ba53383..a600580f6 100644 --- a/resources/views/settings/roles/edit.blade.php +++ b/resources/views/settings/roles/edit.blade.php @@ -1,17 +1,16 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'roles']) -@stop - @section('body') - <form action="{{ baseUrl("/settings/roles/{$role->id}") }}" method="POST"> - <input type="hidden" name="_method" value="PUT"> - <div class="container"> - <div class="row"> - @include('settings/roles/form', ['model' => $role, 'title' => trans('settings.role_edit'), 'icon' => 'edit']) - </div> + <div class="container"> + <div class="py-m"> + @include('settings.navbar', ['selected' => 'roles']) </div> - </form> + + <form action="{{ baseUrl("/settings/roles/{$role->id}") }}" method="POST"> + <input type="hidden" name="_method" value="PUT"> + @include('settings/roles/form', ['model' => $role, 'title' => trans('settings.role_edit'), 'icon' => 'edit']) + </form> + </div> + @stop diff --git a/resources/views/settings/roles/form.blade.php b/resources/views/settings/roles/form.blade.php index 619229a65..ce71a2790 100644 --- a/resources/views/settings/roles/form.blade.php +++ b/resources/views/settings/roles/form.blade.php @@ -1,12 +1,19 @@ {!! csrf_field() !!} -<div class="col-md-9"> - <div class="card"> - <h3>@icon($icon) {{$title}}</h3> - <div class="body"> - <div class="row"> - <div class="col-md-5"> - <h5>{{ trans('settings.role_details') }}</h5> +{{--TODO - Add select-all shortcuts--}} + +<div class="grid left-focus large-gap"> + + <div class="card content-wrap fill-width"> + <h1 class="list-heading">{{ $title }}</h1> + + <div class="setting-list"> + + <div class="grid half"> + <div> + <label class="setting-list-label">{{ trans('settings.role_details') }}</label> + </div> + <div> <div class="form-group"> <label for="name">{{ trans('settings.role_name') }}</label> @include('form/text', ['name' => 'display_name']) @@ -22,162 +29,168 @@ @include('form/text', ['name' => 'external_auth_id']) </div> @endif + </div> + </div> - <h5>{{ trans('settings.role_system') }}</h5> + <div class="grid half"> + <div> + <label class="setting-list-label">{{ trans('settings.role_system') }}</label> + </div> + <div> <label>@include('settings/roles/checkbox', ['permission' => 'users-manage']) {{ trans('settings.role_manage_users') }}</label> <label>@include('settings/roles/checkbox', ['permission' => 'user-roles-manage']) {{ trans('settings.role_manage_roles') }}</label> <label>@include('settings/roles/checkbox', ['permission' => 'restrictions-manage-all']) {{ trans('settings.role_manage_entity_permissions') }}</label> <label>@include('settings/roles/checkbox', ['permission' => 'restrictions-manage-own']) {{ trans('settings.role_manage_own_entity_permissions') }}</label> <label>@include('settings/roles/checkbox', ['permission' => 'settings-manage']) {{ trans('settings.role_manage_settings') }}</label> </div> - - <div class="col-md-6"> - - <h5>{{ trans('settings.role_asset') }}</h5> - <p>{{ trans('settings.role_asset_desc') }}</p> - - @if (isset($role) && $role->system_name === 'admin') - <p>{{ trans('settings.role_asset_admins') }}</p> - @endif - - <table class="table"> - <tr> - <th width="20%"></th> - <th width="20%">{{ trans('common.create') }}</th> - <th width="20%">{{ trans('common.view') }}</th> - <th width="20%">{{ trans('common.edit') }}</th> - <th width="20%">{{ trans('common.delete') }}</th> - </tr> - <tr> - <td>{{ trans('entities.shelves_long') }}</td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-create-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-view-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-view-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - <tr> - <td>{{ trans('entities.books') }}</td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'book-create-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'book-view-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'book-view-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'book-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'book-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'book-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'book-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - <tr> - <td>{{ trans('entities.chapters') }}</td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-create-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-create-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-view-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-view-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'chapter-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - <tr> - <td>{{ trans('entities.pages') }}</td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'page-create-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'page-create-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'page-view-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'page-view-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'page-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'page-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'page-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'page-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - <tr> - <td>{{ trans('entities.images') }}</td> - <td>@include('settings/roles/checkbox', ['permission' => 'image-create-all'])</td> - <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'image-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'image-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'image-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'image-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - <tr> - <td>{{ trans('entities.attachments') }}</td> - <td>@include('settings/roles/checkbox', ['permission' => 'attachment-create-all'])</td> - <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'attachment-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'attachment-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'attachment-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'attachment-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - <tr> - <td>{{ trans('entities.comments') }}</td> - <td>@include('settings/roles/checkbox', ['permission' => 'comment-create-all'])</td> - <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'comment-update-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'comment-update-all']) {{ trans('settings.role_all') }}</label> - </td> - <td> - <label>@include('settings/roles/checkbox', ['permission' => 'comment-delete-own']) {{ trans('settings.role_own') }}</label> - <label>@include('settings/roles/checkbox', ['permission' => 'comment-delete-all']) {{ trans('settings.role_all') }}</label> - </td> - </tr> - </table> - </div> </div> - <div class="form-group text-right"> - <a href="{{ baseUrl("/settings/roles") }}" class="button outline">{{ trans('common.cancel') }}</a> - @if (isset($role) && $role->id) - <a href="{{ baseUrl("/settings/roles/delete/{$role->id}") }}" class="button neg">{{ trans('settings.role_delete') }}</a> + + <div> + <label class="setting-list-label">{{ trans('settings.role_asset') }}</label> + <p>{{ trans('settings.role_asset_desc') }}</p> + + @if (isset($role) && $role->system_name === 'admin') + <p>{{ trans('settings.role_asset_admins') }}</p> @endif - <button type="submit" class="button pos">{{ trans('settings.role_save') }}</button> + + <table class="table"> + <tr> + <th width="20%"></th> + <th width="20%">{{ trans('common.create') }}</th> + <th width="20%">{{ trans('common.view') }}</th> + <th width="20%">{{ trans('common.edit') }}</th> + <th width="20%">{{ trans('common.delete') }}</th> + </tr> + <tr> + <td>{{ trans('entities.shelves_long') }}</td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-create-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-view-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-view-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'bookshelf-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + <tr> + <td>{{ trans('entities.books') }}</td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'book-create-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'book-view-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'book-view-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'book-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'book-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'book-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'book-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + <tr> + <td>{{ trans('entities.chapters') }}</td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-create-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-create-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-view-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-view-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'chapter-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + <tr> + <td>{{ trans('entities.pages') }}</td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'page-create-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'page-create-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'page-view-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'page-view-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'page-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'page-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'page-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'page-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + <tr> + <td>{{ trans('entities.images') }}</td> + <td>@include('settings/roles/checkbox', ['permission' => 'image-create-all'])</td> + <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'image-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'image-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'image-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'image-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + <tr> + <td>{{ trans('entities.attachments') }}</td> + <td>@include('settings/roles/checkbox', ['permission' => 'attachment-create-all'])</td> + <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'attachment-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'attachment-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'attachment-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'attachment-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + <tr> + <td>{{ trans('entities.comments') }}</td> + <td>@include('settings/roles/checkbox', ['permission' => 'comment-create-all'])</td> + <td style="line-height:1.2;"><small class="faded">{{ trans('settings.role_controlled_by_asset') }}</small></td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-update-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-update-all']) {{ trans('settings.role_all') }}</label> + </td> + <td> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-delete-own']) {{ trans('settings.role_own') }}</label> + <label>@include('settings/roles/checkbox', ['permission' => 'comment-delete-all']) {{ trans('settings.role_all') }}</label> + </td> + </tr> + </table> </div> </div> + + <div class="form-group text-right"> + <a href="{{ baseUrl("/settings/roles") }}" class="button outline">{{ trans('common.cancel') }}</a> + @if (isset($role) && $role->id) + <a href="{{ baseUrl("/settings/roles/delete/{$role->id}") }}" class="button outline">{{ trans('settings.role_delete') }}</a> + @endif + <button type="submit" class="button primary">{{ trans('settings.role_save') }}</button> + </div> + </div> -</div> -<div class="col-md-3"> - <div class="card"> - <h3>@icon('users') {{ trans('settings.role_users') }}</h3> - <div class="body"> + + <div> + <div class="auto-height fill-width px-l"> + <h2 class="list-heading">{{ trans('settings.role_users') }}</h2> @if(isset($role) && count($role->users) > 0) <table class="list-table"> @foreach($role->users as $user) diff --git a/resources/views/settings/roles/index.blade.php b/resources/views/settings/roles/index.blade.php index 147d04bd1..6cfef7c67 100644 --- a/resources/views/settings/roles/index.blade.php +++ b/resources/views/settings/roles/index.blade.php @@ -1,35 +1,39 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'roles']) -@stop - @section('body') <div class="container small"> - <p> </p> - <div class="card"> - <h3>@icon('lock-open') {{ trans('settings.role_user_roles') }}</h3> - <div class="body"> - <table class="table"> - <tr> - <th>{{ trans('settings.role_name') }}</th> - <th></th> - <th class="text-center">{{ trans('settings.users') }}</th> - </tr> - @foreach($roles as $role) - <tr> - <td><a href="{{ baseUrl("/settings/roles/{$role->id}") }}">{{ $role->display_name }}</a></td> - <td>{{ $role->description }}</td> - <td class="text-center">{{ $role->users->count() }}</td> - </tr> - @endforeach - </table> - <div class="form-group"> - <a href="{{ baseUrl("/settings/roles/new") }}" class="button pos">{{ trans('settings.role_create') }}</a> + <div class="py-m"> + @include('settings/navbar', ['selected' => 'roles']) + </div> + + <div class="card content-wrap auto-height"> + + <div class="grid half v-center"> + <h1 class="list-heading">{{ trans('settings.role_user_roles') }}</h1> + + <div class="text-right"> + <a href="{{ baseUrl("/settings/roles/new") }}" class="button outline">{{ trans('settings.role_create') }}</a> </div> </div> + + <table class="table"> + <tr> + <th>{{ trans('settings.role_name') }}</th> + <th></th> + <th class="text-center">{{ trans('settings.users') }}</th> + </tr> + @foreach($roles as $role) + <tr> + <td><a href="{{ baseUrl("/settings/roles/{$role->id}") }}">{{ $role->display_name }}</a></td> + <td>{{ $role->description }}</td> + <td class="text-center">{{ $role->users->count() }}</td> + </tr> + @endforeach + </table> + + </div> </div> diff --git a/resources/views/users/create.blade.php b/resources/views/users/create.blade.php index d42ca9f51..e60734392 100644 --- a/resources/views/users/create.blade.php +++ b/resources/views/users/create.blade.php @@ -1,5 +1,7 @@ @extends('simple-layout') +{{--TODO--}} + @section('toolbar') @include('settings/navbar', ['selected' => 'users']) @stop diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index c4b02f9b9..58780f7f4 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -1,5 +1,7 @@ @extends('simple-layout') +{{--TODO--}} + @section('toolbar') @include('settings/navbar', ['selected' => 'users']) @stop diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php index fd05a7a15..3d047c015 100644 --- a/resources/views/users/index.blade.php +++ b/resources/views/users/index.blade.php @@ -1,74 +1,66 @@ @extends('simple-layout') -@section('toolbar') - @include('settings/navbar', ['selected' => 'users']) -@stop - @section('body') <div class="container small"> - <p> </p> - <div class="card"> - <h3>@icon('users') {{ trans('settings.users') }}</h3> - <div class="body"> - <div class="container"> - <div class="row"> - <div class="col-sm-4"> - <form method="get" action="{{ baseUrl("/settings/users") }}"> - @foreach(collect($listDetails)->except('search') as $name => $val) - <input type="hidden" name="{{ $name }}" value="{{ $val }}"> - @endforeach - <input type="text" name="search" placeholder="{{ trans('settings.users_search') }}" @if($listDetails['search']) value="{{$listDetails['search']}}" @endif> - </form> - </div> - <div class="col-sm-8 text-right"> - @if(userCan('users-manage')) - <a href="{{ baseUrl("/settings/users/create") }}" style="margin-top: 0;" class="pos button">{{ trans('settings.users_add_new') }}</a> - @endif - </div> + + <div class="py-m"> + @include('settings/navbar', ['selected' => 'users']) + </div> + + <div class="card content-wrap"> + + <div class="grid right-focus v-center"> + <h1 class="list-heading">{{ trans('settings.users') }}</h1> + + <div class="text-right"> + <div class="block inline mr-s"> + <form method="get" action="{{ baseUrl("/settings/users") }}"> + @foreach(collect($listDetails)->except('search') as $name => $val) + <input type="hidden" name="{{ $name }}" value="{{ $val }}"> + @endforeach + <input type="text" name="search" placeholder="{{ trans('settings.users_search') }}" @if($listDetails['search']) value="{{$listDetails['search']}}" @endif> + </form> </div> + @if(userCan('users-manage')) + <a href="{{ baseUrl("/settings/users/create") }}" style="margin-top: 0;" class="outline button">{{ trans('settings.users_add_new') }}</a> + @endif </div> + </div> - <table class="table"> + {{--TODO - Add last login--}} + <table class="table"> + <tr> + <th></th> + <th> + <a href="{{ sortUrl('/settings/users', $listDetails, ['sort' => 'name']) }}">{{ trans('auth.name') }}</a> + / + <a href="{{ sortUrl('/settings/users', $listDetails, ['sort' => 'email']) }}">{{ trans('auth.email') }}</a> + </th> + <th>{{ trans('settings.role_user_roles') }}</th> + </tr> + @foreach($users as $user) <tr> - <th></th> - <th><a href="{{ sortUrl('/settings/users', $listDetails, ['sort' => 'name']) }}">{{ trans('auth.name') }}</a></th> - <th><a href="{{ sortUrl('/settings/users', $listDetails, ['sort' => 'email']) }}">{{ trans('auth.email') }}</a></th> - <th>{{ trans('settings.role_user_roles') }}</th> + <td class="text-center" style="line-height: 0;"><img class="avatar med" src="{{ $user->getAvatar(40)}}" alt="{{ $user->name }}"></td> + <td> + @if(userCan('users-manage') || $currentUser->id == $user->id) + <a href="{{ baseUrl("/settings/users/{$user->id}") }}"> + @endif + {{ $user->name }} <br> <span class="text-muted">{{ $user->email }}</span> + @if(userCan('users-manage') || $currentUser->id == $user->id) + </a> + @endif + </td> + <td> + @foreach($user->roles as $index => $role) + <small><a href="{{ baseUrl("/settings/roles/{$role->id}") }}">{{$role->display_name}}</a>@if($index !== count($user->roles) -1),@endif</small> + @endforeach + </td> </tr> - @foreach($users as $user) - <tr> - <td style="line-height: 0;"><img class="avatar med" src="{{ $user->getAvatar(40)}}" alt="{{ $user->name }}"></td> - <td> - @if(userCan('users-manage') || $currentUser->id == $user->id) - <a href="{{ baseUrl("/settings/users/{$user->id}") }}"> - @endif - {{ $user->name }} - @if(userCan('users-manage') || $currentUser->id == $user->id) - </a> - @endif - </td> - <td> - @if(userCan('users-manage') || $currentUser->id == $user->id) - <a href="{{ baseUrl("/settings/users/{$user->id}") }}"> - @endif - {{ $user->email }} - @if(userCan('users-manage') || $currentUser->id == $user->id) - </a> - @endif - </td> - <td> - @foreach($user->roles as $index => $role) - <small><a href="{{ baseUrl("/settings/roles/{$role->id}") }}">{{$role->display_name}}</a>@if($index !== count($user->roles) -1),@endif</small> - @endforeach - </td> - </tr> - @endforeach - </table> - - <div> - {{ $users->links() }} - </div> + @endforeach + </table> + <div> + {{ $users->links() }} </div> </div> diff --git a/resources/views/users/profile.blade.php b/resources/views/users/profile.blade.php index 4f67f1be2..23535dcce 100644 --- a/resources/views/users/profile.blade.php +++ b/resources/views/users/profile.blade.php @@ -1,84 +1,88 @@ -@extends('sidebar-layout') +@extends('simple-layout') -@section('toolbar') - <div class="col-sm-6 col-xs-1 faded"> - <div class="breadcrumbs"> - <a href="{{ $user->getProfileUrl() }}" class="text-button">@icon('user'){{ $user->name }}</a> - </div> - </div> -@stop - -@section('sidebar') - <div class="card" id="recent-activity"> - <h3>@icon('time') {{ trans('entities.recent_activity') }}</h3> - @include('partials/activity-list', ['activity' => $activity]) - </div> -@stop +{{--TODO - Include links to search based on this user being the creator for each entity type--}} +{{--Linking either the "Created content" items or as "View All" links next to headers--}} +{{--TODO - Add shelves?--}} @section('body') - <div class="container small"> + <div class="container pt-xl"> - <div class="padded-top large"></div> + <div class="grid right-focus reverse-collapse"> - <div class="row"> - <div class="col-md-7"> - <div class="clearfix"> - <div class="padded-right float left"> - <img class="avatar square huge" src="{{ $user->getAvatar(120) }}" alt="{{ $user->name }}"> - </div> - <div> - <h3 style="margin-top: 0;">{{ $user->name }}</h3> - <p class="text-muted"> - {{ trans('entities.profile_user_for_x', ['time' => $user->created_at->diffForHumans(null, true)]) }} - </p> - </div> + <div> + <div id="recent-user-activity" class="mb-xl"> + <h5>{{ trans('entities.recent_activity') }}</h5> + @include('partials/activity-list', ['activity' => $activity]) </div> </div> - <div class="col-md-5 text-bigger" id="content-counts"> - <div class="text-muted">{{ trans('entities.profile_created_content') }}</div> - <a href="#recent-books"> - <div class="text-book"> - @icon('book') {{ trans_choice('entities.x_books', $assetCounts['books']) }} + + <div> + <div class="card content-wrap auto-height"> + <div class="grid left-focus v-center"> + <div> + <div class="mr-m float left"> + <img class="avatar square huge" src="{{ $user->getAvatar(120) }}" alt="{{ $user->name }}"> + </div> + <div> + <h4 class="mt-md">{{ $user->name }}</h4> + <p class="text-muted"> + {{ trans('entities.profile_user_for_x', ['time' => $user->created_at->diffForHumans(null, true)]) }} + </p> + </div> + </div> + <div id="content-counts"> + <div class="text-muted">{{ trans('entities.profile_created_content') }}</div> + <div class="icon-list"> + <a href="#recent-books" class="text-book icon-list-item"> + <span class="icon">@icon('book')</span> + <span>{{ trans_choice('entities.x_books', $assetCounts['books']) }}</span> + </a> + <a href="#recent-chapters" class="text-chapter icon-list-item"> + <span class="icon">@icon('chapter')</span> + <span>{{ trans_choice('entities.x_chapters', $assetCounts['chapters']) }}</span> + </a> + <a href="#recent-pages" class="text-page icon-list-item"> + <span class="icon">@icon('page')</span> + <span>{{ trans_choice('entities.x_pages', $assetCounts['pages']) }}</span> + </a> + </div> + + </div> </div> - </a> - <a href="#recent-chapters"> - <div class="text-chapter"> - @icon('chapter') {{ trans_choice('entities.x_chapters', $assetCounts['chapters']) }} - </div> - </a> - <a href="#recent-pages"> - <div class="text-page"> - @icon('page') {{ trans_choice('entities.x_pages', $assetCounts['pages']) }} - </div> - </a> + </div> + + <div class="card content-wrap auto-height book-contents"> + <h2 id="recent-pages" class="list-heading">{{ trans('entities.recently_created_pages') }}</h2> + @if (count($recentlyCreated['pages']) > 0) + @include('partials/entity-list', ['entities' => $recentlyCreated['pages']]) + @else + <p class="text-muted">{{ trans('entities.profile_not_created_pages', ['userName' => $user->name]) }}</p> + @endif + </div> + + <div class="card content-wrap auto-height book-contents"> + <h2 id="recent-chapters" class="list-heading">{{ trans('entities.recently_created_chapters') }}</h2> + @if (count($recentlyCreated['chapters']) > 0) + @include('partials/entity-list', ['entities' => $recentlyCreated['chapters']]) + @else + <p class="text-muted">{{ trans('entities.profile_not_created_chapters', ['userName' => $user->name]) }}</p> + @endif + </div> + + <div class="card content-wrap auto-height book-contents"> + <h2 id="recent-books" class="list-heading">{{ trans('entities.recently_created_books') }}</h2> + @if (count($recentlyCreated['books']) > 0) + @include('partials/entity-list', ['entities' => $recentlyCreated['books']]) + @else + <p class="text-muted">{{ trans('entities.profile_not_created_books', ['userName' => $user->name]) }}</p> + @endif + </div> </div> + </div> - <hr class="even"> - <h3 id="recent-pages">{{ trans('entities.recently_created_pages') }}</h3> - @if (count($recentlyCreated['pages']) > 0) - @include('partials/entity-list', ['entities' => $recentlyCreated['pages']]) - @else - <p class="text-muted">{{ trans('entities.profile_not_created_pages', ['userName' => $user->name]) }}</p> - @endif - - <hr class="even"> - <h3 id="recent-chapters">{{ trans('entities.recently_created_chapters') }}</h3> - @if (count($recentlyCreated['chapters']) > 0) - @include('partials/entity-list', ['entities' => $recentlyCreated['chapters']]) - @else - <p class="text-muted">{{ trans('entities.profile_not_created_chapters', ['userName' => $user->name]) }}</p> - @endif - - <hr class="even"> - <h3 id="recent-books">{{ trans('entities.recently_created_books') }}</h3> - @if (count($recentlyCreated['books']) > 0) - @include('partials/entity-list', ['entities' => $recentlyCreated['books']]) - @else - <p class="text-muted">{{ trans('entities.profile_not_created_books', ['userName' => $user->name]) }}</p> - @endif </div>