Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:MapLink

From Wikipedia, the free encyclopedia
--[[
	Source script:	https://it.wikivoyage.org/wiki/Modulo:MapLink
	Maintainer:		Andyrom75
]]
local WDI = require('Module:WikidataIB')
local i18n = require( 'Module:MapLink/i18n' )

local function _isDefined(s)
	return s ~= '' and s
end

local function _toNumber(s)
    if type(s) == 'number' then return s end
    if type(s) == 'string' then
        local n = tonumber(s)
        return n
    end
    return nil
end

local function _getQid(qid, pid)
    if not _isDefined(qid) then return nil end

    local res = WDI._followQid{
        qid   = qid,
        props = pid,
        all   = false -- ritorna solo il primo valore
    }
    -- Nota: Se non trova valori per 'props', restituisce il qid di input.
    -- Trattiamo questo caso come "nessun valore" -> nil.
    if res == qid then
        return nil
    end
    return res
end

local function _getCountryQid(listingQid)
    -- 1) prova dal listing (se fornito)
    local countryQid = listingQid and _getQid(listingQid, 'P17') or nil
    if countryQid then
        return countryQid
    end

    -- 2) fallback logico: QID della pagina corrente
    local pageQid = mw.wikibase.getEntityIdForCurrentPage()
    if pageQid then
        countryQid = _getQid(pageQid, 'P17')
    end
    return countryQid
end

local function _MapLink(frame)
	local args = frame.args
	local lat  = args and args.lat and _toNumber(args.lat)  -- se args.lat  == NA => lat  = nil
	local long = args and args.long and _toNumber(args.long) -- se args.long == NA => long = nil

	if _isDefined(lat) and _isDefined(long) then
		args.map = string.lower(args.map)
		local icon = i18n.icons[args.map]
		local link = i18n.links[args.map]
		local msg  = i18n.msg[args.map]
		local size  = i18n.sizes[args.map]
		if _isDefined(icon) and _isDefined(link) and _isDefined(msg) then
			local countryQid = _getCountryQid(args.wikidata)
			local blockedCountries = i18n.blockedCountries[args.map] or {}
			if countryQid and blockedCountries[countryQid] then
				return ''
			else
				return ' [[File:' .. icon .. '|' .. size .. '|class=listing-sister-' .. args.map .. '|link=' .. link .. lat .. ','.. long ..'|' .. msg .. ']]'
			end
		end
	end

	return ''
end

local p = {}

function p.MapLinkTemplate(frame)
	return _MapLink(frame:getParent())
end

function p.MapLinkInvoke(frame)
	return _MapLink(frame)
end

function p.MapLinkModule(frame)
	local Cframe = mw.getCurrentFrame()
	Cframe.args = frame.args
	return _MapLink(Cframe)
end

return p