From 18608c867a6cbe7880ea0273c463d4be93f2cc9f Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Mon, 28 Aug 2017 22:23:44 +0200 Subject: Fix prev/next links for posts. Now points to prev/next post in same language as the current post. --- blog/_layouts/post.html | 12 +++++----- blog/_plugins/prev_next.rb | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 blog/_plugins/prev_next.rb diff --git a/blog/_layouts/post.html b/blog/_layouts/post.html index 8a3cccb..f4f2a59 100644 --- a/blog/_layouts/post.html +++ b/blog/_layouts/post.html @@ -13,11 +13,11 @@ layout: default {{ content }} diff --git a/blog/_plugins/prev_next.rb b/blog/_plugins/prev_next.rb new file mode 100644 index 0000000..7e9c983 --- /dev/null +++ b/blog/_plugins/prev_next.rb @@ -0,0 +1,57 @@ +require 'pry-byebug' + +module Jekyll + class PrevNextTag < Liquid::Tag + + def initialize(tag_name, text, tokens) + super + @tag = tag_name + @text = text + end + + def render(context) + page = context['page'] + other_page = case @tag + when "link_to_prev_page" then find_prev(page) + when "link_to_next_page" then find_next(page) + else nil + end + + if other_page + %Q{#{@text} #{other_page['title']}} + else + "" + end + end + + private + + def find_prev(obj) + n = obj.previous + loop do + if n && n['lang'] != obj['lang'] + n = n.previous + else + break + end + end + return n + end + + def find_next(obj) + n = obj.next + loop do + if n && n['lang'] != obj['lang'] + n = n.next + else + break + end + end + return n + end + + end +end + +Liquid::Template.register_tag('link_to_next_page', Jekyll::PrevNextTag) +Liquid::Template.register_tag('link_to_prev_page', Jekyll::PrevNextTag) -- cgit v1.2.3