Différences entre les pages « Module:Bandeau » et « Modèle:Mots agronomie bibliographie »

De Les Mots de l'agronomie
(Différence entre les pages)
imported>Jacques Ducloy
m (1 révision importée)
 
imported>Thierry Daunois
 
Ligne 1 : Ligne 1 :
--Ce module implémente les modèles de bandeau.
+
<noinclude>
 +
Ce modèle simplifie l'édition automatique, sur la page d'une personne, de sa bibliographie citée sur le wiki, en utilisant les propriétés sémantiques. Lorsqu'il est inséré dans la page d'une personne, il génère la liste des articles cités sur le wiki dont cette personne est le premier auteur, l'un des auteurs, le traducteur, ainsi que des articles dans lesquels il est cité ou dont il est un contributeur.
  
--Standardisation des bandeaux ([[Catégorie:Modèle de bandeau]]).
+
Pour utiliser ce modèle, insérer le texte suivant au début de page :
--Créer une fonction exportable pour le modèle {{Bandeau}} (ns:all).
 
--Créer une fonction exportable pour les bandeaux d'article (ns:0).
 
--Créer une fonction exportable pour les bandeaux de section (ns:0).
 
--Créer une fonction exportable pour les bandeaux d'ébauche (ns:0).
 
--Créer une fonction exportable pour les bandeaux de discussion (ns:1).
 
--Créer une fonction exportable pour les bandeaux système (ns:8).
 
--Gérer les images multiples.
 
  
local p = {}
+
<pre>{{Wicri bibliographie}}
 +
</pre>
  
local trim = require('Module:Outils').trim
+
[[en:Template:Wicri Bibliography]]
local yesno = require('Module:yesno')
+
</noinclude>
local class = mw.loadData('Module:Bandeau/Class')
+
<includeonly>
local moduleEbauche = 'Module:Bandeau/Ébauche'
+
==Articles écrits pour ''Les mots de l'agronomie''==
-- local paramEbauche = mw.loadData(moduleEbauche) -- ne sera chargé que pour un bandeau d'ébauche.
 
  
local cfg = {
+
{{#ask:[[A pour premier auteur::{{PAGENAME}}]]
forme = 'bandeau-simple',
+
| format=ul
niveau = 'bandeau-niveau-neutre',
+
| intro=Premier auteur de :_ }}<!--
formatLien = '[[Fichier:%s|%spx|alt=%s]]',
+
-->{{#ask:[[A pour auteur::{{PAGENAME}}]]
tailleIcone = '45x45',
+
| format=ul
public = 'domaine public',
+
| intro=Auteur de :_ }}<!--
erreurArgument = 'Paramètre <code>|%s=</code> manquant',
+
-->{{#ask:[[A pour conférencier invité::{{PAGENAME}}]]
erreurEbaucheParam = 'le thème « %s » du modèle [[Modèle:Ébauche|{{ébauche}}]] n’est pas [[Aide:Ébauche/Aide paramètres|défini]].',
+
| format=ul
erreurEbaucheType = 'le thème « %s » doit apparaître en tête de liste du modèle [[Modèle:Ébauche|{{ébauche}}]].',
+
| intro=Conférencier invité à :_ }}<!--
ebaucheImage = '<span style="white-space:nowrap;word-spacing:5px">%s</span>',
+
-->{{#ask:[[A pour intervenant::{{PAGENAME}}]]
ebaucheTitre = '%s est une [[Aide:Ébauche|ébauche]].',
+
| format=ul
ebaucheTitreSujet = '%s est une [[Aide:Ébauche|ébauche]] concernant %s.',
+
| intro=Intervenant à :_ }}<!--
ebaucheCateg = '[[Catégorie:Wikipédia:ébauche %s]]',
+
-->{{#ask:[[a pour traducteur::{{PAGENAME}}]]
}
+
| format=ul
 
+
| intro=Traducteur de :_ }}<!--
local function erreur(texte, formatstring, tag)
+
-->{{#ask:[[a pour auteur cité::{{PAGENAME}}]]
local res = mw.html.create(tag or 'span')
+
| format=ul
res :addClass('error')
+
| intro=Est cité par :_ }}<!--
:wikitext('Erreur : ')
+
-->{{#ask:[[a pour contributeur::{{PAGENAME}}]]
 
+
| format=ul
if formatstring then
+
| intro=Contributeur de :_ }}
res:wikitext(formatstring:format(texte))
+
<includeonly>
else
 
res:wikitext(texte)
 
end
 
 
 
return tostring(res)
 
end
 
 
 
function p._bandeau(args)
 
local res = mw.html.create('div')
 
local cells = mw.html.create()
 
local icone = trim(args.image) or trim(args['icône'])
 
local backgroundIcone = class.icones[icone] or ''
 
local texte = (trim(args.texte) or erreur('texte', cfg.erreurArgument))
 
 
 
res :attr{ id = args.id }
 
:addClass(class.formes[args.forme] or cfg.forme)
 
:addClass(class.niveau[args.niveau] or cfg.niveau)
 
:addClass('plainlinks')
 
:addClass(args.class)
 
:cssText(args.style)
 
 
if yesno(args.centrer) then
 
cells = mw.html.create('div')
 
:addClass('bandeau-centrer')
 
elseif trim(args.droite) then
 
cells = mw.html.create('div')
 
:css{ display = 'table', width = '100%' }
 
end
 
if icone and backgroundIcone == '' then
 
local iconeWiki = icone
 
if not icone:match('%[') then
 
local alt = args.alt or args['légende'] or ''
 
if alt:lower() == cfg.public then
 
alt = '|link='
 
end
 
if yesno( args['domaine public'] ) then
 
alt = alt .. '|link='
 
end
 
local taille = args['taille icône'] or cfg.tailleIcone
 
iconeWiki = cfg.formatLien:format(icone, taille, alt)
 
end
 
cells
 
:tag('div')
 
:addClass('bandeau-cell bandeau-icone')
 
:wikitext(iconeWiki)
 
:done()
 
elseif backgroundIcone ~= '' and args.forme == 'section' then
 
texte = '&ensp;' .. texte
 
end
 
cells
 
:tag('div')
 
:addClass('bandeau-cell ' .. backgroundIcone)
 
:wikitext(texte)
 
:newline()
 
:done()
 
if trim(args.droite) then
 
cells
 
:tag('div')
 
:addClass('bandeau-cell')
 
:css( 'padding-left', '1em' )
 
:newline()
 
:wikitext(args.droite)
 
:done()
 
end
 
 
res :node(cells)
 
if trim(args['supplément']) then
 
res :tag('p') 
 
:wikitext(args['supplément'])
 
:done()
 
end
 
return tostring(res)
 
end
 
 
 
function p._bandeauAvertissement(args)
 
local htmlTexte = mw.html.create()
 
 
 
htmlTexte
 
:tag('strong')
 
:addClass('bandeau-titre')
 
:wikitext(trim(args.titre) or erreur('titre', cfg.erreurArgument))
 
:done()
 
:wikitext(args.date)
 
:newline():newline()
 
:wikitext(args.texte)
 
 
 
local parametres = {
 
forme = 'article',
 
niveau = args.niveau,
 
id = args.id,
 
class = args.class,
 
['icône'] = trim(args['icône']) or trim(args['icône-complexe']) or args.niveau,
 
alt = args.alt or args['légende'],
 
['domaine public'] = args['domaine public'],
 
texte = tostring(htmlTexte),
 
['supplément'] = args['supplément'],
 
}
 
 
 
return p._bandeau(parametres)
 
end
 
 
 
function p._bandeauSection(args)
 
local res = mw.html.create('div')
 
local icone = trim(args.image) or trim(args['icône'])
 
local backgroundIcone = class.icones[icone] or ''
 
local texte = '&ensp;' .. (trim(args.texte) or erreur('texte', cfg.erreurArgument))
 
 
 
res :addClass('bandeau-section')
 
:addClass(class.niveau[args.niveau] or cfg.niveau)
 
 
if icone and backgroundIcone == '' then
 
local iconeWiki = icone
 
if not icone:match('%[') then
 
local alt = args.alt or args['légende'] or ''
 
if alt:lower() == cfg.public then
 
alt = '|link='
 
end
 
iconeWiki = cfg.formatLien:format(icone, 'text-top|20x17', alt)
 
end
 
res :wikitext(iconeWiki)
 
:done()
 
end
 
res :addClass(backgroundIcone)
 
:wikitext(texte)
 
:done()
 
 
 
return tostring(res)
 
end
 
 
 
-- fonction qui inverse la casse du premier caractère d'une chaine
 
local function inverserCasse( str )
 
if type( str ) == 'string' then
 
local premierCar = mw.ustring.sub( str, 1, 1 )
 
if mw.ustring.lower( premierCar ) == premierCar then
 
return mw.ustring.upper( premierCar ) .. mw.ustring.sub( str, 2 )
 
else
 
return mw.ustring.lower( premierCar ) .. mw.ustring.sub( str, 2 )
 
end
 
end
 
end
 
 
 
-- fonction qui récupètre la ou les tables d'ébauche correspondant au thème
 
local function getEbaucheTable( paramEbauche, theme, feminin )
 
-- suprime les marques de direction ltr
 
theme = theme:gsub( '\226\128\142', '' ):gsub( '_', ' ' )
 
-- récupére les paramètres lié au theme, à partir du module:Bandeau/Ébauche
 
local params = {}
 
local ebauche = paramEbauche[ theme ] or paramEbauche[ inverserCasse( theme ) ]
 
if not ebauche and theme:find( ' ' ) then
 
-- teste si l'un des mots du thème correspond à un adjectif existant
 
for adj in theme:gmatch( ' ([^ ]+)' ) do
 
paramsAdj = getEbaucheTable( paramEbauche, adj, feminin )
 
if paramsAdj and paramsAdj.adjectif == true then
 
local nom = theme:gsub( ' ' .. adj:gsub( '(%p)', '%%%1'), '' )
 
params = getEbaucheTable( paramEbauche, nom, feminin )
 
if params then
 
return params, paramsAdj
 
end
 
end
 
end
 
-- aucun mot ne correspond à un adjectif, on essait une autre methode pour trouver une correspondance avec plusieurs mots
 
if theme:find( ' .+ ' ) then
 
for adj, paramsAdj in pairs( paramEbauche ) do
 
if paramsAdj.adjectif == true and theme:find( ' ' .. adj, 2, true ) then
 
local nom = theme:gsub( ' ' .. adj:gsub( '(%p)', '%%%1'), '' )
 
params = getEbaucheTable( paramEbauche, nom, feminin )
 
if params then
 
return params, paramsAdj
 
end
 
end
 
end
 
end
 
end
 
if feminin and ebauche and ebauche.feminin then
 
ebauche = paramEbauche[ ebauche.feminin ]
 
end
 
if ebauche then
 
for n, v in pairs( ebauche ) do
 
params[ n ] = v
 
end
 
else
 
params = nil
 
end
 
return params, nil
 
end
 
p.getEbaucheTable = getEbaucheTable
 
 
 
local function femininFromWikidata()
 
local entity = mw.wikibase.getEntity()
 
if entity then
 
local p31 = entity:getBestStatements( 'P31' )
 
local estHumain = type( p31 ) == 'table'
 
and #p31 == 1
 
and type( p31[ 1 ].mainsnak ) == 'table'
 
and type( p31[ 1 ].mainsnak.datavalue ) == 'table'
 
and type( p31[ 1 ].mainsnak.datavalue.value ) == 'table'
 
and p31[ 1 ].mainsnak.datavalue.value['numeric-id'] == 5
 
local p21 = entity:getBestStatements( 'P21' )
 
local estFeminin = type( p21 ) == 'table'
 
and #p21 == 1
 
and type( p21[ 1 ].mainsnak ) == 'table'
 
and type( p21[ 1 ].mainsnak.datavalue ) == 'table'
 
and type( p21[ 1 ].mainsnak.datavalue.value ) == 'table'
 
and p21[ 1 ].mainsnak.datavalue.value['numeric-id'] == 6581072
 
return estHumain, estFeminin
 
end
 
return false, false
 
end
 
 
 
p['_ébauche'] = function ( args )
 
local paramEbauche = mw.loadData( moduleEbauche )
 
local page = mw.title.getCurrentTitle()
 
local ebauches, gestionErreur = {}, {}
 
local humain, feminin = femininFromWikidata()
 
feminin = yesno( args["féminin"], true ) or feminin
 
local estFeminin
 
 
-- fonction qui retourne la valeur de param pour l'ébauche i, ou une valeur par défaut
 
local ebaucheParam = function( i, param )
 
return ebauches[ i ] and ebauches[ i ][ param ] or paramEbauche[''][ param ]
 
end
 
 
 
-- récupération des paramètres de tous les thèmes
 
for i, theme in ipairs( args ) do
 
theme = trim( theme )
 
if theme then
 
local t, tAdj = getEbaucheTable( paramEbauche, theme, feminin )
 
if t then
 
table.insert( ebauches, t )
 
table.insert( ebauches, tAdj )
 
else
 
table.insert(
 
gestionErreur,
 
erreur( theme, cfg.erreurEbaucheParam, 'div' )
 
)
 
end
 
end
 
end
 
 
-- récupération des différents titres, images et catégories
 
local images, titres, categs = {}, {}, {}
 
local tailleIcone = '45x35'
 
if #ebauches > 3 then
 
tailleIcone = '35x25'
 
end
 
for i, ebauche in ipairs( ebauches ) do
 
-- création du lien de l'image
 
local alt = ebauche.altIcone
 
if not alt then
 
if ebauche.sujet then
 
alt = 'image illustrant ' .. ebauche.sujet
 
else
 
alt = ''
 
end
 
end
 
if ebauche.icone then
 
local image = cfg.formatLien:format( ebauche.icone, tailleIcone, alt )
 
table.insert( images, image )
 
end
 
if math.fmod( #ebauches, 3 ) == 1 and ( #ebauches - i ) == 2
 
or math.fmod( i, 3 ) == 0 and ( #ebauches - i ) > 1
 
then
 
-- sur plusieurs lignes s'il y a plus de 3 images, avec minimum deux images sur la dernière ligne
 
table.insert( images, '<br> ' )
 
end
 
 
if i > 1 and ebauche.type and ebauche.type ~= paramEbauche[''].type then
 
-- remplace "Cet article par "Ce portail" ou autre en fonction du premier thème
 
table.insert(
 
gestionErreur,
 
erreur( ebauche.nom, cfg.erreurEbaucheType, 'div' )
 
)
 
end
 
 
-- récupères les différents noms de thème
 
if ebauche.adjectif and #titres > 0 then
 
local sujet = ebauche.sujet or ebauche.nom
 
if estFeminin then
 
sujet = ebauche.sujetF or sujet:gsub(
 
ebauche.nom:gsub( '(%p)', '%%%1') .. '%f[%W]',
 
ebauche.feminin
 
)
 
end
 
-- ajout du sujet de l'adjectif dans le sujet de l'ébauche précédente
 
local titre, subst = titres[ #titres ]:gsub(
 
'<(adj[^>]*)>',
 
{ adjectif = sujet, adj = ebauche.nom, adjF = ebauche.feminin }
 
)
 
if subst > 0 then
 
titres[ #titres ] = titre
 
else
 
titres[ #titres ] = titre .. ' ' .. sujet
 
end
 
else
 
table.insert( titres, ebauche.sujet )
 
estFeminin = ebauche.estFeminin or ( ebauche.sujet == '' and estFeminin )
 
end
 
 
-- mise en forme des catégories
 
if ebauche.adjectif then
 
-- tentative d'ajout du nom de l'adjectif dans les catégories précédentes
 
local modif = false
 
for k, v in ipairs( categs ) do
 
local cat, subst = v:gsub(
 
'<(adj[^>]*)>',
 
{ adj = ebauche.nom, adjF =  ebauche.feminin,  adjectif = ebauche.nom }
 
)
 
if subst == 0 then
 
cat = v .. ' ' .. ebauche.nom
 
end
 
if mw.title.new( 'Catégorie:Wikipédia:ébauche ' .. cat ).exists then
 
categs[ k ] = cat
 
modif = true
 
end
 
end
 
if not modif
 
and humain
 
and mw.title.new( 'Catégorie:Wikipédia:ébauche personnalité ' .. ebauche.feminin ).exists
 
then
 
table.insert( categs, 'personnalité ' .. ebauche.feminin )
 
end
 
end
 
table.insert( categs, ebauche.categ )
 
table.insert( categs, ebauche.categ2 )
 
end
 
 
-- mise en forme des images
 
local image
 
if trim( args['icône'] ) then
 
local theme = getEbaucheTable( paramEbauche, args['icône'] )
 
if theme and theme.icone then
 
image = cfg.formatLien:format(
 
theme.icone,
 
tailleIcone,
 
theme.altIcone or ( 'image illustrant ' .. theme.sujet )
 
)
 
end
 
elseif #images == 1 then
 
image = images[ 1 ]
 
elseif #images > 1 then
 
image = cfg.ebaucheImage:format( table.concat( images, ' ' ) )
 
end
 
 
-- mise en forme du titre
 
local titre
 
if #titres > 0 then
 
titre = cfg.ebaucheTitreSujet:format(
 
ebaucheParam( 1, 'type' ),
 
mw.text.listToText( titres )
 
)
 
else
 
titre = cfg.ebaucheTitre:format( ebaucheParam( 1, 'type' ) )
 
end
 
 
-- mise en forme du texte
 
local texte
 
if #ebauches == 0 then
 
texte = ( ebaucheParam( 1, 'message' ) ) .. '.'
 
else
 
local message = ebaucheParam( 1, 'message' )
 
local selon = ebaucheParam( 1, 'selon' )
 
-- ajout d'un point si le paramètre selon commence par un retour ligne ou une majuscule
 
if message:sub( -1 ) == ')' and ( selon:sub( 1, 3 ) == '<br' or mw.ustring.match( selon, '^%u' ) ) then
 
texte = ( ebaucheParam( 1, 'message' ) ) .. '. ' .. ( ebaucheParam( 1, 'selon' ) ) .. '.'
 
else
 
texte = ( ebaucheParam( 1, 'message' ) ) .. ' ' .. ( ebaucheParam( 1, 'selon' ) ) .. '.'
 
end
 
end
 
-- ajout d'un texte s'il y a une liste de tâches
 
local todo = mw.title.makeTitle( mw.site.namespaces[ page.namespace ].talk.id, page.text .. '/À faire' )
 
if todo.exists then
 
texte = texte .. '\n\n'
 
.. 'Consultez la liste des <b>tâches à accomplir</b> en [['
 
.. page.talkPageTitle.prefixedText
 
.. '|page de discussion]].'
 
end
 
 
-- paramètres pour le bandeau
 
local parametres = {
 
niveau = 'ébauche',
 
['icône'] = image,
 
titre = titre:gsub( ' <adj[^>]*>', '' ),
 
texte = texte,
 
id = args.id
 
}
 
 
-- concaténation des différentes catégories (pas de catégorisation si nocat, ou page de discussion, ou espace utilisateur)
 
local categ = ''
 
local messageErreur = table.concat( gestionErreur )
 
if not ( yesno( args.nocat, true, false ) or page.isTalkPage or page.namespace == 2 ) then
 
for i = 1, #categs do
 
categs[ i ] = cfg.ebaucheCateg:format( categs[ i ] )
 
end
 
categ = table.concat( categs ):gsub( ' <[^>]*>', '' )
 
if categ == '' then
 
categ = cfg.ebaucheCateg:format('')
 
end
 
if #gestionErreur > 0 then
 
messageErreur = messageErreur .. '[[Catégorie:Ébauche inconnue]]'
 
end
 
end
 
 
 
 
 
return p._bandeauAvertissement( parametres ) .. messageErreur .. categ
 
end
 
 
 
---
 
-- fonction retournant un paramètre d'une table d'ébauche.
 
-- Elle est prévue pour être appelée directement par #invoke:
 
-- avec pour paramètres le thème et le paramètre désiré
 
-- Cette fonction est principalement destinée à la page d'aide.
 
function p.parametreEbauche( frame )
 
local paramEbauche = mw.loadData( moduleEbauche )
 
local theme = frame.args[1]
 
local param = frame.args[2]
 
if paramEbauche[ theme ] then
 
return paramEbauche[ theme ][ param ]
 
elseif paramEbauche[ inverserCasse( theme ) ] then
 
return paramEbauche[ inverserCasse( theme ) ][ param ]
 
end
 
end
 
 
 
---
 
-- Fonction retournant le féminin d'un théme d'ébauche
 
-- Elle est prévue pour être appelée directement par #invoke:
 
-- avec pour paramètres le thème et le paramètre désiré
 
-- Cette fonction est principalement destinée au modèle {{Catégorie d'ébauche}}, donc une valeur n'est retournée que si les catégories sont identiques
 
function p.femininEbauche( frame )
 
local paramEbauche = mw.loadData( moduleEbauche )
 
local theme = frame.args[1]
 
local themeF
 
if theme then
 
local t = getEbaucheTable( paramEbauche, theme )
 
local tF, tAdjF = getEbaucheTable( paramEbauche, theme, true )
 
if t.feminin and  tF.categ == t.categ then
 
if tAdjF then
 
themeF = tF.nom .. ' ' .. tAdjF.feminin
 
elseif tF then
 
themeF = tF.nom
 
end
 
return themeF
 
end
 
end
 
end
 
 
 
---
 
-- fonction qui contruit deux tableaux récapitulatif de l'ensemble des paramètres d'ébauche
 
function p.tableParametresEbauches( frame )
 
local paramEbauche = mw.loadData( moduleEbauche )
 
local params, paramAdj, paramType = {}, {}, {}
 
local wikiTab = { '<table class="wikitable sortable" style="table-layout:fixed;">' }
 
wikiTab.insert = function ( t, value )
 
table.insert( t, value )
 
return t
 
end
 
 
for clef, ebauche in pairs( paramEbauche ) do
 
local kEbauche = {}
 
for k, v in pairs( ebauche ) do
 
kEbauche[ k ] = v
 
end
 
kEbauche.clef = clef
 
if ebauche.type then
 
table.insert( paramType, kEbauche )
 
elseif ebauche.adjectif then
 
if clef == ebauche.nom or clef ~= ebauche.feminin then
 
table.insert( paramAdj, kEbauche )
 
end
 
else
 
table.insert( params, kEbauche )
 
end
 
end
 
local comp = function( eb1, eb2 )
 
return eb1.clef < eb2.clef
 
end
 
table.sort( params, comp )
 
table.sort( paramAdj, comp )
 
table.sort( paramType, comp )
 
 
wikiTab
 
:insert('\n=== Ébauches normales ===\n')
 
:insert('<caption>Liste des paramètres d\'ébauche</caption>')
 
:insert('<th scope=col style="width:15%;">nom</th>')
 
:insert('<th scope=col style="width:50px; box-sizing:border-box;">i</th>')
 
:insert('<th scope=col style="width:20%;">sujet</th>')
 
:insert('<th scope=col style="width:20%;">catégorie</th>')
 
:insert('<th scope=col>selon</th>')
 
for k, ebauche in ipairs( params ) do
 
wikiTab
 
:insert('<tr><td>')
 
:insert( ebauche.clef )
 
:insert('</td><td>')
 
if ebauche.icone then
 
wikiTab:insert( cfg.formatLien:format( ebauche.icone, '45x35', ebauche.altIcone or '' ) )
 
end
 
wikiTab
 
:insert('</td><td>')
 
:insert( ebauche.sujet )
 
:insert('</td><td>')
 
if ebauche.categ then
 
wikiTab
 
:insert( '[[:Catégorie:Wikipédia:ébauche ' .. ebauche.categ .. '|' .. ebauche.categ .. ']]' )
 
end
 
if ebauche.cageg2 then
 
wikiTab
 
:insert('<br>')
 
:insert( '[[:Catégorie:Wikipédia:ébauche ' .. ebauche.categ2 .. '|' .. ebauche.categ2 .. ']]' )
 
end
 
wikiTab
 
:insert('</td><td>')
 
:insert( ebauche.selon )
 
:insert('</td></tr>')
 
end
 
wikiTab:insert('</table>')
 
 
-- seconde table pour les adjectifs
 
wikiTab
 
:insert('\n=== Adjectifs ===\n')
 
:insert('<table class="wikitable">')
 
:insert('<caption>Liste des adjectifs</caption>')
 
:insert('<th scope=col>adjectif</th>')
 
:insert('<th scope=col>féminin</th>')
 
:insert('<th scope=col style="width:50px;">icone</th>')
 
:insert('<th scope=col>sujet</th>')
 
:insert('<th scope=col>sujet féminin</th>')
 
:insert('<th scope=col>catégorie</th>')
 
for k, ebauche in ipairs( paramAdj ) do
 
wikiTab
 
:insert('<tr><td>')
 
:insert( ebauche.clef )
 
:insert('</td><td>')
 
:insert( ebauche.feminin )
 
:insert('</td><td>')
 
if ebauche.icone then
 
wikiTab
 
:insert( cfg.formatLien:format( ebauche.icone, '45x35', ebauche.altIcone or '' ) )
 
end
 
wikiTab
 
:insert('</td><td>')
 
:insert( ebauche.sujet )
 
:insert('</td><td>')
 
:insert( ebauche.sujetF or ebauche.sujet:gsub( ebauche.nom .. '%f[%W]', ebauche.feminin ) )
 
:insert('</td><td>')
 
if ebauche.categ then
 
wikiTab
 
:insert( '[[:Catégorie:Wikipédia:ébauche ' .. ebauche.categ .. '|' .. ebauche.categ .. ']]' )
 
end
 
wikiTab
 
:insert('</td></tr>')
 
end
 
wikiTab:insert('</table>')
 
 
-- troisième table pour les types
 
wikiTab
 
:insert('\n=== Types ===\n')
 
:insert('<table class="wikitable">')
 
:insert('<caption>Liste des paramètres de type</caption>')
 
:insert('<th scope=col style="width:15%;">nom</th>')
 
:insert('<th scope=col style="width:50px;">icone</th>')
 
:insert('<th scope=col style="width:20%;">type</th>')
 
:insert('<th scope=col style="width:15%;">sujet</th>')
 
:insert('<th scope=col style="width:15%;">catégorie</th>')
 
:insert('<th scope=col>message</th>')
 
for k, ebauche in ipairs( paramType ) do
 
wikiTab
 
:insert('<tr><td>')
 
:insert( ebauche.clef )
 
:insert('</td><td>')
 
if ebauche.icone then
 
wikiTab:insert( cfg.formatLien:format( ebauche.icone, '45x35', ebauche.altIcone or '' ) )
 
end
 
wikiTab
 
:insert('</td><td>')
 
:insert ( ebauche.type )
 
:insert('</td><td>')
 
:insert( ebauche.sujet )
 
:insert('</td><td>')
 
if ebauche.categ then
 
wikiTab:insert( '[[:Catégorie:Wikipédia:ébauche ' .. ebauche.categ .. '|' .. ebauche.categ .. ']]' )
 
end
 
wikiTab
 
:insert('</td><td>')
 
:insert( ebauche.message )
 
:insert('</td></tr>')
 
end
 
wikiTab:insert('</table>')
 
 
return table.concat( wikiTab ):gsub( ' <adjF?>', '' )
 
end
 
 
 
-- fonction destiné au gadget MediaWiki:Gadget-BandeauxEbauches.js
 
function p.listeEbauches( frame )
 
local paramEbauche = mw.loadData( moduleEbauche )
 
local liste = {}
 
for k in pairs( paramEbauche ) do
 
if k ~="" then
 
table.insert( liste, k )
 
end
 
end
 
table.sort( liste )
 
return table.concat( liste, '\n' )
 
end
 
 
 
 
 
 
 
-- Insertion dans la table p des fonctions appelées par les
 
-- modèles à l'aide d'un adaptateur de fonction.
 
local function adaptateur(nomFonction)
 
return function (frame)
 
local args
 
if frame.args.texte or frame.args.titre then
 
args = frame.args
 
else
 
args = frame:getParent().args
 
end
 
return p[nomFonction](args)
 
end
 
end
 
 
local nomsFonction = {'bandeau', 'bandeauAvertissement', 'bandeauSection', 'ébauche' }
 
for _, nomFonction in ipairs(nomsFonction) do
 
p[nomFonction] = adaptateur('_' .. nomFonction)
 
end
 
 
 
return p
 

Version du 13 février 2012 à 09:35

Ce modèle simplifie l'édition automatique, sur la page d'une personne, de sa bibliographie citée sur le wiki, en utilisant les propriétés sémantiques. Lorsqu'il est inséré dans la page d'une personne, il génère la liste des articles cités sur le wiki dont cette personne est le premier auteur, l'un des auteurs, le traducteur, ainsi que des articles dans lesquels il est cité ou dont il est un contributeur.

Pour utiliser ce modèle, insérer le texte suivant au début de page :

{{Wicri bibliographie}}

en:Template:Wicri Bibliography