Commit 5e7b5b9790da01192dee4187fcea7f70a1de66ca

Authored by Zambom
1 parent 534d7f70

Updating mural notifications

Showing 2 changed files with 187 additions and 231 deletions   Show diff stats
amadeus/static/js/socket.js
... ... @@ -10,102 +10,38 @@ socket.onmessage = function(e) {
10 10 content = JSON.parse(e.data);
11 11  
12 12 if (content.type == "mural") {
13   - if (content.subtype == "create") {
14   - muralNotificationCreate(content);
15   - } else if (content.subtype == "update") {
16   - muralNotificationUpdate(content);
17   - } else if (content.subtype == "delete") {
18   - muralNotificationDelete(content);
  13 + if (content.subtype == "post") {
  14 + muralNotificationPost(content);
  15 + } else if (content.subtype == "mural_update") {
  16 + muralNotificationMuralUpdate(content);
  17 + } else if (content.subtype == "mural_delete") {
  18 + muralNotificationMuralDelete(content);
19 19 } else if (content.subtype == "create_comment") {
20 20 muralNotificationComment(content);
21   - } else if (content.subtype == "update_comment") {
22   - muralNotificationCommentUpdate(content);
23   - } else if (content.subtype == "delete_comment") {
24   - muralNotificationCommentDelete(content);
25   - } else if (content.subtype == "create_cat") {
26   - muralNotificationCategory(content);
27   - } else if (content.subtype == "update_cat") {
28   - muralNotificationCategoryUpdate(content);
29   - } else if (content.subtype == "delete_cat") {
30   - muralNotificationCategoryDelete(content);
31   - } else if (content.subtype == "create_sub") {
32   - muralNotificationSubject(content);
33   - } else if (content.subtype == "update_sub") {
34   - muralNotificationSubjectUpdate(content);
35   - } else if (content.subtype == "delete_sub") {
36   - muralNotificationSubjectDelete(content);
37 21 }
38 22 }
39 23 }
40 24 // Call onopen directly if socket is already open
41 25 if (socket.readyState == WebSocket.OPEN) socket.onopen();
42 26  
43   -function muralNotificationCreate(content) {
44   - if (window.location.pathname == content.pathname) {
45   - $('.posts').prepend(content.complete);
46   -
47   - $('.no-subjects').attr('style', 'display:none');
48   - } else {
49   - $('.mural_badge').each(function () {
50   - var actual = $(this).text();
51   -
52   - if (actual != "+99") {
53   - actual = parseInt(actual, 10) + 1;
54   -
55   - if (actual > 99) {
56   - actual = "+99";
57   - }
58   -
59   - $(this).text(actual);
60   - }
61   -
62   - $(this).show();
63   - });
64   - }
65   -
66   - if (("Notification" in window)) {
67   - var options = {
68   - icon: content.user_icon,
69   - body: content.simple
70   - }
71   -
72   - if (Notification.permission === "granted") {
73   - var notification = new Notification("", options);
  27 +function muralNotificationPost(content) {
  28 + var page = window.location.pathname,
  29 + render = (content.paths.indexOf(page) != -1);
74 30  
75   - setTimeout(notification.close.bind(notification), 3000);
76   - }
77   - }
78   -}
79   -
80   -function muralNotificationUpdate(content) {
81   - if (window.location.pathname == content.pathname) {
82   - var post = $("#post-" + content.post_id);
83   -
84   - if (post.is(":visible")) {
85   - post.before(content.complete);
  31 + if (render) {
  32 + if (content.accordion) {
  33 + var section = $(content.container);
86 34  
87   - post.remove();
88   - }
89   - }
90   -}
91   -
92   -function muralNotificationDelete(content) {
93   - if (window.location.pathname == content.pathname) {
94   - var post = $("#post-" + content.post_id);
95   -
96   - if (post.is(":visible")) {
97   - post.remove();
98   - }
99   - }
100   -}
  35 + if (section.is(':visible')) {
  36 + section.find('.posts').prepend(content.complete);
101 37  
102   -function muralNotificationComment(content) {
103   - if (window.location.pathname == content.pathname) {
104   - if ($("#post-" + content.post_id).is(":visible")) {
105   - var section = $("#post-" + content.post_id).find('.comment-section');
  38 + section.find('.no-subjects').hide();
  39 + }
  40 + } else {
  41 + $(content.container).prepend(content.complete);
106 42  
107   - section.append(content.complete);
108   - }
  43 + $('.no-subjects').attr('style', 'display:none');
  44 + }
109 45 } else {
110 46 $('.mural_badge').each(function () {
111 47 var actual = $(this).text();
... ... @@ -127,7 +63,7 @@ function muralNotificationComment(content) {
127 63 if (("Notification" in window)) {
128 64 var options = {
129 65 icon: content.user_icon,
130   - body: content.simple
  66 + body: content.simple_notify
131 67 }
132 68  
133 69 if (Notification.permission === "granted") {
... ... @@ -138,98 +74,41 @@ function muralNotificationComment(content) {
138 74 }
139 75 }
140 76  
141   -function muralNotificationCommentUpdate(content) {
142   - if (window.location.pathname == content.pathname) {
143   - var comment = $("#comment-" + content.comment_id);
144   -
145   - if (comment.is(":visible")) {
146   - comment.before(content.complete);
  77 +function muralNotificationMuralUpdate(content) {
  78 + var page = window.location.pathname,
  79 + render = (content.paths.indexOf(page) != -1);
147 80  
148   - comment.remove();
149   - }
150   - }
151   -}
  81 + if (render) {
  82 + var mural_item = $(content.container);
152 83  
153   -function muralNotificationCommentDelete(content) {
154   - if (window.location.pathname == content.pathname) {
155   - var comment = $("#comment-" + content.comment_id);
  84 + if (mural_item.is(":visible") || mural_item.is(":hidden")) {
  85 + mural_item.before(content.complete);
156 86  
157   - if (comment.is(":visible")) {
158   - comment.remove();
  87 + mural_item.remove();
159 88 }
160 89 }
161 90 }
162 91  
163   -function muralNotificationCategory(content) {
164   - var cat_section = $("#" + content.cat);
165   -
166   - if (window.location.pathname == content.pathname && cat_section.is(':visible')) {
167   -
168   - cat_section.find('.posts').prepend(content.complete);
169   -
170   - cat_section.find('.no-subjects').hide();
171   - } else {
172   - $('.mural_badge').each(function () {
173   - var actual = $(this).text();
174   -
175   - if (actual != "+99") {
176   - actual = parseInt(actual, 10) + 1;
177   -
178   - if (actual > 99) {
179   - actual = "+99";
180   - }
181   -
182   - $(this).text(actual);
183   - }
184   -
185   - $(this).show();
186   - });
187   - }
188   -
189   - if (("Notification" in window)) {
190   - var options = {
191   - icon: content.user_icon,
192   - body: content.simple
193   - }
194   -
195   - if (Notification.permission === "granted") {
196   - var notification = new Notification("", options);
197   -
198   - setTimeout(notification.close.bind(notification), 3000);
199   - }
200   - }
201   -}
202   -
203   -function muralNotificationCategoryUpdate(content) {
204   - if (window.location.pathname == content.pathname) {
205   - var post = $("#post-" + content.post_id);
  92 +function muralNotificationMuralDelete(content) {
  93 + var page = window.location.pathname,
  94 + render = (content.paths.indexOf(page) != -1);
206 95  
207   - if (post.is(":visible") || post.is(":hidden")) {
208   - post.before(content.complete);
  96 + if (render) {
  97 + var mural_item = $(content.container);
209 98  
210   - post.remove();
  99 + if (mural_item.is(":visible") || mural_item.is(":hidden")) {
  100 + mural_item.remove();
211 101 }
212 102 }
213 103 }
214 104  
215   -function muralNotificationCategoryDelete(content) {
  105 +function muralNotificationComment(content) {
216 106 if (window.location.pathname == content.pathname) {
217   - var post = $("#post-" + content.post_id);
  107 + if ($("#post-" + content.post_id).is(":visible")) {
  108 + var section = $("#post-" + content.post_id).find('.comment-section');
218 109  
219   - if (post.is(":visible") || post.is(":hidden")) {
220   - post.remove();
  110 + section.append(content.complete);
221 111 }
222   - }
223   -}
224   -
225   -function muralNotificationSubject(content) {
226   - var sub_section = $("#" + content.sub);
227   -
228   - if (window.location.pathname == content.pathname && sub_section.is(':visible')) {
229   -
230   - sub_section.find('.posts').prepend(content.complete);
231   -
232   - sub_section.find('.no-subjects').hide();
233 112 } else {
234 113 $('.mural_badge').each(function () {
235 114 var actual = $(this).text();
... ... @@ -260,26 +139,4 @@ function muralNotificationSubject(content) {
260 139 setTimeout(notification.close.bind(notification), 3000);
261 140 }
262 141 }
263   -}
264   -
265   -function muralNotificationSubjectUpdate(content) {
266   - if (window.location.pathname == content.pathname) {
267   - var post = $("#post-" + content.post_id);
268   -
269   - if (post.is(":visible") || post.is(":hidden")) {
270   - post.before(content.complete);
271   -
272   - post.remove();
273   - }
274   - }
275   -}
276   -
277   -function muralNotificationSubjectDelete(content) {
278   - if (window.location.pathname == content.pathname) {
279   - var post = $("#post-" + content.post_id);
280   -
281   - if (post.is(":visible") || post.is(":hidden")) {
282   - post.remove();
283   - }
284   - }
285 142 }
286 143 \ No newline at end of file
... ...
mural/views.py
... ... @@ -119,15 +119,24 @@ class GeneralCreate(LoginRequiredMixin, generic.edit.CreateView):
119 119 users = User.objects.all().exclude(id = self.request.user.id)
120 120 entries = []
121 121  
122   - notify_type = "mural"
123   - user_icon = self.object.user.image_url
124   - _view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
125   - simple_notify = _("%s has made a post in General")%(str(self.object.user))
126   - pathname = reverse("mural:manage_general")
  122 + paths = [reverse("mural:manage_general")]
  123 +
  124 + notification = {
  125 + "type": "mural",
  126 + "subtype": "post",
  127 + "paths": paths,
  128 + "user_icon": self.object.user.image_url,
  129 + "simple_notify": _("%s has made a post in General")%(str(self.object.user)),
  130 + "complete": render_to_string("mural/_view.html", {"post": self.object}, self.request),
  131 + "container": ".post",
  132 + "accordion": False
  133 + }
  134 +
  135 + notification = json.dumps(notification)
127 136  
128 137 for user in users:
129 138 entries.append(MuralVisualizations(viewed = False, user = user, post = self.object))
130   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view})})
  139 + Group("user-%s" % user.id).send({'text': notification})
131 140  
132 141 MuralVisualizations.objects.bulk_create(entries)
133 142  
... ... @@ -166,12 +175,20 @@ class GeneralUpdate(LoginRequiredMixin, generic.UpdateView):
166 175  
167 176 users = User.objects.all().exclude(id = self.request.user.id)
168 177  
169   - notify_type = "mural"
170   - _view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
171   - pathname = reverse("mural:manage_general")
  178 + paths = [reverse("mural:manage_general")]
  179 +
  180 + notification = {
  181 + "type": "mural",
  182 + "subtype": "mural_update",
  183 + "paths": paths,
  184 + "complete": render_to_string("mural/_view.html", {"post": self.object}, self.request),
  185 + "container": "#post-" + str(self.object.id),
  186 + }
  187 +
  188 + notification = json.dumps(notification)
172 189  
173 190 for user in users:
174   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update", "pathname": pathname, "complete": _view, "post_id": self.object.id})})
  191 + Group("user-%s" % user.id).send({'text': notification})
175 192  
176 193 return super(GeneralUpdate, self).form_valid(form)
177 194  
... ... @@ -202,12 +219,20 @@ class GeneralDelete(LoginRequiredMixin, generic.DeleteView):
202 219  
203 220 def get_success_url(self):
204 221 users = User.objects.all().exclude(id = self.request.user.id)
205   -
206   - notify_type = "mural"
207   - pathname = reverse("mural:manage_general")
  222 +
  223 + paths = [reverse("mural:manage_general")]
  224 +
  225 + notification = {
  226 + "type": "mural",
  227 + "subtype": "mural_delete",
  228 + "paths": paths,
  229 + "container": "#post-" + str(self.object.id),
  230 + }
  231 +
  232 + notification = json.dumps(notification)
208 233  
209 234 for user in users:
210   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete", "pathname": pathname, "post_id": self.object.id})})
  235 + Group("user-%s" % user.id).send({'text': notification})
211 236  
212 237 return reverse_lazy('mural:deleted_post')
213 238  
... ... @@ -324,16 +349,25 @@ class CategoryCreate(LoginRequiredMixin, generic.edit.CreateView):
324 349  
325 350 users = getSpaceUsers(self.request.user.id, self.object)
326 351 entries = []
  352 +
  353 + paths = [reverse("mural:manage_category")]
327 354  
328   - notify_type = "mural"
329   - user_icon = self.object.user.image_url
330   - _view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
331   - simple_notify = _("%s has made a post in %s")%(str(self.object.user), str(self.object.space))
332   - pathname = reverse("mural:manage_category")
  355 + notification = {
  356 + "type": "mural",
  357 + "subtype": "post",
  358 + "paths": paths,
  359 + "user_icon": self.object.user.image_url,
  360 + "simple_notify": _("%s has made a post in %s")%(str(self.object.user), str(self.object.space)),
  361 + "complete": render_to_string("mural/_view.html", {"post": self.object}, self.request),
  362 + "container": "#" + slug,
  363 + "accordion": True
  364 + }
  365 +
  366 + notification = json.dumps(notification)
333 367  
334 368 for user in users:
335 369 entries.append(MuralVisualizations(viewed = False, user = user, post = self.object))
336   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create_cat", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view, "cat": slug})})
  370 + Group("user-%s" % user.id).send({'text': notification})
337 371  
338 372 MuralVisualizations.objects.bulk_create(entries)
339 373  
... ... @@ -372,12 +406,20 @@ class CategoryUpdate(LoginRequiredMixin, generic.UpdateView):
372 406  
373 407 users = getSpaceUsers(self.request.user.id, self.object)
374 408  
375   - notify_type = "mural"
376   - _view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
377   - pathname = reverse("mural:manage_category")
  409 + paths = [reverse("mural:manage_category")]
  410 +
  411 + notification = {
  412 + "type": "mural",
  413 + "subtype": "mural_update",
  414 + "paths": paths,
  415 + "complete": render_to_string("mural/_view.html", {"post": self.object}, self.request),
  416 + "container": "#post-" + str(self.object.id),
  417 + }
  418 +
  419 + notification = json.dumps(notification)
378 420  
379 421 for user in users:
380   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update_cat", "pathname": pathname, "complete": _view, "post_id": self.object.id})})
  422 + Group("user-%s" % user.id).send({'text': notification})
381 423  
382 424 return super(CategoryUpdate, self).form_valid(form)
383 425  
... ... @@ -409,11 +451,19 @@ class CategoryDelete(LoginRequiredMixin, generic.DeleteView):
409 451 def get_success_url(self):
410 452 users = getSpaceUsers(self.request.user.id, self.object)
411 453  
412   - notify_type = "mural"
413   - pathname = reverse("mural:manage_category")
  454 + paths = [reverse("mural:manage_category")]
  455 +
  456 + notification = {
  457 + "type": "mural",
  458 + "subtype": "mural_delete",
  459 + "paths": paths,
  460 + "container": "#post-" + str(self.object.id),
  461 + }
  462 +
  463 + notification = json.dumps(notification)
414 464  
415 465 for user in users:
416   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete_cat", "pathname": pathname, "post_id": self.object.id})})
  466 + Group("user-%s" % user.id).send({'text': notification})
417 467  
418 468 return reverse_lazy('mural:deleted_post')
419 469  
... ... @@ -542,15 +592,24 @@ class SubjectCreate(LoginRequiredMixin, generic.edit.CreateView):
542 592 users = getSpaceUsers(self.request.user.id, self.object)
543 593 entries = []
544 594  
545   - notify_type = "mural"
546   - user_icon = self.object.user.image_url
547   - _view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
548   - simple_notify = _("%s has made a post in %s")%(str(self.object.user), str(self.object.space))
549   - pathname = reverse("mural:manage_subject")
  595 + paths = [reverse("mural:manage_subject")]
  596 +
  597 + notification = {
  598 + "type": "mural",
  599 + "subtype": "post",
  600 + "paths": paths,
  601 + "user_icon": self.object.user.image_url,
  602 + "simple_notify": _("%s has made a post in %s")%(str(self.object.user), str(self.object.space)),
  603 + "complete": render_to_string("mural/_view.html", {"post": self.object}, self.request),
  604 + "container": "#" + slug,
  605 + "accordion": True
  606 + }
  607 +
  608 + notification = json.dumps(notification)
550 609  
551 610 for user in users:
552 611 entries.append(MuralVisualizations(viewed = False, user = user, post = self.object))
553   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create_sub", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view, "sub": slug})})
  612 + Group("user-%s" % user.id).send({'text': notification})
554 613  
555 614 MuralVisualizations.objects.bulk_create(entries)
556 615  
... ... @@ -596,12 +655,20 @@ class SubjectUpdate(LoginRequiredMixin, generic.UpdateView):
596 655  
597 656 users = getSpaceUsers(self.request.user.id, self.object)
598 657  
599   - notify_type = "mural"
600   - _view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
601   - pathname = reverse("mural:manage_subject")
  658 + paths = [reverse("mural:manage_subject")]
  659 +
  660 + notification = {
  661 + "type": "mural",
  662 + "subtype": "mural_update",
  663 + "paths": paths,
  664 + "complete": render_to_string("mural/_view.html", {"post": self.object}, self.request),
  665 + "container": "#post-" + str(self.object.id),
  666 + }
  667 +
  668 + notification = json.dumps(notification)
602 669  
603 670 for user in users:
604   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update_sub", "pathname": pathname, "complete": _view, "post_id": self.object.id})})
  671 + Group("user-%s" % user.id).send({'text': notification})
605 672  
606 673 return super(SubjectUpdate, self).form_valid(form)
607 674  
... ... @@ -633,11 +700,19 @@ class SubjectDelete(LoginRequiredMixin, generic.DeleteView):
633 700 def get_success_url(self):
634 701 users = getSpaceUsers(self.request.user.id, self.object)
635 702  
636   - notify_type = "mural"
637   - pathname = reverse("mural:manage_subject")
  703 + paths = [reverse("mural:manage_subject")]
  704 +
  705 + notification = {
  706 + "type": "mural",
  707 + "subtype": "mural_delete",
  708 + "paths": paths,
  709 + "container": "#post-" + str(self.object.id),
  710 + }
  711 +
  712 + notification = json.dumps(notification)
638 713  
639 714 for user in users:
640   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete_sub", "pathname": pathname, "post_id": self.object.id})})
  715 + Group("user-%s" % user.id).send({'text': notification})
641 716  
642 717 return reverse_lazy('mural:deleted_post')
643 718  
... ... @@ -762,12 +837,24 @@ class CommentUpdate(LoginRequiredMixin, generic.UpdateView):
762 837  
763 838 users = getSpaceUsers(self.request.user.id, self.object.post)
764 839  
765   - notify_type = "mural"
766   - _view = render_to_string("mural/_view_comment.html", {"comment": self.object}, self.request)
767   - pathname = reverse("mural:manage_general")
  840 + paths = [
  841 + reverse("mural:manage_general"),
  842 + reverse("mural:manage_category"),
  843 + reverse("mural:manage_subject")
  844 + ]
  845 +
  846 + notification = {
  847 + "type": "mural",
  848 + "subtype": "mural_update",
  849 + "paths": paths,
  850 + "complete": render_to_string("mural/_view_comment.html", {"comment": self.object}, self.request),
  851 + "container": "#comment-" + str(self.object.id),
  852 + }
  853 +
  854 + notification = json.dumps(notification)
768 855  
769 856 for user in users:
770   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update_comment", "pathname": pathname, "complete": _view, "comment_id": self.object.id})})
  857 + Group("user-%s" % user.id).send({'text': notification})
771 858  
772 859 return super(CommentUpdate, self).form_valid(form)
773 860  
... ... @@ -798,12 +885,24 @@ class CommentDelete(LoginRequiredMixin, generic.DeleteView):
798 885  
799 886 def get_success_url(self):
800 887 users = getSpaceUsers(self.request.user.id, self.object.post)
801   -
802   - notify_type = "mural"
803   - pathname = reverse("mural:manage_general")
  888 +
  889 + paths = [
  890 + reverse("mural:manage_general"),
  891 + reverse("mural:manage_category"),
  892 + reverse("mural:manage_subject")
  893 + ]
  894 +
  895 + notification = {
  896 + "type": "mural",
  897 + "subtype": "mural_delete",
  898 + "paths": paths,
  899 + "container": "#comment-" + str(self.object.id),
  900 + }
  901 +
  902 + notification = json.dumps(notification)
804 903  
805 904 for user in users:
806   - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete_comment", "pathname": pathname, "comment_id": self.object.id})})
  905 + Group("user-%s" % user.id).send({'text': notification})
807 906  
808 907 return reverse_lazy('mural:deleted_comment')
809 908  
... ...