]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/templatetags/extra_tags.py
ALteration of the schema to a single content model. As a bonus there is a complete...
[osqa.git] / forum / templatetags / extra_tags.py
index 26c52b8d0408b2e6c55f384bc6b002c93d26c776..79d357d1a92e17deae769e1d8cb45bd313f32a62 100644 (file)
@@ -9,10 +9,12 @@ from django import template
 from django.utils.encoding import smart_unicode
 from django.utils.safestring import mark_safe
 from forum.const import *
-from forum.models import Question, Answer, QuestionRevision, AnswerRevision
+from forum.models import Question, Answer, QuestionRevision, AnswerRevision, NodeRevision
 from django.utils.translation import ugettext as _
 from django.utils.translation import ungettext
+from django.utils import simplejson
 from django.conf import settings
+from django.template.defaulttags import url as default_url
 from forum import skins
 
 register = template.Library()
@@ -129,7 +131,7 @@ def post_contributor_info(post,contributor_type='original_author'):
         post_type = 'question'
     elif isinstance(post,Answer):
         post_type = 'answer'
-    elif isinstance(post,AnswerRevision) or isinstance(post,QuestionRevision):
+    elif isinstance(post,(AnswerRevision, QuestionRevision, NodeRevision)):
         post_type = 'revision'
     return {
         'post':post,
@@ -194,13 +196,6 @@ def get_score_badge_by_details(rep, gold, silver, bronze):
                'badgeword' : _('badges'),
     })      
     
-@register.simple_tag
-def get_user_vote_image(dic, key, arrow):
-    if dic.has_key(key):
-        if int(dic[key]) == int(arrow):
-            return '-on'
-    return ''
-        
 @register.simple_tag
 def get_age(birthday):
     current_time = datetime.datetime(*time.localtime()[0:6])
@@ -355,3 +350,66 @@ def blockmedia(parser,token):
         if next.contents == 'endblockmedia':
             break
     return BlockMediaUrlNode(nodelist)
+
+class FullUrlNode(template.Node):
+    def __init__(self, default_node):
+        self.default_node = default_node
+
+    def render(self, context):
+        domain = settings.APP_URL
+        #protocol = getattr(settings, "PROTOCOL", "http")
+        path = self.default_node.render(context)
+        return "%s%s" % (domain, path)
+
+@register.tag(name='fullurl')
+def fullurl(parser, token):
+    default_node = default_url(parser, token)
+    return FullUrlNode(default_node)
+
+@register.simple_tag
+def fullmedia(url):
+    domain = settings.APP_URL
+    #protocol = getattr(settings, "PROTOCOL", "http")
+    path = media(url)
+    return "%s%s" % (domain, path)
+
+class UserVarNode(template.Node):
+    def __init__(self, tokens):
+        self.tokens = tokens
+
+    def render(self, context):
+        return "{{ %s }}" % self.tokens
+
+@register.tag(name='user_var')
+def user_var(parser, token):
+    tokens = " ".join(token.split_contents()[1:])
+    return UserVarNode(tokens)
+
+
+class VariablesNode(template.Node):
+    def __init__(self, nodelist, var_name):
+        self.nodelist = nodelist
+        self.var_name = var_name
+
+    def render(self, context):
+        source = self.nodelist.render(context)
+        context[self.var_name] = simplejson.loads(source)
+        return ''
+
+@register.tag(name='var')
+def do_variables(parser, token):
+    try:
+        tag_name, arg = token.contents.split(None, 1)
+    except ValueError:
+        msg = '"%s" tag requires arguments' % token.contents.split()[0]
+        raise template.TemplateSyntaxError(msg)
+    m = re.search(r'as (\w+)', arg)
+    if m:
+        var_name, = m.groups()
+    else:
+        msg = '"%s" tag had invalid arguments' % tag_name
+        raise template.TemplateSyntaxError(msg)
+
+    nodelist = parser.parse(('endvar',))
+    parser.delete_first_token()
+    return VariablesNode(nodelist, var_name)