+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)