module Agilibox::TextHelper
include ::ActionView::Helpers::NumberHelper
include ::ActionView::Helpers::SanitizeHelper
include ::ActionView::Helpers::TextHelper
def nbsp(text = :no_argument)
if text == :no_argument
"\u00A0"
else
text.to_s.gsub(" ", nbsp)
end
end
def euros(n)
currency(n, "€")
end
def currency(n, u)
return if n.nil?
I18n.t("number.currency.format.format")
.gsub("%n", number(n))
.gsub("%u", u)
.tr(" ", nbsp)
end
def percentage(n)
return if n.nil?
number(n) + nbsp + "%"
end
def number(n)
return if n.nil?
opts = {}
if n.class.to_s.match?(/Float|Decimal/i)
opts[:precision] = 2
else
opts[:precision] = 0
end
opts[:delimiter] = I18n.t("number.format.delimiter")
opts[:separator] = I18n.t("number.format.separator")
number_with_precision(n, opts).tr(" ", nbsp)
end
def date(d, **args)
I18n.l(d, **args) unless d.nil?
end
def boolean_icon(bool)
return if bool.nil?
return icon(:check, style: "color: green") if bool == true
return icon(:times, style: "color: red") if bool == false
raise "#{bool} is not a boolean"
end
def hours(n)
return if n.nil?
number = number_with_precision(n, precision: 2)
text = I18n.t("datetime.prompts.hour").downcase
text = text.pluralize if n > 1
"#{number} #{text}"
end
def text2html(str)
return if str.to_s.blank?
str = str.delete("\r").strip
strip_tags(str).gsub("\n", "
").html_safe
end
def lf2br(str)
return if str.to_s.blank?
str.delete("\r").gsub("\n", "
").html_safe
end
# rubocop:disable Metrics/MethodLength
def info(object, attribute, value_or_options = nil, options = {})
if value_or_options.nil?
value = object.public_send(attribute)
elsif value_or_options.is_a?(Hash)
value = object.public_send(attribute)
options = value_or_options
else
value = value_or_options
end
value = t("yes") if value == true
value = t("no") if value == false
if value.blank?
value = options[:default]
return if value == :hide
end
label = options[:label] || object.t(attribute)
info_tag = options[:tag] || :div
separator = options[:separator] || " : "
separator = " :
".html_safe if separator == :br
helper = options[:helper]
i18n_key = "#{object.class.to_s.tableize.singularize}/#{attribute}"
nested = I18n.t("activerecord.attributes.#{i18n_key}", default: "").is_a?(Hash)
klass = object.is_a?(Module) ? object : object.class
object_type = klass.to_s.split("::").last.underscore
value = object.tv(attribute) if nested
value = send(helper, value) if helper
value = number(value) if value.is_a?(Numeric)
value = l(value) if value.is_a?(Time)
value = l(value) if value.is_a?(Date)
value = value.to_s
html_label = tag.strong(class: "info-label") { label }
span_css_class = "info-value #{object_type}-#{attribute}"
html_value = tag.span(class: span_css_class) { value }
separator_html = tag.span(class: "info-separator") { separator }
if value.blank?
container_css_class = "info blank"
else
container_css_class = "info"
end
content_tag(info_tag, class: container_css_class) do
[html_label, separator_html, html_value].join.html_safe
end
end # def info
# rubocop:enable Metrics/MethodLength
def tags(object)
return "" if object.tag_list.empty?
object.tag_list.map { |tag_name|
tag.span(class: "tag label label-primary") {
"#{icon :tag} #{tag_name}".html_safe
}
}.join(" ").html_safe
end
end