2019-03-26 15:32:20 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-07-31 20:55:34 +00:00
|
|
|
# Helpers
|
2018-01-02 17:19:25 +00:00
|
|
|
module ApplicationHelper
|
2019-08-13 19:09:23 +00:00
|
|
|
# Devuelve el atributo name de un campo anidado en el formato que
|
|
|
|
# esperan los helpers *_field
|
|
|
|
#
|
|
|
|
# [ 'post', :image, :description ]
|
|
|
|
# [ 'post[image]', :description ]
|
|
|
|
# 'post[image][description]'
|
|
|
|
def field_name_for(*names)
|
2018-06-19 20:38:43 +00:00
|
|
|
name = names.pop
|
2019-08-13 19:09:23 +00:00
|
|
|
root = names.shift
|
|
|
|
|
2018-06-19 20:38:43 +00:00
|
|
|
names.each do |n|
|
2019-08-13 19:09:23 +00:00
|
|
|
root += "[#{n}]"
|
2018-06-19 20:38:43 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
[root, name]
|
|
|
|
end
|
|
|
|
|
2019-08-02 00:20:42 +00:00
|
|
|
def distance_of_time_in_words_if_more_than_a_minute(seconds)
|
|
|
|
if seconds > 60
|
|
|
|
distance_of_time_in_words seconds
|
|
|
|
else
|
|
|
|
I18n.t('seconds', seconds: seconds)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-08-14 21:19:01 +00:00
|
|
|
# Devuelve todas las etiquetas HTML que queremos mantener
|
|
|
|
def all_html_tags
|
|
|
|
%w[h1 h2 h3 h4 h5 h6 p a ul ol li table tr td th tbody thead
|
|
|
|
tfoot em strong sup blockquote cite pre section article]
|
|
|
|
end
|
|
|
|
|
2019-02-16 17:30:54 +00:00
|
|
|
def sanitize_markdown(text, options = {})
|
2019-08-14 21:19:01 +00:00
|
|
|
options.merge!(attributes: %w[id href alt class])
|
|
|
|
|
|
|
|
document = CommonMarker
|
|
|
|
.render_doc(text,
|
|
|
|
%i[FOOTNOTES SMART],
|
|
|
|
%i[table strikethrough autolink])
|
|
|
|
|
|
|
|
sanitize(document.to_html, options)
|
2019-02-16 17:30:54 +00:00
|
|
|
end
|
2019-07-31 20:55:34 +00:00
|
|
|
|
|
|
|
def invalid?(model, field)
|
|
|
|
model.errors.messages[field].present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def form_control(model, field)
|
|
|
|
if invalid? model, field
|
|
|
|
'form-control is-invalid'
|
|
|
|
else
|
|
|
|
'form-control'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def form_class(model)
|
|
|
|
model.errors.messages.empty? ? 'needs-validation' : 'was-validated'
|
|
|
|
end
|
2019-08-13 19:09:23 +00:00
|
|
|
|
|
|
|
# Opciones por defecto para el campo de un formulario
|
|
|
|
def field_options(attribute, metadata)
|
|
|
|
{
|
|
|
|
class: 'form-control',
|
|
|
|
required: metadata.required,
|
|
|
|
aria: {
|
|
|
|
describedby: id_for_help(attribute),
|
|
|
|
required: metadata.required
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
# Devuelve la clase is-invalid si el campo tiene un error
|
|
|
|
def invalid(post, attribute)
|
|
|
|
'is-invalid' if post.errors[attribute].present?
|
|
|
|
end
|
|
|
|
|
|
|
|
# Busca la traducción de una etiqueta en los metadatos de un post
|
|
|
|
def post_label_t(*attribute, post:)
|
|
|
|
label = post_t(*attribute, post: post, type: :label)
|
|
|
|
|
|
|
|
if post.send(attribute.first).required
|
|
|
|
label += I18n.t('posts.attributes.required.label')
|
|
|
|
end
|
|
|
|
|
|
|
|
label
|
|
|
|
end
|
|
|
|
|
|
|
|
def post_help_t(*attribute, post:)
|
|
|
|
post_t(*attribute, post: post, type: :help)
|
|
|
|
end
|
|
|
|
|
|
|
|
def id_for_help(*attribute)
|
|
|
|
"#{attribute.join('-')}-help"
|
|
|
|
end
|
|
|
|
|
|
|
|
def id_for_feedback(*attribute)
|
|
|
|
"#{attribute.join('-')}-feedback"
|
|
|
|
end
|
|
|
|
|
2019-08-16 23:25:07 +00:00
|
|
|
def id_for_datalist(*attribute)
|
|
|
|
"#{attribute.join('-')}-datalist"
|
|
|
|
end
|
|
|
|
|
2019-08-13 19:09:23 +00:00
|
|
|
private
|
|
|
|
|
|
|
|
def post_t(*attribute, post:, type:)
|
|
|
|
post.layout.metadata.dig(*attribute, type.to_s, I18n.locale.to_s) ||
|
|
|
|
post.layout.metadata.dig(*attribute,
|
|
|
|
type.to_s, I18n.default_locale.to_s) ||
|
|
|
|
I18n.t("posts.attributes.#{attribute.join('.')}.#{type}")
|
|
|
|
end
|
2018-01-02 17:19:25 +00:00
|
|
|
end
|