Link to wikipedia articles on wikipedia=* tags

The semantics are as documented on
http://wiki.openstreetmap.org/wiki/Key:wikipedia, i.e.:

    # English Wikipedia article Foobar
    wikipedia=Foobar
    # German Wikipedia article Foobar
    wikipedia:de=Foobar
    wikipedia=de:Foobar

If someone gives a http:// link we just pass it through.
This commit is contained in:
Ævar Arnfjörð Bjarmason 2010-04-21 01:46:50 +00:00
parent 7a8fe086cd
commit 9bfa6059be
2 changed files with 34 additions and 1 deletions

View file

@ -25,7 +25,9 @@ module BrowseHelper
end
def format_value(key, value)
if url = wiki_link("tag", "#{key}=#{value}")
if wp = wikipedia_link(key, value)
link_to h(wp['title']), wp['url'], :title => t('browse.tag_details.wiki_link.wikipedia', :page => wp['title'])
elsif url = wiki_link("tag", "#{key}=#{value}")
link_to h(value), url, :title => t('browse.tag_details.wiki_link.tag', :key => key, :value => value)
else
linkify h(value)
@ -45,4 +47,34 @@ private
return url
end
def wikipedia_link(key, value)
# English Wikipedia by default
lang = 'en'
if key == 'wikipedia' or key =~ /^wikipedia:(\S+)$/
mylang = $1
# Some k/v's are wikipedia=http://en.wikipedia.org/wiki/Full%20URL
return nil if value =~ /^http:\/\//
if mylang
lang = mylang
# This regex should match Wikipedia language codes, everything
# from de to zh-classical
elsif value =~ /^([a-z-]{2,12}):(.+)$/
lang = $1
# Don't display e.g. "en:Foobar" as the title, just "Foobar"
value = $2
end
locale = I18n.locale.to_s
return {
'url' => "http://#{lang}.wikipedia.org/wiki/#{value}?uselang=#{locale}",
'title' => value
}
else
return nil
end
end
end