From 7039695b65d45edcfb516482c123f099012faf0f Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Wed, 14 Oct 2015 21:46:18 +0100 Subject: [PATCH] Added chrome paste-image-upload. Closes #20. --- app/Http/Controllers/ImageController.php | 11 ++-- public/loading.gif | Bin 0 -> 11098 bytes resources/assets/js/pages/page-form.js | 62 ++++++++++++++++++++++- resources/views/pages/create.blade.php | 1 + resources/views/pages/edit.blade.php | 1 + resources/views/pages/form.blade.php | 2 - 6 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 public/loading.gif diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php index dc49418..df4f554 100644 --- a/app/Http/Controllers/ImageController.php +++ b/app/Http/Controllers/ImageController.php @@ -7,7 +7,6 @@ use Illuminate\Support\Facades\Auth; use Intervention\Image\Facades\Image as ImageTool; use Illuminate\Support\Facades\DB; -use BookStack\Http\Requests; use BookStack\Image; use BookStack\Repos\PageRepo; @@ -37,13 +36,13 @@ public function __construct(Image $image, File $file) public function getAll($page = 0) { $pageSize = 30; - $images = DB::table('images')->orderBy('created_at', 'desc') + $images = $this->image->orderBy('created_at', 'desc') ->skip($page * $pageSize)->take($pageSize)->get(); foreach ($images as $image) { $image->thumbnail = $this->getThumbnail($image, 150, 150); } - $hasMore = count(DB::table('images')->orderBy('created_at', 'desc') - ->skip(($page + 1) * $pageSize)->take($pageSize)->get()) > 0; + $hasMore = $this->image->orderBy('created_at', 'desc') + ->skip(($page + 1) * $pageSize)->take($pageSize)->count() > 0; return response()->json([ 'images' => $images, 'hasMore' => $hasMore @@ -105,8 +104,8 @@ public function upload(Request $request) // Create and save image object $this->image->name = $name; $this->image->url = $imagePath . $storageName; - $this->image->created_by = Auth::user()->id; - $this->image->updated_by = Auth::user()->id; + $this->image->created_by = auth()->user()->id; + $this->image->updated_by = auth()->user()->id; $this->image->save(); $this->image->thumbnail = $this->getThumbnail($this->image, 150, 150); return response()->json($this->image); diff --git a/public/loading.gif b/public/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bcdebec3069f64d0be4edc0879a67641c0d9ae4 GIT binary patch literal 11098 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 literal 0 HcmV?d00001 diff --git a/resources/assets/js/pages/page-form.js b/resources/assets/js/pages/page-form.js index de53a49..d3b18df 100644 --- a/resources/assets/js/pages/page-form.js +++ b/resources/assets/js/pages/page-form.js @@ -9,11 +9,13 @@ module.exports = { relative_urls: false, statusbar: false, menubar: false, + paste_data_images: false, //height: 700, extended_valid_elements: 'pre[*]', + automatic_uploads: false, valid_children: "-div[p|pre|h1|h2|h3|h4|h5|h6|blockquote]", plugins: "image table textcolor paste link imagetools fullscreen code hr", - toolbar: "code undo | styleselect | hr bold italic underline strikethrough superscript subscript | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image link | fullscreen", + toolbar: "undo redo | styleselect | bold italic underline strikethrough superscript subscript | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image link hr | code fullscreen", content_style: "body {padding-left: 15px !important; padding-right: 15px !important; margin:0!important; margin-left:auto!important;margin-right:auto!important;}", style_formats: [ {title: "Header 1", format: "h1"}, @@ -22,7 +24,8 @@ module.exports = { {title: "Header 4", format: "h4"}, {title: "Paragraph", format: "p"}, {title: "Blockquote", format: "blockquote"}, - {title: "Code Block", icon: "code", format: "pre"} + {title: "Code Block", icon: "code", format: "pre"}, + {title: "Inline Code", icon: "code", inline: "code"} ], file_browser_callback: function(field_name, url, type, win) { ImageManager.show(function(image) { @@ -35,5 +38,60 @@ module.exports = { win.document.getElementById(field_name).fireEvent("onchange"); } }); + }, + paste_preprocess: function(plugin, args) { + var content = args.content; + if(content.indexOf(''); + + var remoteFilename = "image-" + Date.now() + "." + ext; + formData.append('file', file, remoteFilename); + formData.append('_token', document.querySelector('meta[name="token"]').getAttribute('content')); + + xhr.open('POST', '/upload/image'); + xhr.onload = function() { + if (xhr.status === 200 || xhr.status === 201) { + var result = JSON.parse(xhr.responseText); + //var newImage = editor.getDoc().getElementById(id); + //newImage.setAttribute('src', result.url); + editor.dom.setAttrib(id, 'src', result.url); + console.log(result); + } else { + console.log('An error occured uploading the image'); + console.log(xhr.responseText); + } + }; + xhr.send(formData); + } + } + } + + } + }); } }; \ No newline at end of file diff --git a/resources/views/pages/create.blade.php b/resources/views/pages/create.blade.php index ad635b2..62a8c39 100644 --- a/resources/views/pages/create.blade.php +++ b/resources/views/pages/create.blade.php @@ -16,4 +16,5 @@ @endif + @stop \ No newline at end of file diff --git a/resources/views/pages/edit.blade.php b/resources/views/pages/edit.blade.php index bf56a14..937e41a 100644 --- a/resources/views/pages/edit.blade.php +++ b/resources/views/pages/edit.blade.php @@ -14,5 +14,6 @@ @include('pages/form', ['model' => $page]) + @stop \ No newline at end of file diff --git a/resources/views/pages/form.blade.php b/resources/views/pages/form.blade.php index de88dec..ab5a0a4 100644 --- a/resources/views/pages/form.blade.php +++ b/resources/views/pages/form.blade.php @@ -35,5 +35,3 @@ @endif - - \ No newline at end of file