Merge branch 'master' of https://code.grnet.gr/git/astakos
[astakos] / snf-astakos-app / astakos / im / templatetags / astakos_tags.py
diff --git a/snf-astakos-app/astakos/im/templatetags/astakos_tags.py b/snf-astakos-app/astakos/im/templatetags/astakos_tags.py
new file mode 100644 (file)
index 0000000..b8b18b3
--- /dev/null
@@ -0,0 +1,62 @@
+from django import template
+from django.core.urlresolvers import reverse, resolve
+from django.conf import settings
+
+register = template.Library()
+
+MESSAGES_VIEWS_MAP = getattr(settings, 'ASTAKOS_MESSAGES_VIEWS_MAP', {
+    'astakos.im.views.index': 'LOGIN_MESSAGES',
+    'astakos.im.views.logout': 'LOGIN_MESSAGES',
+    'astakos.im.views.login': 'LOGIN_MESSAGES',
+    'astakos.im.views.signup': 'SIGNUP_MESSAGES',
+    'astakos.im.views.edit_profile': 'PROFILE_MESSAGES',
+    'astakos.im.views.change_password': 'PROFILE_MESSAGES',
+    'astakos.im.views.invite': 'PROFILE_MESSAGES',
+    'astakos.im.views.feedback': 'PROFILE_MESSAGES',
+})
+
+@register.tag(name='display_messages')
+def display_messages(parser, token):
+    return MessagesNode()
+
+class DummyMessage(object):
+    def __init__(self, type, msg):
+        self.message = msg
+        self.tags = type
+
+    def __repr__(self):
+        return "%s: %s" % (self.tags, self.message)
+
+class MessagesNode(template.Node):
+
+    def get_view_messages(self, context):
+        messages = list(context['GLOBAL_MESSAGES'])
+        try:
+            view = resolve(context['request'].get_full_path())[0]
+            view_name = "%s.%s" % (view.__module__, view.func_name)
+            messages += context[MESSAGES_VIEWS_MAP.get(view_name)]
+            return messages
+        except Exception, e:
+            return messages
+
+    def render(self, context):
+        if self not in context.render_context:
+            messages = list(context['messages'])
+            if context['EXTRA_MESSAGES_SET']:
+                view_messages = self.get_view_messages(context)
+                for msg_object in view_messages:
+                    messages.append(DummyMessage(msg_object[0], msg_object[1]))
+
+            if not messages:
+                return ""
+
+            cls = messages[-1].tags
+            content = '<div class="top-msg active %s">' % cls
+            for msg in messages:
+                content += '<div class="msg %s">%s</div>' % (msg.tags, msg.message)
+
+            content += '<a href="#" title="close" class="close">X</a>'
+            content += '</div>'
+            context.render_context[self] = content
+
+        return context.render_context[self]