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 3 février 2017 à 09:27 et modifiée en dernier par Od1n (discuter | contributions) (supporte "url" à la place de "url1" ssi ce dernier n'est pas défini (code un peu spaghetti, devrait être améliorable…)). 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 :
-- * Tester que oldid est uniquement composé de chiffres
-- * 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 p = {}

function p.getNomProjet( szProjet )

    local projets = {
        commons     = 'Wikimedia Commons',
        meta        = 'Meta-Wiki',
        species     = 'Wikispecies',
        wikibooks   = 'Wikilivres',
        wikidata    = 'Wikidata',
        wikinews    = 'Wikinews',
        wikipedia   = 'Wikipédia',
        wikisource  = 'Wikisource',
        wikiversity = 'Wikiversité',
        wikivoyage  = 'Wikivoyage',
        wiktionary  = 'Wiktionnaire',
    }

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


function p.getLangue( IETF )
    local dataLangue = mw.loadData('Module:Langue/Data')

    local szNomLangue = dataLangue[IETF].nom
    local szWikilien = dataLangue[IETF].page
    -- Si aucune   dataLangue[IETF].page  , alors   dataLangue[IETF].nom   est un wikilien
    if szWikilien == nil then
        szWikilien = szNomLangue
    end

    return szNomLangue, szWikilien
end


function p.getMultilingue(szUrl)
-- Seulement 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.)

-- https://commons.wikimedia.org/w/index.php?title=File:Station_%C3%84u%C3%9Fere_Kanalstra%C3%9Fe.JPG&oldid=232035766
    local szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)')

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

    -- Le préfixe est : commons, meta-wiki, species ou www
    local szNomProjet = p.getNomProjet( szPrefixe )

    local szHtmlIndicateur = '<span class="indicateur-langue">(<abbr class="abbr" title="Langue&#160;: multilingue">mul</abbr>)</span>'

    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.getUnilingue(szUrl)
-- Seulement 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) »

-- https://de.wikipedia.org/w/index.php?title=Amandus_(Bagaudenf%C3%BChrer)&oldid=148366994
    local szIetf, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)')

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

    local szNomLangue, szWikilien = p.getLangue( szIetf )
    local szNomProjet = p.getNomProjet( szProjet )

    local szHtmlIndicateur = '<span class="indicateur-langue">(<abbr class="abbr" title="Langue&#160;: ' .. szNomLangue .. '">' .. szIetf .. '</abbr>)</span>'

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

    local szHtmlFragment = 'de la page de ' .. szNomProjet .. ' en [[' .. szWikilien .. '|' .. szNomLangue .. ']] 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.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.wikipedia.org/w/index.php?title=SPECIES&oldid=222222'


-- mw.log(szHtml)

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, 10 do
        local nomParam = 'url'..i
        if i == 1 and args.url and not args.url1 then
            nomParam = 'url'
        end
        local szUrl = args[nomParam]
        if not szUrl then
            break
        end
        local szPrefix = string.match(szUrl, 'https://(%a+)%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
        if not szPrefix then
            Indicateurs[i], Fragments[i] = '-', 'paramètre <code>'..nomParam..'</code> invalide'
        elseif szPrefix == 'commons' or szPrefix == 'meta' or szPrefix == 'species' or szPrefix == 'www' then
            Indicateurs[i], Fragments[i] = p.getMultilingue(szUrl)
        else
            Indicateurs[i], Fragments[i] = p.getUnilingue(szUrl)
        end
    end

    -- Composer le message à l'intention des lecteurs
    local szHtml
    if not args.url1 then
        szHtml = 'Chaque paramètre url1, url2, url3... doit être suivi d\'une adresse Web.'
    elseif args.url11 then
        szHtml = 'Le modèle n\'accepte pas plus que 10 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

return p