Jump to content

Module:Clickable button: Difference between revisions

BMZtRoRvaMjD91v4 (talk | contribs)
Created page with "-- This module implements {{clickable button 2}}. local yesno = require('Module:Yesno') local p = {} local function renderTrackingCategories(args) if yesno(args.category) == false then return '' end -- we have no tracking categories currently but args.category should be -- supported into the future, so just return a string here for now return '' end local function makeLinkData(args) local data = {} -- Get the link and display values, -- and find whether..."
 
Dat Hack3r (talk | contribs)
m Updated module according to Wikipedia's version.
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
-- This module implements {{clickable button 2}}.
-- This module implements {{clickable button}}.


local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')
local delink = require('Module:Delink')._delink


local p = {}
local p = {}


local function renderTrackingCategories(args)
function p.main(frame)
if yesno(args.category) == false then
local getArgs = require('Module:Arguments').getArgs
return ''
local args = getArgs(frame)
return p._main(args)
end
 
function p._main(args)
-- If first arg or a url is not provided,
-- but we have a second arg, make a button.
-- Otherwise, return nothing.
args.originalInput = args[1]
args[1] = delink({args[1]})
if args[1] == "" then
args[1] = nil
end
 
if not args[1] and not args.url then
if args[2] then
p.nolink = true
else
return ''
end
end
end
 
-- we have no tracking categories currently but args.category should be
local data = p.makeLinkData(args)
-- supported into the future, so just return a string here for now
local link = p.renderLink(args.originalInput, data)
return ''
local trackingCategories = p.renderTrackingCategories(args)
return link .. trackingCategories
end
end


local function makeLinkData(args)
function p.makeLinkData(args)
local data = {}
local data = {}


Line 26: Line 47:
if args[1] then
if args[1] then
data.display = args[1]
data.display = args[1]
else if args[2] then
elseif args[2] then
data.display = args[2]
data.display = args[2]
else
else
data.display = args.url
data.display = args.url
p.urlisdisplay = true
p.urlisdisplay = true
end
end
end
else
else
Line 41: Line 61:
else
else
data.display = args[1]
data.display = args[1]
end
if args[1] and args[1]:find('http') then
data.isUrl = true
end
end
end
end
Line 73: Line 96:
if colour == 'blue' then
if colour == 'blue' then
class = 'mw-ui-progressive'
class = 'mw-ui-progressive'
else if colour == 'red' then
elseif colour == 'red' then
class = 'mw-ui-destructive'
class = 'mw-ui-destructive'
else if colour == 'green' then
elseif colour == 'green' then
class = 'mw-ui-constructive'
class = 'mw-ui-constructive'
end
end
end
end
end
end
 
if class then
if class then
table.insert(data.classes, class)
table.insert(data.classes, class)
Line 107: Line 128:
and not p.urlisdisplay
and not p.urlisdisplay
then
then
if class == 'ui-button-blue' or class == 'mw-ui-progressive' then
if class == 'ui-button-blue'
or class == 'mw-ui-progressive'
or class == 'mw-ui-constructive'
then
data.backgroundColor = '#2962CB'
data.backgroundColor = '#2962CB'
data.color = '#fff'
data.color = '#fff'
elseif class == 'ui-button-green' or class == 'mw-ui-constructive' then
elseif class == 'ui-button-green' then
data.backgroundColor = '#008B6D'
data.backgroundColor = '#008B6D'
elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then
elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then
Line 118: Line 142:
data.color = '#666'
data.color = '#666'
end
end
else
elseif p.urlisdisplay then
if p.urlisdisplay
data.dummyLink = tostring(currentTitle)
then
data.dummyLink = tostring(currentTitle)
end
end
end
-- Add user-specified styles.
-- Add user-specified styles.
data.style = args.style
data.style = args.style
end
end
return data
return data
end
end


local function renderLink(data)
function p.renderLink(originalInput, data)
-- Render the display span tag.
-- Render the display span tag.
local display
local display
Line 139: Line 159:
displaySpan:addClass(class)
displaySpan:addClass(class)
end
end
displaySpan
displaySpan
:css{
:css{
Line 153: Line 174:
-- Render the link
-- Render the link
local link
local link
if p.nolink then
if originalInput and originalInput:find('|') then
link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display)
elseif p.nolink then
if p.urlisdisplay then
if p.urlisdisplay then
link = string.format('[[%s|%s]]', data.dummyLink, display)
link = string.format('[[%s|%s]]', data.dummyLink, display)
else
else
link = string.format('%s', display)
link = string.format('%s', display)
end
end
else if data.isUrl then
else
if data.isUrl then
link = string.format('[%s %s]', data.link, display)
link = string.format('[%s %s]', data.link, display)
else
else
link = string.format('[[%s|%s]]', data.link, display)
link = string.format('[[%s |%s]]', data.link, display)
end
end
end
end
Line 169: Line 193:
end
end


function p.luaMain(args)
function p.renderTrackingCategories(args)
-- If first arg or a url is not provided,
if yesno(args.category) == false then
-- but we have a second arg, make a button.
return ''
-- Otherwise, return nothing.
end
if not args[1] and not args.url then
local class = args.class and args.class:lower()
if args[2] then
if class == 'ui-button-green'
p.nolink = true
or class == 'ui-button-blue'
else
or class == 'ui-button-red'
return ''
then
end
return '[[Category:Pages using old style ui-button-color]]'
else
return ''
end
end
local data = makeLinkData(args)
local link = renderLink(data)
local trackingCategories = renderTrackingCategories(args)
return link .. trackingCategories
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Clickable button 2'
})
return p.luaMain(args)
end
end


return p
return p