Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / templatetags / astakos_tags.py @ 279d6e51

History | View | Annotate | Download (2.2 kB)

1 4f78c22c Sofia Papagiannaki
from django import template
2 c0b26605 Sofia Papagiannaki
from django.core.urlresolvers import resolve
3 4f78c22c Sofia Papagiannaki
from django.conf import settings
4 4f78c22c Sofia Papagiannaki
5 4f78c22c Sofia Papagiannaki
register = template.Library()
6 4f78c22c Sofia Papagiannaki
7 4f78c22c Sofia Papagiannaki
MESSAGES_VIEWS_MAP = getattr(settings, 'ASTAKOS_MESSAGES_VIEWS_MAP', {
8 4f78c22c Sofia Papagiannaki
    'astakos.im.views.index': 'LOGIN_MESSAGES',
9 4f78c22c Sofia Papagiannaki
    'astakos.im.views.logout': 'LOGIN_MESSAGES',
10 4f78c22c Sofia Papagiannaki
    'astakos.im.views.login': 'LOGIN_MESSAGES',
11 4f78c22c Sofia Papagiannaki
    'astakos.im.views.signup': 'SIGNUP_MESSAGES',
12 4f78c22c Sofia Papagiannaki
    'astakos.im.views.edit_profile': 'PROFILE_MESSAGES',
13 4f78c22c Sofia Papagiannaki
    'astakos.im.views.change_password': 'PROFILE_MESSAGES',
14 4f78c22c Sofia Papagiannaki
    'astakos.im.views.invite': 'PROFILE_MESSAGES',
15 4f78c22c Sofia Papagiannaki
    'astakos.im.views.feedback': 'PROFILE_MESSAGES',
16 4f78c22c Sofia Papagiannaki
})
17 4f78c22c Sofia Papagiannaki
18 9a06d96f Olga Brani
19 4f78c22c Sofia Papagiannaki
@register.tag(name='display_messages')
20 4f78c22c Sofia Papagiannaki
def display_messages(parser, token):
21 4f78c22c Sofia Papagiannaki
    return MessagesNode()
22 4f78c22c Sofia Papagiannaki
23 9a06d96f Olga Brani
24 4f78c22c Sofia Papagiannaki
class DummyMessage(object):
25 4f78c22c Sofia Papagiannaki
    def __init__(self, type, msg):
26 4f78c22c Sofia Papagiannaki
        self.message = msg
27 4f78c22c Sofia Papagiannaki
        self.tags = type
28 4f78c22c Sofia Papagiannaki
29 4f78c22c Sofia Papagiannaki
    def __repr__(self):
30 4f78c22c Sofia Papagiannaki
        return "%s: %s" % (self.tags, self.message)
31 4f78c22c Sofia Papagiannaki
32 9a06d96f Olga Brani
33 4f78c22c Sofia Papagiannaki
class MessagesNode(template.Node):
34 4f78c22c Sofia Papagiannaki
35 4f78c22c Sofia Papagiannaki
    def get_view_messages(self, context):
36 4f78c22c Sofia Papagiannaki
        messages = list(context['GLOBAL_MESSAGES'])
37 4f78c22c Sofia Papagiannaki
        try:
38 4f78c22c Sofia Papagiannaki
            view = resolve(context['request'].get_full_path())[0]
39 4f78c22c Sofia Papagiannaki
            view_name = "%s.%s" % (view.__module__, view.func_name)
40 4f78c22c Sofia Papagiannaki
            messages += context[MESSAGES_VIEWS_MAP.get(view_name)]
41 4f78c22c Sofia Papagiannaki
            return messages
42 4f78c22c Sofia Papagiannaki
        except Exception, e:
43 4f78c22c Sofia Papagiannaki
            return messages
44 4f78c22c Sofia Papagiannaki
45 4f78c22c Sofia Papagiannaki
    def render(self, context):
46 4f78c22c Sofia Papagiannaki
        if self not in context.render_context:
47 4f78c22c Sofia Papagiannaki
            messages = list(context['messages'])
48 4f78c22c Sofia Papagiannaki
            if context['EXTRA_MESSAGES_SET']:
49 4f78c22c Sofia Papagiannaki
                view_messages = self.get_view_messages(context)
50 4f78c22c Sofia Papagiannaki
                for msg_object in view_messages:
51 4f78c22c Sofia Papagiannaki
                    messages.append(DummyMessage(msg_object[0], msg_object[1]))
52 4f78c22c Sofia Papagiannaki
53 4f78c22c Sofia Papagiannaki
            if not messages:
54 4f78c22c Sofia Papagiannaki
                return ""
55 4f78c22c Sofia Papagiannaki
56 4f78c22c Sofia Papagiannaki
            cls = messages[-1].tags
57 4f78c22c Sofia Papagiannaki
            content = '<div class="top-msg active %s">' % cls
58 4f78c22c Sofia Papagiannaki
            for msg in messages:
59 9a06d96f Olga Brani
                content += '<div class="msg %s">%s</div>' % (
60 9a06d96f Olga Brani
                    msg.tags, msg.message)
61 4f78c22c Sofia Papagiannaki
62 4f78c22c Sofia Papagiannaki
            content += '<a href="#" title="close" class="close">X</a>'
63 4f78c22c Sofia Papagiannaki
            content += '</div>'
64 4f78c22c Sofia Papagiannaki
            context.render_context[self] = content
65 4f78c22c Sofia Papagiannaki
66 4f78c22c Sofia Papagiannaki
        return context.render_context[self]
67 279d6e51 Olga Brani
68 279d6e51 Olga Brani
69 279d6e51 Olga Brani
@register.simple_tag
70 279d6e51 Olga Brani
def olga(v):
71 279d6e51 Olga Brani
    return v+'a'