module BMC::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 text2html(str) return if str.to_s.blank? str = str.delete("\r").strip strip_tags(str).gsub("\n", "<br />").html_safe end def lf2br(str) return if str.to_s.blank? str.delete("\r").gsub("\n", "<br />").html_safe end def info( # rubocop:disable Metrics/ParameterLists object, attribute, value: nil, default: nil, helper: nil, tag: :div, separator: " : ", label: object.t(attribute) ) if default == :hide value = fma(object, attribute, value: value, helper: helper) return if value.nil? end value = fma(object, attribute, value: value, default: default, helper: helper) separator = " :<br/>".html_safe if separator == :br klass = object.is_a?(Module) ? object : object.class object_type = klass.to_s.split("::").last.underscore html_label = self.tag.strong(class: "info-label") { label } span_css_class = "info-value #{object_type}-#{attribute}" html_value = self.tag.span(class: span_css_class) { value } separator_html = self.tag.span(class: "info-separator") { separator } container_css_class = ["info", ("blank" if value.blank?)] content_tag(tag, class: container_css_class) do [html_label, separator_html, html_value].sum end end # def info # format model attribute def fma(object, attribute, value: nil, default: nil, helper: nil) value = object.public_send(attribute) if value.nil? value = default if value != false && value.blank? i18n_scope = object.model_name.instance_variable_get(:@klass).i18n_scope i18n_key = "#{object.model_name.i18n_key}/#{attribute}" nested = I18n.t("#{i18n_scope}.attributes.#{i18n_key}", default: "").is_a?(Hash) value = object.tv(attribute) if nested value = send(helper, value) if helper value = t("yes") if value == true value = t("no") if value == false value = number(value) if value.is_a?(Numeric) value = date(value) if value.is_a?(Date) || value.is_a?(Time) value.to_s.presence end end