Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Szqecs/L-rail
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 yesno = require("Module:Yesno") local _style = { ['3'] = 'style="width: 30%;', ['c'] = 'style="text-align: center;', ['v'] = 'vertical-align: middle;', ['bd'] = 'border:', ['t'] = 'border-top:', ['bb'] = 'border-bottom:', ['L'] = 'border-left:', ['r'] = 'border-right:', ['n'] = 'none;', ['0'] = '0px none;', ['1'] = '1px solid #aaa;' } local style = { ['table'] = table.concat({'style="width: 55%; max-width: 50em; margin:0.5em auto; font-size:95%; clear:both;', _style['t'], _style['0'], 'border-collapse: separate;" cellspacing="0" cellpadding="-1"' }), ['header leftcell'] = table.concat({_style['3'], _style['v'], _style['bd'], _style['1'], _style['L'], _style['n'], _style['bb'], _style['n'], '"|' }), ['header banner'] = table.concat({'style="', _style['bd'], _style['n'], _style['t'], _style['1'], '"|' }), ['header midcell'] = table.concat({'colspan="3" style="', _style['v'], _style['bd'], _style['n'], _style['t'], _style['1'], '"|' }), ['header rightcell'] = table.concat({_style['3'], _style['v'], _style['bd'], _style['1'], _style['r'], _style['n'], _style['bb'], _style['n'], '"|' }), ['body leftcell'] = table.concat({_style['c'], _style['v'], _style['L'], _style['0'], _style['bb'], _style['0'], _style['r'], _style['1'], _style['t'], _style['1'], '"|' }), ['body banner'] = table.concat({_style['c'], _style['L'], _style['0'], _style['bb'], _style['0'], _style['r'], _style['0'], _style['t'], _style['1'], 'width: 8px; min-width: 8px; background-color: #' }), ['body midcell'] = table.concat({_style['c'], _style['v'], _style['bb'], _style['0'], '"|' }), ['body rightcell'] = table.concat({_style['c'], _style['v'], _style['L'], _style['1'], _style['bb'], _style['0'], _style['r'], _style['0'], _style['t'], _style['1'], '"|' }) } local function subFormat(s) return '<div style="font-size: smaller; font-style: italic">' .. s .. '</div>' end local p = {} function p.top() return table.concat({'{| class="wikitable" ', style['table']}) end function p.line(args, index, data) local lineTitle = {} local colour = {} local left = {} local right = {} local note = {} local leftTerminus = {} local rightTerminus = {} local t = {} for i, v in ipairs(index) do if args.system[v] then table.insert(t, table.concat({'\n|-', '\n!', style['header leftcell'], 'Preceding station', '\n!', style['header midcell'], data[v][1]['system title'], '\n!', style['header rightcell'], 'Following station' })) table.insert(t, '') table.insert(t, '') table.insert(t, '') end if args.line[v] or args.left[v] or args.right[v] then if not args.line[v] then args.line[v] = args.line[index[i-1]] end local _line = data[v][args.line[v]] lineTitle[v] = _line['line title'] colour[v] = _line.colour note[v] = args.note[v] or '' if type(_line['left terminus']) == 'string' then _leftTerminus = _line['left terminus'] elseif type(_line['left terminus']) == 'table' then _leftTerminus = _line['left terminus'][args.TypeL[v] or 1] end if type(_line['right terminus']) == 'string' then _rightTerminus = _line['right terminus'] elseif type(_line['right terminus']) == 'table' then _rightTerminus = _line['right terminus'][args.TypeR[v] or 1] end local function station(s) if _line['station link'] then return _line['station link'][s] or data[v][1]['station link'][s] or mw.ustring.gsub(_line['station link'][1] or data[v][1]['station link'][1], '%%s', s) else return data[v][1]['station link'][s] or mw.ustring.gsub(data[v][1]['station link'][1], '%%s', s) end end if not args.left[v] then left[v] = "''Terminus''" leftTerminus[v] = '' elseif args.left[v] == _leftTerminus then left[v] = station(args.left[v]) leftTerminus[v] = subFormat('Terminus') else left[v] = station(args.left[v]) if args.onewayL[v] == true then leftTerminus[v] = subFormat('One-way operation') else leftTerminus[v] = subFormat('towards ' .. station(_leftTerminus)) end end if not args.right[v] then right[v] = "''Terminus''" rightTerminus[v] = '' elseif args.right[v] == _rightTerminus then right[v] = station(args.right[v]) rightTerminus[v] = subFormat('Terminus') else right[v] = station(args.right[v]) if args.onewayR[v] == true then rightTerminus[v] = subFormat('One-way operation') else rightTerminus[v] = subFormat('towards ' .. station(_rightTerminus)) end end table.insert(t, '\n|-') table.insert(t, table.concat({'\n|', style['body leftcell'], left[v], leftTerminus[v]})) table.insert(t, table.concat({'\n|', style['body banner'], colour[v], '"|', '\n|', style['body midcell'], lineTitle[v], '<div style="font-size: smaller">', note[v], '</div>', '\n|', style['body banner'], colour[v], '"|'})) table.insert(t, table.concat({'\n|', style['body rightcell'], right[v], rightTerminus[v]})) end end local function combine(t, i) if t[i+4] ~= '' and t[i+4] == t[i] then local tmp = i+4 t[i+4] = '' local rowspan = 2 while t[tmp] == t[tmp+4] do t[tmp+4] = '' rowspan = rowspan+1 tmp = tmp+4 end t[i] = mw.ustring.gsub(t[i], '\n|style="', table.concat({'\n|rowspan="', rowspan, '" style="'})) end end local max = #t for i = 2, max-2, 4 do combine(t, i) end for i = 3, max-1, 4 do combine(t, i) end for i = 4, max, 4 do combine(t, i) end return table.concat(t) end function p.bottom() return '\n|}' end function p.main(frame) local _args = frame:getParent().args local args = { system = {}, line = {}, left = {}, right = {}, TypeL = {}, TypeR = {}, note = {}, onewayL = {}, onewayR = {}, circular = {}, circularL = {}, circularR = {} } local _index = {} for k, v in pairs(_args) do local a = string.match(k, '(%a+)%d+') if not a then a = k end local b = tonumber(string.match(k, '%a+(%d+)')) if not b then b = 1 end if a == 'system' then args.system[b] = v _index[b] = true elseif a == 'line' then args.line[b] = v _index[b] = true elseif a == 'left' then args.left[b] = v _index[b] = true elseif a == 'right' then args.right[b] = v _index[b] = true elseif a == 'typeL' then args.TypeL[b] = v elseif a == 'typeR' then args.TypeR[b] = v elseif a == 'note' then args.note[b] = v elseif a == 'onewayL' then args.onewayL[b] = yesno(v) elseif a == 'onewayR' then args.onewayR[b] = yesno(v) elseif a == 'circular' then args.circular[b] = yesno(v) elseif a == 'circularL' then args.circularL[b] = yesno(v) elseif a == 'circularR' then args.circularR[b] = yesno(v) elseif a == 'throughL' then args.throughL = yesno(v) elseif a == 'throughR' then args.throughR = yesno(v) end end local index = {} for k, v in pairs(_index) do table.insert(index, k) end table.sort(index) local data = {} for i, v in ipairs(index) do if args.system[v] then data[v] = require('Module:Sandbox/Szqecs/L-rail/' .. args.system[v]) else data[v] = data[index[i-1]] end end local rows = { -- To be removed. Included for backwards compatibility. ['all'] = table.concat({p.top(), p.line(args, index, data), p.bottom()}), ['top'] = table.concat({p.top(), p.line(args, index, data)}), ['mid'] = table.concat({p.line(args, index, data)}), ['bottom'] = table.concat({p.line(args, index, data), p.bottom()}) } return rows[_args.rows] or rows['all'] 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:Sandbox/Szqecs/L-rail/doc
(
edit
)