diff --git a/app/Book.php b/app/Book.php index 15fbbe5ff..3fb87b4c5 100644 --- a/app/Book.php +++ b/app/Book.php @@ -17,14 +17,14 @@ class Book extends Entity } return baseUrl('/books/' . urlencode($this->slug)); } - + /** * Returns book cover image, if book cover not exists return default cover image. - * @param int $height - Height of the image * @param int $width - Width of the image + * @param int $height - Height of the image * @return string */ - public function getBookCover($height = 170, $width = 300) + public function getBookCover($width = 440, $height = 250) { $default = baseUrl('/book_default_cover.png'); if (!$this->image_id) return $default; @@ -36,7 +36,7 @@ class Book extends Entity } return $cover; } - + /** * Get the cover image of the book * @return \Illuminate\Database\Eloquent\Relations\BelongsTo diff --git a/resources/assets/js/components/image-picker.js b/resources/assets/js/components/image-picker.js new file mode 100644 index 000000000..d8fd7cce1 --- /dev/null +++ b/resources/assets/js/components/image-picker.js @@ -0,0 +1,59 @@ + +class ImagePicker { + + constructor(elem) { + this.elem = elem; + this.imageElem = elem.querySelector('img'); + this.input = elem.querySelector('input'); + + this.isUsingIds = elem.getAttribute('data-current-id') !== ''; + this.isResizing = elem.getAttribute('data-resize-height') && elem.getAttribute('data-resize-width'); + this.isResizeCropping = elem.getAttribute('data-resize-crop') !== ''; + + let selectButton = elem.querySelector('button[data-action="show-image-manager"]'); + selectButton.addEventListener('click', this.selectImage.bind(this)); + + let resetButton = elem.querySelector('button[data-action="reset-image"]'); + resetButton.addEventListener('click', this.reset.bind(this)); + + let removeButton = elem.querySelector('button[data-action="remove-image"]'); + if (removeButton) { + removeButton.addEventListener('click', this.removeImage.bind(this)); + } + } + + selectImage() { + window.ImageManager.show(image => { + if (!this.isResizing) { + this.setImage(image); + return; + } + + let requestString = '/images/thumb/' + image.id + '/' + this.elem.getAttribute('data-resize-width') + '/' + this.elem.getAttribute('data-resize-height') + '/' + (this.isResizeCropping ? 'true' : 'false'); + + window.$http.get(window.baseUrl(requestString)).then(resp => { + image.url = resp.data.url; + this.setImage(image); + }); + }); + } + + reset() { + this.setImage({id: 0, url: this.elem.getAttribute('data-default-image')}); + } + + setImage(image) { + this.imageElem.src = image.url; + this.input.value = this.isUsingIds ? image.id : image.url; + this.imageElem.classList.remove('none'); + } + + removeImage() { + this.imageElem.src = this.elem.getAttribute('data-default-image'); + this.imageElem.classList.add('none'); + this.input.value = 'none'; + } + +} + +module.exports = ImagePicker; \ No newline at end of file diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js index f37709101..4cb16d06a 100644 --- a/resources/assets/js/components/index.js +++ b/resources/assets/js/components/index.js @@ -14,6 +14,7 @@ let componentMapping = { 'wysiwyg-editor': require('./wysiwyg-editor'), 'markdown-editor': require('./markdown-editor'), 'editor-toolbox': require('./editor-toolbox'), + 'image-picker': require('./image-picker'), }; window.components = {}; diff --git a/resources/lang/en/common.php b/resources/lang/en/common.php index 70cfc5701..7cdd7c23e 100644 --- a/resources/lang/en/common.php +++ b/resources/lang/en/common.php @@ -19,7 +19,7 @@ return [ 'description' => 'Description', 'role' => 'Role', 'cover_image' => 'Cover image', - 'cover_image_description' => 'This image should be approx 300x170px.', + 'cover_image_description' => 'This image should be approx 440x250px.', /** * Actions @@ -49,6 +49,7 @@ return [ 'toggle_details' => 'Toggle Details', 'toggle_thumbnails' => 'Toggle Thumbnails', 'details' => 'Details', + /** * Header */ diff --git a/resources/views/books/form.blade.php b/resources/views/books/form.blade.php index 4a443466b..06eea7ca9 100644 --- a/resources/views/books/form.blade.php +++ b/resources/views/books/form.blade.php @@ -16,7 +16,7 @@ @include('components.image-picker', [ 'resizeHeight' => '512', 'resizeWidth' => '512', - 'showRemove' => true, + '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, diff --git a/resources/views/components/image-picker.blade.php b/resources/views/components/image-picker.blade.php index 2aa39d3d2..034b65cc5 100644 --- a/resources/views/components/image-picker.blade.php +++ b/resources/views/components/image-picker.blade.php @@ -14,53 +14,4 @@ @endif - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/views/partials/custom-styles.blade.php b/resources/views/partials/custom-styles.blade.php index c13051df4..a02f529c7 100644 --- a/resources/views/partials/custom-styles.blade.php +++ b/resources/views/partials/custom-styles.blade.php @@ -7,6 +7,7 @@ } .button-base, .button, input[type="button"], input[type="submit"] { background-color: {{ setting('app-color') }}; + border-color: {{ setting('app-color') }}; } .button-base:hover, .button:hover, input[type="button"]:hover, input[type="submit"]:hover, .button:focus { background-color: {{ setting('app-color') }};