Skip to content

Commit

Permalink
[#2502] change call for url_for tag and new link_for added
Browse files Browse the repository at this point in the history
  • Loading branch information
tobes committed Jun 12, 2012
1 parent 79705b6 commit 2fb317f
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 47 deletions.
81 changes: 36 additions & 45 deletions ckan/lib/jinja_tags.py
Expand Up @@ -5,77 +5,68 @@
import lib.helpers as h


class SnippetExtension(Extension):
''' Custom snippet tag
{% snippet <template_name> [, <keyword>=<value>].. %}
This is mostly magic..
'''

tags = set(['snippet'])

class BaseExtension(Extension):
def parse(self, parser):
stream = parser.stream
tag = stream.next()
template_name = parser.parse_expression()
# get keywords
# get arguments
args = []
kwargs = []
while not stream.current.test_any('block_end'):
stream.expect('comma')
if args or kwargs:
stream.expect('comma')
if stream.current.test('name') and stream.look().test('assign'):
key = nodes.Const(stream.next().value)
stream.skip()
value = parser.parse_expression()
kwargs.append(nodes.Pair(key, value, lineno=key.lineno))
else:
args.append(parser.parse_expression())

def make_call_node(*kw):
return self.call_method('_render', args=[
template_name,
return self.call_method('_call', args=[
nodes.List(args),
nodes.Dict(kwargs),
], kwargs=kw)

return nodes.Output([make_call_node()]).set_lineno(tag.lineno)


class SnippetExtension(BaseExtension):
''' Custom snippet tag
{% snippet <template_name> [, <keyword>=<value>].. %}
This is mostly magic..
'''

tags = set(['snippet'])

@classmethod
def _render(cls, template_name, kwargs):
return base.render_snippet(template_name, **kwargs)
def _call(cls, args, kwargs):
assert len(args) == 1
return base.render_snippet(args[0], **kwargs)


class UrlForExtension(Extension):
class UrlForExtension(BaseExtension):
''' Custom url_for tag
{% url_for(<params>) %}
{% url_for <params> %}
'''

tags = set(['url_for'])

def parse(self, parser):
stream = parser.stream
tag = stream.next()
# get arguments
args = []
kwargs = []
stream.expect('lparen')
while stream.current.type != 'rparen':
if args or kwargs:
stream.expect('comma')
if stream.current.test('name') and stream.look().test('assign'):
key = nodes.Const(stream.next().value)
stream.skip()
value = parser.parse_expression()
kwargs.append(nodes.Pair(key, value, lineno=key.lineno))
else:
args.append(parser.parse_expression())
stream.expect('rparen')
@classmethod
def _call(cls, args, kwargs):
return h.url_for(*args, **kwargs)

def make_call_node(*kw):
return self.call_method('_url_for', args=[
nodes.List(args),
nodes.Dict(kwargs),
], kwargs=kw)

return nodes.Output([make_call_node()]).set_lineno(tag.lineno)
class LinkForExtension(BaseExtension):
''' Custom link_for tag
{% url_for <params> %}
'''

tags = set(['link_for'])

@classmethod
def _url_for(cls, args, kwargs):
return h.url_for(*args, **kwargs)
def _call(cls, args, kwargs):
return h.nav_link(*args, **kwargs)
2 changes: 1 addition & 1 deletion ckan/templates/snippets/facet_list_static.html
Expand Up @@ -12,7 +12,7 @@ <h3 class="tag">Popular {{ c.facet_titles.get(name) }}</h3>
<ul class="tag-list">
{% for item in items %}
<li class="tag">
<a href="{% url_for(controller='tag', action='read', id=item.name) %}">{{ h.truncate(item.display_name, 22) }}</a>
<a href="{% url_for controller='tag', action='read', id=item.name %}">{{ h.truncate(item.display_name, 22) }}</a>
</li>
{% endfor %}
</ul>
Expand Down
2 changes: 1 addition & 1 deletion ckan/templates/snippets/language_selector.html
@@ -1,5 +1,5 @@
{% with current_url = request.environ['CKAN_CURRENT_URL'] %}
<form action="{% url_for(controller='util', action='redirect') %}" method="POST">
<form action="{% url_for controller='util', action='redirect' %}" method="POST">
<p>Languages</p>
<select name="url">
{% for locale in h.get_available_locales() %}
Expand Down

0 comments on commit 2fb317f

Please sign in to comment.