2019-08-08 18:28:23 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-08-07 21:35:37 +00:00
|
|
|
require 'jekyll/utils'
|
|
|
|
|
|
|
|
# El slug es el nombre del archivo sin la fecha ni la extensión y se
|
|
|
|
# deriva del título.
|
|
|
|
#
|
|
|
|
# Si el slug del document es distinto al que le asignaría el título
|
|
|
|
# slugificado, quiere decir que lo indicamos manualmente y no hay que
|
|
|
|
# cambiarlo.
|
|
|
|
#
|
|
|
|
# Pero si cambiamos el slug manualmente, tenemos que darle prioridad a
|
|
|
|
# ese cambio.
|
|
|
|
#
|
|
|
|
# El slug por defecto es el asignado por el documento.
|
|
|
|
#
|
|
|
|
# Si no hay slug, slugificamos el título.
|
|
|
|
#
|
|
|
|
# Si cambiamos el título y el slug coincide con el slug del título
|
|
|
|
# anterior, también lo cambiamos para mantener las URLs consistentes.
|
|
|
|
# Luego podemos usar el plugin que guarda los slugs anteriores para
|
|
|
|
# generar links.
|
|
|
|
#
|
|
|
|
# TODO: Transliterar tildes?
|
|
|
|
class MetadataSlug < MetadataTemplate
|
|
|
|
# Trae el slug desde el título si existe o una string al azar
|
|
|
|
def default_value
|
2022-04-28 13:56:47 +00:00
|
|
|
title ? Jekyll::Utils.slugify(title, mode: site.slugify_mode) : SecureRandom.uuid
|
2019-08-07 21:35:37 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def value
|
2020-07-21 22:34:15 +00:00
|
|
|
self[:value] ||= document.data.fetch('slug', default_value)
|
2019-08-07 21:35:37 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
2020-08-20 23:38:31 +00:00
|
|
|
# Devuelve el título a menos que sea privado y no esté vacío
|
2019-08-07 21:35:37 +00:00
|
|
|
def title
|
2021-02-17 21:44:28 +00:00
|
|
|
return if post.title&.private?
|
|
|
|
return if post.title&.value&.blank?
|
|
|
|
|
2022-04-28 13:57:28 +00:00
|
|
|
post.title&.value&.to_s&.unicode_normalize
|
2019-08-07 21:35:37 +00:00
|
|
|
end
|
|
|
|
end
|