From a015c74c4732016e68f04838fc971d3484bb5b20 Mon Sep 17 00:00:00 2001 From: Felipe Martin Date: Wed, 2 Apr 2014 15:55:24 +0200 Subject: [PATCH] Added toastr for notifications (with legacy support for the HTML alerts) --- bower.json | 3 +- gruntfile.coffee | 2 ++ .../themes/bootflat/static/coffee/main.coffee | 12 +++++++- shelfzilla/views.py | 29 +++++++++++++++++-- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/bower.json b/bower.json index 437f2ee..8366725 100644 --- a/bower.json +++ b/bower.json @@ -18,6 +18,7 @@ "jquery": "~2.1.0", "vegas": "~1.3.4", "jquery-pjax": "~1.8.1", - "nprogress": "~0.1.3" + "nprogress": "~0.1.3", + "toastr": "~2.0.1" } } diff --git a/gruntfile.coffee b/gruntfile.coffee index 32168b0..5da48a4 100644 --- a/gruntfile.coffee +++ b/gruntfile.coffee @@ -53,6 +53,7 @@ module.exports = (grunt) -> "static_components/js/icheck.min.js", "static_components/js/jquery-pjax.js", "static_components/js/nprogress.js", + "static_components/js/toastr.js", "shelfzilla/themes/bootflat/static/js/main.full.js", ] dest: "shelfzilla/themes/bootflat/static/js/site.js" @@ -62,6 +63,7 @@ module.exports = (grunt) -> "static_components/css/bootstrap.min.css", "static_components/css/bootflat.min.css", "static_components/css/nprogress.css", + "static_components/css/toastr.css", ] dest: "shelfzilla/themes/bootflat/static/css/style.css" diff --git a/shelfzilla/themes/bootflat/static/coffee/main.coffee b/shelfzilla/themes/bootflat/static/coffee/main.coffee index 9dd1be9..02a3c09 100644 --- a/shelfzilla/themes/bootflat/static/coffee/main.coffee +++ b/shelfzilla/themes/bootflat/static/coffee/main.coffee @@ -1,13 +1,20 @@ NProgress.start() window._updateMessages = false -window.updateMessages = -> +window.updateMessagesHtml = -> $.pjax url: '/messages/' container: '[data-pjax-container="messages"]' push: false window._updateMessages = false +window.updateMessages = -> + $.getJSON "/messages/?format=json", (data) -> + for message in data + toastr[message.extra_tags](message.message) + window._updateMessages = false + +# Document ready $ -> NProgress.inc(0.3) # Background @@ -40,6 +47,9 @@ $ -> if elem.is('[pjax-messages]') window._updateMessages = true + # Update messages + window.updateMessages() + # Tooltips $('[data-toggle="tooltip"]').tooltip(); diff --git a/shelfzilla/views.py b/shelfzilla/views.py index 86412e1..0349111 100644 --- a/shelfzilla/views.py +++ b/shelfzilla/views.py @@ -1,6 +1,9 @@ +import json from django.views.generic import View as DjangoView from django.template import RequestContext from django.shortcuts import render_to_response +from django.http import HttpResponse +from django.contrib import messages class View(DjangoView): @@ -17,7 +20,29 @@ class View(DjangoView): class MessagesView(View): template = 'contrib/messages.html' + formats = ['html', 'json'] def get(self, request): - ctx = RequestContext(request, {}) - return render_to_response(self.template, context_instance=ctx) + format = 'html' + if 'format' in request.GET and request.GET['format'] in self.formats: + format = request.GET['format'] + + if format == 'html': + ctx = RequestContext(request, {}) + result = render_to_response(self.template, context_instance=ctx) + elif format == 'json': + messages_json = [] + for message in messages.get_messages(request): + messages_json.append( + { + "level": message.level, + "message": message.message, + "extra_tags": message.tags, + } + ) + result = HttpResponse( + json.dumps(messages_json), + content_type='application/json' + ) + + return result