diff options
| -rw-r--r-- | _i18n/ca.yml | 2 | ||||
| -rw-r--r-- | _i18n/en.yml | 2 | ||||
| -rw-r--r-- | _layouts/post.html | 1 | ||||
| -rw-r--r-- | _plugins/log.rb | 94 | ||||
| -rw-r--r-- | _plugins/modified_time_helper.rb | 35 | ||||
| -rw-r--r-- | _plugins/type.rb | 16 |
6 files changed, 136 insertions, 14 deletions
diff --git a/_i18n/ca.yml b/_i18n/ca.yml index 3bd462d..70bdc36 100644 --- a/_i18n/ca.yml +++ b/_i18n/ca.yml @@ -46,6 +46,8 @@ blog: Aquesta és la pàgina que mostra les entrades en català del meu blog. Totes les opinions exposades aquí són únicament meves a no ser que indiqui el contrari. + modified_at: "Última data de modificació" + you_can_check: "Pots consultar l'historial d'aquesta entrada" notice: >- A no ser que hagi indicat quelcom contrari a la meva entrada, totes les opinions expressades aquí són únicament meves i no representen a ningú diff --git a/_i18n/en.yml b/_i18n/en.yml index e03b18b..7308f60 100644 --- a/_i18n/en.yml +++ b/_i18n/en.yml @@ -46,6 +46,8 @@ blog: This is the page that aggregates the english blog posts. All of the opinions stated here are solely my own (unless stated otherwise). Last but not least, these entries are licensed under the + modified_at: "Modified date" + you_can_check: "You can check the log of this entry" notice: >- Unless otherwise stated, all of the opinions in the above post are solely my own and do not represent anyone else. diff --git a/_layouts/post.html b/_layouts/post.html index 8a8eb68..1adc02b 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -11,6 +11,7 @@ layout: default {{ content }} <div class="post-notice"> + <p>{% t blog.modified_at %}: {% render_modified_at %}. {% t blog.you_can_check %} {% render_log_link %}.</p> <p> {% t blog.notice %} <a href="https://creativecommons.org/licenses/by-nd/4.0/">Creative Commons BY-ND 4.0</a>. diff --git a/_plugins/log.rb b/_plugins/log.rb new file mode 100644 index 0000000..2331f10 --- /dev/null +++ b/_plugins/log.rb @@ -0,0 +1,94 @@ +# frozen_string_literal: true + +# Copyright (C) 2019 Miquel Sabaté Solà <mikisabate@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +require "date" +require_relative "modified_time_helper" + +module Jekyll + # Render the last modification time of the given page. + class RenderModifiedAt < Liquid::Tag + include ::Jekyll::ModifiedTimeHelper + + def render(context) + time = Time.iso8601(modified_time(context["page"])) + + if context["page"]["lang"] == "en" + time.strftime("%B %-d, %Y, at %H:%m") + else + time.strftime("%-d de #{catalan_month(time.month)} de %Y, a les %H:%m") + end + end + + protected + + # Given a month number, return its catalan translation. + # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity + def catalan_month(month) + case month + when 1 + "gener" + when 2 + "febrer" + when 3 + "març" + when 4 + "abril" + when 5 + "maig" + when 6 + "juny" + when 7 + "juliol" + when 8 + "agost" + when 9 + "setembre" + when 10 + "octubre" + when 11 + "novembre" + when 12 + "desembre" + else + "" + end + end + # rubocop:enable Metrics/MethodLength, Metrics/CyclomaticComplexity + end + + # Render the link to git.mssola.com of the given page. + class RenderLogLink < Liquid::Tag + include ::Jekyll::ModifiedTimeHelper + + WEBSITE_BASE = "http://git.mssola.com" + WEBSITE_REPO = "jo.git" + + def render(context) + page = context["page"] + url = "#{WEBSITE_BASE}/#{WEBSITE_REPO}/log/#{page["relative_path"]}" + + if page["lang"] == "en" + "<a href=\"#{url}\" title=\"Log for this page\">here</a>" + else + "<a href=\"#{url}\" title=\"Historial d'aquesta pàgina (anglès)\">aquí</a>" + end + end + end +end + +Liquid::Template.register_tag("render_modified_at", Jekyll::RenderModifiedAt) +Liquid::Template.register_tag("render_log_link", Jekyll::RenderLogLink) diff --git a/_plugins/modified_time_helper.rb b/_plugins/modified_time_helper.rb new file mode 100644 index 0000000..9c6b880 --- /dev/null +++ b/_plugins/modified_time_helper.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +# Copyright (C) 2019 Miquel Sabaté Solà <mikisabate@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +module Jekyll + # ModifiedTimeHelper offers methods to fetch the modified time of a given page. + module ModifiedTimeHelper + # Returns the modified time of the given page. + def modified_time(page) + path = File.expand_path(File.join(File.dirname(__FILE__), "..", page["path"])) + out = `git log -n 1 --pretty='format:%cd' --date=iso8601-strict -- #{path}` + + begin + Time.iso8601(out) + out + rescue ArgumentError => e + puts "[WARNING] Could not parse the given modified time from Git: #{e}" + nil + end + end + end +end diff --git a/_plugins/type.rb b/_plugins/type.rb index 3107b4a..211e7e0 100644 --- a/_plugins/type.rb +++ b/_plugins/type.rb @@ -17,11 +17,13 @@ require "time" require_relative "render_helper" +require_relative "modified_time_helper" module Jekyll # Render og:type related tags. class RenderTypeTags < Liquid::Tag include ::Jekyll::RenderHelper + include ::Jekyll::ModifiedTimeHelper def render(context) if ["posts"].include?(context["page"]["collection"]) @@ -55,20 +57,6 @@ module Jekyll # Jekyll completely disregards the hour, minutes, etc., so why bother. page["date"].to_s.split.first end - - # Returns the modified time of the given page. - def modified_time(page) - path = File.expand_path(File.join(File.dirname(__FILE__), "..", page["path"])) - out = `git log -n 1 --pretty='format:%cd' --date=iso8601-strict -- #{path}` - - begin - Time.iso8601(out) - out - rescue ArgumentError => e - puts "[WARNING] Could not parse the given modified time from Git: #{e}" - nil - end - end end end |
