From 3ed54263155acfd73dbd4cadebd6b221211ce9e3 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 10 Dec 2017 13:46:50 +0000 Subject: [PATCH] Moved book cover image input into collapsible section Prevent extra friction when creating a new book and makes it easier to skip if grid view is not in use --- resources/assets/js/components/collapsible.js | 37 +++++++++++++++++++ resources/assets/js/components/index.js | 1 + resources/assets/sass/_forms.scss | 35 ++++++++++++++++++ resources/views/books/form.blade.php | 31 +++++++++------- 4 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 resources/assets/js/components/collapsible.js diff --git a/resources/assets/js/components/collapsible.js b/resources/assets/js/components/collapsible.js new file mode 100644 index 000000000..11b06fc9b --- /dev/null +++ b/resources/assets/js/components/collapsible.js @@ -0,0 +1,37 @@ +/** + * Collapsible + * Provides some simple logic to allow collapsible sections. + */ +class Collapsible { + + constructor(elem) { + this.elem = elem; + this.trigger = elem.querySelector('[collapsible-trigger]'); + this.content = elem.querySelector('[collapsible-content]'); + + if (!this.trigger) return; + + this.trigger.addEventListener('click', this.toggle.bind(this)); + } + + open() { + this.elem.classList.add('open'); + $(this.content).slideDown(400); + } + + close() { + this.elem.classList.remove('open'); + $(this.content).slideUp(400); + } + + toggle() { + if (this.elem.classList.contains('open')) { + this.close(); + } else { + this.open(); + } + } + +} + +module.exports = Collapsible; \ No newline at end of file diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js index 4cb16d06a..5340f6ed7 100644 --- a/resources/assets/js/components/index.js +++ b/resources/assets/js/components/index.js @@ -15,6 +15,7 @@ let componentMapping = { 'markdown-editor': require('./markdown-editor'), 'editor-toolbox': require('./editor-toolbox'), 'image-picker': require('./image-picker'), + 'collapsible': require('./collapsible'), }; window.components = {}; diff --git a/resources/assets/sass/_forms.scss b/resources/assets/sass/_forms.scss index 802a075a2..457d30e54 100644 --- a/resources/assets/sass/_forms.scss +++ b/resources/assets/sass/_forms.scss @@ -191,6 +191,41 @@ input:checked + .toggle-switch { } } +.form-group[collapsible] { + margin-left: -$-m; + margin-right: -$-m; + padding: 0 $-m; + border-top: 1px solid #DDD; + border-bottom: 1px solid #DDD; + .collapse-title { + margin-left: -$-m; + margin-right: -$-m; + padding: $-s $-m; + } + .collapse-title, .collapse-title label { + cursor: pointer; + } + .collapse-title label { + padding-bottom: 0; + margin-bottom: 0; + color: inherit; + } + .collapse-title label:before { + display: inline-block; + content: '▸'; + margin-right: $-m; + transition: all ease-in-out 400ms; + transform: rotate(0); + } + .collapse-content { + display: none; + padding-bottom: $-m; + } + &.open .collapse-title label:before { + transform: rotate(90deg); + } +} + .inline-input-style { display: block; width: 100%; diff --git a/resources/views/books/form.blade.php b/resources/views/books/form.blade.php index 06eea7ca9..0620ae976 100644 --- a/resources/views/books/form.blade.php +++ b/resources/views/books/form.blade.php @@ -9,20 +9,25 @@ @include('form/textarea', ['name' => 'description']) -
- -

{{ trans('common.cover_image_description') }}

- @include('components.image-picker', [ - 'resizeHeight' => '512', - 'resizeWidth' => '512', - 'showRemove' => false, - 'defaultImage' => baseUrl('/book_default_cover.png'), - 'currentImage' => @isset($model) ? $model->getBookCover() : baseUrl('/book_default_cover.png') , - 'currentId' => @isset($model) ? $model->image_id : 0, - 'name' => 'image_id', - 'imageClass' => 'cover' - ]) +
+
+ +
+
+

{{ trans('common.cover_image_description') }}

+ + @include('components.image-picker', [ + 'resizeHeight' => '512', + 'resizeWidth' => '512', + 'showRemove' => false, + 'defaultImage' => baseUrl('/book_default_cover.png'), + 'currentImage' => @isset($model) ? $model->getBookCover() : baseUrl('/book_default_cover.png') , + 'currentId' => @isset($model) ? $model->image_id : 0, + 'name' => 'image_id', + 'imageClass' => 'cover' + ]) +