We forgot to do so in commitb896fc4bb. Back then, we said: > Note that we aren't providing a proper aria-label for markers on the > map we use in the form to create a proposal or an investment. Adding > one isn't trivial given the current code, and keyboard users can't add > a marker in the first place. We'll have to revisit this issue when we > add keyboard support for this. However, in the admin section, the marker is already there, so it should have a label. In this case, we're using the coordinates as label because it's the most relevant text for the marker in the context of a form. We could also use "Default map location" instead, but that information is already present on the page. Axe was reporting the same accessibility error we mentioned in commitb896fc4bbin this situation.
95 lines
2.5 KiB
Ruby
95 lines
2.5 KiB
Ruby
class Shared::MapLocationComponent < ApplicationComponent
|
|
attr_reader :investments_coordinates, :form, :geozones_data
|
|
|
|
def initialize(map_location, investments_coordinates: nil, form: nil, geozones_data: nil)
|
|
@map_location = map_location
|
|
@investments_coordinates = investments_coordinates
|
|
@form = form
|
|
@geozones_data = geozones_data
|
|
end
|
|
|
|
def map_location
|
|
@map_location ||= MapLocation.new
|
|
end
|
|
|
|
private
|
|
|
|
def editable?
|
|
form.present?
|
|
end
|
|
|
|
def show_remove_marker_button?
|
|
editable? && map_location.mappable.present?
|
|
end
|
|
|
|
def latitude
|
|
map_location.latitude.presence || Setting["map.latitude"]
|
|
end
|
|
|
|
def longitude
|
|
map_location.longitude.presence || Setting["map.longitude"]
|
|
end
|
|
|
|
def zoom
|
|
map_location.zoom.presence || Setting["map.zoom"]
|
|
end
|
|
|
|
def remove_marker_label
|
|
t("proposals.form.map_remove_marker")
|
|
end
|
|
|
|
def remove_marker_id
|
|
"remove-marker-#{dom_id(map_location)}"
|
|
end
|
|
|
|
def remove_marker
|
|
button_tag remove_marker_label,
|
|
id: remove_marker_id,
|
|
class: "map-location-remove-marker",
|
|
type: "button"
|
|
end
|
|
|
|
def data
|
|
{
|
|
map: "",
|
|
map_center_latitude: latitude,
|
|
map_center_longitude: longitude,
|
|
map_zoom: zoom,
|
|
map_tiles_provider: Rails.application.secrets.map_tiles_provider,
|
|
map_tiles_provider_attribution: Rails.application.secrets.map_tiles_provider_attribution,
|
|
marker_editable: editable?,
|
|
marker_remove_selector: "##{remove_marker_id}",
|
|
marker_investments_coordinates: investments_coordinates,
|
|
marker_latitude: map_location.latitude.presence,
|
|
marker_longitude: map_location.longitude.presence,
|
|
marker_title: map_location.title.presence || marker_coordinates_text,
|
|
marker_clustering: feature?("map.feature.marker_clustering"),
|
|
geozones: geozones_data
|
|
}.merge(input_selectors)
|
|
end
|
|
|
|
def marker_coordinates_text
|
|
return unless map_location.available?
|
|
|
|
t("proposals.form.map_marker_coordinates",
|
|
latitude: map_location.latitude,
|
|
longitude: map_location.longitude)
|
|
end
|
|
|
|
def input_selectors
|
|
if form
|
|
{
|
|
latitude_input_selector: "##{input_id(:latitude)}",
|
|
longitude_input_selector: "##{input_id(:longitude)}",
|
|
zoom_input_selector: "##{input_id(:zoom)}"
|
|
}
|
|
else
|
|
{}
|
|
end
|
|
end
|
|
|
|
def input_id(attribute)
|
|
form.hidden_field(attribute).match(/ id="([^"]+)"/)[1]
|
|
end
|
|
end
|