Commit 365793db by benjaoming

Merge pull request #107 from SacNaturalFoods/master

added kwargs logic to macros plugin and depth kwarg to article_list macro
parents 0751cc87 22486f51
...@@ -4,7 +4,8 @@ import re ...@@ -4,7 +4,8 @@ import re
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.template import Context from django.template import Context
MACRO_RE = re.compile(r'.*(\[(?P<macro>\w+)(\:(?P<arg>\w+))?\]).*', re.IGNORECASE) MACRO_RE = re.compile(r'.*(\[(?P<macro>\w+)(?P<kwargs>\s\w+\:.+)*\]).*', re.IGNORECASE)
KWARG_RE = re.compile(r'([^ |:]+):([^ |$]+)', re.IGNORECASE)
class MacroExtension(markdown.Extension): class MacroExtension(markdown.Extension):
...@@ -17,7 +18,7 @@ class MacroExtension(markdown.Extension): ...@@ -17,7 +18,7 @@ class MacroExtension(markdown.Extension):
class MacroPreprocessor(markdown.preprocessors.Preprocessor): class MacroPreprocessor(markdown.preprocessors.Preprocessor):
"""django-wiki macro preprocessor - parse text for various [some_macro] and """django-wiki macro preprocessor - parse text for various [some_macro] and
[some_macro:arg] references. """ [some_macro (kw:arg)*] references. """
allowed_methods = ('article_list',) allowed_methods = ('article_list',)
...@@ -29,22 +30,22 @@ class MacroPreprocessor(markdown.preprocessors.Preprocessor): ...@@ -29,22 +30,22 @@ class MacroPreprocessor(markdown.preprocessors.Preprocessor):
macro = m.group('macro').strip() macro = m.group('macro').strip()
if not macro in MacroPreprocessor.allowed_methods: if not macro in MacroPreprocessor.allowed_methods:
continue continue
arg = m.group('arg') kwargs = m.group('kwargs')
if arg: if kwargs:
arg = arg.strip() kwargs = eval('{' + KWARG_RE.sub(r'"\1":"\2",', kwargs) + '}')
try: line = getattr(self, macro)(**kwargs)
line = getattr(self, macro)(arg) else:
except AttributeError: line = getattr(self, macro)()
pass
if not line is None: if not line is None:
new_text.append(line) new_text.append(line)
return new_text return new_text
def article_list(self, arg=None): def article_list(self, depth=2):
html = render_to_string( html = render_to_string(
"wiki/plugins/macros/article_list.html", "wiki/plugins/macros/article_list.html",
Context({ Context({
'article_children': self.markdown.article.get_children, 'article_children': self.markdown.article.get_children,
'depth': int(depth) + 1,
}) })
) )
return self.markdown.htmlStash.store(html, safe=True) return self.markdown.htmlStash.store(html, safe=True)
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<h3>{% trans "Articles" %}</h3> <h3>{% trans "Articles" %}</h3>
<br/> <br/>
{% for child in article_children %} {% for child in article_children %}
{% article_list child %} {% article_list child depth %}
{% endfor %} {% endfor %}
</div> </div>
{% endif %} {% endif %}
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
{% load url from future %} {% load url from future %}
<p><a href="{% url 'wiki:get' path=parent.path article_id=parent.article.id %}">{{ parent.article }}</a></p> <p><a href="{% url 'wiki:get' path=parent.path article_id=parent.article.id %}">{{ parent.article }}</a></p>
{% if parent.children.count %} {% if parent.children.count and parent.level < depth %}
<div class="wiki-article-sublist"> <div class="wiki-article-sublist">
<ul> <ul>
{% for child in parent.children.all %} {% for child in parent.children.all %}
<li>{% article_list child %}</li> <li>{% article_list child depth %}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
......
...@@ -7,8 +7,9 @@ register = template.Library() ...@@ -7,8 +7,9 @@ register = template.Library()
'wiki/plugins/templatetags/article_list.html', 'wiki/plugins/templatetags/article_list.html',
takes_context=True takes_context=True
) )
def article_list(context, urlpath): def article_list(context, urlpath, depth):
context['parent'] = urlpath context['parent'] = urlpath
context['depth'] = depth
return context return context
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment