Diferencia entre revisiones de «Módulo:Redirección»
wikitves>Sophivorus m (Trying to fix a bug) |
m (1 revisión importada) |
(Sin diferencias)
|
Revisión actual - 03:34 19 sep 2022
La documentación para este módulo puede ser creada en Módulo:Redirección/doc
-- Funciones para determinar si una página es una redirección, y en su caso resolverla. -- Adaptado de [[en:Module:Redirect]] -- (https://en.wikipedia.org/w/index.php?title=Module:Redirect&oldid=773537701). local p = {} -- *** Funciones para uso desde código wiki *** -- Determina si una página es una redirección. Si lo es, devuelve 'sí' (sin -- las comillas). Si no lo es (o no existe, etc.), devuelve una cadena vacía. function p.isRedirect(frame) if p.luaIsRedirect(frame.args[1]) then return 'sí' else return '' end end -- Determina si una página es una redirección a otra concreta (o a una sección de esta). -- Si lo es, devuelve 'sí' (sin las comillas). Si no lo es (o no existe, etc.), devuelve -- una cadena vacía. function p.isRedirectTo(frame) local targetTitle = p.luaGetTitle(frame.args[2]) if not targetTitle then return '' end if p.luaGetRedirectTarget(frame.args[1], targetTitle.fragment) == targetTitle.fullText then return 'sí' else return '' end end -- Determina si una página es una redirección a la página actual (o a alguna sección -- de esta). Si lo es, devuelve 'sí' (sin las comillas). Si no lo es (o no existe, -- etc.), devuelve una cadena vacía. function p.isRedirectHere(frame) local here = mw.title.getCurrentTitle().prefixedText if p.luaGetRedirectTarget(frame.args[1], false) == here then return 'sí' else return '' end end -- Determina si una página es una redirección. Si lo es, devuelve su destino. -- Si no lo es (o no existe, etc.), devuelve una cadena vacía. function p.getRedirectTarget(frame) local target = p.luaGetRedirectTarget(frame.args[1], true) if target then return target else return '' end end -- Determina si una página es una redirección. Si lo es, devuelve su destino. -- Si no lo es (o no existe, etc.), devuelve el propio título, en forma canónica. -- Si no es un título válido, devuelve una cadena vacía. function p.solveRedirects(frame) local pageTitle = p.luaGetTitle(frame.args[1]) if not pageTitle then return '' end return p.luaGetRedirectTarget(pageTitle.fullText, true) or pageTitle.fullText end -- *** Funciones para uso desde Lua *** -- Obtiene el destino de una redirección. Si la página especificada no es una -- redirección, devuelve nil. -- Obtiene el objeto del título. Ambos nombres de las páginas y objetos de título se permiten -- como entrada. function p.luaGetRedirectTarget(page, fulltext) local titleObj if type(page) == 'string' or type(page) == 'number' then titleObj = p.luaGetTitle(page) elseif type(page) == 'table' and type(page.getContent) == 'function' then titleObj = page else error(string.format( "Argumento no válido #1 para 'luaGetRedirectTarget'" .. " (Esperado string - texto , numbre - número o objeto de título y el tipo dado es %s)", type(page) ), 2) end if not titleObj or not titleObj.isRedirect then return nil end local target = titleObj.redirectTarget if target then if fulltext then return target.fullText else return target.prefixedText end else return nil end end -- Determina si una página es una redirección. function p.luaIsRedirect(page) local titleObj = p.luaGetTitle(page) if not titleObj then return false end if titleObj.isRedirect then return true else return false end end -- Obtiene un objeto mw.title, utilizando pcall para evitar generar errores de script si -- están por encima del límite de recuento porque la función es costosa (entre otras causas posibles). function p.luaGetTitle(...) local success, titleObj = pcall(mw.title.new, ...) if success then return titleObj else return nil end end -- *** Funciones para compatibilidad con [[en:Module:Redirect]] *** -- Equivalente a getTarget de https://en.wikipedia.org/w/index.php?title=Module:Redirect&oldid=773537701. function p.getTarget(page, fulltext) return p.luaGetRedirectTarget(page, fulltext) end -- Obtiene el nombre de la páginas a la que redirije la redirección directo del wikitexto -- o nil si no es una redirección function p.getTargetFromText(text) return mw.ustring.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]" ) or mw.ustring.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]" ) or mw.ustring.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Cc][Ii][OoÓó][Nn]%s*:?%s*%[%[([^%[%]|]-)%]%]" ) or mw.ustring.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Cc][Ii][OoÓó][Nn]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]" ) end --Teniendo en cuenta un solo nombre de la página determina que página se redirige a y devuelve el -- nombre de la página de destino, o el nombre de la página pasa cuando no una redirección. El pasado -- nombre de la página se puede dar como texto sin formato o como vínculo. -- -- Devuelve nombre de la página como texto sin formato, o cuando se da el parámetro de soporte, como un -- vínculo. Devuelve un mensaje de error cuando la página no existe o la redirección -- de destino no se puede determinar por alguna razón. -- -- Equivalente a luaMain de https://en.wikipedia.org/w/index.php?title=Module:Redirect&oldid=773537701. function p.luaMain(rname, bracket, fulltext) if type(rname) ~= "string" or not rname:find("%S") then return nil end bracket = bracket and "[[%s]]" or "%s" rname = rname:match("%[%[(.+)%]%]") or rname local target = p.luaGetRedirectTarget(rname, fulltext) local ret = target or rname ret = p.luaGetTitle(ret) if ret then if fulltext then ret = ret.fullText else ret = ret.prefixedText end return bracket:format(ret) else return nil end end -- Proporciona acceso a luaMain desde el código wiki. -- Equivalente a main de https://en.wikipedia.org/w/index.php?title=Module:Redirect&oldid=773537701. function p.main(frame) return p.luaMain(frame.args[1], frame.args.bracket, frame.args.fulltext) or '' end return p