M wiki/plugins/macros/markdown_extensions.py => wiki/plugins/macros/markdown_extensions.py +11 -10
@@ 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)
M wiki/plugins/macros/templates/wiki/plugins/macros/article_list.html => wiki/plugins/macros/templates/wiki/plugins/macros/article_list.html +1 -1
@@ 5,7 5,7 @@
<h3>{% trans "Articles" %}</h3>
<br/>
{% for child in article_children %}
- {% article_list child %}
+ {% article_list child depth %}
{% endfor %}
</div>
{% endif %}
M wiki/plugins/macros/templates/wiki/plugins/templatetags/article_list.html => wiki/plugins/macros/templates/wiki/plugins/templatetags/article_list.html +2 -2
@@ 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>
M wiki/plugins/macros/templatetags/wiki_macro_tags.py => wiki/plugins/macros/templatetags/wiki_macro_tags.py +2 -1
@@ 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