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
from django.template.loader import render_to_string
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):
......@@ -17,7 +18,7 @@ class MacroExtension(markdown.Extension):
class MacroPreprocessor(markdown.preprocessors.Preprocessor):
"""django-wiki macro preprocessor - parse text for various [some_macro] and
[some_macro:arg] references. """
[some_macro (kw:arg)*] references. """
allowed_methods = ('article_list',)
......@@ -29,22 +30,22 @@ class MacroPreprocessor(markdown.preprocessors.Preprocessor):
macro = m.group('macro').strip()
if not macro in MacroPreprocessor.allowed_methods:
continue
arg = m.group('arg')
if arg:
arg = arg.strip()
try:
line = getattr(self, macro)(arg)
except AttributeError:
pass
kwargs = m.group('kwargs')
if kwargs:
kwargs = eval('{' + KWARG_RE.sub(r'"\1":"\2",', kwargs) + '}')
line = getattr(self, macro)(**kwargs)
else:
line = getattr(self, macro)()
if not line is None:
new_text.append(line)
return new_text
def article_list(self, arg=None):
def article_list(self, depth=2):
html = render_to_string(
"wiki/plugins/macros/article_list.html",
Context({
'article_children': self.markdown.article.get_children,
'depth': int(depth) + 1,
})
)
return self.markdown.htmlStash.store(html, safe=True)
......
......@@ -5,7 +5,7 @@
<h3>{% trans "Articles" %}</h3>
<br/>
{% for child in article_children %}
{% article_list child %}
{% article_list child depth %}
{% endfor %}
</div>
{% endif %}
......@@ -2,11 +2,11 @@
{% load url from future %}
<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">
<ul>
{% for child in parent.children.all %}
<li>{% article_list child %}</li>
<li>{% article_list child depth %}</li>
{% endfor %}
</ul>
</div>
......
......@@ -7,8 +7,9 @@ register = template.Library()
'wiki/plugins/templatetags/article_list.html',
takes_context=True
)
def article_list(context, urlpath):
def article_list(context, urlpath, depth):
context['parent'] = urlpath
context['depth'] = depth
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