Módulo:Botón enlazable 2
Este módulo es implementado en la plantilla {{Botón enlazable 2}}
.
Uso
Para utilizar este módulo, deberías, normalmente, utilizar la plantilla {{Botón enlazable 2}}
. De todas formas, también puede ser utilizado con la sintaxis {{#invoke:Botón enlazable 2|main|args}}
. Por favor, vea la página de la plantilla para una lista de parámetros disponibles
Uso desde otros módulos
Para usar este módulo desde otro módulos Lua, primero carga el módulo.
local mClickableButton2 = require('Module:Clickable button 2')
Entonces podrás generar un botón utilizando la función luaMain.
mClickableButton2.luaMain(args)
La variableargs debería ser una tabla que contenga los argumentos que pasar al módulo. Para ver los diferentes argumentos que pueden ser especificados y cómo afectan a la salida del módulo, por favor diríjase a la documentación de la plantilla {{Botón enlazable 2}}
.
local yesno = require('Module:Yesno')
local p = {}
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Clickable button 2'
})
return p.luaMain(args)
end
function p.luaMain(args)
if not args[1] and not args.url then
return ''
end
local data = p.makeLinkData(args)
local link = p.renderLink(data)
local trackingCategories = p.renderTrackingCategories(args)
return link .. trackingCategories
end
function p.makeLinkData(args)
local data = {}
-- Get the link and display values, and find whether we are outputting a
-- wikilink or a URL.
if args.url then
data.isUrl = true
data.link = args.url
if args[1] then
data.display = args[1]
else
data.display = args.url
end
else
data.isUrl = false
data.link = args[1]
if args[2] then
data.display = args[2]
else
data.display = args[1]
end
end
-- Classes
local class = args.class and args.class:lower()
data.classes = {}
if class == 'ui-button-green'
or class == 'ui-button-blue'
or class == 'ui-button-red'
then
table.insert(
data.classes,
'submit ui-button ui-widget ui-state-default ui-corner-all'
.. ' ui-button-text-only ui-button-text'
)
else
table.insert(data.classes, 'mw-ui-button')
end
if class then
table.insert(data.classes, class)
end
-- Styles
do
--[[
-- Check whether we are on the same page as we have specified in
-- args[1], but not if we are using a URL link, as then args[1] is only
-- a display value. If we are currently on the page specified in
-- args[1] make the button colour darker so that it stands out from
-- other buttons on the page.
--]]
local success, linkTitle, currentTitle
if not data.isUrl then
currentTitle = mw.title.getCurrentTitle()
success, linkTitle = pcall(mw.title.new, args[1])
end
if success
and linkTitle
and mw.title.equals(currentTitle, linkTitle)
then
if class == 'ui-button-blue'
or class == 'mw-ui-progressive'
then
data.backgroundColor = '#2962CB'
elseif class == 'ui-button-green'
or class == 'mw-ui-constructive'
then
data.backgroundColor = '#008B6D'
elseif class == 'ui-button-red'
or class == 'mw-ui-destructive'
then
data.backgroundColor = '#A6170F'
else
data.backgroundColor = '#CCC'
data.color = '#666'
end
end
-- Add user-specified styles.
data.style = args.style
end
return data
end
function p.renderLink(data)
-- Render the display span tag.
local display
do
local displaySpan = mw.html.create('span')
for i, class in ipairs(data.classes or {}) do
displaySpan:addClass(class)
end
displaySpan
:attr('role', 'button')
:attr('aria-disabled', 'false')
:css{
['background-color'] = data.backgroundColor,
color = data.color
}
if data.style then
displaySpan:cssText(data.style)
end
displaySpan:wikitext(data.display)
display = tostring(displaySpan)
end
-- Render the link
local link
if data.isUrl then
link = string.format('[%s %s]', data.link, display)
else
link = string.format('[[%s|%s]]', data.link, display)
end
return string.format('<span class="plainlinks">%s</span>', link)
end
function p.renderTrackingCategories(args)
if yesno(args.category) == false then
return ''
end
local class = args.class and args.class:lower()
if class == 'ui-button-green'
or class == 'ui-button-blue'
or class == 'ui-button-red'
then
return '[[Category:Pages using old style ui-button-color]]'
else
return ''
end
end
return p