Módulo:Mapa/autodoc

Origem: Wikipédia, a enciclopédia livre.
-- Esta página é a raiz das páginas de configuração do mapa de geolocalização. Veja [[Category:Card Setting Module]]
-- Ele também contém um hack para a documentação dos submódulos de parâmetro de mapa

local p = {}
local linguistic = require('Módulo:Linguística')

local todms = require('Módulo:Coordenadas').dec2dms

local function showpoint(latitude, longitude, text) -- exibe um ponto importante do mapa com suas coordenadas
    return     {latitude = latitude, longitude = longitude, text = text}
end

local function makemainmap(area) -- mapa principal exibido com os principais pontos do documento
    local data = require('Módulo:Mapa/dados/' .. area)
    if data.projection ~= 'Projeção equiretangular' then
        return '[[File:' .. data.images.default .. '|thumb|' .. "(mapa por padrão)" .. ']]'
    end
    local top, bottom, left, right = data.top, data.bottom, data.left, data.right
    local ycenter= (top + bottom) / 2
    local xcenter = (left + right) / 2
    if right < left then
        if xcenter > 0 then
            xcenter = xcenter - 180
        else
            xcenter = xcenter + 180
        end
    end
    return tostring(require('Módulo:Mapa').multimap({
        maplist = {area},
        caption = 'Mapa por padrão<br />.',
        pointtable = {
            showpoint(top, xcenter, todms{args = {data.top, 'N'}}), -- 'N' para latitude: hack, seria necessário reparar o módulo:Coordenadas
            showpoint(bottom, xcenter, todms{args = {data.bottom, 'N'}}),
            showpoint(ycenter, left, todms{args = {data.left, 'W'}}),
            showpoint(ycenter, right, todms{args = {data.right, 'W'}}),
        }  })).. '</b><br />'
end

function p.datadoc(frame) -- documentar as páginas do mapa/dados
    local page = mw.title.getCurrentTitle()
    if page.subpageText == 'Exemplos para testes' or page.subpageText == 'Testes' then
        return ''
    end
    local area = mw.text.split(page.text, '/')[3]
    local data = require('Módulo:Mapa/dados/' .. area)
    local placename = data.name or mw.wikibase.label(data.wikidata)
    local placelink = ''
    if data.wikidata then
        placelink = mw.wikibase.sitelink(data.wikidata)
    end
    if placelink == '' then -- aparentemente wikibase.sitelink retorna '' não nulo
        placelink = nil
    end
    local formattedname =  placename
    if placelink then
        formattedname =  '[[' .. placelink .. '|' .. placename .. ']]'
    end
    -- adicione aqui um script que verifica se todos os campos obrigatórios são fornecidos e em um formato correto

    -- categorização
    local cats = ''
    -- cat das páginas de doc
    if page.subpageText == 'Doc' then
        cats = '[[Categoria:!Documentação de módulo]]'

    -- cat das páginas de código
    else
        local modulecat = 'Categoria:!Módulos de configuração de mapa'
        if data.zone then
            local zonedcat = 'Categoria:!Módulos de configuração de mapa ' .. linguistic.of(data.zone)
            local page = mw.title.new(zonedcat)
            if page and page.exists then
                modulecat = zonedcat
            end
        end
        cats = cats .. '[[' .. modulecat .. '|' .. area .. ']]'

        if not placelink then
            cats = cats .. '[[Categoria:!Módulos de configuração de mapa sem link Wikidata|' .. area .. ']]'
        end
    end

    local typeprojection = data.projection
    if typeprojection == 'Projeção equiretangular' then
        typeprojection = '[[Projeção cilíndrica equidistante|projeção equiretangular]]'
    elseif typeprojection == 'Projeção cónica com DL' then
        typeprojection = 'Projeção cônica central no cone tangente'
    end
    local introtext = "Esta página contém dados sobre mapas de localização " .. linguistic.of(formattedname, string.sub(data.genre, 1, 1), string.sub(data.genre, 2, 2), data.determiner, placename)
    .. ' construído de acordo com a técnica de ' .. typeprojection .. '.'
    .. '<br />Ele é projetado para ser usado a partir de [[Módulo:Mapa]]. Para mais informações sobre este tópico, consulte a documentação deste módulo. '
    .. '<br /><br /><br /><b> Lista de mapas disponíveis</b><br />'
    local maplist = data.images
    local mapgallery = {}
    local mainmap = ''
    local nummap = 0 -- número de mapas tratados
    local gallery = mw.html.create('table'):tag('tr')
    if maplist.default then -- para o mapa principal: exibe as coordenadas extremas
        local mainmap = makemainmap(area)
        gallery:tag('td'):wikitext(mainmap)
        maplist.default = nil
        nummap = nummap + 1
    end
    for i, j in pairs(maplist) do
        gallery:tag('td'):wikitext('[[File:' .. j .. '|thumb|' .. i .. ']]')
        nummap = nummap + 1
        if nummap % 3 == 0 then -- vá para a linha a cada três mapas
            gallery = gallery:done():tag('tr')
        end
    end
    return introtext .. tostring(gallery:allDone()) .. cats
end
return p