diff options
7 files changed, 93 insertions, 19 deletions
diff --git a/app/Resources/static/themes/material/index.js b/app/Resources/static/themes/material/index.js index e16749f6..ba4552b8 100755 --- a/app/Resources/static/themes/material/index.js +++ b/app/Resources/static/themes/material/index.js | |||
@@ -77,12 +77,12 @@ $(document).ready(() => { | |||
77 | $('.progress .determinate').css('width', `${scrollPercent}%`); | 77 | $('.progress .determinate').css('width', `${scrollPercent}%`); |
78 | }); | 78 | }); |
79 | 79 | ||
80 | $('.notification').on('click', () => { | 80 | $('.notification .notification-action').on('click', (e) => { |
81 | $.ajax({ | 81 | const id = parseInt($(e.target).attr('data-id'), 10); |
82 | url: Routing.generate('notification-archive-all'), | 82 | fetch(Routing.generate('notification-archive', { notification: id }), { credentials: 'same-origin' }).then(() => { |
83 | method: 'GET', | 83 | $(e.target).parents('.notification').removeClass('light-blue lighten-5'); |
84 | }).done(() => { | ||
85 | $('#notifications').sideNav('hide'); | 84 | $('#notifications').sideNav('hide'); |
86 | }); | 85 | }); |
86 | return true; | ||
87 | }); | 87 | }); |
88 | }); | 88 | }); |
diff --git a/src/Wallabag/CoreBundle/Controller/NotificationsController.php b/src/Wallabag/CoreBundle/Controller/NotificationsController.php index 24870b37..0717ff47 100644 --- a/src/Wallabag/CoreBundle/Controller/NotificationsController.php +++ b/src/Wallabag/CoreBundle/Controller/NotificationsController.php | |||
@@ -6,6 +6,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | |||
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Symfony\Component\HttpFoundation\Response; | 8 | use Symfony\Component\HttpFoundation\Response; |
9 | use Wallabag\CoreBundle\Entity\Notification; | ||
9 | 10 | ||
10 | class NotificationsController extends Controller | 11 | class NotificationsController extends Controller |
11 | { | 12 | { |
@@ -35,4 +36,22 @@ class NotificationsController extends Controller | |||
35 | 36 | ||
36 | return $this->redirectToRoute('notifications-all'); | 37 | return $this->redirectToRoute('notifications-all'); |
37 | } | 38 | } |
39 | |||
40 | /** | ||
41 | * @Route("/notifications/read/{notification}", name="notification-archive") | ||
42 | * | ||
43 | * @param Notification $notification | ||
44 | * @return Response | ||
45 | */ | ||
46 | public function markNotificationsAsReadAction(Notification $notification) | ||
47 | { | ||
48 | $em = $this->getDoctrine()->getManager(); | ||
49 | |||
50 | $notification->setRead(true); | ||
51 | |||
52 | $em->persist($notification); | ||
53 | $em->flush(); | ||
54 | |||
55 | return $this->redirectToRoute('notifications-all'); | ||
56 | } | ||
38 | } | 57 | } |
diff --git a/src/Wallabag/CoreBundle/Notifications/InfoAction.php b/src/Wallabag/CoreBundle/Notifications/InfoAction.php new file mode 100644 index 00000000..56567903 --- /dev/null +++ b/src/Wallabag/CoreBundle/Notifications/InfoAction.php | |||
@@ -0,0 +1,13 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Notifications; | ||
4 | |||
5 | class InfoAction extends Action { | ||
6 | |||
7 | public function __construct($link) | ||
8 | { | ||
9 | $this->link = $link; | ||
10 | $this->label = 'Info'; | ||
11 | $this->type = Action::TYPE_INFO; | ||
12 | } | ||
13 | } | ||
diff --git a/src/Wallabag/CoreBundle/Notifications/NoAction.php b/src/Wallabag/CoreBundle/Notifications/NoAction.php new file mode 100644 index 00000000..73c92796 --- /dev/null +++ b/src/Wallabag/CoreBundle/Notifications/NoAction.php | |||
@@ -0,0 +1,13 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Notifications; | ||
4 | |||
5 | class NoAction extends Action { | ||
6 | |||
7 | public function __construct($link) | ||
8 | { | ||
9 | $this->link = $link; | ||
10 | $this->label = 'No'; | ||
11 | $this->type = Action::TYPE_NO; | ||
12 | } | ||
13 | } | ||
diff --git a/src/Wallabag/CoreBundle/Notifications/OkAction.php b/src/Wallabag/CoreBundle/Notifications/OkAction.php new file mode 100644 index 00000000..2b4dde03 --- /dev/null +++ b/src/Wallabag/CoreBundle/Notifications/OkAction.php | |||
@@ -0,0 +1,13 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Notifications; | ||
4 | |||
5 | class OkAction extends Action { | ||
6 | |||
7 | public function __construct($link) | ||
8 | { | ||
9 | $this->link = $link; | ||
10 | $this->label = 'OK'; | ||
11 | $this->type = Action::TYPE_OK; | ||
12 | } | ||
13 | } | ||
diff --git a/src/Wallabag/CoreBundle/Notifications/YesAction.php b/src/Wallabag/CoreBundle/Notifications/YesAction.php new file mode 100644 index 00000000..340733ff --- /dev/null +++ b/src/Wallabag/CoreBundle/Notifications/YesAction.php | |||
@@ -0,0 +1,13 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Notifications; | ||
4 | |||
5 | class YesAction extends Action { | ||
6 | |||
7 | public function __construct($link) | ||
8 | { | ||
9 | $this->link = $link; | ||
10 | $this->label = 'Yes'; | ||
11 | $this->type = Action::TYPE_YES; | ||
12 | } | ||
13 | } | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Notification/notifications.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Notification/notifications.html.twig index bc72c704..7c0f8c44 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Notification/notifications.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Notification/notifications.html.twig | |||
@@ -7,7 +7,7 @@ | |||
7 | <div class="col l6 offset-l3"> | 7 | <div class="col l6 offset-l3"> |
8 | <ul class="collection"> | 8 | <ul class="collection"> |
9 | {% for notification in notifications | slice(0, 10) %} | 9 | {% for notification in notifications | slice(0, 10) %} |
10 | <li class="collection-item avatar{% if not notification.read %} light-blue lighten-5{% else %} grey-text{% endif %}"> | 10 | <li class="notification collection-item avatar{% if not notification.read %} light-blue lighten-5{% else %} grey-text{% endif %}"> |
11 | <i class="material-icons circle">{% spaceless %} | 11 | <i class="material-icons circle">{% spaceless %} |
12 | {% if notification.type == constant('TYPE_ADMIN', notification) %} | 12 | {% if notification.type == constant('TYPE_ADMIN', notification) %} |
13 | build | 13 | build |
@@ -18,20 +18,23 @@ | |||
18 | {% endif %} | 18 | {% endif %} |
19 | {% endspaceless %}</i> | 19 | {% endspaceless %}</i> |
20 | <span class="title">{{ notification.title }}</span> | 20 | <span class="title">{{ notification.title }}</span> |
21 | <p><em>{{ notification.timestamp | date }}</p> | 21 | <p><em>{{ notification.timestamp | date }}</em></p> |
22 | <div class="secondary-content"> | 22 | <div class="secondary-content"> |
23 | {% for action in notification.actions %} | 23 | {% if not notification.read %} |
24 | <a class="btn waves-effect waves-light {% spaceless %} | 24 | {% for action in notification.actions %} |
25 | {% if action.type == constant('TYPE_OK', action) %} | 25 | <a class="notification-action btn waves-effect waves-light {% spaceless %} |
26 | {% elseif action.type == constant('TYPE_YES', action) %} | 26 | {% if action.type == constant('TYPE_OK', action) %} |
27 | cyan | 27 | {% elseif action.type == constant('TYPE_YES', action) %} |
28 | {% elseif action.type == constant('TYPE_NO', action) %} | 28 | cyan |
29 | red | 29 | {% elseif action.type == constant('TYPE_NO', action) %} |
30 | {% elseif action.type == constant('TYPE_INFO', action) %} | 30 | red |
31 | blue-grey | 31 | {% elseif action.type == constant('TYPE_INFO', action) %} |
32 | {% endif %} | 32 | blue-grey |
33 | {% endspaceless %}" href="{{ action.link }}">{{ action.label }}</a> | 33 | {% endif %} |
34 | {% endfor %} | 34 | {% endspaceless %}" data-id="{{ notification.id }}" href="{{ action.link }}">{{ action.label }}</a> |
35 | {% endfor %} | ||
36 | <button class="notification-action waves-effect waves-teal btn-flat" data-id="{{ notification.id }}"><i data-id="{{ notification.id }}" class="material-icons">check</i></button> | ||
37 | {% endif %} | ||
35 | </div> | 38 | </div> |
36 | </li> | 39 | </li> |
37 | {% endfor %} | 40 | {% endfor %} |