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 à 06:13 et modifiée en dernier par Od1n (discuter | contributions) (inutile et erroné : réassigné par le ipairs() à chaque itération). 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
    local arguments = {}
    -- Noter les arguments selon l'ordre qu'ils ont été saisis (exemple, url2 vient avant url3)
    if args.url1 ~= nil then arguments[1] = args.url1 end
    if args.url2 ~= nil then arguments[2] = args.url2 end
    if args.url3 ~= nil then arguments[3] = args.url3 end
    if args.url4 ~= nil then arguments[4] = args.url4 end
    if args.url5 ~= nil then arguments[5] = args.url5 end
    if args.url6 ~= nil then arguments[6] = args.url6 end
    if args.url7 ~= nil then arguments[7] = args.url7 end
    if args.url8 ~= nil then arguments[8] = args.url8 end
    if args.url9 ~= nil then arguments[9] = args.url9 end
    if args.url10 ~= nil then arguments[10] = args.url10 end

    -- Selon les « préfixes » d'URL (en, de, www, commons...), noter des informations
    local szPrefix = ''
    local Indicateurs = {}
    local Fragments = {}
    local nNbreUrl = 0
    for i, szUrl in ipairs( arguments ) do
        szPrefix = string.match(szUrl, 'https://(%a+)%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
        if 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
        nNbreUrl = nNbreUrl + 1
    end

    -- Composer le message à l'intention des lecteurs
    local szHtml = ''
    if nNbreUrl <= 10 then
        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>'
    else
        szHtml = 'Le modèle n\'accepte pas plus que 10 adresses Web.'
    end

    if nNbreUrl == 0 then
        szHtml = 'Chaque paramètre url1, url2, url3... doit être suivi d\'une adresse Web.'
    end

    return szHtml
end

return p