5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-15 01:51:41 +00:00
panel/app/helpers/application_helper.rb

112 lines
2.7 KiB
Ruby
Raw Normal View History

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
# 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)
name = names.pop
root = names.shift
names.each do |n|
root += "[#{n}]"
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
# 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
def sanitize_markdown(text, options = {})
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)
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
# 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
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