Module:Phabricator/sandbox
Appearance
| This is the module sandbox page for Module:Phabricator (diff). See also the companion subpage for test cases (run). |
This module has been created to replace the current template code in Template:Phabricator. It supports the template's documented behavior of any combination of including a "T" or not in the task ID, titling the link, or having a link to Wikipedia:Phabricator.
The |art= and |article= params support both y and yes as a value.
Examples
[edit]{{#invoke:Phabricator|task}}{{#invoke:Phabricator|task|foo}}- Invalid task ID: foo
{{#invoke:Phabricator|task|T1234}}{{#invoke:Phabricator|task|1234}}{{#invoke:Phabricator|task|T1234|label=Lorem ipsum dolor sit amet}}- T1234 (Lorem ipsum dolor sit amet)
{{#invoke:Phabricator|task|T1234|T5678}}{{#invoke:Phabricator|task|T1234|T5678|label=Various tasks}}{{#invoke:Phabricator|task|T1234|label1=Restrict Bugzilla access to read-only|T5678|label2=Allow disabling MediaWiki:aboutsite in the same way as MediaWiki:Disclaimers}}{{#invoke:Phabricator|task|T1234|art=y}}{{#invoke:Phabricator|task|T1234|article=yes}}
Edge cases
[edit]{{#invoke:Phabricator|task||label=foo}}{{#invoke:Phabricator|task||T1234|label2=Restrict Bugzilla access to read-only|T5678|label3=Allow disabling MediaWiki:aboutsite in the same way as MediaWiki:Disclaimers|article=true}}- Phabricator: T1234 (Restrict Bugzilla access to read-only) • T5678 (Allow disabling MediaWiki:aboutsite in the same way as MediaWiki:Disclaimers)
local yesno = require('Module:Yesno')
local parens = function(v) return ((v or '') ~= '') and (" (" .. v .. ")") or "" end
local p = {}
p.task = function(args)
local art = (yesno(args.art) or yesno(args.article)) and
"[[Wikipedia:Phabricator|Phabricator]]''':''' " or ""
local rows = {}
for k, v in pairs(args) do
if tonumber(k) ~= nil then table.insert(rows, tonumber(k)) end
end
table.sort(rows)
if #rows == 0 then return art .. "[[Phabricator:|Phabricator]]" end
local output = {}
for k, v in ipairs(rows) do
local taskId = mw.text.trim(args[k])
taskId = ((tonumber(taskId) ~= nil) and "T" or "") .. taskId
if not (string.find(taskId, '^T%d+$')) then
return require('Module:Error')._error{"Invalid task ID: " .. args[k]}
end
output[k] = ((k > 1) and " • " or "") ..
"[[Phabricator:" .. taskId .. "|" .. taskId .. "]]" ..
parens(args['label' .. k])
end
return art .. table.concat(output) .. parens(args.label)
end
p.task = function(frame)
return p._task(require('Module:Arguments').getArgs(frame))
end
return p