Move get_jinja_loader to init submodule.
[mediagoblin.git] / mediagoblin / util.py
index 349bc02788be4861b1bcaaf7969f84eb48c77734..ab219df034e9c0d0ee0c36e8330d3512fa94108f 100644 (file)
@@ -29,11 +29,12 @@ import jinja2
 import translitcodec
 from webob import Response, exc
 from lxml.html.clean import Cleaner
+import markdown
 
 from mediagoblin import mg_globals
+from mediagoblin import messages
 from mediagoblin.db.util import ObjectId
 
-
 TESTS_ENABLED = False
 def _activate_testing():
     """
@@ -63,22 +64,6 @@ def clear_test_buckets():
     clear_test_template_context()
 
 
-def get_jinja_loader(user_template_path=None):
-    """
-    Set up the Jinja template loaders, possibly allowing for user
-    overridden templates.
-
-    (In the future we may have another system for providing theming;
-    for now this is good enough.)
-    """
-    if user_template_path:
-        return jinja2.ChoiceLoader(
-            [jinja2.FileSystemLoader(user_template_path),
-             jinja2.PackageLoader('mediagoblin', 'templates')])
-    else:
-        return jinja2.PackageLoader('mediagoblin', 'templates')
-
-
 SETUP_JINJA_ENVS = {}
 
 
@@ -98,12 +83,16 @@ def get_jinja_env(template_loader, locale):
 
     template_env = jinja2.Environment(
         loader=template_loader, autoescape=True,
-        extensions=['jinja2.ext.i18n'])
+        extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'])
 
     template_env.install_gettext_callables(
         mg_globals.translations.gettext,
         mg_globals.translations.ngettext)
 
+    # All templates will know how to ...
+    # ... fetch all waiting messages and remove them from the queue
+    template_env.globals['fetch_messages'] = messages.fetch_messages
+
     if exists(locale):
         SETUP_JINJA_ENVS[locale] = template_env
 
@@ -373,9 +362,28 @@ HTML_CLEANER = Cleaner(
 
 
 def clean_html(html):
+    # clean_html barfs on an empty string
+    if not html:
+        return u''
+
     return HTML_CLEANER.clean_html(html)
 
 
+MARKDOWN_INSTANCE = markdown.Markdown(safe_mode='escape')
+
+
+def cleaned_markdown_conversion(text):
+    """
+    Take a block of text, run it through MarkDown, and clean its HTML.
+    """
+    # Markdown will do nothing with and clean_html can do nothing with
+    # an empty string :)
+    if not text:
+        return u''
+
+    return clean_html(MARKDOWN_INSTANCE.convert(text))
+
+
 SETUP_GETTEXTS = {}
 
 def setup_gettext(locale):