mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-01-31 12:11:37 +01:00
parent
ae95d0a239
commit
f37a886205
@ -3,6 +3,7 @@
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Oxbow\Activity;
|
||||
use Oxbow\Entity;
|
||||
use Session;
|
||||
|
||||
class ActivityService
|
||||
{
|
||||
@ -35,6 +36,7 @@ class ActivityService
|
||||
$this->activity->extra = $extra;
|
||||
}
|
||||
$entity->activity()->save($this->activity);
|
||||
$this->setNotification($activityKey);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,8 +54,10 @@ class ActivityService
|
||||
$this->activity->extra = $extra;
|
||||
}
|
||||
$this->activity->save();
|
||||
$this->setNotification($activityKey);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes the entity attachment from each of its activities
|
||||
* and instead uses the 'extra' field with the entities name.
|
||||
@ -84,4 +88,17 @@ class ActivityService
|
||||
->skip($count*$page)->take($count)->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Flashes a notification message to the session if an appropriate message is available.
|
||||
* @param $activityKey
|
||||
*/
|
||||
protected function setNotification($activityKey)
|
||||
{
|
||||
$notificationTextKey = 'activities.' . $activityKey . '_notification';
|
||||
if (trans()->has($notificationTextKey)) {
|
||||
$message = trans($notificationTextKey);
|
||||
Session::flash('success', $message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -14,4 +14,27 @@
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.anim.notification {
|
||||
transform: translate3d(580px, 0, 0);
|
||||
animation-name: notification;
|
||||
animation-duration: 3s;
|
||||
animation-timing-function: ease-in-out;
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
@keyframes notification {
|
||||
0% {
|
||||
transform: translate3d(580px, 0, 0);
|
||||
}
|
||||
10% {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
90% {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
100% {
|
||||
transform: translate3d(580px, 0, 0);
|
||||
}
|
||||
}
|
@ -452,4 +452,37 @@ body.dragging, body.dragging * {
|
||||
|
||||
.avatar {
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
.notification {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: $-xl*2 $-xl;
|
||||
padding: $-l $-xl;
|
||||
background-color: #EEE;
|
||||
border-radius: 3px;
|
||||
box-shadow: $bs-med;
|
||||
z-index: 99999999;
|
||||
display: table;
|
||||
cursor: pointer;
|
||||
max-width: 480px;
|
||||
i, span {
|
||||
display: table-cell;
|
||||
}
|
||||
i {
|
||||
font-size: 2em;
|
||||
padding-right: $-l;
|
||||
}
|
||||
span {
|
||||
vertical-align: middle;
|
||||
}
|
||||
&.pos {
|
||||
background-color: $positive;
|
||||
color: #EEE;
|
||||
}
|
||||
&.neg {
|
||||
background-color: $negative;
|
||||
color: #EEE;
|
||||
}
|
||||
}
|
@ -9,19 +9,30 @@ return [
|
||||
|
||||
// Pages
|
||||
'page_create' => 'created page',
|
||||
'page_create_notification' => 'Page Successfully Created',
|
||||
'page_update' => 'updated page',
|
||||
'page_update_notification' => 'Page Successfully Updated',
|
||||
'page_delete' => 'deleted page',
|
||||
'page_delete_notification' => 'Page Successfully Created',
|
||||
'page_restore' => 'restored page',
|
||||
'page_restore_notification' => 'Page Successfully Restored',
|
||||
|
||||
// Chapters
|
||||
'chapter_create' => 'created chapter',
|
||||
'chapter_create_notification' => 'Chapter Successfully Created',
|
||||
'chapter_update' => 'updated chapter',
|
||||
'chapter_update_notification' => 'Chapter Successfully Updated',
|
||||
'chapter_delete' => 'deleted chapter',
|
||||
'chapter_delete_notification' => 'Chapter Successfully Deleted',
|
||||
|
||||
// Books
|
||||
'book_create' => 'created book',
|
||||
'book_create_notification' => 'Book Successfully Created',
|
||||
'book_update' => 'updated book',
|
||||
'book_update_notification' => 'Book Successfully Updated',
|
||||
'book_delete' => 'deleted book',
|
||||
'book_delete_notification' => 'Book Successfully Deleted',
|
||||
'book_sort' => 'sorted book',
|
||||
'book_sort_notification' => 'Book Successfully Re-sorted',
|
||||
|
||||
];
|
@ -2,12 +2,17 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>BookStack</title>
|
||||
|
||||
<!-- Meta-->
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="token" content="{{ csrf_token() }}">
|
||||
|
||||
<!-- Styles and Fonts -->
|
||||
<link rel="stylesheet" href="/css/app.css">
|
||||
<link href='//fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,300italic,100,300' rel='stylesheet' type='text/css'>
|
||||
{{--<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">--}}
|
||||
<link rel="stylesheet" href="/bower/material-design-iconic-font/dist/css/material-design-iconic-font.min.css">
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
|
||||
<script src="/bower/bootstrap/dist/js/bootstrap.js"></script>
|
||||
<script src="/bower/jquery-sortable/source/js/jquery-sortable.js"></script>
|
||||
@ -27,10 +32,23 @@
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
@yield('head')
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@if(Session::has('success'))
|
||||
<div class="notification anim pos">
|
||||
<i class="zmdi zmdi-mood"></i> <span>{{ Session::get('success') }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(Session::has('error'))
|
||||
<div class="notification anim neg">
|
||||
<i class="zmdi zmdi-alert-circle"></i> <span>{{ Session::get('error') }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<section id="sidebar">
|
||||
<div class="sidebar-bg"><div class="overlay"></div></div>
|
||||
<header>
|
||||
@ -69,5 +87,10 @@
|
||||
</section>
|
||||
|
||||
@yield('bottom')
|
||||
<script>
|
||||
$('.notification').click(function() {
|
||||
$(this).fadeOut(100);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -7,7 +7,9 @@
|
||||
<div class="col-md-6"></div>
|
||||
<div class="col-md-6 faded">
|
||||
<div class="action-buttons">
|
||||
<a href="/books/create" class="text-pos"><i class="zmdi zmdi-plus"></i>Add new book</a>
|
||||
@if($currentUser->can('book-create'))
|
||||
<a href="/books/create" class="text-pos"><i class="zmdi zmdi-plus"></i>Add new book</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -6,11 +6,19 @@
|
||||
<div class="col-md-6"></div>
|
||||
<div class="col-md-6">
|
||||
<div class="action-buttons faded">
|
||||
<a href="{{$book->getUrl() . '/page/create'}}" class="text-pos"><i class="zmdi zmdi-plus"></i> New Page</a>
|
||||
<a href="{{$book->getUrl() . '/chapter/create'}}" class="text-pos"><i class="zmdi zmdi-plus"></i> New Chapter</a>
|
||||
<a href="{{$book->getEditUrl()}}" class="text-primary"><i class="zmdi zmdi-edit"></i>Edit</a>
|
||||
<a href="{{ $book->getUrl() }}/sort" class="text-primary"><i class="zmdi zmdi-sort"></i>Sort</a>
|
||||
<a href="{{ $book->getUrl() }}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a>
|
||||
@if($currentUser->can('page-create'))
|
||||
<a href="{{$book->getUrl() . '/page/create'}}" class="text-pos"><i class="zmdi zmdi-plus"></i> New Page</a>
|
||||
@endif
|
||||
@if($currentUser->can('chapter-create'))
|
||||
<a href="{{$book->getUrl() . '/chapter/create'}}" class="text-pos"><i class="zmdi zmdi-plus"></i> New Chapter</a>
|
||||
@endif
|
||||
@if($currentUser->can('book-update'))
|
||||
<a href="{{$book->getEditUrl()}}" class="text-primary"><i class="zmdi zmdi-edit"></i>Edit</a>
|
||||
<a href="{{ $book->getUrl() }}/sort" class="text-primary"><i class="zmdi zmdi-sort"></i>Sort</a>
|
||||
@endif
|
||||
@if($currentUser->can('book-delete'))
|
||||
<a href="{{ $book->getUrl() }}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -10,9 +10,15 @@
|
||||
</div>
|
||||
<div class="col-md-6 faded">
|
||||
<div class="action-buttons">
|
||||
<a href="{{$chapter->getUrl() . '/create-page'}}" class="text-pos"><i class="zmdi zmdi-plus"></i>New Page</a>
|
||||
<a href="{{$chapter->getUrl() . '/edit'}}" class="text-primary"><i class="zmdi zmdi-edit"></i>Edit</a>
|
||||
<a href="{{$chapter->getUrl() . '/delete'}}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a>
|
||||
@if($currentUser->can('chapter-create'))
|
||||
<a href="{{$chapter->getUrl() . '/create-page'}}" class="text-pos"><i class="zmdi zmdi-plus"></i>New Page</a>
|
||||
@endif
|
||||
@if($currentUser->can('chapter-update'))
|
||||
<a href="{{$chapter->getUrl() . '/edit'}}" class="text-primary"><i class="zmdi zmdi-edit"></i>Edit</a>
|
||||
@endif
|
||||
@if($currentUser->can('chapter-delete'))
|
||||
<a href="{{$chapter->getUrl() . '/delete'}}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -33,7 +39,7 @@
|
||||
</a>
|
||||
</h3>
|
||||
<p class="text-muted">
|
||||
{{$page->getExcerpt()}}
|
||||
{{$page->getExcerpt(180)}}
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
|
@ -17,9 +17,13 @@
|
||||
</div>
|
||||
<div class="col-md-6 faded">
|
||||
<div class="action-buttons">
|
||||
<a href="{{$page->getUrl() . '/revisions'}}" class="text-primary"><i class="zmdi zmdi-replay"></i>Revisions</a>
|
||||
<a href="{{$page->getUrl() . '/edit'}}" class="text-primary" ><i class="zmdi zmdi-edit"></i>Edit</a>
|
||||
<a href="{{$page->getUrl() . '/delete'}}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a>
|
||||
@if($currentUser->can('page-update'))
|
||||
<a href="{{$page->getUrl() . '/revisions'}}" class="text-primary"><i class="zmdi zmdi-replay"></i>Revisions</a>
|
||||
<a href="{{$page->getUrl() . '/edit'}}" class="text-primary" ><i class="zmdi zmdi-edit"></i>Edit</a>
|
||||
@endif
|
||||
@if($currentUser->can('page-delete'))
|
||||
<a href="{{$page->getUrl() . '/delete'}}" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
x
Reference in New Issue
Block a user