Módulo:Listas
Ir a la navegación
Ir a la búsqueda
La documentación para este módulo puede ser creada en Módulo:Listas/doc
Error de secuencia de órdenes: Error de Lua: Error interno: El intérprete ha finalizado con la señal "-129".
local listas = {} local existeCategoria = require('Módulo:Páginas').existeCategoria -- Función que devuelve los elementos de la lista. -- Solo se obtienen los elementos informados. function listas.ObtenerElementosLista(frame) local Argumentos = frame.args; local parent = frame:getParent(); if not Argumentos[1] then Argumentos = parent.args; end local categoria = Argumentos['categoría'] or '' local ordenar = Argumentos['ordenar'] or '' separador = frame.args['separador'] or Argumentos['separador'] conjuncion = frame.args['conjunción'] or Argumentos['conjunción'] local ElementosLista = {} local i = 1; local j = 0; while Argumentos[i] do local TextoAMostrar if Argumentos[i] and not Argumentos[i]:match('^%s*$') then j = j + 1 -- Añadir el enlace si no incluye ya uno local enlazar = frame.args.enlazar or parent.args.enlazar if mw.ustring.find(Argumentos[i], '%[%[') then enlazar = 'no' end if enlazar == 'sí' then -- Desambiguar eliminando el texto ente paréntesis del argumento i-ésimo si es de la forma -- "Texto (lo que sea)". -- Esto solo se hará si después de los paréntesis no hay nada. Ejemplos: -- Alfonso Albacete (director) --> Alfonso Albacete -- [[Carlos Vera (árbitro de fútbol)|Carlos Vera]] --> [[Carlos Vera (árbitro de fútbol)|Carlos Vera]] TextoAMostrar = Argumentos[i]:match('^(.*)%s%(.*%)$') or Argumentos[i] --Obtener el espacio de nombres de los argumentos local espacio_nombres = frame.args.nspace or parent.args.nspace or frame.args['espacio de nombres'] or parent.args['espacio de nombres'] or mw.title.getCurrentTitle().nsText if espacio_nombres == '' then --Se accede a la función con el argumento espacio_nombres pero está sin informar if Argumentos[i] == TextoAMostrar then ElementosLista[j] = mw.ustring.format('[[%s]]', TextoAMostrar) else ElementosLista[j] = mw.ustring.format('[[%s|%s]]', Argumentos[i], TextoAMostrar) end else --Se accede sin el espacio de nombres (en cuyo caso se toma el espacio de nombres desde global) o informado. --Obtener el nombre de la página (eliminando el espacio de nombres si lo tiene). Similar a {{PAGENAME:Argumentos[i]}} --Por ejemplo, si argumentos[i] vale "Plantilla:A" se informa nombrepagina con "A". local nombrepagina local noError, pageObject = pcall(mw.title.new, Argumentos[i]) if noError then nombrepagina = pageObject.text else nombrepagina = Argumentos[i] end -- Enlazar tomando como espacio de nombres el recibido en el argumento o el global. ElementosLista[j] = mw.ustring.format('[[:%s:%s|%s]]', espacio_nombres, nombrepagina, TextoAMostrar) end else TextoAMostrar = Argumentos[i] ElementosLista[j] = mw.text.trim( TextoAMostrar ) end -- Añadir el delimitador local delimitador = frame.args.delimitador or parent.args.delimitador or frame.args.delim or parent.args.delim if delimitador then ElementosLista[j] = delimitador .. ElementosLista[j] .. delimitador end --Añadir la categoría if categoria ~= '' then -- Utilizar argumentos[i] si existe la correspondiente categoría local CategoriaElemento = existeCategoria(categoria:gsub('$1',Argumentos[i])) -- Si no existe ver si existe la categoría eliminando el texto entre paréntesis if not CategoriaElemento and TextoAMostrar ~= Argumentos[i] then CategoriaElemento = existeCategoria(categoria:gsub('$1',TextoAMostrar)) end if CategoriaElemento then if ordenar == '' then ElementosLista[j] = ElementosLista[j] .. '[[' .. CategoriaElemento .. ']]' else ElementosLista[j] = ElementosLista[j] .. '[[' .. CategoriaElemento .. '|' .. ordenar .. ']]' end end end end i = i + 1; end return ElementosLista end -- lista con los elementos separados por comas function listas.lista(frame) -- Obtener los elementos de la lista informados. local ElementosLista= listas.ObtenerElementosLista(frame) if not ElementosLista[1] then return end if not separador and not conjuncion then separador = ',' conjuncion = 'y' elseif separador and not conjuncion then conjuncion = separador end -- Corregir el separador if separador == ',' then separador= ', ' end -- Corregir la conjunción if conjuncion == 'o' then conjuncion = ' o ' elseif conjuncion == 'y' then conjuncion = frame:preprocess(' {{Y-e|{{Desvincular|' .. ElementosLista[#ElementosLista] .. '}}|sin texto}} ') -- ' y ' end return mw.text.listToText(ElementosLista, separador, conjuncion) end function listas.listahtml(frame) local parent = frame:getParent(); -- Obtener los elementos de la lista informados delimitándolos con local ElementosLista= listas.ObtenerElementosLista(frame) if not ElementosLista[1] then return end -- Añadir a los elementos de la lista <li> y </li> local i = 1; while ElementosLista[i] do ElementosLista[i] = '<li>' .. ElementosLista[i] .. '</li>' i = i + 1; end -- Añadir la clase en su caso local clase = frame.args.clase or parent.args.clase local final = '<ul>' .. table.concat( ElementosLista ) .. '</ul>' if clase then final = '<div class="' .. clase ..'">' .. final .. '</div>' end return final end function listas.primero(frame) local ElementosLista= listas.ObtenerElementosLista(frame) if not ElementosLista[1] then return end table.sort( ElementosLista ) return ElementosLista[1] end return listas