X-Git-Url: https://git.ralfj.de/web.git/blobdiff_plain/e8acdb6709352f474fd6855afc62044798388bcc..bc8bbcf168afb52ec0bdd219122e8b817c361468:/_plugins/menu.rb diff --git a/_plugins/menu.rb b/_plugins/menu.rb new file mode 100644 index 0000000..317db0c --- /dev/null +++ b/_plugins/menu.rb @@ -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)