Module:Sock list

local p = {}

local getArgs = require('Module:Arguments').getArgs

local isIpOrRange = require('Module:IPAddress')._isIpOrRange

local yesno = require('Module:Yesno')

function p.main(frame)

local args = getArgs(frame)

return p._main(frame, args)

end

function listEntry(frame, args, sockNum, sock)

local template = (isIpOrRange(sock) ~= "")

and (args.IP_template or args.template or 'checkip')

or (args.account_template or args.template or 'checkuser')

local li = mw.html.create('li')

local text = frame:expandTemplate{title=template, args={sock, ['master name']=args.master}}

if args['strike' .. sockNum] then

text = "" .. text .. ""

end

local note = args['note' .. sockNum]

if note then

text = text .. " " .. note

end

li:wikitext(text)

return li

end

function toolEIA(args)

local url = "https://tools.wmflabs.org/sigma/editorinteract.py?users="

.. mw.uri.encode(args.master or "")

for i, sock in ipairs(args) do

if not args['strike' .. i] then

url = url .. "&users=" .. mw.uri.encode(sock)

end

end

return "[" .. url .. " Editor interaction utility]"

end

function toolTimeline(args)

local url = "https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user="

.. mw.uri.encode(args.master or "") .. "&user=" .. mw.uri.encode(args[1] or "")

return "[" .. url .. " Interaction Timeline]"

end

function toolSpiTools(args)

local url = "https://spi-tools.toolforge.org/spi/?caseName="

.. mw.uri.encode(args.master or "")

return "[" .. url .. " SPI Tools]"

end

function p._main(frame, args)

local socklist = mw.html.create('ul')

if yesno(args.hidden) then

socklist:attr('style', 'display:none;')

end

if args[1] then

for sockNum, sock in ipairs(args) do

if args.master ~= sock or not yesno(args.remove_master or 'no') then

socklist:node(listEntry(frame, args, sockNum, sock))

end end end

if yesno(args.tools_link) then

local tools = mw.html.create('li')

tools

:attr('class', 'plainlinks')

:wikitext("Tools: ")

:node(toolEIA(args))

:wikitext(" · ")

:node(toolTimeline(args))

:wikitext(" · ")

:node(toolSpiTools(args))

socklist:node(tools)

end

return socklist

end

return p