use the Jekyll pages information to create the menu
[web.git] / _plugins / menu.rb
diff --git a/_plugins/menu.rb b/_plugins/menu.rb
new file mode 100644 (file)
index 0000000..317db0c
--- /dev/null
@@ -0,0 +1,40 @@
+module Jekyll
+    module MenuFilter
+        def menu(input, displayurl)
+            def create_menu(pages, base, displayurl)
+                result = Array.new
+                for page in pages
+                    cururl = page['url'].sub('/index.html', '')
+                    if cururl.start_with?(base) and cururl.count('/') == base.count('/')
+                        # figure out CSS class
+                        if cururl == displayurl
+                            css_class = 'current'
+                        elsif cururl.start_with?(displayurl)
+                            css_class = 'child'
+                        elsif displayurl.start_with?(cururl)
+                            css_class = 'parent'
+                        else
+                            css_class = 'sibling'
+                        end
+                        # create menu node
+                        menu_node = { 'url' => page['url'], 'title' => page['title'], 'class' => css_class }
+                        # potentially recurse
+                        if (css_class == 'parent' or css_class == 'current')
+                            sub_nodes = create_menu(pages, cururl + "/", displayurl)
+                            if sub_nodes.size > 0
+                                menu_node['sub'] = sub_nodes
+                            end
+                        end
+                        # store menu node
+                        result.push(menu_node)
+                    end
+                end
+                result
+            end
+            
+            create_menu(input, "", displayurl.sub('/index.html', ''))
+        end
+    end
+end
+
+Liquid::Template.register_filter(Jekyll::MenuFilter)