additionals/app/helpers/additionals_settings_helper.rb
2024-07-09 07:55:02 +02:00

117 lines
3.8 KiB
Ruby

# frozen_string_literal: true
module AdditionalsSettingsHelper
def additionals_settings_checkbox(name, **options)
active_value = options.delete(:active_value).presence || @settings.present? && @settings[name]
tag_name = options.delete(:tag_name).presence || "settings[#{name}]"
value = options.delete :value
value_is_bool = options.delete :value_is_bool
custom_value = if value.nil?
value = 1
false
else
value = 1 if value_is_bool
true
end
checked = if custom_value && !value_is_bool
active_value
else
RedminePluginKit.true? active_value
end
s = [label_tag(tag_name, additionals_settings_label(name, options))]
s << hidden_field_tag(tag_name, 0, id: nil) if !custom_value || value_is_bool
s << check_box_tag(tag_name, value, checked, **options)
safe_join s
end
def additionals_settings_numberfield(name, **options)
additionals_settings_input_field :number_field_tag, name, **options
end
def additionals_settings_textfield(name, **options)
additionals_settings_input_field :text_field_tag, name, **options
end
def additionals_settings_passwordfield(name, **options)
additionals_settings_input_field :password_field_tag, name, **options
end
def additionals_settings_urlfield(name, **options)
additionals_settings_input_field :url_field_tag, name, **options
end
def additionals_settings_timefield(name, **options)
additionals_settings_input_field :time_field_tag, name, **options
end
def additionals_settings_select(name, values, **options)
tag_name = options.delete(:tag_name).presence || "settings[#{name}]"
safe_join [label_tag(tag_name, additionals_settings_label(name, options)),
select_tag(tag_name, values, **options)]
end
def additionals_settings_textarea(name, **options)
value = if options.key? :value
options.delete :value
elsif @settings.present?
@settings[name]
end
options[:class] = 'wiki-edit' unless options.key? :class
options[:rows] = addtionals_textarea_cols value unless options.key? :rows
safe_join [label_tag("settings[#{name}]", additionals_settings_label(name, options)),
text_area_tag("settings[#{name}]", value, **options)]
end
# NOTE: overwrite redmine to use showSettingsTab instead of showTab to support tabs for plugins
def get_tab_action(tab)
return super if action_name != 'plugin'
if tab[:onclick]
tab[:onclick]
elsif tab[:partial]
"showPluginSettingsTab('#{tab[:name]}', this.href)"
end
end
def values_for_sort_columns(klass)
klass.new
.available_sortable_columns
.collect { |column| [column.caption, column.name.to_s] }
end
private
def additionals_settings_label(name, options)
label = options.delete :label
label_title = if label.present?
[label.is_a?(Symbol) ? l(label) : label]
else
[l("label_#{name}")]
end
label_title << tag.span('*', class: 'required') if options[:required].present?
safe_join label_title, ' '
end
def additionals_settings_input_field(tag_field, name, **options)
tag_name = options.delete(:tag_name).presence || "settings[#{name}]"
default_setting = options.delete :default_setting
value = if options.key? :value
options.delete :value
elsif @settings.present? && @settings.key?(name)
@settings[name]
elsif default_setting
default_setting
end
safe_join [label_tag(tag_name, additionals_settings_label(name, options)),
send(tag_field, tag_name, value, **options)], ' '
end
end