]> BookStack Code Mirror - bookstack/blob - resources/views/pages/show.blade.php
Extracted page form js and added better page content linking
[bookstack] / resources / views / pages / show.blade.php
1 @extends('base')
2
3 @section('content')
4
5     <div class="faded-small">
6         <div class="container">
7             <div class="row">
8                 <div class="col-sm-6 faded">
9                     <div class="breadcrumbs">
10                         <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->name }}</a>
11                         @if($page->hasChapter())
12                             <span class="sep">&raquo;</span>
13                             <a href="{{ $page->chapter->getUrl() }}" class="text-chapter text-button">
14                                 <i class="zmdi zmdi-collection-bookmark"></i>
15                                 {{$page->chapter->name}}
16                             </a>
17                         @endif
18                     </div>
19                 </div>
20                 <div class="col-sm-6 faded">
21                     <div class="action-buttons">
22                         @if($currentUser->can('page-update'))
23                             <a href="{{$page->getUrl() . '/revisions'}}" class="text-primary text-button"><i class="zmdi zmdi-replay"></i>Revisions</a>
24                             <a href="{{$page->getUrl() . '/edit'}}" class="text-primary text-button" ><i class="zmdi zmdi-edit"></i>Edit</a>
25                         @endif
26                         @if($currentUser->can('page-delete'))
27                             <a href="{{$page->getUrl() . '/delete'}}" class="text-neg text-button"><i class="zmdi zmdi-delete"></i>Delete</a>
28                         @endif
29                     </div>
30                 </div>
31             </div>
32         </div>
33     </div>
34
35
36     <div class="container">
37         <div class="row">
38             <div class="col-md-9">
39                 <div class="page-content anim fadeIn">
40
41                     <div class="pointer-container" id="pointer">
42                         <div class="pointer anim">
43                             <i class="zmdi zmdi-link"></i>
44                             <input readonly="readonly" type="text" placeholder="url">
45                             <button class="button icon" title="Copy Link" data-clipboard-text=""><i class="zmdi zmdi-copy"></i></button>
46                         </div>
47                     </div>
48
49                     @include('pages/page-display')
50
51                     <hr>
52
53                     <p class="text-muted small">
54                         Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by {{$page->createdBy->name}} @endif
55                         <br>
56                         Last Updated {{$page->updated_at->diffForHumans()}} @if($page->createdBy) by {{$page->updatedBy->name}} @endif
57                     </p>
58
59                 </div>
60             </div>
61             <div class="col-md-3">
62
63                 @include('pages/sidebar-tree-list', ['book' => $book])
64
65             </div>
66         </div>
67     </div>
68
69
70
71
72
73     <script>
74         $(document).ready(function() {
75
76
77             // Set up pointer
78             var $pointer = $('#pointer').detach();
79             var pageId = {{$page->id}};
80             var isSelection = false;
81
82             $pointer.find('input').click(function(e){$(this).select();e.stopPropagation();});
83             new ZeroClipboard( $pointer.find('button').first()[0] );
84
85             $(document.body).find('*').on('click focus', function(e) {
86                 if(!isSelection) {
87                     $pointer.detach();
88                 }
89             });
90
91             $('.page-content [id^="bkmrk"]').on('mouseup keyup', function(e) {
92                 var selection = window.getSelection();
93                 if(selection.toString().length === 0) return;
94                 // Show pointer and set link
95                 var $elem = $(this);
96                 var link = window.location.protocol + "//" + window.location.host + '/link/' + pageId + '#' + $elem.attr('id');
97                 $pointer.find('input').val(link);
98                 $pointer.find('button').first().attr('data-clipboard-text', link);
99                 $elem.before($pointer);
100                 $pointer.show();
101                 e.stopPropagation();
102
103                 isSelection = true;
104                 setTimeout(function() {
105                     isSelection = false;
106                 }, 100);
107             });
108
109             function goToText(text) {
110                 var idElem = $('.page-content').find('#' + text).first();
111                 if(idElem.length !== 0) {
112                     idElem.smoothScrollTo();
113                 } else {
114                     $('.page-content').find(':contains("'+text+'")').smoothScrollTo();
115                 }
116             }
117
118             if(window.location.hash) {
119                 var text = window.location.hash.replace(/\%20/g, ' ').substr(1);
120                 goToText(text);
121             }
122
123         });
124     </script>
125
126     <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/styles/solarized_light.min.css">
127     <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/highlight.min.js"></script>
128     <script>
129         window.onload = function() {
130             var aCodes = document.getElementsByTagName('pre');
131             for (var i=0; i < aCodes.length; i++) {
132                 hljs.highlightBlock(aCodes[i]);
133             }
134         };
135     </script>
136 @stop