Added menu functions to template that generate a menu based on the
[cmless] / bin / cmless.py
index 825ec25..f4a5a28 100755 (executable)
@@ -4,7 +4,7 @@
 # See LICENSE file for copyright and license details.
 
 # Python imports
 # See LICENSE file for copyright and license details.
 
 # Python imports
-import sys
+import sys, os, urllib.parse
 
 # CMless imports
 import config, misc, template
 
 # CMless imports
 import config, misc, template
@@ -12,12 +12,28 @@ import config, misc, template
 def main():
     print("Content-Type: text/html;charset=utf-8\n")
 
 def main():
     print("Content-Type: text/html;charset=utf-8\n")
 
+    # Since we can't use Apache's DirectoryIndex directive due to a RewriteCond
+    # passing all non-file objects to this script, we implement equivalent
+    # functionality here.
+    if os.environ['REQUEST_URI'][-1] == "/":
+        os.environ['REQUEST_URI'] = os.environ['REQUEST_URI'] + config.default_page
+
+    # Since we use REQUEST_URI to navigate the filesystem we need to unquote it.
+    # In other words, replace things like '%20' with ' ' (a space character).
+    os.environ['REQUEST_URI'] = urllib.parse.unquote(os.environ['REQUEST_URI'])
+
+    # The template engine operates like a micropass compiler with each pass
+    # handling one tag from the template.  Extensions to the template engine
+    # should be executed from here and should not have or create
+    # inter-dependencies.
     content = misc.load_file(config.site_template_prefix + "/" + config.template_file)
     content = template.page_title(content)
     content = template.site_title(content)
     content = template.current_year(content)
     content = template.head_meta_description(content)
     content = template.head_meta_keywords(content)
     content = misc.load_file(config.site_template_prefix + "/" + config.template_file)
     content = template.page_title(content)
     content = template.site_title(content)
     content = template.current_year(content)
     content = template.head_meta_description(content)
     content = template.head_meta_keywords(content)
+    content = template.menu_top_level(content)
+    content = template.menu_current_dir(content)
     content = template.body(content)
     print(content)
 
     content = template.body(content)
     print(content)