Módulo:Bases
Herramientas
General
Imprimir/exportar
En otros proyectos
localp={}localwikidata=require"Module:Wikidata"localwdpath=require"Module:Wikidata/Chemin"locallangue=require"Module:Langue"localOutils=require"Module:Outils"localdefaultMaxLang=3localbases={"architecture","art","astronomie","audiovisuel","bande dessinée","géographie","jeu","littérature","mode","musique","organisation","recherche","religion","santé","spectacle","sport","tourisme","transport","vie publique","vivant"}localbasesHeadername={["architecture"]="à l'architecture",["art"]="aux beaux-arts",["astronomie"]="à l'astronomie",["audiovisuel"]="à l'audiovisuel",["bande dessinée"]="à la bande dessinée",["géographie"]="à la géographie",["jeu"]="au jeu",["littérature"]="à la littérature",["mode"]="à la mode",["musique"]="à la musique",["organisation"]="aux organisations",["recherche"]="à la recherche",["religion"]="à la religion",["santé"]="à la santé",["spectacle"]="au spectacle",["sport"]="au sport",["tourisme"]="au tourisme",["transport"]="au transport",["vie publique"]="à la vie publique",["vivant"]="au vivant"}--- fonctions internes ---localfunctiontable_contains(array,value)-- je n'ai pas trouvé de fonction table.contains. Pourrait être remplacé par Module:TableTools.inArrayforii,xxinpairs(array)doifvalue==xxthenreturntrueendendreturnfalseendlocalfunctionlangs(property,frame,showfr,maxLang)locallang_str="";locallang_arr={};-- P1629 : élément de la base de la propriété d’identification ; P407 = langue de cette oeuvre ; P305 = code IETF de la langue-- ou alors les qualificatifs de langue de la déclaration « format de l’url » de l’élément de la propriété.forcodelanginwdpath.iterate(property,"(P1629/P407|P1630>P407)/P305")dolocallang=codelang:snak().datavalue.valueifnotshowfrandlang=="fr"thenlang_arr={}breakelseifnottable_contains(lang_arr,lang)then--ne pas insérer les doublonstable.insert(lang_arr,lang)endend-- TODO : à trier par ordre de nom de langue ?? table.sortlang_str=table.concat(lang_arr,"+")iflang_str~=""thenlang_str=langue.indicationMultilingue{lang_str,maxLang=maxLang}endreturnlang_strendlocalfunctioninBase(base,valueToFind)for_,vinipairs(base)doifv[2]==valueToFindthenreturntrueendendreturnfalseend--- fonctions à ne pas utiliser dans l'espace encyclopédique ---functionp.contient(frame)localproperty=frame.args["propriété"]orframe.args.propertylocalbasesWithProperty={}for_,baseinipairs(bases)doifinBase(require("Module:Bases/"..base),property)thentable.insert(basesWithProperty,base)endendreturntable.concat(basesWithProperty,",")endfunctionp.count(frame)localTableTools=require('Module:TableTools')localname=frame.args.namelocalbases=require("Module:Bases/"..name)returnTableTools.size(bases)endfunctionp.documentation(frame)localname=frame.args.namelocalheadername=frame.args.headernameornamelocalnamebis=frame.args.namebisorheadernamelocalcategorie="Page pointant vers des bases relatives "..headernamelocalbases=require("Module:Bases/"..name)localpagesincat=require("Module:Pagesincat")localcomplet=not(frame.args.completandframe.args.complet=="faux")localrestrict=frame.args.restrictlocalmaxLang=frame.args.maxLanglocallines={}locallinesNonFr={}-- texte d'introductiontable.insert(lines,"Modèle à utiliser principalement dans la section [[WP:LE|Liens externes]] d'une page. Il affiche une liste de liens vers des bases de données en lien avec "..namebis.." associée avec la page wikipédia dans lequel il est appelé ou à l’'''id''' spécifique appelée par le modèle. Le paramètre optionnel <code>id=</code> peut être utilisé pour désigner un élément Wikidata autre que celui de la page de Wikipédia où le modèle est employé.")table.insert(lines,"")table.insert(lines,"La liste des liens vers les bases est affichées par ordre alphabétique. Les liens vers des bases francophones sont placés en premier.")table.insert(lines,"")table.insert(lines,"La liste est générée automatiquement à partir des données de l'élément Wikidata relié à la page ou à l’'''id''' spécifique appelée par le modèle.")table.insert(lines,"")table.insert(lines,"")table.insert(lines,"Les liens affichables par la base "..name.." sont chacune des '''propriétés''' du tableau. Le '''sujet''' de ces bases est le lien vers la page wikipédia associée à cette base, ou par défaut d'un wiki d'une autre langue quand il existe. Le modèle ciblent l'élément dans la base de données depuis l’'''url''' de la bases dont le contenu est rédigé dans une ou plusieurs '''langues'''.")table.insert(lines,"")table.insert(lines,"Tout ajout ou suppression de liens dans la base doit passer par [[Wikipédia:Ateliers Bases]].")table.insert(lines,"")table.insert(lines,"L'édition du module se fait à la page [[Module:Bases/"..name.."]].")table.insert(lines,"")table.insert(lines,"")table.insert(lines,"Les pages utilisant le modèle tombent dans la catégorie [[:Catégorie:"..categorie.."|"..categorie.."]], qui contient actuellement "..pagesincat.pagesincat{categorie,type='pages',mise_en_forme='oui'}.." pages.")table.insert(lines,"")table.insert(lines,'{| class="wikitable"')table.insert(lines,'|-')table.insert(lines,'! Propriété')table.insert(lines,'! Sujet')table.insert(lines,'! Libellé')table.insert(lines,'! URL')table.insert(lines,'! Langue')fori,baseinpairs(bases)dolocaltexte=base[1]localfoundifrestrict~=nilthenlocalrawtext=texteiftype(rawtext)=='table'thenrawtext=rawtext[1]endlocalfirstletter=string.sub(rawtext,1,1)iffirstletter=="'"thenfirstletter=string.sub(rawtext,3,3)endfound=string.find(restrict,string.upper(firstletter))endifrestrict==nilorfound~=niltheniftype(texte)=='table'thentexte=langue.langue{texte[2],texte=texte[1]}endlocalpropertie=string.sub(base[2],2)localval=base[2]ifcompletthenval=frame:expandTemplate{title='WD P',args={propertie,'pages'}}elseval='[[d:P:'..base[2]..'|'..base[2]..' <small>(« '..wikidata.getLabel(base[2])..' »)</small>]] → <small>[[:Catégorie:Page utilisant '..base[2]..'|catégorie]]</small>'endlocallang_str=langsandlangs(base[2],frame,true,maxLang)localsubject=wikidata.formatStatements{entity=base[2],property='P1629'}or''ifstring.find(lang_str,"fr")~=nilthentable.insert(lines,'|-')table.insert(lines,'| '..val)table.insert(lines,'| '..subject)table.insert(lines,'| '..texte)table.insert(lines,'| '..base[3])table.insert(lines,'| '..lang_str)elsetable.insert(linesNonFr,'|-')table.insert(linesNonFr,'| '..val)table.insert(linesNonFr,'| '..subject)table.insert(linesNonFr,'| '..texte)table.insert(linesNonFr,'| '..base[3])table.insert(linesNonFr,'| '..lang_str)endendend-- fusion de bases fr en 1er, puis des autres basesfori,vinipairs(linesNonFr)dotable.insert(lines,v)endtable.insert(lines,'|}')returntable.concat(lines,"\n")end--- fonctions pour l'espace encyclopédique ---functionp.tout_comme_table(frame)localargs=Outils.extractArgs(frame)localkeysPrio={}localkeys={}localvalsPrio={}localvals={}localvalsFinal={}localtri=args["tri"]orargs["trie"]orargs["sort"]or"none"localsortBySize=tri=="taille max"localsortBySizeInverse=tri=="taille min"localsortByAlpha=tri=="alphabétique"for_,baseinipairs(bases)doifargs[base]~="-"thenlocalbaseArgs=argsbaseArgs.noinactifcat=truebaseArgs.name=basebaseArgs.headername=basesHeadername[base]--- baseArgs.maxLang = args.maxLanglocaltexte,taille,len=p.main(baseArgs,true)iftaillethenifargs[base]thenlocalkey=args[base]*100whilevalsPrio[key]dokey=key+1endtable.insert(keysPrio,key)valsPrio[key]=texteelselocalkey=taille*1000+lenwhilevals[key]dokey=key+1endtable.insert(keys,key)vals[key]=texteendendendendtable.sort(keysPrio)ifsortByAlphathen-- ne rien faireelseifsortBySizeInversethentable.sort(keys)else-- par défaut : if sortBySize thentable.sort(keys,function(a,b)returna>bend)endfor_,kinipairs(keysPrio)dotable.insert(valsFinal,valsPrio[k])endfor_,kinipairs(keys)dotable.insert(valsFinal,vals[k])endreturnvalsFinalendfunctionp.tout(frame)localvalsFinal=p.tout_comme_table(frame)localrendu=table.concat(valsFinal,"\n*")ifrendu==""andmw.title.getCurrentTitle().namespace==0andnotframe:getParent().args.nocatthenreturn"[[Catégorie:Page utilisant un modèle Bases inactif]]"end-- TODO : surveiller [[phab:T280260]], et lorsque le bug sera corrigé, défaire [[Spécial:Diff/181960530]]-- discussion : [[Discussion Projet:Bases#Petite régression d'affichage : ligne à puce parasite]]returnrenduendfunctionp.main(frame,returnSize)localargs=Outils.extractArgs(frame)-- Récupération des paramètres, soit ceux passés par le modèle,-- soit ceux passés au modèlelocalid=Outils.validTextArg(args,'id','wikidata','entity',1)localname=args.namelocalheadername=args.headernamelocalnoarchive=args.noarchivelocalnocat=args.nocatormw.title.getCurrentTitle().namespace~=0localnoinactifcat=nocatorargs.noinactifcatlocalmaxLang=args.maxLangordefaultMaxLanglocallen=0-- Chargement des données de la base souhaitéelocalbases=require("Module:Bases/"..name)-- Récupération des propriétés wikidata de l'entité sélectionnélocalentityId=idormw.wikibase.getEntityIdForCurrentPage()or''ifnot(mw.wikibase.isValidEntityId(entityId)andmw.wikibase.entityExists(entityId))thenifnoinactifcatthenreturn""elsereturn"[[Catégorie:Page utilisant le modèle Bases "..name.." inactif]]"endend-- Pour chaque base dans notre liste, on vérifie si notre entité la possède-- si c'est le cas, on formate et ajoute un lien vers elle dans une listelocalvals={}localvalsNonFr={}fori,baseinpairs(bases)do-- Pour gérer les cas comme sur Module:Bases/art où des tables sont dans-- des tables => langue du titre de la base pour l'accessibilitélocalnomlocaltexteiftype(base[1])=='table'thennom=base[1][1]texte=langue.langue{base[1][2],texte=base[1][1]}elsenom=base[1]texte=base[1]endlocalvallocalvalue=args[nom]orargs[base[2]]ifvalue~="-"thenifvaluethenval=wikidata.getDataValue({snaktype='value',datatype='external-id',datavalue={value=value}},{urlpattern=base[3],text=texte})elseval=wikidata.formatStatements{entity=entityId,text=texte,property=base[2],urlpattern=base[3],numval=1,addcat=notnocat,qualifier='P407',qualifiervalue='Q150'}orwikidata.formatStatements{entity=entityId,text=texte,property=base[2],urlpattern=base[3],numval=1,addcat=notnocat}endendifvalthenlocallang_str=langsandlangs(base[2],frame,false,maxLang)iflang_str~=""thentable.insert(valsNonFr,lang_str.." "..val)elsetable.insert(vals,val)endifreturnSizethenlen=len+string.len(nom)endendend-- fusion de bases fr en 1er, puis des autres basesfori,vinipairs(valsNonFr)dotable.insert(vals,v)end-- On catégorise si l'entité ne possède aucune des bases listésif#vals==0thenifnoinactifcatthenreturn""elsereturn"[[Catégorie:Page utilisant le modèle Bases "..name.." inactif]]"endend-- Ajout du label si l'id wikidata a été précisé manuellementlocalentityInfo=''ifidthenlocallabel=mw.wikibase.getLabel(entityId)locallink=wikidata.siteLink(entityId)iflabeltheniflinkthenentityInfo=' (pour [['..link..'|'..label..']])'elseentityInfo=' (pour '..label..')'endelseiflinkthenentityInfo=' (pour [['..link..']])'endend-- Concaténation des liens et formatage finallocalheader=''if#vals>1thenheader="Ressources relatives "..headername..entityInfoelseheader="Ressource relative "..headername..entityInfoendlocaltitle=wikidata.addLinkBack(header,entityId,'identifiers')-- Ajout des catégories qui vont bienlocalcategories=''ifnotnocatthencategories="[[Catégorie:Page pointant vers des bases externes]] [[Catégorie:Page pointant vers des bases relatives "..headername.."]]"endlocalelementsHtml=mw.html.create('span'):addClass('liste-horizontale'):addClass(noarchiveand'noarchive'ornil):wikitext(title..' : '):tag('ul')for_,valinipairs(vals)doelementsHtml:tag('li'):wikitext(val):done():wikitext(' ')endifreturnSizethenlen=len+string.len(header)returntostring(elementsHtml:allDone())..categories,#vals,lenelsereturntostring(elementsHtml:allDone())..categoriesendendreturnp