-require "uri"
+require "cgi"
module BrowseHelper
def printable_name(object, version = false)
object.id
end
name = t "printable_name.with_id", :id => id.to_s
- if version
- name = t "printable_name.with_version", :id => name, :version => object.version.to_s
- end
+ name = t "printable_name.with_version", :id => name, :version => object.version.to_s if version
# don't look at object tags if redacted, so as to avoid giving
# away redacted version tag information.
unless object.redacted?
locale = I18n.locale.to_s
- while locale =~ /-[^-]+/ && !object.tags.include?("name:#{I18n.locale}")
- locale = locale.sub(/-[^-]+/, "")
- end
+ locale = locale.sub(/-[^-]+/, "") while locale =~ /-[^-]+/ && !object.tags.include?("name:#{I18n.locale}")
if object.tags.include? "name:#{locale}"
name = t "printable_name.with_name_html", :name => content_tag(:bdi, object.tags["name:#{locale}"].to_s), :id => content_tag(:bdi, name)
private
- ICON_TAGS = %w(aeroway amenity barrier building highway historic landuse leisure man_made natural railway shop tourism waterway).freeze
+ ICON_TAGS = %w[aeroway amenity barrier building highway historic landuse leisure man_made natural railway shop tourism waterway].freeze
def icon_tags(object)
object.tags.find_all { |k, _v| ICON_TAGS.include? k }.sort
# the correct page.
lookup_us = lookup.tr(" ", "_")
- if page = WIKI_PAGES[locale][type][lookup_us] rescue nil
- url = "http://wiki.openstreetmap.org/wiki/#{page}?uselang=#{locale}"
- elsif page = WIKI_PAGES["en"][type][lookup_us] rescue nil
- url = "http://wiki.openstreetmap.org/wiki/#{page}?uselang=#{locale}"
+ if page = WIKI_PAGES.dig(locale, type, lookup_us)
+ url = "https://wiki.openstreetmap.org/wiki/#{page}?uselang=#{locale}"
+ elsif page = WIKI_PAGES.dig("en", type, lookup_us)
+ url = "https://wiki.openstreetmap.org/wiki/#{page}?uselang=#{locale}"
end
url
lang = if value =~ /^([a-z-]{2,12}):(.+)$/i
# Value is <lang>:<title> so split it up
# Note that value is always left as-is, see: https://trac.openstreetmap.org/ticket/4315
- $1
+ Regexp.last_match(1)
else
# Value is <title> so default to English Wikipedia
"en"
end
elsif key =~ /^wikipedia:(\S+)$/
# Language is in the key, so assume value is the title
- lang = $1
+ lang = Regexp.last_match(1)
else
# Not a wikipedia key!
return nil
if value =~ /^([^#]*)#(.*)/
# Contains a reference to a section of the wikipedia article
# Must break it up to correctly build the url
- value = $1
- section = "#" + $2
- encoded_section = "#" + URI.encode($2.gsub(/ +/, "_"), /[^A-Za-z0-9:_]/).tr("%", ".")
+ value = Regexp.last_match(1)
+ section = "#" + Regexp.last_match(2)
+ encoded_section = "#" + CGI.escape(Regexp.last_match(2).gsub(/ +/, "_")).tr("%", ".")
else
section = ""
encoded_section = ""
end
{
- :url => "http://#{lang}.wikipedia.org/wiki/#{value}?uselang=#{I18n.locale}#{encoded_section}",
+ :url => "https://#{lang}.wikipedia.org/wiki/#{value}?uselang=#{I18n.locale}#{encoded_section}",
:title => value + section
}
end
# The simple wikidata-tag (this is limited to only one value)
if key == "wikidata" && value =~ /^[Qq][1-9][0-9]*$/
return [{
- :url => "//www.wikidata.org/wiki/#{value}?uselang=#{I18n.locale}",
+ :url => "//www.wikidata.org/entity/#{value}?uselang=#{I18n.locale}",
:title => value
}]
# Key has to be one of the accepted wikidata-tags
- elsif key =~ /(architect|artist|brand|operator|subject):wikidata/ &&
+ elsif key =~ /(architect|artist|brand|name:etymology|network|operator|subject):wikidata/ &&
# Value has to be a semicolon-separated list of wikidata-IDs (whitespaces allowed before and after semicolons)
value =~ /^[Qq][1-9][0-9]*(\s*;\s*[Qq][1-9][0-9]*)*$/
# Splitting at every semicolon to get a separate hash for each wikidata-ID
return value.split(";").map do |id|
- { :title => id, :url => "//www.wikidata.org/wiki/#{id.strip}?uselang=#{I18n.locale}" }
+ { :title => id, :url => "//www.wikidata.org/entity/#{id.strip}?uselang=#{I18n.locale}" }
end
end
nil