Commit 5f472d6bb35a4a4cd61c9c7127f80da1b9a0b6a9
1 parent
91e85324
Exists in
master
and in
3 other branches
Adding mural post notifications badge
Showing
9 changed files
with
56 additions
and
10 deletions
Show diff stats
amadeus/context_processors.py
@@ -2,6 +2,7 @@ from datetime import datetime | @@ -2,6 +2,7 @@ from datetime import datetime | ||
2 | 2 | ||
3 | from themes.models import Themes | 3 | from themes.models import Themes |
4 | from notifications.models import Notification | 4 | from notifications.models import Notification |
5 | +from mural.models import MuralVisualizations | ||
5 | 6 | ||
6 | def theme(request): | 7 | def theme(request): |
7 | context = {} | 8 | context = {} |
@@ -22,4 +23,16 @@ def notifies(request): | @@ -22,4 +23,16 @@ def notifies(request): | ||
22 | 23 | ||
23 | context['notifications_count'] = notifications | 24 | context['notifications_count'] = notifications |
24 | 25 | ||
26 | + return context | ||
27 | + | ||
28 | +def mural_notifies(request): | ||
29 | + context = {} | ||
30 | + | ||
31 | + notifications = 0 | ||
32 | + | ||
33 | + if request.user.is_authenticated: | ||
34 | + notifications = MuralVisualizations.objects.filter(viewed = False, user = request.user).count() | ||
35 | + | ||
36 | + context['mural_notifications_count'] = notifications | ||
37 | + | ||
25 | return context | 38 | return context |
26 | \ No newline at end of file | 39 | \ No newline at end of file |
amadeus/settings.py
@@ -109,6 +109,7 @@ TEMPLATES = [ | @@ -109,6 +109,7 @@ TEMPLATES = [ | ||
109 | 'django.contrib.messages.context_processors.messages', | 109 | 'django.contrib.messages.context_processors.messages', |
110 | 'amadeus.context_processors.theme', | 110 | 'amadeus.context_processors.theme', |
111 | 'amadeus.context_processors.notifies', | 111 | 'amadeus.context_processors.notifies', |
112 | + 'amadeus.context_processors.mural_notifies', | ||
112 | ], | 113 | ], |
113 | }, | 114 | }, |
114 | }, | 115 | }, |
amadeus/static/css/base/amadeus.css
@@ -1043,7 +1043,7 @@ li.item .notify_badge { | @@ -1043,7 +1043,7 @@ li.item .notify_badge { | ||
1043 | padding: 10px 0px 8px 0px; | 1043 | padding: 10px 0px 8px 0px; |
1044 | } | 1044 | } |
1045 | 1045 | ||
1046 | -.post .post-comment .user-img { | 1046 | +.post .post-comment .user-img div { |
1047 | display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ | 1047 | display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ |
1048 | display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ | 1048 | display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ |
1049 | display: -ms-flexbox; /* TWEENER - IE 10 */ | 1049 | display: -ms-flexbox; /* TWEENER - IE 10 */ |
amadeus/static/css/base/amadeus_responsive.css
1 | @media(min-width: 1200px) { | 1 | @media(min-width: 1200px) { |
2 | - .mural .post_make .user-img { | 2 | + .mural .post_make .user-img, .post .post-img { |
3 | height: 70px; | 3 | height: 70px; |
4 | } | 4 | } |
5 | 5 | ||
6 | + .post .post-comment .user-img div { | ||
7 | + height: 38px; | ||
8 | + } | ||
9 | + | ||
6 | .mural .post_make .user-img img { | 10 | .mural .post_make .user-img img { |
7 | max-width: 70px; | 11 | max-width: 70px; |
8 | max-height: 70px; | 12 | max-height: 70px; |
@@ -18,10 +22,14 @@ | @@ -18,10 +22,14 @@ | ||
18 | padding: 15px; | 22 | padding: 15px; |
19 | } | 23 | } |
20 | 24 | ||
21 | - .mural .post_make .user-img { | 25 | + .mural .post_make .user-img, .post .post-img { |
22 | height: 65px; | 26 | height: 65px; |
23 | } | 27 | } |
24 | 28 | ||
29 | + .post .post-comment .user-img div { | ||
30 | + height: 38px; | ||
31 | + } | ||
32 | + | ||
25 | .mural .post_make .user-img img { | 33 | .mural .post_make .user-img img { |
26 | max-width: 65px; | 34 | max-width: 65px; |
27 | max-height: 65px; | 35 | max-height: 65px; |
@@ -87,7 +95,7 @@ | @@ -87,7 +95,7 @@ | ||
87 | display:none; | 95 | display:none; |
88 | } | 96 | } |
89 | 97 | ||
90 | - .mural .post_make .user-img { | 98 | + .mural .post_make .user-img, .post .post-img { |
91 | height: 60px; | 99 | height: 60px; |
92 | } | 100 | } |
93 | 101 | ||
@@ -161,7 +169,7 @@ | @@ -161,7 +169,7 @@ | ||
161 | } | 169 | } |
162 | 170 | ||
163 | @media(max-width: 680px) { | 171 | @media(max-width: 680px) { |
164 | - .mural .post_make .user-img { | 172 | + .mural .post_make .user-img, .post .post-img { |
165 | height: 50px; | 173 | height: 50px; |
166 | } | 174 | } |
167 | 175 |
amadeus/static/css/themes/green.css
@@ -496,7 +496,7 @@ a.add-row { | @@ -496,7 +496,7 @@ a.add-row { | ||
496 | background: #FFFFFF; | 496 | background: #FFFFFF; |
497 | } | 497 | } |
498 | 498 | ||
499 | -.mural .post_make .user-img { | 499 | +.mural .post_make .user-img, .post .post-img, .post .post-comment .user-img div { |
500 | background: #CCCCCC; | 500 | background: #CCCCCC; |
501 | } | 501 | } |
502 | 502 |
amadeus/static/js/socket.js
@@ -15,6 +15,22 @@ socket.onmessage = function(e) { | @@ -15,6 +15,22 @@ socket.onmessage = function(e) { | ||
15 | $('.posts').prepend(content.complete); | 15 | $('.posts').prepend(content.complete); |
16 | 16 | ||
17 | $('.no-subjects').attr('style', 'display:none'); | 17 | $('.no-subjects').attr('style', 'display:none'); |
18 | + } else { | ||
19 | + $('.mural_badge').each(function () { | ||
20 | + var actual = $(this).text(); | ||
21 | + | ||
22 | + if (actual != "+99") { | ||
23 | + actual = parseInt(actual, 10) + 1; | ||
24 | + | ||
25 | + if (actual > 99) { | ||
26 | + actual = "+99"; | ||
27 | + } | ||
28 | + | ||
29 | + $(this).text(actual); | ||
30 | + } | ||
31 | + | ||
32 | + $(this).show(); | ||
33 | + }); | ||
18 | } | 34 | } |
19 | 35 | ||
20 | if (("Notification" in window)) { | 36 | if (("Notification" in window)) { |
amadeus/templates/base.html
@@ -190,9 +190,10 @@ | @@ -190,9 +190,10 @@ | ||
190 | <i class="fa fa-graduation-cap" aria-hidden="true"></i> | 190 | <i class="fa fa-graduation-cap" aria-hidden="true"></i> |
191 | </a> | 191 | </a> |
192 | </li> | 192 | </li> |
193 | - <li class="item {{ mural_menu_active }}" data-toggle="tooltip" data-placement="right" title="{% trans "Timeline" %}"> | 193 | + <li class="item {{ mural_menu_active }} action_icon" data-toggle="tooltip" data-placement="right" title="{% trans "Timeline" %}"> |
194 | <a href="{% url 'mural:manage_general' %}"> | 194 | <a href="{% url 'mural:manage_general' %}"> |
195 | <i class="fa fa-list" aria-hidden="true" ></i> | 195 | <i class="fa fa-list" aria-hidden="true" ></i> |
196 | + <span class="badge notify_badge mural_badge" {% if mural_notifications_count == 0 %} style="display:none" {% endif %}>{% if mural_notifications_count > 99 %} +99 {% else %} {{ mural_notifications_count }} {% endif %}</span> | ||
196 | </a> | 197 | </a> |
197 | </li> | 198 | </li> |
198 | <li class="item" data-toggle="tooltip" data-placement="right" title="{% trans "Messages" %}"> | 199 | <li class="item" data-toggle="tooltip" data-placement="right" title="{% trans "Messages" %}"> |
@@ -241,9 +242,10 @@ | @@ -241,9 +242,10 @@ | ||
241 | <i class="fa fa-graduation-cap" aria-hidden="true"></i> | 242 | <i class="fa fa-graduation-cap" aria-hidden="true"></i> |
242 | </a> | 243 | </a> |
243 | </li> | 244 | </li> |
244 | - <li class="item {{ mural_menu_active }}" data-toggle="tooltip" data-placement="top" title="{% trans "Timeline" %}"> | 245 | + <li class="item {{ mural_menu_active }} action_icon" data-toggle="tooltip" data-placement="top" title="{% trans "Timeline" %}"> |
245 | <a href="{% url 'mural:manage_general' %}" | 246 | <a href="{% url 'mural:manage_general' %}" |
246 | <i class="fa fa-list" aria-hidden="true" ></i> | 247 | <i class="fa fa-list" aria-hidden="true" ></i> |
248 | + <span class="badge notify_badge mural_badge" {% if mural_notifications_count == 0 %} style="display:none" {% endif %}>{% if mural_notifications_count > 99 %} +99 {% else %} {{ mural_notifications_count }} {% endif %}</span> | ||
247 | </a> | 249 | </a> |
248 | </li> | 250 | </li> |
249 | <li class="item" data-toggle="tooltip" data-placement="top" title="{% trans "Messages" %}"> | 251 | <li class="item" data-toggle="tooltip" data-placement="top" title="{% trans "Messages" %}"> |
mural/templates/mural/_view.html
@@ -45,7 +45,9 @@ | @@ -45,7 +45,9 @@ | ||
45 | </div> | 45 | </div> |
46 | <div class="col-md-12 post-comment"> | 46 | <div class="col-md-12 post-comment"> |
47 | <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1 user-img"> | 47 | <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1 user-img"> |
48 | - <img src="{{ request.user.image_url }}" class="img-responsive" /> | 48 | + <div> |
49 | + <img src="{{ request.user.image_url }}" class="img-responsive" /> | ||
50 | + </div> | ||
49 | </div> | 51 | </div> |
50 | <div class="col-lg-11 col-md-11 col-sm-11 col-xs-11 comment-field"> | 52 | <div class="col-lg-11 col-md-11 col-sm-11 col-xs-11 comment-field"> |
51 | <div> | 53 | <div> |
mural/views.py
@@ -33,10 +33,14 @@ class GeneralIndex(LoginRequiredMixin, generic.ListView): | @@ -33,10 +33,14 @@ class GeneralIndex(LoginRequiredMixin, generic.ListView): | ||
33 | 33 | ||
34 | general = GeneralPost.objects.extra(select={"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_generalpost.mural_ptr_id))"}).order_by("-most_recent") | 34 | general = GeneralPost.objects.extra(select={"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_generalpost.mural_ptr_id))"}).order_by("-most_recent") |
35 | 35 | ||
36 | - self.totals['general'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct().count() | 36 | + general_visualizations = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct() |
37 | + | ||
38 | + self.totals['general'] = general_visualizations.count() | ||
37 | self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__students = user))).distinct().count() | 39 | self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__students = user))).distinct().count() |
38 | self.totals['subject'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__subjectpost__space__professor = user) | Q(comment__post__subjectpost__space__professor = user) | Q(post__subjectpost__space__students = user) | Q(comment__post__subjectpost__space__students = user))).distinct().count() | 40 | self.totals['subject'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__subjectpost__space__professor = user) | Q(comment__post__subjectpost__space__professor = user) | Q(post__subjectpost__space__students = user) | Q(comment__post__subjectpost__space__students = user))).distinct().count() |
39 | 41 | ||
42 | + general_visualizations.update(viewed = True) | ||
43 | + | ||
40 | return general | 44 | return general |
41 | 45 | ||
42 | def get_context_data(self, **kwargs): | 46 | def get_context_data(self, **kwargs): |