From 33c9956cf7b4f4b596872e349c8c284080677eee Mon Sep 17 00:00:00 2001 From: Marwin Hochfelsner <50826859+hlfan@users.noreply.github.com> Date: Thu, 29 May 2025 03:35:06 +0200 Subject: [PATCH] Write share sidebar in erb template --- app/abilities/ability.rb | 2 +- app/assets/javascripts/leaflet.share.js | 259 +++------------------- app/controllers/share_panes_controller.rb | 9 + app/views/share_panes/show.html.erb | 85 +++++++ config/locales/en.yml | 2 +- config/routes.rb | 1 + 6 files changed, 124 insertions(+), 234 deletions(-) create mode 100644 app/controllers/share_panes_controller.rb create mode 100644 app/views/share_panes/show.html.erb diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb index f68449aa8..fefa361b4 100644 --- a/app/abilities/ability.rb +++ b/app/abilities/ability.rb @@ -4,7 +4,7 @@ class Ability include CanCan::Ability def initialize(user) - can :read, [:feature_query, :legend_pane] + can :read, [:feature_query, :legend_pane, :share_pane] can :read, [Node, Way, Relation, OldNode, OldWay, OldRelation] can [:show, :create], Note can :read, :directions diff --git a/app/assets/javascripts/leaflet.share.js b/app/assets/javascripts/leaflet.share.js index fedfc4d31..4bca5ebd6 100644 --- a/app/assets/javascripts/leaflet.share.js +++ b/app/assets/javascripts/leaflet.share.js @@ -6,251 +6,37 @@ L.OSM.share = function (options) { adjustButton: false }); - control.onAddPane = function (map, button, $ui) { + function init(map, $ui) { // Link / Embed - $("#content").addClass("overlay-right-sidebar"); - const $linkSection = $("
") - .attr("class", "text-body-secondary") - .text(OSM.i18n.t("javascripts.share.paste_html"))); - - // Geo URI - - const $geoUriSection = $("
") - .attr("class", "text-body-secondary") - .html(OSM.i18n.t("javascripts.share.image_dimensions", args)) - .appendTo($form); - - $("") - .attr("type", "submit") - .attr("class", "btn btn-primary") - .attr("value", OSM.i18n.t("javascripts.share.download")) - .appendTo($form); + const csrfInput = $ui.find("#csrf_export")[0]; + [[csrfInput.name, csrfInput.value]] = Object.entries(OSM.csrf); locationFilter .on("change", update) @@ -264,6 +50,8 @@ L.OSM.share = function (options) { .on("show", shown) .on("hide", hidden); + update(); + function shown() { $("#mapnik_scale").val(getScale()); update(); @@ -363,7 +151,7 @@ L.OSM.share = function (options) { .toggleClass("btn-secondary", !canEmbed) .tooltip(canEmbed ? "disable" : "enable"); if (!canEmbed && $("#embed_link").hasClass("active")) { - $("#long_link").click(); + $("#long_link").trigger("click"); } $("#embed_html").val( @@ -377,7 +165,7 @@ L.OSM.share = function (options) { $("#geo_uri") .attr("href", map.getGeoUri(marker)) - .html(map.getGeoUri(marker)); + .text(map.getGeoUri(marker)); // Image @@ -422,7 +210,7 @@ L.OSM.share = function (options) { } function select() { - $(this).select(); + $(this).trigger("select"); } function getScale() { @@ -439,6 +227,13 @@ L.OSM.share = function (options) { const precision = 5 * Math.pow(10, Math.floor(Math.LOG10E * Math.log(scale)) - 2); return precision * Math.ceil(scale / precision); } + } + + control.onAddPane = function (map, button, $ui) { + $("#content").addClass("overlay-right-sidebar"); + + control.onContentLoaded = () => init(map, $ui); + $ui.one("show", control.loadContent); }; return control; diff --git a/app/controllers/share_panes_controller.rb b/app/controllers/share_panes_controller.rb new file mode 100644 index 000000000..4b1b64bcf --- /dev/null +++ b/app/controllers/share_panes_controller.rb @@ -0,0 +1,9 @@ +class SharePanesController < ApplicationController + before_action :authorize_web + before_action :set_locale + authorize_resource :class => false + + def show + render :layout => false + end +end diff --git a/app/views/share_panes/show.html.erb b/app/views/share_panes/show.html.erb new file mode 100644 index 000000000..9167eb386 --- /dev/null +++ b/app/views/share_panes/show.html.erb @@ -0,0 +1,85 @@ +
<%= t "javascripts.share.paste_html" %>
+ <%= t "javascripts.share.image_dimensions_html", + **%w[layer width height] + .to_h { |key| [key.to_sym, content_tag(:span, "", :id => "mapnik_image_#{key}")] } %> +