Skip to content

Commit

Permalink
Merge pull request #2157 from MushroomObserver/nimmo-date-select-label
Browse files Browse the repository at this point in the history
Create helper `date_select_with_label`
  • Loading branch information
nimmolo committed May 31, 2024
2 parents 2a3902d + 0bdcbf6 commit 798a18f
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 91 deletions.
50 changes: 40 additions & 10 deletions app/helpers/forms_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,46 @@ def select_generate_default_options(args)
args
end

# MO mostly uses year-input_controller to switch the year selects to
# text inputs, but you can pass data: { controller: "" } to get a year select.
# The three "selects" will always be inline, but pass inline: true to make
# the label and selects inline.
def date_select_with_label(**args)
opts = separate_field_options_from_args(args, [:object, :data])
opts[:class] = "form-control"
opts[:data] = { controller: "year-input" }.merge(args[:data] || {})

wrap_class = form_group_wrap_class(args)
selects_class = "form-inline"
selects_class += " d-inline-block" if args[:inline] == true

tag.div(class: wrap_class) do
concat(args[:form].label("#{args[:field]}_1i", args[:label],
class: "mr-3"))
concat(args[:between]) if args[:between].present?
concat(tag.div(class: selects_class) do
concat(args[:form].date_select(args[:field],
date_select_opts(args), opts))
end)
concat(args[:append]) if args[:append].present?
end
end

# The index arg is for multiple date_selects in a form
def date_select_opts(args = {})
obj = args[:object]
start_year = args[:start_year] || 20.years.ago.year
end_year = args[:end_year] || Time.zone.now.year
init_value = obj.try(&:when).try(&:year)
start_year = init_value if init_value && init_value < start_year
opts = { start_year: start_year,
end_year: end_year,
selected: obj.try(&:when) || Time.zone.today,
order: args[:order] || [:day, :month, :year] }
opts[:index] = args[:index] if args[:index].present?
opts
end

# Bootstrap number_field
def number_field_with_label(**args)
args = auto_label_if_form_is_account_prefs(args)
Expand Down Expand Up @@ -429,15 +469,5 @@ def separate_field_options_from_args(args, extras = [])

args.clone.except(*exceptions)
end

def date_select_opts(obj = nil)
start_year = 20.years.ago.year
init_value = obj.try(&:when).try(&:year)
start_year = init_value if init_value && init_value < start_year
{ start_year: start_year,
end_year: Time.zone.now.year,
selected: obj.try(&:when) || Time.zone.today,
order: [:day, :month, :year] }
end
end
# rubocop:enable Metrics/ModuleLength
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</td>
<td>
<%= fgi.text_area(:notes, index: image.id, value: image.notes,
rows: 1, class: "form-control form-control-sm") %>
rows: 1, class: "form-control") %>
</td>
</tr>
<tr>
Expand All @@ -20,7 +20,7 @@
<td>
<%= fgi.text_field(:original_name, index: image.id,
value: image.original_name,
size: 40, class: "form-control form-control-sm") %>
size: 40, class: "form-control") %>
</td>
</tr>
<tr>
Expand All @@ -31,7 +31,7 @@
<td>
<%= fgi.text_field(:copyright_holder, index: image.id,
value: image.copyright_holder,
class: "form-control form-control-sm") %>
class: "form-control") %>
</td>
</tr>
<tr>
Expand All @@ -41,10 +41,11 @@
</td>
<td>
<div class="form-inline">
<%= fgi.date_select(:when,
date_select_opts(image).merge(index: image.id),
{ class: "form-control form-control-sm",
data: { controller: "year-input" } }) %>
<%= fgi.date_select(
:when, date_select_opts({ object: image }).merge(index: image.id),
{ class: "form-control",
data: { controller: "year-input" } }
) %>
</div>
</td>
</tr>
Expand All @@ -58,7 +59,7 @@
License.current_names_and_ids(image.license),
{ selected: image.license_id,
index: image.id },
{ class: "form-control form-control-sm" }) %>
{ class: "form-control" }) %>
</td>
</tr>
</table>
Expand Down
14 changes: 4 additions & 10 deletions app/views/controllers/observations/form/_when.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,10 @@

<!-- WHEN -->
<div class="container-text">
<%= f.label(:when, :WHEN.t + ":") %>
<div class="form-group form-inline">
<%=
f.date_select(
:when, date_select_opts(@observation),
{ class: "form-control mb-2",
data: { controller: "year-input",
action: "obs-form-images#updateObservationDateRadio" } }
) %>
</div>
<%= date_select_with_label(
form: f, field: :when, object: @observation, label: :WHEN.t + ":",
data: { action: "obs-form-images#updateObservationDateRadio" }
) %>
</div><!--.container-text-->
<!-- /WHEN -->

Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@

<div class="col-sm-8">
<%= fti.text_area(:notes, rows: 2,
class: "form-control form-control-sm") %>
class: "form-control") %>
</div><!--.col-->

</div><!--.row-->
Expand All @@ -74,7 +74,7 @@
<div class="col-sm-8">
<%= fti.text_field(:copyright_holder,
value: @image.user.legal_name,
class: "form-control form-control-sm") %>
class: "form-control") %>
</div><!--.col-->

</div><!--.row-->
Expand All @@ -85,11 +85,10 @@
</div>
<div class="col-sm-8 form-inline">
<%= fti.date_select(
:when, date_select_opts(@temp_image),
{ class: "form-control form-control-sm",
data: {
controller: "year-input"
} }) %>
:when, date_select_opts({ object: @temp_image }),
{ class: "form-control",
data: { controller: "year-input" } }
) %>
<div>
<small><%= :form_images_camera_date.t %>:</small>
<small><a href="javascript:"><span class="camera_date_text"></span></a></small>
Expand All @@ -105,7 +104,7 @@
<div class="col-sm-8">
<%= fti.select(:license_id, @licenses,
{ selected: @user.license_id },
class: "form-control form-control-sm") %>
class: "form-control") %>
</div>
</div><!--.row-->

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,9 @@
label: :form_images_original_name.t + ":") %>
<% end %>
<div class="form-group form-inline">
<%= f.label(:when_1i, :WHEN.t + ":") %>
<%= f.date_select(:when, date_select_opts(@image),
{ class: "form-control",
data: { controller: "year-input" } }) %>
<%= help_block(:p, :form_images_when_help.t) %>
</div>
<%= date_select_with_label(form: f, field: :when, label: :WHEN.t + ":",
object: @image, inline: true,
append: help_block(:p, :form_images_when_help.t)) %>
<%= select_with_label(form: f, field: :license_id, options: @licenses,
label: :LICENSE.t + ":",
Expand Down
8 changes: 3 additions & 5 deletions app/views/controllers/observations/namings/_fields.erb
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ name_help ||= :form_naming_name_help.t
<%=
[
tag.div(class: "row") do
tag.div(class: "col-xs-12") do
render(partial: "shared/form_name_feedback",
locals: feedback_locals) if @what.present?
end
tag.div do
render(partial: "shared/form_name_feedback",
locals: feedback_locals) if @what.present?
end,
fields_for(:naming) do |f_n|
[
Expand Down
48 changes: 21 additions & 27 deletions app/views/controllers/projects/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -24,34 +24,28 @@
tag.p("*#{:form_projects_date_range.t}*".t) +
tag.p(:form_projects_dates_explain.t)
) %>
<div class="container-text ml-4">
<div>
<%= f.label(:start_date, "#{:form_projects_start_date.t}: ") %>
<%= f.date_select(:start_date,
{ class: "form-control mb-2",
start_year: Date.today.year - 10,
end_year: Date.today.year + 10 }) %>
</div>
<div>
<%= f.label(:end_date, "#{:form_projects_end_date.t}: ") %>
<%= f.date_select(:end_date,
{ class: "form-control mb-2",
start_year: Date.today.year - 10,
end_year: Date.today.year + 10 }) %>
</div>
<div>
<p>
<%= radio_with_label(
form: f, field: "dates_any", value: false, checked: !@project_dates_any,
label: " #{:form_projects_range.t} (#{:form_projects_use_date_range.t})"
) %>
<%= radio_with_label(
form: f, field: "dates_any", value: true, checked: @project_dates_any,
label: " #{:form_projects_any.t} (#{:form_projects_ignore_date_range.t})"
) %>
</p>

</div>
<div class="container-text ml-4">
<%= date_select_with_label(form: f, field: :start_date, inline: true,
label: "#{:form_projects_start_date.t}: ",
data: { controller: "" }, class: "mb-2",
order: [:year, :month, :day],
start_year: Date.today.year - 10,
end_year: Date.today.year + 10) %>
<%= date_select_with_label(form: f, field: :end_date, inline: true,
label: "#{:form_projects_end_date.t}: ",
data: { controller: "" },
order: [:year, :month, :day],
start_year: Date.today.year - 10,
end_year: Date.today.year + 10) %>
<%= radio_with_label(
form: f, field: "dates_any", value: false, checked: !@project_dates_any,
label: " #{:form_projects_range.t} (#{:form_projects_use_date_range.t})"
) %>
<%= radio_with_label(
form: f, field: "dates_any", value: true, checked: @project_dates_any,
label: " #{:form_projects_any.t} (#{:form_projects_ignore_date_range.t})"
) %>
</div>

<%= file_field_with_label(
Expand Down
26 changes: 10 additions & 16 deletions app/views/controllers/species_lists/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<%= if !(partial = render(partial: "shared/form_list_feedback",
locals: { f: f })).blank?
content_tag(:div, partial)
tag.div(partial)
end %>
<%= if @checklist&.any?
Expand All @@ -25,39 +25,33 @@
<%= fields_for(:list) do |f_l|
autocompleter_field(
form: f_l, field: :members, rows: 8, value: @list_members,
label: :form_species_lists_write_in_species.t + ":",
label: "#{:form_species_lists_write_in_species.t}:",
autocomplete: :name, separator: "\n", textarea: true
)
end %>
</div>

<%= text_field_with_label(form: f, field: :title, between: :required,
label: :form_species_lists_title.t + ":") %>
label: "#{:form_species_lists_title.l}:") %>
<%= text_area_with_label(form: f, field: :notes, rows: 12,
label: :form_species_lists_list_notes.t + ":") %>
<%= render(partial: "shared/textilize_help") %>
label: "#{:form_species_lists_list_notes.l}:",
append: render(partial: "shared/textilize_help")) %>
<div class="form-group form-inline">
<%= f.label(:when, :WHEN.t + ":") %>
<%= f.date_select(:when, date_select_opts(@species_list),
{ class: "form-control",
data: { controller: "year-input" } }) %>
</div>
<%= date_select_with_label(form: f, field: :when, object: @species_list,
inline: true, label: "#{:WHEN.l}:") %>
<%= render(partial: "shared/form_location_feedback",
locals: { button: button } ) %>
<%= autocompleter_field(form: f, field: :place_name, between: :required,
label: :WHERE.t + ":", autocomplete: :location) %>
label: "#{:WHERE.l}:", autocomplete: :location) %>
<%= render(partial: "species_lists/form/fields_for_member",
locals: { f: f }) %>
<% if @projects.any? %>
<%= render(partial: "species_lists/form/fields_for_project",
locals: { f: f }) %>
<% end %>
<%= render(partial: "species_lists/form/fields_for_project",
locals: { f: f }) if @projects.any? %>
<%= submit_button(form: f, button: button.l, center: true) %>
Expand Down

0 comments on commit 798a18f

Please sign in to comment.