Módulo:Ficha
La documentación para este módulo puede ser creada en Módulo:Ficha/doc
---- Iste modulo ye pa implementar en {{Ficha}}-- local p = {} local HtmlBuilder = require('Module:HtmlBuilder')local CategorizacionAByAD = require('Módulo:Categorización de buenos y destacaus')local marco = {} local argslocal rootlocal amploImachen = '245px' function union(t1, t2) -- torna a unión d'as valors de dos tablas, como una seqüencia local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return retendlocal function depurarVueitas(conteniu) if conteniu and conteniu ~= '' then return conteniu endendlocal function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return numsendlocal function adhibirRinglera(rowArgs) if rowArgs.seccion then root .tag('tr') .tag('th') .attr('colspan', 3) .addClass(rowArgs.claseRinglera) .css('text-align', 'center') .cssText(rowArgs.estiloseccion or args.estiloseccion) .wikitext(rowArgs.seccion) elseif rowArgs.datos then local ringlera = root.tag('tr') ringlera.addClass(rowArgs.claseRinglera) if rowArgs.etiqueta then ringlera .tag('th') .attr('scope', 'row') .css('text-align', 'left') .addClass(rowArgs.claseRinglera) .cssText (rowArgs.estiloetiqueta or args.estiloetiqueta) .wikitext(rowArgs.etiqueta) .done() end local datosCelula = ringlera.tag('td') if rowArgs.etiqueta then datosCelula .attr('colspan', 2) else datosCelula .attr('colspan', 3) .css('text-align', 'center') end datosCelula .addClass(rowArgs.clase) .cssText (rowArgs.estilodatos or args.estilodatos) -- S'adhibe un salto de linia porque si no se fa asinas y por eixemplo en os -- datos i hai una lista con asteriscos en o primer elemento s'amostra -- un asterisco. -- Se tracta d'una error que ya ocurre con tablas normals sin LUA. Por eixemplo -- {| -- | * elemento1 -- * elemento2 -- |} -- O salto de linia ya se produciba en a plantilla Ficha/ringlera .wikitext('\n' .. rowArgs.datos) --.newline() endendlocal function ferTitol() -- Cabecera d'a ficha if not args.titol then return endlocal cabecera = {} if args.media == 'si' and args.clasetitol then cabecera = 'media ' .. args['clasetitol'] elseif args.media == 'si' then cabecera = 'media ' elseif args.tipocabecera then cabecera = 'cabecera ' .. args.tipocabecera elseif args.clasetitol then cabecera = 'cabecera ' .. args.clasetitol else cabecera = 'cabecera ' end root .tag('tr') .tag('th') .attr('colspan', 3) .addClass(cabecera) .css('text-align', 'center') .css('background-color', args.colorfondo or args.colorfondotitol or 'transparent') .css('color', args.colortexto or 'black') .cssText(args.estilotitol) .wikitext(args.titol)endlocal function ferRingleraAlto() if not args.alto and not args.titol2 then return end root .tag('tr') .tag('th') .attr('colspan', 3) .addClass(args.clasealtoor or args.clasetitol2) .css('text-align', 'center') .css('font-size', '125%') .css('font-weight', 'bold') .cssText(args.estiloalto or args.estilotitol2) .wikitext(args.alto or args.titol2)endlocal function ferPietDeTabla()-- Piet de tabla, apareixerá debaixo d'a ficha if not args.pietdetabla then return end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.clasepietdetabla) .css('text-align', 'center') .cssText(args.estilopietdetabla) .wikitext(args.pietdetabla)endlocal function hacerImagenInferior()-- Imachen que apareixerá en a parti inferior d'a tabla if not args.imacheninferior then return end imacheninferior = {} if args['grandariaimacheninferior'] == nil or args['grandariaimacheninferior'] == '' then args['grandariaimacheninferior'] = amploImachen end if string.find(args.imacheninferior, '[{[]') == nil then imacheninferior = ('[[Imachen:' .. args.imacheninferior .. '|'.. args['grandariaimacheninferior'] .. ']]' ) else imacheninferior = args.imacheninferior end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.claseimacheninferior) .css('text-align', 'center') .cssText(args.estiloimacheninferior) .newline() .wikitext(imacheninferior) .tag('br', {selfClosing = true}) .done() .tag('div') .css('display','inline') .cssText(args.estilopietinferior) .wikitext(args.pietinferior) .done() .newline()endlocal function ferImachenSuperior()-- Imachen que apareixerá en a parti superior d'a tabla if not args.imachensuperior then return end if args['grandariaimachensuperior'] == nil or args['grandariaimachensuperior'] == '' then args['grandariaimachensuperior'] = amploImachen end imachensuperior = {} if string.find(args.imachensuperior, '[{[]') == nil then imachensuperior = ('[[Imachen:' .. args.imachensuperior .. '|'.. args['grandariaimachensuperior'] .. ']]' ) else imachensuperior = args.imachensuperior end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.claseimachensuperior) .css('text-align', 'center') .cssText(args.estiloimachensuperior) .newline() .wikitext(imachensuperior) .tag('br', {selfClosing = true}) .done() .tag('div') .css('display','inline') .cssText(args.estilopietsuperior) .wikitext(args.pietsuperior) .done() .newline()endlocal function ferSubtitols()-- Subtitols d'a ficha if args.subtitol then args.subtitol1 = args.subtitol end if args.clasesubtitol then args.clasesubtitol1 = args.clasesubtitol end local subtitolnumero = getArgNums('subtitol') for k, num in ipairs(subtitolnumero) do adhibirRinglera({ datos = args['subtitol' .. num], estilodatos = args['estilosubtitol' .. num] or args.estilosubtitol, clase = args.clasesubtitol, claseRinglera = args['clasesubtitol' .. num] }) endendlocal function ferRinglerasSuperiors()-- ringleras dencima d'imachens laterals if args.datosup then args.datosup1 = args.datosup end if args.clasedatosup then args.clasedatosup1 = args.clasedatosup end if args.estilodatosup then args.estilodatosup1 = args.estilodatosup end local datosupnumero = getArgNums('datosup') for k, num in ipairs(datosupnumero) do adhibirRinglera({ datos = args['datosup' .. num], estilodatos = args['estilodatosup' .. num], clase = args.clasedatosup, claseRinglera = args['clasedatosup' .. num] }) endendlocal function ferImachensLaterals()-- Imagenes que apareceran alto de forma geminada por ejemplo escudos y banderas if args['grandariaimachenizquierda'] == "" or args['grandariaimachenizquierda'] == nil then args['grandariaimachenizquierda'] = '100px' end if args['grandariaimachendreita'] == "" or args['grandariaimachendreita'] == nil then args['grandariaimachendreita'] = '100px' end if args.imachendreita and args.imachenizquierda then if args.pietizquierdo then brcondicionalizquierdo = 'br' end if args.pietdreito then brcondicionaldreito = 'br' end root .tag('tr') .tag('td') --.attr('cellspacing', '0em') --.attr('padding','0em') .attr('colspan', '3') .css('align', 'center') .tag('table') -- ha d'ir adintro d'una tabla pa que as filas no lo deformen .css('width', '100%') .addClass('mergedrow') .tag('tr') .tag('td') .css('text-align', 'center') .css('background-color', 'transparent') .addClass(args.claseimagenizquierda) .css('align', 'center')-- S'alinia en o centro horizontal .css('text-align', 'center') -- S'alinia en o centro horizontal .css('vertical-align', 'middle')-- S'alinia en o centro vertical .cssText(args.estiloimagenizquierda) .wikitext('[[Imachen:' .. args.imachenizquierda .. '|' .. args['grandariaimachenizquierda'] .. ']]' ) .tag(brcondicionalizquierdo) .tag('div') .css('display','inline') .cssText(args.estilopieizquierdo) .wikitext(args.pietizquierdo) .done() .tag('td') .css('text-align', 'center')-- S'alinia en o centro horizontal .css('align', 'center')-- S'alinia en o horizontal .css('vertical-align', 'middle')-- S'alinia en o centro vertical .css('background-color', 'transparent') .addClass(args.claseimagenderecha) .cssText(args.estiloimagenderecha) .wikitext('[[Imachen:' .. args.imachendreita .. '|' .. args['grandariaimachendreita'] .. ']]' ) .tag(brcondicionaldreito) .tag('div') .css('display','inline') .cssText(args.estilopiederecho) .wikitext(args.pietdreito) .done() .newline() elseif args.imachendreita or args.imachenizquierda then -- Si nomás una d'as dos, a imachen que apareixca será en o centro imachenL = {} if args.imachendreita ~= '' and args.imachendreita ~= nil then imachenL = 'imachendreita' elseif args.imachenizquierda ~= '' and args.imachenizquierda ~= nil then imachenL = 'imachenizquierda' end pieL = {} if args.imachendreita then pieL = 'pietdreito' elseif args.imachenizquierda then pieL = 'pietizquierdo' end root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args['clase' .. imachenL]) .css('text-align', 'center') .cssText(args['estilo' .. imachenL]) .newline() .wikitext('[[Imachen:' .. args[imachenL] .. '|'.. args['tamanyo'..imachenL] .. ']]' ) .tag('br') .tag('div') .css('display','inline') .cssText(args['estilo' .. pieL]) .wikitext(args[pieL]) .done() end end local function ferImachens() -- Puet creyar un numero infinito de imachens if args.imachen then args.imagen1 = args.imachen end if args['grandariaimachen'] then args['grandariaimachen1'] = args['grandariaimachen'] end if args.piet then args.pie1 = args.piet end local imagenums = getArgNums('imachen') for k, num in ipairs(imagenums) do local piet = args['piet' .. num] local flotante = args['imachenflotant' .. num] or false if args['grandariaimachen'..num] == nil then args['grandariaimachen'..num] = amploImachen end imachen = {} local cadenaBusqueda = mw.ustring.gsub(args['imachen'..num],'UNIQ','[') -- Pa que no de problemas con qualques plantillas if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si i hai [ o { para no adhibir-ie prefixo imachen = ('[[Imachen:' .. args['imachen' .. num] .. '|'.. args['grandariaimachen' ..num] .. ']]' ) else imachen = args['imachen'..num] end local datos = HtmlBuilder.create().wikitext(imachen) if piet and not flotante then datos .tag('br', {selfClosing = true}) .done() end if piet then datos .tag('div') .css('display','inline') .cssText(args.estilopie) .wikitext(piet) .done() end adhibirRinglera({ datos = tostring(datos), estilodatos = args.estiloimachen, clase = args.claseimachen, claseRinglera = args['claseimachen' .. num] }) endendlocal function ferRingleras() local filanum = union(getArgNums('seccion'), getArgNums('datos')) table.sort(filanum) for k, num in ipairs(filanum) do adhibirRinglera({ estilosubtitol = depurarVueitas(args['estilosubtitol' .. num]), seccion = depurarVueitas(args['seccion' .. num]), estiloseccion = depurarVueitas(args['estilosección' .. num]), etiqueta = depurarVueitas(args['etiqueta' .. num]), datos = depurarVueitas(args['datos' .. num]), estiloetiqueta = depurarVueitas(args['estiloetiqueta' .. num]), estilodatos = depurarVueitas(args['estilodatos' .. num]), clase = depurarVueitas(args['clase' .. num]), claseRinglera = depurarVueitas(args['claseRinglera' .. num]) }) endendfunction tienDatosRinglera(ringlera) -- Función que torna true si a ringlera u grupo de ringleras (en o caso de -- secciones) tien datos. if ringlera.tipo == 'sección' or ringlera.tipo == 'seccion' then for k, ringleraSeccion in ipairs(ringlera) do if tienDatosRinglera(ringleraSeccion) then return true end end elseif ringlera.tipo == 'succesión' or ringlera.tipo == 'succesion' then if depurarVueitas(ringlera[1]) or depurarVueitas(ringlera['anterior']) or depurarVueitas(ringlera[3]) or depurarVueitas(ringlera['siguient']) then return true end else if depurarVueitas(ringlera[2]) or depurarVueitas(ringlera['datos']) then return true end end return falseendfunction adhibirSuccesion(argumentosSuccesion) local ringlera = root.tag('tr') ringlera.css('font-size', '88%') ringlera.css('text-align', 'center') local celda local width width = '33%' celda = ringlera.tag('td') celda .css('width', width) .css('padding', '0.2em 0.1em 0.2em 0') .css('vertical-align', 'middle') if argumentosSuccesion['estilo fuent'] then celda .tag('div') .css('display','inline') .css('font-style', argumentosSuccesion['estilo fuent']) .wikitext(argumentosSuccesion.anterior) .done() else celda.wikitext(argumentosSuccesion.anterior) end if argumentosSuccesion['anyo anterior'] then celda .tag('br') .wikitext('(' .. argumentosSuccesion['anyo anterior'] .. ')') end celda = ringlera.tag('td') celda .css('width', width) .css('padding', '0.2em 0.1em') .css('vertical-align', 'middle') .css('background-color', argumentosSuccesion.color or '#E6E8FA') celda .tag('div') .css('display','inline') .css('font-weight', 'bold') .css('font-style', argumentosSuccesion['estilo fuent'] or '') .wikitext(argumentosSuccesion.actual or args.titol) .done() if argumentosSuccesion['anyo'] then celda .tag('br') .wikitext('(' .. argumentosSuccesion['anyo'] .. ')') end celda = ringlera.tag('td') celda .css('width', width) .css('padding', '0.2em 0 0.2em 0.1em') .css('vertical-align', 'middle') if argumentosSuccesion['estilo fuent'] then celda .tag('div') .css('display','inline') .css('font-style', argumentosSuccesion['estilo fuent']) .wikitext(argumentosSuccesion.siguient) .done() else celda.wikitext(argumentosSuccesion.siguient) end if argumentosSuccesion['anyo siguient'] then celda .tag('br') .wikitext('(' .. argumentosSuccesion['anyo siguient'] .. ')') endendfunction ferRinglerasTabla(tabla) -- Función que composa as ringleras d'una tabla bien a ficha u bien una sección d'a mesma. local anadidoTituloSeccion = false for k, ringlera in ipairs(tabla) do if tienDatosRinglera(ringlera) then if ringlera.tipo == 'sección' or ringlera.tipo == 'seccion' then -- Adhibir o títol d'a sección (si ye informau) local titolSeccion = depurarVueitas(ringlera.titol) or depurarVueitas(ringlera['títol']) if titolSeccion then adhibirRinglera({ estiloseccion = ringlera['estilotitol'] or ringlera['estilotítol'], seccion = titolSeccion }) end ferRinglerasTabla(ringlera) elseif ringlera.tipo == 'sección desplegable' or ringlera.tipo == 'seccion desplegable' then -- MANCA elseif ringlera.tipo == 'succesión'or ringlera.tipo == 'succesion' then adhibirSuccesion({ ['anterior'] = depurarVueitas(ringlera[1]) or depurarVueitas(ringlera['anterior']), ['actual'] = depurarVueitas(ringlera['actual']), ['siguient'] = depurarVueitas(ringlera[3]) or depurarVueitas(ringlera['siguient']), ['anyo anterior'] = depurarVueitas(ringlera['anyo anterior']), ['anyo'] = depurarVueitas(ringlera['anyo']), ['anyo siguient'] = depurarVueitas(ringlera['anyo siguient']), ['estilo fuent'] = depurarVueitas(ringlera['estilo fuent']), ['color'] = depurarVueitas(ringlera['color']) }) elseif ringlera.tipo == 'dos columnas' then -- MANCA elseif ringlera.tipo == 'tres columnas' then -- MANCA else -- Etiqueta + Datos u nomás Datos adhibirRinglera({ etiqueta = depurarVueitas(ringlera[1]) or depurarVueitas(ringlera['etiqueta']), datos = depurarVueitas(ringlera[2]) or depurarVueitas(ringlera['datos']), estiloetiqueta = ringlera['estiloetiqueta'] or tabla['estiloetiqueta'], estilodatos = ringlera['estilodatos'] or tabla['estilodatos'], clase = ringlera['clase'] or tabla['clase'], claseRinglera = ringlera['claseRinglera'] or tabla['claseRinglera'] }) end end end endlocal function ferBarraDeNavegacion()-- Creya en a parti inferior un enlace a la plantilla que se de con nombre if not args.nombre then return end root .tag('tr') .tag('td') .attr('colspan', '3') .css('text-align', 'right') .wikitext(mw.getCurrentFrame():expandTemplate({ title = 'navbar', args = { args.nombre, mini = 1 } }))endlocal function ferBarraWikidata()-- Creya en a parti inferior un enlace a l'ítem de Wikidata local enlacePachina = mw.title.getCurrentTitle().text local etiquetaPachina = mw.ustring.gsub(enlacePachina,'%s%(.*%)','') local entidat = args.entidat or mw.wikibase.getEntityIdForCurrentPage() local textoPie = "" if (args.child == 'si' or args.integrada == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidat) then textoPie = '' elseif entidat ~= "" and entidat ~= nil then textoPie = '<div class="plainlinks wikidata-link" style="font-size: 0.85em">[[[d:' .. tostring(entidat) .. '|editar datos en Wikidata]]]</div>' if (entidat ~= mw.wikibase.getEntityIdForCurrentPage()) and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then textoPie = textoPie .. '[[Categoría:Biquipedia:Articlos con fichas que emplegan acceso arbitrario]]' end else textoPie = "<small>'''Pachina no enlazada a [[Wikidata]]'''\n".."* Si no existe en atras Wikipedias: [<span class=plainlinks>[//www.wikidata.org/w/index.php?title=Special:NewItem&site=eswiki&page="..mw.uri.encode(enlacePachina,WIKI) .."&label="..mw.uri.encode(etiquetaPachina,WIKI) .." crea nuevo ítem]]</span>\n".."* Si existe en atras Wikipedias: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca ítem para enlazar]]</span>]\n".."y ashibe o enlace en aragonés: ".. enlacePachina ..".</small>" end if textoPie ~= '' then root .tag('tr') .tag('td') .addClass('noprint') .attr('colspan', '3') .css('text-align', 'left') .wikitext(textoPie) endendlocal function ferCategoriasSeguimiento() if args.decat ~= 'si' and #(getArgNums('datos')) == 0 and not args[1] and mw.title.getCurrentTitle().namespace == 0 then root.wikitext('[[Categoría:Biquipedia:Articlos que emplegan ficha sin datos en ringleras]]') end if CategorizacionAByAD.hasAnyBadge() == '1' then root.wikitext(CategorizacionAByAD.badgesCategories())endendfunction _infobox() if args.child ~= 'si' and args.integrada ~= 'sí' then root = HtmlBuilder.create('table') root -- Estilo de toda a ficha .addClass('infobox') .addClass(args.clase) .cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') -- Lo mesmo que a plantilla:Ficha .cssText(args.estilo) if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Para que sólo lo adhiba en o espacio de nombres plantilla root.wikitext('[[Categoría:Biquipedia:Fichas con o parametro estilo]]') end ferTitol() ferRingleraAlto() else root = HtmlBuilder.create() if args.titol then root.wikitext("'''" .. args.titol .. "'''") end end ferSubtitols() ferImachenSuperior() ferImachensLaterals() ferRinglerasSuperiors() ferImachens() if not args[1] then ferRingleras() else ferRinglerasTabla(args) end hacerImagenInferior() ferPietDeTabla() ferBarraDeNavegacion() ferBarraWikidata() ferCategoriasSeguimiento() return tostring(root)endlocal function touchParameters(prefixTable, orichArgs, step) -- Analiza os parametros con os prefixos daus, en orden por lotes y con a grandaria especificada a step. -- Isto ye para privar que referencias etc aparezcan en l'orden entivocau. if type(prefixTable) ~= 'table' or type(orichArgs) ~= 'table' then error("Dentrada no valida detectada pa la función touchParameters. Os dos parametros han d'estar tablas.", 2) end if step and type(step) ~= 'number' then error("Detectada valor no numerica en step.", 2) end step = step or 20 -- Si no se le da a grandaria a step, a valor predeterminada ye 20. local temp local a = 1 -- variable de contador. local moreArgumentsExist = true for j,v in ipairs(prefixTable) do if not type(v) == "string" then error("Detectada una valor que no ye string en o prefixo d'a tabla por a función touchParameters.", 2) end temp = orichArgs[v] end while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do temp = orichArgs[v .. tostring(i)] if temp then moreArgumentsExist = true end end end a = a + step endend function p.infobox(frame) local orichArgs marco = frame -- Si se grita a traviés de #invoke, emplegue os argumentos pasaus a la plantilla d'invocación. -- D'atra man, para fins de prueba, asume args que se pasan dreitament como parametros. if frame == mw.getCurrentFrame() then orichArgs = frame:getParent().args else orichArgs = frame end -- Analizar os parametros de datos en o mesmo orden que a plantilla {{ficha}} lo fa, por lo que -- referencias etc. s'amostrarán en os puestos previstos. local temp temp = orichArgs.titol temp = orichArgs.alto touchParameters({'subtitol'}, orichArgs, 5) touchParameters({'imachen', 'piet'}, orichArgs, 5) touchParameters({'seccion', 'etiqueta', 'datos'}, orichArgs, 20) temp = orichArgs.pietdetabla -- L'analizador de funcions considera que una cadena vueita ye falsa, por lo que pa preservar l'anterior -- comportamiento de {{Ficha}}, s'han de cambear os argumentos vueitos ta cero, por lo que Lua los considerará -- que son falsos tamién (excepto parametros 'title cursiva', que especifica un comportamiento diferent -- pendendo de si ye ausent u vueito) args = {} for k, v in pairs(orichArgs) do if v ~= '' then args[k] = v end end return _infobox()endreturn p
🔥 Top keywords: PortaladaCarles PuigdemontEspecial:Zaguers cambeosWikipedia:TabiernaLista de municipios d'a provincia de MalagaEspecial:MirarImachen:Logo Real Madrid.svgSexo oralWikipedia:SobreWikipedia:ActualidatWikipedia:AduyaWikipedia:Ortografía consensuadaRelación sexualWikipedia:Tabierna/AduyaBiquipediaSegunda Guerra MundialCleopatra VIIRachel CarsonSexo analAduya:Cómo rechistrar-seLista de municipios d'a provincia de SevillaMasturbaciónLista de municipios de CantabriaAlta FranconiaMódulo:Control d'autoridazWikipedia:Alvertencias cheneralsLista de provincias d'Espanya por superficieAcademia Aragonesa d'a LuengaContact (cinta)Wikipedia:ComunidatFingeringLista de municipios d'a provincia de GranadaOscar WildeCategoría:Wikipedia:Artíclos por identificadorLista de municipios d'a provincia de CáceresEstaus UniusMülhausenLista de municipios d'a provincia de CastellónCategoría:Banderas d'Estaus Unius