]> git.openstreetmap.org Git - osqa.git/blobdiff - osqa/forum/skins/__init__.py
initial import
[osqa.git] / osqa / forum / skins / __init__.py
diff --git a/osqa/forum/skins/__init__.py b/osqa/forum/skins/__init__.py
new file mode 100644 (file)
index 0000000..be6bd4f
--- /dev/null
@@ -0,0 +1,57 @@
+from django.conf import settings
+from django.template import loader
+from django.template.loaders import filesystem 
+from django.http import HttpResponse
+import os.path
+import logging
+
+#module for skinning osqa
+#at this point skin can be changed only in settings file
+#via OSQA_DEFAULT_SKIN variable
+
+#note - Django template loaders use method django.utils._os.safe_join
+#to work on unicode file paths
+#here it is ignored because it is assumed that we won't use unicode paths
+
+def load_template_source(name, dirs=None):
+    try:
+        tname = os.path.join(settings.OSQA_DEFAULT_SKIN,'templates',name)
+        return filesystem.load_template_source(tname,dirs)
+    except:
+        tname = os.path.join('default','templates',name)
+        return filesystem.load_template_source(tname,dirs)
+load_template_source.is_usable = True
+
+def find_media_source(url):
+    """returns url prefixed with the skin name
+    of the first skin that contains the file 
+    directories are searched in this order:
+    settings.OSQA_DEFAULT_SKIN, then 'default', then 'commmon'
+    if file is not found - returns None
+    and logs an error message
+    """
+    while url[0] == '/': url = url[1:]
+    d = os.path.dirname
+    n = os.path.normpath
+    j = os.path.join
+    f = os.path.isfile
+    skins = n(j(d(d(__file__)),'skins'))
+    try:
+        media = os.path.join(skins, settings.OSQA_DEFAULT_SKIN, url)
+        assert(f(media))
+        use_skin = settings.OSQA_DEFAULT_SKIN
+    except:
+        try:
+            media = j(skins, 'default', url)
+            assert(f(media))
+            use_skin = 'default'
+        except:
+            media = j(skins, 'common', url)
+            try:
+                assert(f(media))
+                use_skin = 'common'
+            except:
+                logging.error('could not find media for %s' % url)
+                use_skin = ''
+                return None
+    return use_skin + '/' + url