]> git.openstreetmap.org Git - rails.git/commitdiff
Url-encode wikimedia_commons tag values
authorAnton Khorev <tony29@yandex.ru>
Thu, 20 Jun 2024 19:13:28 +0000 (22:13 +0300)
committerAnton Khorev <tony29@yandex.ru>
Thu, 20 Jun 2024 19:13:28 +0000 (22:13 +0300)
app/helpers/browse_tags_helper.rb
test/helpers/browse_tags_helper_test.rb

index 867fe1273c282f2ad20f391cd204ec38dcc0bb0e..e65bed092b7486089354c173ab1cc35c04d18ef7 100644 (file)
@@ -116,9 +116,11 @@ module BrowseTagsHelper
   end
 
   def wikimedia_commons_link(key, value)
-    if key == "wikimedia_commons" && value =~ /^(?:file|category):/i
+    if key == "wikimedia_commons" && value =~ /^(file|category):(.+)$/i
+      namespace = Regexp.last_match(1)
+      title = Regexp.last_match(2)
       return {
-        :url => "//commons.wikimedia.org/wiki/#{value}?uselang=#{I18n.locale}",
+        :url => "//commons.wikimedia.org/wiki/#{namespace}:#{u title}?uselang=#{I18n.locale}",
         :title => value
       }
     end
index 9bd11f052d46d56256e4f050e6efb36b3104f08b..1880012b073754992dac17fd099a410ee0a204de 100644 (file)
@@ -245,6 +245,10 @@ class BrowseTagsHelperTest < ActionView::TestCase
     assert_equal "//commons.wikimedia.org/wiki/Category:Test_Category?uselang=en", link[:url]
     assert_equal "Category:Test_Category", link[:title]
 
+    link = wikimedia_commons_link("wikimedia_commons", "Category:What If? (Bonn)")
+    assert_equal "//commons.wikimedia.org/wiki/Category:What%20If%3F%20%28Bonn%29?uselang=en", link[:url]
+    assert_equal "Category:What If? (Bonn)", link[:title]
+
     I18n.with_locale "pt-BR" do
       link = wikimedia_commons_link("wikimedia_commons", "File:Test.jpg")
       assert_equal "//commons.wikimedia.org/wiki/File:Test.jpg?uselang=pt-BR", link[:url]