]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'master' into bug/image-upload 754/head
authorAbijeet Patro <redacted>
Sun, 18 Mar 2018 18:14:33 +0000 (23:44 +0530)
committerGitHub <redacted>
Sun, 18 Mar 2018 18:14:33 +0000 (23:44 +0530)
app/Http/Controllers/ImageController.php
app/Providers/AppServiceProvider.php
resources/assets/js/vues/components/dropzone.js
resources/assets/js/vues/image-manager.js
resources/assets/sass/_blocks.scss
resources/assets/sass/_components.scss
resources/assets/sass/_pages.scss
resources/lang/en/components.php
resources/lang/en/errors.php
resources/views/components/image-manager.blade.php

index d71e383461bb025474f441b0ba691b55a4d00d47..9782a94c42dfcbbb39a8b23690d3f7c34cc57708 100644 (file)
@@ -120,7 +120,7 @@ class ImageController extends Controller
     {
         $this->checkPermission('image-create-all');
         $this->validate($request, [
-            'file' => 'required|is_image'
+            'file' => 'required|image'
         ]);
 
         if (!$this->imageRepo->isValidType($type)) {
index b06b2f3a25b992322b8172e110f0ecd3ef447cab..57e5c8ed5a50ec88f65637dc454921d1094c0afb 100644 (file)
@@ -15,7 +15,7 @@ class AppServiceProvider extends ServiceProvider
     public function boot()
     {
         // Custom validation methods
-        Validator::extend('is_image', function ($attribute, $value, $parameters, $validator) {
+        Validator::extend('image', function ($attribute, $value, $parameters, $validator) {
             $imageMimes = ['image/png', 'image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/tiff', 'image/webp'];
             return in_array($value->getMimeType(), $imageMimes);
         });
index 0f31bd5793363d4009b77d0fb1e5164671aa4e7d..65717b86b00f0156b64c607bf293740ac1d62014 100644 (file)
@@ -12,7 +12,9 @@ const props = ['placeholder', 'uploadUrl', 'uploadedTo'];
 function mounted() {
    let container = this.$el;
    let _this = this;
-   new DropZone(container, {
+   this._dz = new DropZone(container, {
+       addRemoveLinks: true,
+       dictRemoveFile: trans('components.image_upload_remove'),
         url: function() {
             return _this.uploadUrl;
         },
@@ -41,7 +43,7 @@ function mounted() {
                     $(file.previewElement).find('[data-dz-errormessage]').text(message);
                 }
 
-                if (xhr.status === 413) setMessage(trans('errors.server_upload_limit'));
+                if (xhr && xhr.status === 413) setMessage(trans('errors.server_upload_limit'));
                 if (errorMessage.file) setMessage(errorMessage.file[0]);
             });
         }
@@ -49,12 +51,19 @@ function mounted() {
 }
 
 function data() {
-    return {}
+    return {};
 }
 
+const methods = {
+    onClose: function () {
+        this._dz.removeAllFiles(true);
+    }
+};
+
 module.exports = {
     template,
     props,
     mounted,
     data,
-};
\ No newline at end of file
+    methods
+};
index 12ccc970d3917a2253b4a1d39513605b9494e5e9..89fe6769e37091a862fc334c5799762cbefac522 100644 (file)
@@ -43,6 +43,8 @@ const methods = {
 
     hide() {
         this.showing = false;
+        this.selectedImage = false;
+        this.$refs.dropzone.onClose();
         this.$el.children[0].components.overlay.hide();
     },
 
@@ -175,4 +177,4 @@ module.exports = {
     data,
     computed,
     components: {dropzone},
-};
\ No newline at end of file
+};
index e3238f4b46b2b9f27c04b484c703a4e212586f71..4cf2397bca8bc0457f76f31f6aefc304d5f3031b 100644 (file)
     padding: 0;
     align-items: center;
     text-align: center;
+    justify-content: center;
     width: 28px;
     padding-left: $-xs;
     padding-right: $-xs;
     &:hover {
       background-color: #EEE;
     }
-    i {
-      flex: 1;
-      padding: 0;
+    .svg-icon {
+      margin-right: 0px;
     }
   }
   > div .outline input {
   background-color: #F8F8F8;
   padding: $-m;
   border: 1px solid #DDD;
-}
\ No newline at end of file
+}
index f15528167939ac76b3684aa80aed50c1332a00fa..430b93757fbe5f60dc97b75f0de5e1bf512cc204 100644 (file)
@@ -211,6 +211,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
   margin-left: 1px;
   padding: $-m $-l;
   overflow-y: auto;
+  overflow-x: hidden;
   border-left: 1px solid #DDD;
   .dropzone-container {
     margin-top: $-m;
@@ -315,8 +316,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
 
 .dz-preview.dz-file-preview .dz-image {
   border-radius: 4px;
-  background: #999;
-  background: linear-gradient(to bottom, #eee, #ddd);
+  background: #e9e9e9;
 }
 
 .dz-preview.dz-file-preview .dz-details {
@@ -332,11 +332,12 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
 }
 
 .dz-preview .dz-remove {
-  font-size: 14px;
+  font-size: 13px;
   text-align: center;
   display: block;
   cursor: pointer;
   border: none;
+  margin-top: 3px;
 }
 
 .dz-preview .dz-remove:hover {
@@ -385,7 +386,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
   border: 1px solid transparent;
 }
 
-.dz-preview .dz-details .dz-filename span, .dz-preview .dz-details .dz-size span {
+.dz-preview .dz-details .dz-filename span {
   background-color: rgba(255, 255, 255, 0.4);
   padding: 0 0.4em;
   border-radius: 3px;
@@ -421,13 +422,13 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
 .dz-preview .dz-success-mark, .dz-preview .dz-error-mark {
   pointer-events: none;
   opacity: 0;
-  z-index: 500;
+  z-index: 1001;
   position: absolute;
   display: block;
   top: 50%;
   left: 50%;
   margin-left: -27px;
-  margin-top: -27px;
+  margin-top: -35px;
 }
 
 .dz-preview .dz-success-mark svg, .dz-preview .dz-error-mark svg {
@@ -482,9 +483,13 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
   display: block;
 }
 
-.dz-preview.dz-error:hover .dz-error-message {
-  opacity: 1;
-  pointer-events: auto;
+.dz-preview.dz-error {
+  .dz-image, .dz-details {
+    &:hover ~ .dz-error-message {
+      opacity: 1;
+      pointer-events: auto;
+    }
+  }
 }
 
 .dz-preview .dz-error-message {
@@ -496,7 +501,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
   opacity: 0;
   transition: opacity 0.3s ease;
   border-radius: 4px;
-  font-size: 11.5px;
+  font-size: 12px;
   line-height: 1.2;
   top: 88px;
   left: -26px;
@@ -597,4 +602,4 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group {
   .text-muted {
     color: #999;
   }
-}
\ No newline at end of file
+}
index 3555111d8bc1a177bc35a90c60b3691e74a7da49..3749b53210d45f18ce7a92fe89c0ce7e6be2a78a 100755 (executable)
     flex: 1;
     padding-top: 0;
   }
+  div[toolbox-tab-content] .padded.files {
+       overflow-x: hidden;
+  }
   h4 {
     font-size: 24px;
     margin: $-m 0 0 0;
index 334502d05b84dc0e09ec37b863d02d49d1d88e56..2266fe2b233890fcc5b2539166bdae3ee6d98449 100644 (file)
@@ -21,6 +21,7 @@ return [
     'image_upload_success' => 'Image uploaded successfully',
     'image_update_success' => 'Image details successfully updated',
     'image_delete_success' => 'Image successfully deleted',
+    'image_upload_remove' => 'Remove',
 
     /**
      * Code editor
@@ -29,4 +30,4 @@ return [
     'code_language' => 'Code Language',
     'code_content' => 'Code Content',
     'code_save' => 'Save Code',
-];
\ No newline at end of file
+];
index 3b1d6e8b3f22cfb1b2d10ad9b4207acfeaeb74e3..a86a1cdfc8dadab7d88c704992a7f84e67e45619 100644 (file)
@@ -35,6 +35,7 @@ return [
     'cannot_get_image_from_url' => 'Cannot get image from :url',
     'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.',
     'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.',
+    'uploaded'  => 'The server does not allow uploads of this size. Please try a smaller file size.',
     'image_upload_error' => 'An error occurred uploading the image',
     'image_upload_type_error' => 'The image type being uploaded is invalid',
 
@@ -78,4 +79,4 @@ return [
     'error_occurred' => 'An Error Occurred',
     'app_down' => ':appName is down right now',
     'back_soon' => 'It will be back up soon.',
-];
\ No newline at end of file
+];
index b860038b435e26d95526c732ac81af54cf881014..78c6435d6dc10752b8c472af2321915f47de31e6 100644 (file)
@@ -1,10 +1,10 @@
 <div id="image-manager" image-type="{{ $imageType }}" uploaded-to="{{ $uploaded_to or 0 }}">
-    <div overlay v-cloak>
+    <div overlay v-cloak @click="hide()">
         <div class="popup-body" @click.stop="">
 
             <div class="popup-header primary-background">
                 <div class="popup-title">{{ trans('components.image_select') }}</div>
-                <button class="overlay-close neg corner-button button">x</button>
+                <button class="overlay-close neg corner-button button" @click="hide()">x</button>
             </div>
 
             <div class="flex-fill image-manager-body">
@@ -79,7 +79,7 @@
 
                         </div>
 
-                        <dropzone placeholder="{{ trans('components.image_dropzone') }}" :upload-url="uploadUrl" :uploaded-to="uploadedTo" @success="uploadSuccess"></dropzone>
+                        <dropzone ref="dropzone" placeholder="{{ trans('components.image_dropzone') }}" :upload-url="uploadUrl" :uploaded-to="uploadedTo" @success="uploadSuccess"></dropzone>
 
                     </div>
                 </div>