update menu plugin to work with Jekyll 3.0
authorRalf Jung <post@ralfj.de>
Sat, 2 Jan 2016 12:24:27 +0000 (13:24 +0100)
committerRalf Jung <post@ralfj.de>
Sat, 2 Jan 2016 12:24:27 +0000 (13:24 +0100)
ralf/_includes/menu-level.html
ralf/_layouts/page.html
ralf/_plugins/categories.rb
ralf/_plugins/menu.rb
ralf/_plugins/readmes.rb

index 28b45c79b2eb5233540d20e4e194eb1bef175129..7e4e5ef38da33c662ca6893bf5de87a4b26c1e83 100644 (file)
@@ -1,5 +1,5 @@
 <ul><!--{% for item in include.menu %}
 <ul><!--{% for item in include.menu %}
-    --><li class="{{ item.class }}"><a class="{{ item.class }}" href="{{ site.baseurl }}{{ item.url | replace: '/index.html','/' }}">{{ item.title }}</a></li><!--
+    --><li class="{{ item.class }}"><a class="{{ item.class }}" href="{{ site.baseurl }}{{ item.url }}">{{ item.title }}</a></li><!--
     {% if item.sub %}
         --><li class="sub">{% include menu-level.html menu=item.sub %}</li><!--
     {% endif %}
     {% if item.sub %}
         --><li class="sub">{% include menu-level.html menu=item.sub %}</li><!--
     {% endif %}
index a45f67fa3f0039624c099a218b7c7747fcab0d94..d3b16f2861308e548393527fbc3b1f2699d4ab18 100644 (file)
@@ -13,7 +13,7 @@
     {% if page.excerpt %}<meta name="description" content="{{ page.excerpt | newline_to_br | replace:'<br />',' ' | strip_html | strip_newlines | truncate: 192 }}">{% endif %}
 
     <link rel="stylesheet" href="{{ site.baseurl }}/style.css">
     {% if page.excerpt %}<meta name="description" content="{{ page.excerpt | newline_to_br | replace:'<br />',' ' | strip_html | strip_newlines | truncate: 192 }}">{% endif %}
 
     <link rel="stylesheet" href="{{ site.baseurl }}/style.css">
-    <link rel="canonical" href="{{ site.url }}{{ site.baseurl }}{{ page.url | replace:'/index.html','/' }}">
+    <link rel="canonical" href="{{ site.url }}{{ site.baseurl }}{{ page.url }}">
     {% if page.rss %}
         <link rel="alternate" type="application/atom+xml" title="{{ site.blog.title }}" href="{{ site.baseurl }}/blog/feed.xml" />
         {% if page.category %}<link rel="alternate" type="application/atom+xml" title="{{ site.blog.title }} • {{ title }}" href="{{ site.baseurl }}{{ page.url | replace: '.html','.xml' }}" />{% endif %}
     {% if page.rss %}
         <link rel="alternate" type="application/atom+xml" title="{{ site.blog.title }}" href="{{ site.baseurl }}/blog/feed.xml" />
         {% if page.category %}<link rel="alternate" type="application/atom+xml" title="{{ site.blog.title }} • {{ title }}" href="{{ site.baseurl }}{{ page.url | replace: '.html','.xml' }}" />{% endif %}
index 1da0fe11edfff565202d8d2b13fcf03730b801ce..65776d72b067790e98677386f8df0f52c70ac1e9 100644 (file)
@@ -9,7 +9,7 @@ module Jekyll
 
       self.process(@name)
       self.read_yaml(File.join(base, '_layouts'), layout)
 
       self.process(@name)
       self.read_yaml(File.join(base, '_layouts'), layout)
-      self.data['category'] = category
+      self.data['category'] = category # this tells the site template to add a link to the RSS feed
 
       category_title_prefix = site.config['blog']['category_title_prefix'] || 'Category: '
       self.data['title'] = "#{category_title_prefix}#{category.capitalize}"
 
       category_title_prefix = site.config['blog']['category_title_prefix'] || 'Category: '
       self.data['title'] = "#{category_title_prefix}#{category.capitalize}"
index 48befa744554a401219d35667b016724eae50881..92eaa6a48cba06124d5f79ac854a9d1c3883307a 100644 (file)
@@ -2,9 +2,12 @@ module Jekyll
   module MenuFilter
     def menu(input, displayurl)
       def create_menu(pages, base, displayurl)
   module MenuFilter
     def menu(input, displayurl)
       def create_menu(pages, base, displayurl)
+        # URLs in `base`, `displayurl`, `cururl` are normalized to remove trailing slashes. This is to be able to distinguish the root of a folder from its children by the number of slashes in the URL.
+        # We need this to treat the root of a folder as a direct child of the parent folder, whereas pages within a subfolder are of course grandchildren.
         result = Array.new
         for page in pages
         result = Array.new
         for page in pages
-          cururl = page['url'].sub('/index.html', '')
+          cururl = page['url'].chomp('/')
+          # Test if this page is a non-hidden *direct* child of `base`
           if cururl.start_with?(base) and cururl.count('/') == base.count('/') and (not page['hide'])
             # figure out CSS class
             if cururl == displayurl
           if cururl.start_with?(base) and cururl.count('/') == base.count('/') and (not page['hide'])
             # figure out CSS class
             if cururl == displayurl
@@ -36,13 +39,15 @@ module Jekyll
             end
             # store menu node
             result.push(menu_node)
             end
             # store menu node
             result.push(menu_node)
+          else
+            #print "Not adding: cur=", cururl, ", base=", base, ", hide=", page['hide'], "\n"
           end
         end
         # sort the result before returning it
         result.sort_by { |page| [page['sort'], page['url']] }
       end
       
           end
         end
         # sort the result before returning it
         result.sort_by { |page| [page['sort'], page['url']] }
       end
       
-      create_menu(input, "", displayurl.sub('/index.html', ''))
+      create_menu(input, "", displayurl.chomp('/'))
     end
   end
 end
     end
   end
 end
index 63df995ef9afd17a431ee2295d39baa5decb6d96..7767be727366e97a81bffd3c5e077e47bbdf2d3b 100644 (file)
@@ -27,6 +27,7 @@ module Jekyll
     safe true
 
     def generate(site)
     safe true
 
     def generate(site)
+      # Go through all READMEs, and add them as pages
       readmes = site.config['readmes']
       return if readmes.nil?
       base = readmes['src_base']
       readmes = site.config['readmes']
       return if readmes.nil?
       base = readmes['src_base']