From 5af6656fae43c5dec565f300d2b9216a0679953f Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 10 Oct 2015 18:57:52 +0100 Subject: [PATCH] Extracted page form js and added better page content linking --- app/Http/Controllers/PageController.php | 18 +--- app/Repos/PageRepo.php | 102 +++++++++++++++++-- package.json | 3 +- public/ZeroClipboard.swf | Bin 0 -> 6580 bytes resources/assets/js/global.js | 10 ++ resources/assets/js/pages/page-form.js | 39 +++++++ resources/assets/sass/_animations.scss | 17 ++++ resources/assets/sass/_buttons.scss | 32 ++---- resources/assets/sass/_pages.scss | 79 +++++++++----- resources/views/pages/form.blade.php | 66 +----------- resources/views/pages/page-display.blade.php | 11 +- resources/views/pages/show.blade.php | 89 ++++++++-------- resources/views/public.blade.php | 4 +- 13 files changed, 279 insertions(+), 191 deletions(-) create mode 100644 public/ZeroClipboard.swf create mode 100644 resources/assets/js/pages/page-form.js diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index c2867caa8..56ea6992c 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -63,22 +63,14 @@ class PageController extends Controller 'html' => 'required|string', 'parent' => 'integer|exists:pages,id' ]); + + $input = $request->all(); $book = $this->bookRepo->getBySlug($bookSlug); - $page = $this->pageRepo->newFromInput($request->all()); + $chapterId = ($request->has('chapter') && $this->chapterRepo->idExists($request->get('chapter'))) ? $request->get('chapter') : null; + $input['priority'] = $this->bookRepo->getNewPriority($book); - $page->slug = $this->pageRepo->findSuitableSlug($page->name, $book->id); - $page->priority = $this->bookRepo->getNewPriority($book); + $page = $this->pageRepo->saveNew($input, $book, $chapterId); - if ($request->has('chapter') && $this->chapterRepo->idExists($request->get('chapter'))) { - $page->chapter_id = $request->get('chapter'); - } - - $page->book_id = $book->id; - $page->text = strip_tags($page->html); - $page->created_by = Auth::user()->id; - $page->updated_by = Auth::user()->id; - $page->save(); - $this->pageRepo->saveRevision($page); Activity::add($page, 'page_create', $book->id); return redirect($page->getUrl()); } diff --git a/app/Repos/PageRepo.php b/app/Repos/PageRepo.php index 441d5980e..1f0c61819 100644 --- a/app/Repos/PageRepo.php +++ b/app/Repos/PageRepo.php @@ -1,7 +1,11 @@ page->where('slug', '=', $slug)->where('book_id', '=', $bookId)->first(); } + /** + * @param $input + * @return Page + */ public function newFromInput($input) { $page = $this->page->fill($input); @@ -53,6 +61,83 @@ class PageRepo return $this->page->where('slug', '=', $slug)->where('book_id', '=', $bookId)->count(); } + /** + * Save a new page into the system. + * Input validation must be done beforehand. + * @param array $input + * @param Book $book + * @param int $chapterId + * @return Page + */ + public function saveNew(array $input, Book $book, $chapterId = null) + { + $page = $this->newFromInput($input); + $page->slug = $this->findSuitableSlug($page->name, $book->id); + + if ($chapterId) $page->chapter_id = $chapterId; + + $page->html = $this->formatHtml($input['html']); + $page->text = strip_tags($page->html); + $page->created_by = auth()->user()->id; + $page->updated_by = auth()->user()->id; + + $book->pages()->save($page); + $this->saveRevision($page); + return $page; + } + + /** + * Formats a page's html to be tagged correctly + * within the system. + * @param string $htmlText + * @return string + */ + protected function formatHtml($htmlText) + { + libxml_use_internal_errors(true); + $doc = new \DOMDocument(); + $doc->loadHTML($htmlText); + + $container = $doc->documentElement; + $body = $container->childNodes[0]; + $childNodes = $body->childNodes; + + // Ensure no duplicate ids are used + $lastId = false; + $idArray = []; + + foreach ($childNodes as $index => $childNode) { + /** @var \DOMElement $childNode */ + if (get_class($childNode) !== 'DOMElement') continue; + + // Overwrite id if not a bookstack custom id + if ($childNode->hasAttribute('id')) { + $id = $childNode->getAttribute('id'); + if (strpos($id, 'bkmrk') === 0 && array_search($id, $idArray) === false) { + $idArray[] = $id; + continue; + }; + } + + // Create an unique id for the element + do { + $id = 'bkmrk-' . substr(uniqid(), -5); + } while ($id == $lastId); + $lastId = $id; + + $childNode->setAttribute('id', $id); + $idArray[] = $id; + } + + // Generate inner html as a string + $html = ''; + foreach ($childNodes as $childNode) { + $html .= $doc->saveHTML($childNode); + } + + return $html; + } + public function destroyById($id) { $page = $this->getById($id); @@ -99,8 +184,8 @@ class PageRepo */ public function searchForImage($imageString) { - $pages = $this->page->where('html', 'like', '%'.$imageString.'%')->get(); - foreach($pages as $page) { + $pages = $this->page->where('html', 'like', '%' . $imageString . '%')->get(); + foreach ($pages as $page) { $page->url = $page->getUrl(); $page->html = ''; $page->text = ''; @@ -110,15 +195,16 @@ class PageRepo /** * Updates a page with any fillable data and saves it into the database. - * @param Page $page - * @param $book_id - * @param $data + * @param Page $page + * @param int $book_id + * @param string $input * @return Page */ - public function updatePage(Page $page, $book_id, $data) + public function updatePage(Page $page, $book_id, $input) { - $page->fill($data); + $page->fill($input); $page->slug = $this->findSuitableSlug($page->name, $book_id, $page->id); + $page->html = $this->formatHtml($input['html']); $page->text = strip_tags($page->html); $page->updated_by = Auth::user()->id; $page->save(); @@ -189,7 +275,7 @@ class PageRepo public function setBookId($bookId, Page $page) { $page->book_id = $bookId; - foreach($page->activity as $activity) { + foreach ($page->activity as $activity) { $activity->book_id = $bookId; $activity->save(); } diff --git a/package.json b/package.json index af40e256f..09edc2b20 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dropzone": "^4.0.1", "laravel-elixir": "^3.3.1", "vue": "^0.12.16", - "vue-resource": "^0.1.16" + "vue-resource": "^0.1.16", + "zeroclipboard": "^2.2.0" } } diff --git a/public/ZeroClipboard.swf b/public/ZeroClipboard.swf new file mode 100644 index 0000000000000000000000000000000000000000..8bad6a3e34f1b0b055da3ee8e506fe627cf75987 GIT binary patch literal 6580 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 literal 0 HcmV?d00001 diff --git a/resources/assets/js/global.js b/resources/assets/js/global.js index 519ce7412..a6fca8dbd 100644 --- a/resources/assets/js/global.js +++ b/resources/assets/js/global.js @@ -1,3 +1,7 @@ +window.ZeroClipboard = require('zeroclipboard'); +window.ZeroClipboard.config({ + swfPath: '/ZeroClipboard.swf' +}); // Global jQuery Elements $(function () { @@ -23,6 +27,12 @@ function elemExists(selector) { return document.querySelector(selector) !== null; } +// TinyMCE editor +if(elemExists('#html-editor')) { + var tinyMceOptions = require('./pages/page-form'); + tinymce.init(tinyMceOptions); +} + // Vue JS elements var Vue = require('vue'); Vue.use(require('vue-resource')); diff --git a/resources/assets/js/pages/page-form.js b/resources/assets/js/pages/page-form.js new file mode 100644 index 000000000..de53a497a --- /dev/null +++ b/resources/assets/js/pages/page-form.js @@ -0,0 +1,39 @@ + +module.exports = { + selector: '#html-editor', + content_css: [ + '/css/styles.css', + '//fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,300italic,100,300' + ], + body_class: 'page-content', + relative_urls: false, + statusbar: false, + menubar: false, + //height: 700, + extended_valid_elements: 'pre[*]', + 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", + 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"}, + {title: "Header 2", format: "h2"}, + {title: "Header 3", format: "h3"}, + {title: "Header 4", format: "h4"}, + {title: "Paragraph", format: "p"}, + {title: "Blockquote", format: "blockquote"}, + {title: "Code Block", icon: "code", format: "pre"} + ], + file_browser_callback: function(field_name, url, type, win) { + ImageManager.show(function(image) { + win.document.getElementById(field_name).value = image.url; + if ("createEvent" in document) { + var evt = document.createEvent("HTMLEvents"); + evt.initEvent("change", false, true); + win.document.getElementById(field_name).dispatchEvent(evt); + } else { + win.document.getElementById(field_name).fireEvent("onchange"); + } + }); + } +}; \ No newline at end of file diff --git a/resources/assets/sass/_animations.scss b/resources/assets/sass/_animations.scss index e6e85ef8e..582d718c8 100644 --- a/resources/assets/sass/_animations.scss +++ b/resources/assets/sass/_animations.scss @@ -110,3 +110,20 @@ transform: translate3d(0, 0, 0); } } + +@keyframes pointer { + 0% { + transform: translate3d(0, 20px, 0) scale3d(0, 0, 0); + } + 100% { + transform: translate3d(0, 0, 0) scale3d(1, 1, 1); + } +} + +.anim.pointer { + transform-origin: 50% 100%; + animation-name: pointer; + animation-duration: 180ms; + animation-delay: 0s; + animation-timing-function: cubic-bezier(.62, .28, .23, .99); +} \ No newline at end of file diff --git a/resources/assets/sass/_buttons.scss b/resources/assets/sass/_buttons.scss index bafb68165..72fa33cfe 100644 --- a/resources/assets/sass/_buttons.scss +++ b/resources/assets/sass/_buttons.scss @@ -85,29 +85,9 @@ $button-border-radius: 2px; display: block; } -// Floating action button -//.fab { -// $size: 70px; -// button.button { -// border-radius: 100%; -// width: $size; -// height: $size; -// font-size: 48px; -// text-align: center; -// margin: 0; -// padding: 0; -// border: 0; -// box-shadow: 0 0 2px 2px #DDD; -// transition: all ease-in-out 160ms; -// i { -// transform: rotate(0deg); -// transition: all ease-in-out 160ms; -// } -// &:hover { -// box-shadow: 0 2px 4px 2px #CCC; -// i { -// transform: rotate(180deg); -// } -// } -// } -//} +.button.icon { + i { + padding-right: 0; + } +} + diff --git a/resources/assets/sass/_pages.scss b/resources/assets/sass/_pages.scss index c7d41a5d9..c4b2b05e1 100644 --- a/resources/assets/sass/_pages.scss +++ b/resources/assets/sass/_pages.scss @@ -23,38 +23,65 @@ } } -// Link hooks & popovers -a.link-hook { - position: absolute; +// Page content pointers +.pointer-container { + position: relative; + display: none; + left: 2%; +} +.pointer { + border: 1px solid #CCC; display: inline-block; - top: $-xs; - left: -$-l; - padding-bottom: 30px; - font-size: 20px; - line-height: 20px; - color: #BBB; - opacity: 0; - transform: translate3d(10px, 0, 0); - transition: all ease-in-out 240ms; - background-color: transparent; - &:hover { - color: $primary; + padding: $-xs $-s; + border-radius: 4px; + box-shadow: 0 0 8px 1px rgba(212, 209, 209, 0.35); + position: absolute; + top: -60px; + background-color:#FFF; + &:before { + position: absolute; + left: 50%; + bottom: -9px; + width: 16px; + height: 16px; + margin-left: -8px; + content: ''; + display: block; + background-color:#FFF; + transform: rotate(45deg); + transform-origin: 50% 50%; + border-bottom: 1px solid #CCC; + border-right: 1px solid #CCC; + z-index: 1; + } + input { + background-color: #FFF; + border: 1px solid #DDD; + color: #666; + width: 180px; + z-index: 40; + } + input, button { + position: relative; + border-radius: 0; + height: 28px; + font-size: 12px; + } + > i { + color: #888; + font-size: 18px; + padding-top: 4px; + } + .button { + line-height: 1; + margin: 0 0 0 -4px; + box-shadow: none; } } + h1, h2, h3, h4, h5, h6 { &:hover a.link-hook { opacity: 1; transform: translate3d(0, 0, 0); } } - -// Side Navigation -.side-nav { - position: fixed; - padding-left: $-m; - opacity: 0.8; - margin-top: $-xxl; - margin-left: 0; - max-width: 240px; - display: none; -} \ No newline at end of file diff --git a/resources/views/pages/form.blade.php b/resources/views/pages/form.blade.php index 44e396c84..de88dec0a 100644 --- a/resources/views/pages/form.blade.php +++ b/resources/views/pages/form.blade.php @@ -28,7 +28,7 @@
- @if($errors->has('html'))
{{ $errors->first('html') }}
@@ -36,68 +36,4 @@
- - - - - - \ No newline at end of file diff --git a/resources/views/pages/page-display.blade.php b/resources/views/pages/page-display.blade.php index 6eb623b39..8d3625db8 100644 --- a/resources/views/pages/page-display.blade.php +++ b/resources/views/pages/page-display.blade.php @@ -1,10 +1,3 @@ -

{{$page->name}}

-@if(count($page->children) > 0) -

Sub-pages

-
- @foreach($page->children as $childPage) - {{ $childPage->name }} - @endforeach -
-@endif +

{{$page->name}}

+ {!! $page->html !!} \ No newline at end of file diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 5fa41eff8..e30cfef82 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -37,22 +37,31 @@
+ +
+
+ + + +
+
+ @include('pages/page-display') +
+

Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by {{$page->createdBy->name}} @endif
Last Updated {{$page->updated_at->diffForHumans()}} @if($page->createdBy) by {{$page->updatedBy->name}} @endif

+
+ @include('pages/sidebar-tree-list', ['book' => $book]) -
-

Page Navigation

- -
+
@@ -64,45 +73,46 @@ diff --git a/resources/views/public.blade.php b/resources/views/public.blade.php index 7606f936a..39bdab1ef 100644 --- a/resources/views/public.blade.php +++ b/resources/views/public.blade.php @@ -3,14 +3,12 @@ BookStack - + - -