Aller au contenu

Module:TradRef

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 4 février 2017 à 17:29 et modifiée en dernier par Od1n (discuter | contributions) (cinq c'est déjà pas mal non ? ça devient vite illisible, tandis qu'on peut mettre plusieurs modèles les uns en dessous des autres). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[voir] [modifier] [historique] [purger]

Ce module Lua est utilisé par le modèle {{TradRef}}.

-- À faire :
-- * Vérifier que le modèle est seulement utilisé dans l'espace de noms principal
-- ** S'inspirer de [[Modèle:Traduction/Référence]]

local moduleLangue = require 'Module:Langue'
local p = {}

function p.getNomProjet(szPrefixe, szProjet)

    local prefixes = {
        commons     = 'Wikimedia Commons',
        meta        = 'Meta-Wiki',
        species     = 'Wikispecies',
    }

    local projets = {
        wikibooks   = 'Wikilivres',
        wikidata    = 'Wikidata',
        wikinews    = 'Wikinews',
        wikipedia   = 'Wikipédia',
        wikisource  = 'Wikisource',
        wikiversity = 'Wikiversité',
        wikivoyage  = 'Wikivoyage',
        wiktionary  = 'Wiktionnaire',
    }

    return prefixes[szPrefixe] or projets[szProjet] or '(projet inconnu)'
end


function p.getIndicateurAndFragment(szUrl)

    -- Deux formats d'URL :
    -- * https://de.wikipedia.org    /w/index.php?title=    Amandus_(Bagaudenf%C3%BChrer)&oldid=148366994
    -- * https://de.wikipedia.org    /wiki/                 Amandus_(Bagaudenf%C3%BChrer)?oldid=148366994
    local szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, '^https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)$')
    if not szPrefixe then
        szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, '^https://(%a+)%.(%a+)%.org/wiki/(.+)%?oldid=(%d+)$')
    end
    if not szPrefixe then
        return nil, nil
    end

    local szHtmlIndicateur, szNomProjet
    if szPrefixe == 'commons' or szPrefixe == 'meta' or szPrefixe == 'species' or szPrefixe == 'www' then
        -- Pour les wikis multilingues :
        -- * Commons      :  https://commons.wikimedia.org/w/index.php?title=Accueil&oldid=169324172
        -- * Meta-Wiki    :  https://meta   .wikimedia.org/w/index.php?title=Accueil&oldid=15738990
        -- * Wikispecies  :  https://species.wikimedia.org/w/index.php?title=Accueil&oldid=2717007
        -- * Wikidata     :  https://    www.wikidata.org/w/index.php?title=Wikidata:Main_Page&oldid=400496920
        -- Retourne {{mul}} comme indicateur de langue et le fragment de phrase « de la page de Wikimedia Commons en ... (voir liste des auteurs) »
        -- (Les projets sans langue précisée sont, en théorie, multilingues.)
        szHtmlIndicateur = moduleLangue.indicationMultilingue({})
        szNomProjet = p.getNomProjet(szPrefixe, szProjet)
    else
        -- Pour les wikis unilingues (WIKT.ES, WP.EN, WS.DE...)
        -- Retourne l'indicateur de langue et le fragment de phrase « de la page de Wiki... en ... (voir liste des auteurs) »
        szHtmlIndicateur = moduleLangue.indicationDeLangue({'', szPrefixe})
        szNomProjet = p.getNomProjet(szPrefixe, szProjet) .. ' en ' .. moduleLangue.nomLangue(szPrefixe)
    end

    -- Remplacer %C3%B par un caractère Unicode, et _ par une espace
    local szTitleDecoded = mw.uri.decode(szTitle, 'WIKI')

    local szLinkOldid   = '<span class="plainlinks">[//' .. szPrefixe .. '.' .. szProjet .. '.org/w/index.php?title=' .. szTitle .. '&oldid=' .. szOldid .. ' ' .. szTitleDecoded .. ']</span>'
    local szLinkHistory = '<span class="plainlinks">[//' .. szPrefixe .. '.' .. szProjet .. '.org/w/index.php?title=' .. szTitle .. '&action=history voir la liste des auteurs]</span>'

    local szHtmlFragment = 'de la page de ' .. szNomProjet .. ' intitulée « ' .. szLinkOldid .. ' » <small>(' .. szLinkHistory .. ')</small>'

    return szHtmlIndicateur, szHtmlFragment
end


function p.enumeration(valeurs, separateur, dernierSeparateur)
    if not dernierSeparateur then
        dernierSeparateur = separateur
    end
    if #valeurs == 0 then
        return ''
    elseif #valeurs == 1 then
        return valeurs[1]
    else
        return table.concat(valeurs, separateur, 1, #valeurs - 1) .. dernierSeparateur .. valeurs[#valeurs]
    end
end


function p.ConstruireTradRef(frame)
    local args = frame:getParent().args

    -- Selon les « préfixes » d'URL (en, de, www, commons...), noter des informations
    local Indicateurs = {}
    local Fragments = {}
    for i = 1, 5 do
        local nomParam = 'url'..i
        if i == 1 and not args.url1 and args.url then
            nomParam = 'url'
        end
        local szUrl = args[nomParam]
        if not szUrl then
            break
        end
        Indicateurs[i], Fragments[i] = p.getIndicateurAndFragment(szUrl)
        if not Indicateurs[i] then
            Indicateurs[i], Fragments[i] = '-', 'paramètre <code>'..nomParam..'</code> invalide'
        end
    end

    -- Composer le message à l'intention des lecteurs
    local szHtml
    if not args.url1 and not args.url then
        szHtml = 'Chaque paramètre url1, url2, url3... doit être suivi d\'une adresse Web.'
    elseif args.url6 then
        szHtml = 'Le modèle n\'accepte pas plus que 5 adresses Web.'
    else
        szHtml = '<p><span style="padding-left: 1.2em;">'
            .. p.enumeration(Indicateurs, '/')
            .. ' Cet article est partiellement ou en totalité issu '
            .. p.enumeration(Fragments, ', ', ' et ')
            .. '.</span></p>'
    end

    return szHtml
end


-- Fonction servant uniquement à tester du code.
function p.test()
local arguments = {}
arguments[1] = 'https://de.wikipedia.org/w/index.php?title=DEUTSCH&oldid=148366994'
arguments[2] = 'https://commons.wikimedia.org/w/index.php?title=FILE&oldid=232035766'
arguments[3] = 'https://pt.wikipedia.org/w/index.php?title=PORTUGAIS&oldid=148366994'
arguments[4] = 'https://meta.wikimedia.org/w/index.php?title=META&oldid=1111'
arguments[5] = 'https://ru.wikipedia.org/w/index.php?title=RUSSE&oldid=101010101'
arguments[6] = 'https://species.wikimedia.org/w/index.php?title=SPECIES&oldid=222222'

-- local szUrl = 'https://en.wikipedia.org/wiki/Adrienne_Mayor?oldid=716665156'
-- local szUrl = 'https://species.wikimedia.org/w/index.php?title=SPECIES&oldid=222222'



-- mw.log(szPrefixe .. '\n' .. szProjet .. '\n' .. szTitle .. '\n' .. szOldid)

end

return p