]> BookStack Code Mirror - bookstack/commitdiff
Added link functionality
authorDan Brown <redacted>
Thu, 16 Jul 2015 18:15:22 +0000 (19:15 +0100)
committerDan Brown <redacted>
Thu, 16 Jul 2015 18:15:22 +0000 (19:15 +0100)
app/Http/Controllers/PageController.php
app/Http/routes.php
resources/assets/sass/_text.scss
resources/assets/sass/styles.scss
resources/views/base.blade.php
resources/views/pages/create.blade.php
resources/views/pages/edit.blade.php
resources/views/pages/form.blade.php
resources/views/pages/image-manager.blade.php [new file with mode: 0644]
resources/views/pages/show.blade.php

index da56fb26bc569945d34ddc9f1b07e198bb83a732..0a9f11844d074f95d1fb242e97b3cafb4163330b 100644 (file)
@@ -126,6 +126,12 @@ class PageController extends Controller
         return redirect($page->getUrl());
     }
 
+    public function redirectFromLink($pageId)
+    {
+        $page = $this->pageRepo->getById($pageId);
+        return redirect($page->getUrl());
+    }
+
     /**
      * Remove the specified resource from storage.
      *
index be5d7c487f280eeaea5a96866e4b29575f42ad49..52394c56456de4779141fc92d5de507732b9a843 100644 (file)
@@ -35,6 +35,8 @@ Route::get('/images/all', 'ImageController@getAll');
 Route::get('/images/all/{page}', 'ImageController@getAll');
 Route::get('/images/{any}', 'ImageController@getImage')->where('any', '.*');
 
+Route::get('/link/{id}', 'PageController@redirectFromLink');
+
 Route::get('/', function () {
     return view('base');
 });
index 9e24d4cd5ea3544fd9d0d2a09d7d28cdb0bb5357..584b12b5bbf1561efa951203e070c47cac7ae31b 100644 (file)
@@ -29,6 +29,8 @@ h4 {
 
 h1, h2, h3, h4 {
   font-weight: 500;
+  position: relative;
+  display: block;
   .subheader {
     display: block;
     font-size: 0.5em;
index 6df66b8329f354353fc2e9e8828d8c3ca95a590d..853e98454be47c1a4b480c48e64238adfe6a88c7 100644 (file)
@@ -116,6 +116,8 @@ header .menu {
   }
 }
 
+
+
 .overlay {
   background-color: rgba(0, 0, 0, 0.2);
   position: fixed;
@@ -180,4 +182,21 @@ header .menu {
   padding-top: $-xl*1.2;
   color: #666;
   border-top: 2px solid $primary;
+}
+
+// Link hooks & popovers
+a.link-hook {
+  position: absolute;
+  display: inline-block;
+  top: $-xs;
+  left: -$-xl+2px;
+  font-size: 20px;
+  line-height: 20px;
+  color: #BBB;
+  opacity: 0;
+}
+h1, h2, h3, h4, h5, h6 {
+  &:hover a.link-hook {
+    opacity: 1;
+  }
 }
\ No newline at end of file
index a8e17ce7e29a540fbad1e65f1ab43dfc21f290bb..e61944e37325ccd0eaea1eb55bc00fca1e814478 100644 (file)
@@ -10,6 +10,7 @@
     <script src="/bower/bootstrap/dist/js/bootstrap.js"></script>
     <script>
         $.fn.smoothScrollTo = function() {
+            if(this.length === 0) return;
             $('body').animate({
                 scrollTop: this.offset().top - 60 // Adjust to change final scroll position top margin
             }, 800); // Adjust to change animations speed (ms)
@@ -35,5 +36,6 @@
         @yield('content')
     </section>
 
+@yield('bottom')
 </body>
 </html>
index a5a45f015f2707dc4368065177b0354e28f93888..d59f18e5b3f21c09662b9e7fb71187d6f33e69ee 100644 (file)
@@ -16,4 +16,8 @@
             $('#html').editable({inlineMode: false});
         });
     </script>
+@stop
+
+@section('bottom')
+    @include('pages/image-manager')
 @stop
\ No newline at end of file
index 16ded0b3d31b949e1ce4b3d733fe9f8bd18ed296..30a27cb796365fba24c893e116a0c8c727c07aaf 100644 (file)
@@ -15,4 +15,8 @@
         </form>
     </div>
 
+@stop
+
+@section('bottom')
+    @include('pages/image-manager')
 @stop
\ No newline at end of file
index 980c36f04d3ed4a5fae884d196f053e3084de49f..7e0cd3eb0a16dc020ea40621fa1651190fdd7a23 100644 (file)
 
 
 
-<section class="overlay" style="display:none;">
-    <div id="image-manager">
-        <div class="image-manager-left">
-            <div class="image-manager-header">
-                <button type="button" class="button neg float right" data-action="close">Close</button>
-                <div class="image-manager-title">Image Library</div>
-            </div>
-            <div class="image-manager-display">
-            </div>
-            <form action="/upload/image" class="image-manager-dropzone">
-                {{ csrf_field() }}
-                Drag images or click here to upload
-            </form>
-        </div>
-        {{--<div class="sidebar">--}}
 
-        {{--</div>--}}
-    </div>
-</section>
 
 <script>
     $(function() {
@@ -49,7 +31,7 @@
             relative_urls: false,
             height: 600,
             plugins: "image table textcolor paste link imagetools",
-            toolbar: "undo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table | fontsizeselect full",
+            toolbar: "undo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table image link | fontsizeselect full",
             content_style: "body {padding-left: 15px !important; padding-right: 15px !important; margin:0!important}",
             file_browser_callback: function(field_name, url, type, win) {
                 ImageManager.show('#image-manager', function(image) {
diff --git a/resources/views/pages/image-manager.blade.php b/resources/views/pages/image-manager.blade.php
new file mode 100644 (file)
index 0000000..7f33a98
--- /dev/null
@@ -0,0 +1,19 @@
+<section class="overlay" style="display:none;">
+    <div id="image-manager">
+        <div class="image-manager-left">
+            <div class="image-manager-header">
+                <button type="button" class="button neg float right" data-action="close">Close</button>
+                <div class="image-manager-title">Image Library</div>
+            </div>
+            <div class="image-manager-display">
+            </div>
+            <form action="/upload/image" class="image-manager-dropzone">
+                {{ csrf_field() }}
+                Drag images or click here to upload
+            </form>
+        </div>
+        {{--<div class="sidebar">--}}
+
+        {{--</div>--}}
+    </div>
+</section>
\ No newline at end of file
index ac586d18eaa0affdfb861696460671bec9d66460..0c0a6585ed0f612be96caa9d598dbd60b79c5a16 100644 (file)
                     header.smoothScrollTo();
                 })
             });
+
+            // Set up link hooks
+            var pageId = {{$page->id}};
+            headers.each(function() {
+                var text = $(this).text().trim();
+                var link = '/link/' + pageId + '#' + encodeURIComponent(text);
+                var linkHook = $('<a class="link-hook"><i class="fa fa-link"></i></a>')
+                        .attr({"data-content": link, href: link, target: '_blank'});
+                linkHook.click(function(e) {
+                    e.preventDefault();
+                    goToText(text);
+                });
+                $(this).append(linkHook);
+            });
+
+            function goToText(text) {
+                $('.page-content').find(':contains("'+text+'")').smoothScrollTo();
+            }
+
+            if(window.location.hash) {
+                var text = window.location.hash.replace(/\%20/g, ' ').substr(1);
+                goToText(text);
+            }
+
+            //$('[data-toggle="popover"]').popover()
         });
     </script>
 @stop