summaryrefslogtreecommitdiffstats
path: root/forum/skins/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'forum/skins/__init__.py')
-rw-r--r--forum/skins/__init__.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/forum/skins/__init__.py b/forum/skins/__init__.py
new file mode 100644
index 00000000..be6bd4f3
--- /dev/null
+++ b/forum/skins/__init__.py
@@ -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