Mòdul:BendèlLa documentacion d'utilizacion d'aquel modul se pòt crear a Mòdul:Bendèl/ús --Aqueste modul implementa los modèls de bendèl.
--Estandardizacion dels bendèls ([[Categoria:Modèl de bendèl]]).
--Crear una foncion exportable pel modèl {{Bandeau}} (ns:all).
--Crear una foncion exportable pels bendèls d'article (ns:0).
--Crear una foncion exportable pels bendèls de seccion (ns:0).
--Crear una foncion exportable pels bendèls d'esbòs (ns:0).
--Crear una foncion exportable pels bendèls de discussion (ns:1).
--Crear una foncion exportable pels bendèls sistèma (ns:8).
--Gerir los imatges multiples.
local p = {}
local trim = require('Mòdul:Aisinas').trim
local yesno = require('Mòdul:yesno')
local class = mw.loadData('Mòdul:Bendèl/Class')
local moduleEbauche = 'Mòdul:Bendèl/Esbòs'
-- local paramEbauche = mw.loadData(moduleEbauche) -- serà pas cargat que per un bendèl d'esbòs.
local cfg = {
forme = 'bandeau-simple',
niveau = 'bandeau-niveau-neutre',
formatLien = '[[Fichièr:%s|%spx|alt=%s]]',
tailleIcone = '45x45',
public = 'domeni public',
erreurArgument = 'Paramètre <code>|%s=</code> mancant',
erreurEbaucheParam = 'lo tèma « %s » del modèl [[Modèl:Esbòs|{{esbòs}}]] es pas [[Ajuda:Esbòs/Ajuda paramètres|definit]].',
erreurEbaucheType = 'lo tèma « %s » deu aparéisser en tèsta de lista del modèl [[Modèl:Esbòs|{{esbòs}}]].',
ebaucheImage = '<span style="white-space:nowrap;word-spacing:5px">%s</span>',
ebaucheTitre = '%s es un [[Ajuda:Esbòs|esbòs]].',
ebaucheTitreSujet = '%s es un [[Ajuda:Esbòs|esbòs]] a prepaus de %s.',
ebaucheCateg = '[[Categoria:Wikipèdia:esbòs %s]]',
}
local function erreur(texte, formatstring, tag)
local res = mw.html.create(tag or 'span')
res :addClass('error')
:wikitext('Error : ')
if formatstring then
res:wikitext(formatstring:format(texte))
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òna'])
local backgroundIcone = class.icones[icone] or ''
local texte = (trim(args.texte) or erreur('tèxte', 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['legenda'] or ''
if alt:lower() == cfg.public then
alt = '|link='
end
if yesno( args['domeni public'] ) then
alt = alt .. '|link='
end
local taille = args['talha icòna'] 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 = ' ' .. 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['suplement']) then
res :tag('p')
:wikitext(args['suplement'])
: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òna'] = trim(args['icòna']) or trim(args['icòna-complèxa']) or args.niveau,
alt = args.alt or args['legenda'],
['domeni public'] = args['domeni public'],
texte = tostring(htmlTexte),
['suplement'] = args['suplement'],
}
return p._bandeau(parametres)
end
function p._bandeauSection(args)
local res = mw.html.create('div')
local icone = trim(args.image) or trim(args['icòna'])
local backgroundIcone = class.icones[icone] or ''
local texte = ' ' .. (trim(args.texte) or erreur('tèxte', 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['legenda'] 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["femenin"], 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 = 'imatge 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( 'Categoria:Wikipèdia:esbòs ' .. cat ).exists then
categs[ k ] = cat
modif = true
end
end
if not modif
and humain
and mw.title.new( 'Categoria:Wikipèdia:esbòs personalitat ' .. ebauche.feminin ).exists
then
table.insert( categs, 'personalitat ' .. 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òna'] ) then
local theme = getEbaucheTable( paramEbauche, args['icòna'] )
if theme and theme.icone then
image = cfg.formatLien:format(
theme.icone,
tailleIcone,
theme.altIcone or ( 'imatge 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, 'tipe' ),
mw.text.listToText( titres )
)
else
titre = cfg.ebaucheTitre:format( ebaucheParam( 1, 'tipe' ) )
end
-- mise en forme du texte
local texte
if #ebauches == 0 then
texte = ( ebaucheParam( 1, 'messatge', 'message' ) ) .. '.'
else
local message = ebaucheParam( 1, 'messatge', 'message' )
local selon = ebaucheParam( 1, 'segon', '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', 'messatge' ) ) .. '. ' .. ( ebaucheParam( 1, 'segon', 'selon' ) ) .. '.'
else
texte = ( ebaucheParam( 1, 'message', 'messatge' ) ) .. ' ' .. ( ebaucheParam( 1, 'segon', '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 .. '/De far' )
if todo.exists then
texte = texte .. '\n\n'
.. 'Consultatz la lista dels <b>prètzfaits d\'acomplir</b> en [['
.. page.talkPageTitle.prefixedText
.. '|pagina 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 .. '[[Categoria:Esbòs desconegut]]'
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 {{Categoria d'esbòs}}, 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=== Esbòsses normals ===\n')
:insert('<caption>Lista dels paramètres d\'esbòs</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%;">subjècte</th>')
:insert('<th scope=col style="width:20%;">categoria</th>')
:insert('<th scope=col>segon</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( '[[:Categoria:Wikipèdia:esbòs ' .. ebauche.categ .. '|' .. ebauche.categ .. ']]' )
end
if ebauche.cageg2 then
wikiTab
:insert('<br>')
:insert( '[[:Categoria:Wikipèdia:esbòs ' .. 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=== Adjectius ===\n')
:insert('<table class="wikitable">')
:insert('<caption>Lista dels adjectius</caption>')
:insert('<th scope=col>adjectiu</th>')
:insert('<th scope=col>femenin</th>')
:insert('<th scope=col style="width:50px;">icòna</th>')
:insert('<th scope=col>subjècte</th>')
:insert('<th scope=col>subjècte femenin</th>')
:insert('<th scope=col>categoria</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( '[[:Categoria:Wikipèdia:esbòs ' .. ebauche.categ .. '|' .. ebauche.categ .. ']]' )
end
wikiTab
:insert('</td></tr>')
end
wikiTab:insert('</table>')
-- troisième table pour les types
wikiTab
:insert('\n=== Tipes ===\n')
:insert('<table class="wikitable">')
:insert('<caption>Lista dels paramètres de tipe</caption>')
:insert('<th scope=col style="width:15%;">nom</th>')
:insert('<th scope=col style="width:50px;">icòna</th>')
:insert('<th scope=col style="width:20%;">tipe</th>')
:insert('<th scope=col style="width:15%;">subjècte</th>')
:insert('<th scope=col style="width:15%;">categoria</th>')
:insert('<th scope=col>messatge</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( '[[:Categoria:Wikipèdia:esbòs ' .. 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', 'ebauche', 'bendèl', 'bendèlAvertiment', 'bendèlSeccion', 'esbòs', 'bendel', 'bendelAvertiment', 'bendelSeccion', 'esbos' }
for _, nomFonction in ipairs(nomsFonction) do
p[nomFonction] = adaptateur('_' .. nomFonction)
end
return p
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia