Module:Wikipwojè
Apparence
La documentation pour ce module peut être créée à Module:Wikipwojè/doc
-- Ce module implémente [[Modèl:Wikipwojè/Pwojè]], pour avoir une structure html plus simple.
local p = {}
local dataAvancement = {
default = {
nom = 'inconnu',
couleur = '#666666',
extraCSS = 'color:#fff; white-space:nowrap;',
texte = 'À évaluer',
},
adq = {
nom = 'AdQ',
couleur = '#6699ff',
texte = '[[Fichye:Fairytale bookmark gold.svg|14px|AdQ|alt=]] <abbr class="abbr" title="Article de qualité">AdQ</abbr>',
},
ba = {
nom = 'BA',
couleur = '#66ff66',
texte = '[[Fichye:Fairytale bookmark silverstar.svg|14px|BA|alt=]] <abbr class="abbr" title="Bon article">BA</abbr>',
},
a = {
nom = 'A',
couleur = '#66ffff',
texte = '<abbr class="abbr" title="Article avancé">A</abbr>',
},
b = {
nom = 'B',
couleur = '#ffff66',
texte = '<abbr class="abbr" title="Article bien construit">B</abbr>',
},
bd = {
nom = 'BD',
couleur = '#ffaa66',
texte = 'Bon\194\160début',
},
['ébauche'] = {
nom = 'ébauche',
couleur = '#ff6666',
texte = 'Ébauche',
},
homonymie = {
nom = 'homonymie',
couleur = '#66ff66',
texte = 'Homonymie',
},
}
dataAvancement['bon début'] = dataAvancement.bd
dataAvancement.c = dataAvancement.bd
dataAvancement.d = dataAvancement.bd
dataAvancement.e = dataAvancement['ebòch']
local dataImportance = {
default = {
nom = 'inconnue',
couleur = '#666666',
extraCSS = 'color:#fff; white-space:nowrap;',
texte = 'À évaluer',
},
maximum = {
nom = 'maximum',
couleur = '#ff00ff',
texte = "Maximum",
},
['élevée'] = {
nom = 'élevée',
couleur = '#ff88ff',
texte = "Élevée",
},
moyenne = {
nom = 'moyenne',
couleur = '#ffccff',
texte = "Moyenne",
},
faible = {
nom = 'faible',
couleur = '#ffeeff',
texte = "Faible",
},
}
local introduction = '<div class="intro-wikiprojet" style="margin-bottom:1em"><p>Cet article est indexé par %s %s.</p>'
.. '<p>Les [[Pwojè:Akèy|pwojè]] ont pour but d’enrichir le contenu de Wikipédia en aidant à la coordination du travail des contributeurs. '
.. 'Vous pouvez [%s modifier directement cet article] '
.. 'ou visiter les pages de projets pour prendre conseil ou consulter la liste des tâches et des objectifs.</p></div>'
local lienProjet = '[[Projet:%s|%s]]'
local liensProjet = '<b>[[Projet:¤|¤]]</b> ([[Discussion Projet:¤|discussion]]'
.. '\194\160• [[Projet:¤/Évaluation|critères]]'
.. '\194\160• [[Projet:¤/Évaluation/Index|liste]]'
.. '\194\160• [[Projet:¤/Évaluation/Statistiques détaillées|stats]]'
.. '\194\160• [[Projet:¤/Évaluation/Historique|hist.]]'
.. '\194\160• [[Projet:¤/Évaluation/Comité|comité]]'
.. '\194\160• [[Projet:¤/Pages populaires|stats vues]])'
local chaineCategorie = "[[Catégorie:Article d\'avancement %s/Liste complète]][[Catégorie:%s d\'avancement %s]][[Catégorie:%s d\'importance %s]]%s"
local function switch( key, table )
return table[key] or table['default']
end
local function analyseArgs( args )
local newArgs = {
[0] = {}, -- pour éviter une erreur sur i-1
avancement = switch( mw.ustring.lower( args.avancement or '' ), dataAvancement ),
nocat = ( args.nocat and args.nocat ~= '' ),
}
local frame = mw.getCurrentFrame()
local i = 1
while args[i] and mw.text.trim( args[i] ) ~= '' do
local nomProjet = frame:expandTemplate{
title = 'Wikipwojè/alias',
args = { projet = args[i] }
}
local projet = {
importance = switch( mw.ustring.lower( mw.text.trim( args[ i + 1 ] or '' ) ), dataImportance ),
nom = nomProjet,
image = frame:expandTemplate{
title = 'Wikipwojè/imaj',
args = { projet = nomProjet }
},
nomCategorie = 'Atik pwojè a ' .. nomProjet,
extraCategorie = frame:expandTemplate{
title = 'Wikipwojè/extra',
args = { projet = nomProjet }
},
}
if projet.image == '' then
local bandeau = require 'Module:Bandeau'
local icone = bandeau.parametreEbauche( frame:newChild { args = { nomProjet, 'icone' } } )
projet.image = icone or 'Emojione 2754.svg'
projet.extraCategorie = projet.extraCategorie .. '[[Kategori:Paj avèk imaj Wikipwojè dedui|' .. nomProjet .. ']]'
end
table.insert( newArgs, projet )
i = i + 2
end
return newArgs
end
function p.introduction( args )
local sp = 'le projet'
if #args > 1 then
sp = 'les projets'
end
local listeProjets = {}
for i = 1, #args do
local nom = args[i].nom
table.insert( listeProjets, string.format( lienProjet, nom, nom ) )
end
return string.format( introduction,
sp,
mw.text.listToText( listeProjets ),
mw.title.getCurrentTitle().subjectPageTitle:fullUrl( 'action=edit' )
)
end
function p.tableauAvancement( args )
local pageName = mw.title.getCurrentTitle().text
local frame = mw.getCurrentFrame()
local titreAvancement = {
default = '[[Pwojè:Evalyasyon/Avansman|Avansman]]',
AdQ = '[[Wikipedya:Atik bon kalite|etikèt]',
BA = '[[Wikipedya:Bon atik|etikèt]]',
}
local evalTable = mw.html.create( 'table' )
evalTable
-- le "border-collapse:separate" est pour la version mobile
:cssText( 'background:#ededed; width:100%; border-spacing:0; padding:0.4em 0.6em calc(0.4em + 2px); border:1px solid #a7d7f9; border-radius:10px; border-collapse:separate;' )
:tag( 'caption' )
:cssText( 'padding-bottom:5px;' )
:wikitext( '[[Fichye:Fairytale bookmark half gold silverlight.png|20px|alt=]] <b>[[Projet:Évaluation|Évaluation]]</b> de l’article « <b>' )
:wikitext( mw.text.nowiki( pageName ) )
:wikitext( '</b> »' )
:done()
:tag( 'tr' )
:tag( 'th' )
:attr{ scope = 'col' }
:cssText( 'width:6em; font-weight:normal;' )
:wikitext( switch( args.avancement.nom, titreAvancement ) )
:done()
:tag( 'th' )
:attr{ scope = 'col' }
:cssText( 'width:6em; font-weight:normal;' )
:wikitext( '[[Pwojè:Evalyasyon/Enpòtans|Enpòtans]]' )
:done()
:tag( 'th' )
:attr{ scope = 'col', colspan = 2 }
:cssText( 'text-align:left; font-weight:normal;' )
:wikitext( 'pour le [[Projet:Accueil|projet]]' )
:allDone()
local ligne = mw.html.create( 'tr' )
:tag( 'td' )
:attr( 'rowspan', #args )
:cssText( 'text-align:center; font-weight:bold; background-color:' .. args.avancement.couleur )
:cssText( args.avancement.extraCSS or nil )
:wikitext( args.avancement.texte )
:done()
for numProjet, projet in ipairs( args ) do
if projet.importance ~= args[numProjet-1].importance then
local span = 1
while numProjet + span <= #args
and args[numProjet + span].importance == projet.importance
do
span = span + 1
end
ligne
:tag( 'td' )
:attr( 'rowspan', span )
:cssText( 'text-align:center; font-weight:bold; background-color:' .. projet.importance.couleur )
:cssText( projet.importance.extraCSS or nil )
:wikitext( projet.importance.texte )
:done()
end
local avancementCommun = args.avancement.nom
local categories = ''
if not args.nocat then
categories = string.format( chaineCategorie,
avancementCommun,
projet.nomCategorie,
avancementCommun,
projet.nomCategorie,
projet.importance.nom,
projet.extraCategorie
)
end
-- https://www.mediawiki.org/wiki/Extension:PageAssessments
-- https://phabricator.wikimedia.org/T153393
local assessment = frame:callParserFunction( '#assessment', { projet.nom, avancementCommun, projet.importance.nom } )
ligne
:tag( 'td' )
:cssText( 'text-align:center; width:40px' )
:wikitext( string.format( '[[Fichye:%s|40x20px|alt=]]', projet.image ) )
:done()
:tag( 'td' )
:wikitext( ( string.gsub( liensProjet, '¤', projet.nom ) ) )
:wikitext( categories )
:wikitext( assessment )
:done()
evalTable:node( ligne )
ligne = mw.html.create( 'tr' )
end
if #args == 0 then
evalTable:node( ligne )
end
return tostring( evalTable )
end
function p.projet( frame )
local args
if type( frame.getParent ) == 'function' then
args = analyseArgs( frame:getParent().args )
else
args = analyseArgs( frame.args ) -- pour tester dans la console
end
if args[1] then
return p.introduction(args) .. p.tableauAvancement( args )
else
return p.tableauAvancement( args )
end
end
return p