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 à 13:06 et modifiée en dernier par Od1n (discuter | contributions) (répare détection de wikidata). 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 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.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.)
    
    -- Deux formats d'URL : 
    -- * https://commons.wikimedia.org    /w/index.php?title=    File... &oldid=232035766
    -- * https://commons.wikimedia.org    /wiki/                 File... ?oldid=232035766
    local szPrefixe, szProjet, szTitle, szOldid = '', '', '', ''
    local szTest = string.match(szUrl, 'https://%a+%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
    if szTest ~= nil then
      szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)')
    else                                                           
      szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/wiki/(.+)%?oldid=(%d+)')
    end


    -- 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, szProjet )

    local szHtmlIndicateur = moduleLangue.indicationMultilingue({})

    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) »
    
    -- 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 szIetf, szProjet, szTitle, szOldid = '', '', '', ''
    local szTest = string.match(szUrl, 'https://%a+%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
    if szTest ~= nil then
      szIetf, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)')
    else                                                           
      szIetf, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/wiki/(.+)%?oldid=(%d+)')
    end
    
    -- Remplacer %C3%B par un caractère Unicode, et _ par une espace
    local szTitleDecoded = mw.uri.decode( szTitle , "WIKI" )

    local szLienLangue = moduleLangue.nomLangue(szIetf)
    local szNomProjet = p.getNomProjet( szPrefixe, szProjet )

    local szHtmlIndicateur = moduleLangue.indicationDeLangue({'', szIetf})

    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 ' .. szLienLangue .. ' 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, 10 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
        -- Deux formats d'URL acceptés
        local szPrefix = nil
        local szPrefix1 = string.match(szUrl, 'https://(%a+)%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
        local szPrefix2 = string.match(szUrl, 'https://(%a+)%.%a+%.org/wiki/.+%?oldid=%d+')
        if szPrefix1 then szPrefix = szPrefix1 
                     else szPrefix = szPrefix2 end
        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 and not args.url 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


-- 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