Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Casenav
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local Frame local casePath local people, dates function p.main ( frame ) Frame = frame or mw.getCurrentFrame() local title = mw.title.getCurrentTitle() local base = mw.title.new(frame:callParserFunction('#titleparts', {title.fullText, 4, 1})) local casename = frame:callParserFunction('#titleparts', {title.fullText, 1, 4}) if title.isTalkPage then casePath = base.subjectPageTitle.fullText else casePath = base.fullText end local casenav = mw.title.new(casePath .. '/Casenav') retrieveArgs(casenav, frame:getParent().args) local output = {} table.insert(output, makeShortcut(casename)) table.insert(output, makeCaseNav(casenav)) table.insert(output, frame:expandTemplate{title = 'ArbCom navigation', args = {}}) if title == casenav then table.insert(output, makeArbList()) table.insert(output, listAllArbs()) table.insert(output, frame:expandTemplate{ title = 'Documentation', args = {'User:Bradv/sandbox/casenav/doc'} }) elseif title.isTalkPage then --on all talk pages table.insert(output, makeTalk()) --on PD talk if title.subpageText == 'Proposed decision' then table.insert(output, makeArbList()) end else --on PD page if title.subpageText == 'Proposed decision' then table.insert(output, makePD()) end end return table.concat(output) end function retrieveArgs(casenav, frameArgs) --load local args local args = {} for k, v in pairs(frameArgs) do args[k] = v end --casenav args override local args if casenav.exists then local content = casenav:getContent() local temp = mw.ustring.match(content, '%{%{(.*)%}%}') for str in mw.text.gsplit(temp, '|') do local pair = mw.text.split(str, '=') if #pair==2 then args[mw.text.trim(pair[1])] = mw.text.trim(pair[2]) end end end --set module variables people = {} people.clerks = users(args['clerks']) people.drafters = users(args['drafters']) people.active = users(args['active']) people.inactive = users(args['inactive']) people.recused = users(args['recused']) dates = {} dates.opened = args['date-opened'] dates.evidence = args['date-evidence'] dates.workshop = args['date-workshop'] dates.pd = args['date-pd'] dates.suspended = args['date-suspended'] dates.closed = args['date-closed'] --support legacy arguments if #people.clerks==0 then for k, v in pairs(args) do if mw.ustring.find(k, 'clerk')==1 and is_set(v) then table.insert(people.clerks, link('User:' .. v, v)) end end end if #people.drafters==0 then for k, v in pairs(args) do if mw.ustring.find(k, 'draft')==1 and is_set(v) then table.insert(people.drafters, link('User:' .. v, v)) end end end end function makeShortcut(casename) return Frame:preprocess("{{#if:{{Casenav/shortcut|" .. casename .. "}}|<div style='margin-right: 1em; float: middle;'>{{shortcut|{{Casenav/shortcut|" .. casename .. "}}}}</div>}}") end function makeCaseNav(casenav) local div = mw.html.create('div') div :css('width', '100%') :css('background', 'ivory') :css('border', '1px solid #AAA') :css('margin-bottom', '1em') :css('padding', '1em 0') :wikitext(caselinks()) :wikitext(casedates()) :wikitext(casepeople()) :tag('span') :wikitext('[' .. casenav:fullUrl('action=edit&preload=User:Bradv/sandbox/casenav/preload') .. ' edit]') :addClass('plainlinks') :cssText('float: right; font-variant: small-caps; font-size: .8em') :done() :done() return tostring(div) end function makePD() return Frame:expandTemplate{title = 'Casenav/PD', args = { active = #people.active, inactive = #people.inactive, recused = #people.recused }} end function makeTalk() return Frame:expandTemplate{title = 'Casenav/Talk'} end function makeArbList() local output = {} table.insert(output, "\n==Arbitrators active on this case==\n") table.insert(output, "'''Active:'''\n") for i = 1, #people.active do table.insert(output, ':#' .. people.active[i] .. '\n') end table.insert(output, "\n'''Inactive:'''\n") for i = 1, #people.inactive do table.insert(output, ':#' .. people.inactive[i] .. '\n') end table.insert(output, "\n'''Recused:'''\n") for i = 1, #people.recused do table.insert(output, ':#' .. people.recused[i] .. '\n') end table.insert(output, "\n\n") return table.concat(output) end function listAllArbs() local result = {} local acm = mw.title.new('Wikipedia:Arbitration Committee/Members') local content = acm:getContent() for str in mw.ustring.gmatch(content, '%{%{user|(.-)%}%}') do table.insert(result, str) end table.sort(result) return Frame:expandTemplate{title='collapse', args={title='List of all current arbitrators (from [[WP:AC/M]])', content='<pre>' .. table.concat(result, '\n') .. '</pre>'}} end function caselinks() local result = {} table.insert(result, link(casePath, 'Main case page')) table.insert(result, link(casePath .. '/Evidence', 'Evidence')) table.insert(result, link(casePath .. '/Workshop', 'Workshop')) table.insert(result, link(casePath .. '/Proposed decision', 'Proposed decision')) local div = mw.html.create('div') :css('text-align', 'center') :wikitext(table.concat(result, ' β ')) return tostring(div) end function casedates (opened, evidence, workshop, pd, suspended, closed) local result if is_set(dates.closed) then result = "'''Dates:''' " .. 'Opened ' .. dates.opened .. ' β’ ' .. 'Closed ' .. dates.closed elseif is_set(dates.suspended) then result = "'''Case suspended'''" elseif is_set(dates.opened) then local t = {} table.insert(t, "'''Target dates:''' " .. 'Opened ' .. dates.opened) if is_set(dates.evidence) then table.insert(t, 'Evidence due ' .. dates.evidence) end if is_set(dates.workshop) then table.insert(t, 'Workshop closes ' .. dates.workshop) end if is_set(dates.pd) then table.insert(t, 'Proposed decision expected ' .. dates.pd) end result = table.concat(t, ' β’ ') else return "" end local div = mw.html.create('div') :css('text-align', 'center') :wikitext(result) return tostring(div) end function casepeople () local s = {} if #people.clerks==0 then table.insert(s, "'''Case clerk:''' ''none''") elseif #people.clerks==1 then table.insert(s, "'''Case clerk:''' " .. table.concat(people.clerks)) else table.insert(s, "'''Case clerks:''' " .. table.concat(people.clerks, ' & ')) end if #people.drafters==0 then table.insert(s, "'''Drafting arbitrator:''' ''none''") elseif #people.drafters==1 then table.insert(s, "'''Drafting arbitrator:''' " .. table.concat(people.drafters)) else table.insert(s, "'''Drafting arbitrators:''' " .. table.concat(people.drafters, ' & ')) end local div = mw.html.create('div') :css('text-align', 'center') :wikitext(table.concat(s, ' β ')) return tostring(div) end function users ( list ) local result = {} if list then local tbl = mw.text.split(list, '\n') for i = 1, #tbl do local user = tbl[i] user = mw.text.trim(user) if is_set(user) then table.insert(result, link('User:' .. user, user)) end end end return result end function link ( path, label ) local title = mw.title.new(path) local small = mw.html.create('small') small :wikitext(' ([[' .. title.talkPageTitle.fullText .. '|Talk]])') return '[[' .. title.fullText .. '|' .. label .. ']]' .. tostring(small) end function is_set( var ) return not (var == nil or var == '') end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Casenav/doc
(
edit
)