aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <msabate@suse.com>2019-10-22 17:38:30 +0200
committerMiquel Sabaté Solà <msabate@suse.com>2019-10-22 17:38:30 +0200
commit3689740b0d8d619d1810cbf65808fc9f7bf01e4a (patch)
tree067593add490656a14fa2eeecc6d2a72be3aa78e
parentcd286d9f33104e447029b771a8ef6e31d50d6b3a (diff)
downloadjo.mssola.com-3689740b0d8d619d1810cbf65808fc9f7bf01e4a.tar.gz
jo.mssola.com-3689740b0d8d619d1810cbf65808fc9f7bf01e4a.zip
Add modified_at info at the post layout
At the bottom of every blog post, there will now be a small text containing: 1. The localized date of the last modified time the blog post was modified (taking Git as a reference). 2. A link to the log at git.mssola.com for the given file. This way readers have a better understanding of the versioning of a given page. Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
-rw-r--r--_i18n/ca.yml2
-rw-r--r--_i18n/en.yml2
-rw-r--r--_layouts/post.html1
-rw-r--r--_plugins/log.rb94
-rw-r--r--_plugins/modified_time_helper.rb35
-rw-r--r--_plugins/type.rb16
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