diff --git a/app/models/metadata_permalink.rb b/app/models/metadata_permalink.rb index 895b7439..935202c9 100644 --- a/app/models/metadata_permalink.rb +++ b/app/models/metadata_permalink.rb @@ -7,12 +7,25 @@ class MetadataPermalink < MetadataString false end + # Devuelve la URL actual del sitio + # + # @return [String, nil] + def default_value + if post.written? + super.presence || document.url + else + super.presence + end + end + private # Al hacer limpieza, validamos la ruta. Eliminamos / multiplicadas, # puntos suspensivos, la primera / para que siempre sea relativa y # agregamos una / al final si la ruta no tiene extensión. def sanitize(value) + return value.strip if value.blank? + value = value.strip.unicode_normalize.gsub('..', '/').gsub('./', '').squeeze('/') value = value[1..-1] if value.start_with? '/' value += '/' if File.extname(value).blank? diff --git a/app/models/post.rb b/app/models/post.rb index f141bc92..a1f48219 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -413,6 +413,18 @@ class Post included end + # Devuelve la URL absoluta + # + # @return [String, nil] + def absolute_url + return unless written? + + @absolute_url ||= + URI.parse(site.url).tap do |uri| + uri.path = document.url + end.to_s + end + private # Levanta un error si al construir el artículo no pasamos un atributo. diff --git a/app/models/site.rb b/app/models/site.rb index 72e24fa0..d8fc1fe8 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -435,7 +435,9 @@ class Site < ApplicationRecord # Si estamos usando nuestro propio plugin de i18n, los posts están # en "colecciones" locales.map(&:to_s).each do |i| - @configuration['collections'][i] = {} + @configuration['collections'][i] = { + 'permalink' => configuration.send(:style_to_permalink, configuration['permalink']) + } end @configuration diff --git a/app/views/posts/attribute_ro/_permalink.haml b/app/views/posts/attribute_ro/_permalink.haml index 67642e2c..13f878c6 100644 --- a/app/views/posts/attribute_ro/_permalink.haml +++ b/app/views/posts/attribute_ro/_permalink.haml @@ -1,3 +1,3 @@ %tr{ id: attribute } %th= post_label_t(attribute, post: post) - %td{ dir: dir, lang: locale }= metadata.value + %td{ dir: dir, lang: locale }= link_to post.absolute_url, post.absolute_url, target: '_blank', rel: 'noopener' diff --git a/app/views/posts/attributes/_permalink.haml b/app/views/posts/attributes/_permalink.haml index aa033643..ab951cbe 100644 --- a/app/views/posts/attributes/_permalink.haml +++ b/app/views/posts/attributes/_permalink.haml @@ -1,7 +1,8 @@ -.form-group - = label_tag "#{base}_#{attribute}", post_label_t(attribute, post: post) - = text_field base, attribute, value: metadata.value, - dir: dir, lang: locale, - **field_options(attribute, metadata) - = render 'posts/attribute_feedback', - post: post, attribute: attribute, metadata: metadata +- if post.written? + .form-group + = label_tag "#{base}_#{attribute}", post_label_t(attribute, post: post) + = text_field base, attribute, value: metadata.value, + dir: dir, lang: locale, + **field_options(attribute, metadata) + = render 'posts/attribute_feedback', + post: post, attribute: attribute, metadata: metadata