Module:OmegaMap
Documentation for this module may be created at Module:OmegaMap/doc
local p = {}
local maps = {
remake = {
{ text='###########', locations={ [3]={target='Locations/Harbor', label='Harbor', zh='港口', char='H', class='cyan'} } },
{ text='#.........#', locations={} },
{ text='#..@......#', locations={ [4]={target='Locations/Town', label='Town', zh='城镇', char='T', class='yellow'} } },
{ text='#.........#', locations={} },
{ text='###########', locations={} },
},
classic = {
{ text='#########', locations={ [3]={target='Classic:Locations/Harbor', label='Harbor', zh='港口', char='H', class='cyan'} } },
{ text='#.......#', locations={} },
{ text='#..@....#', locations={ [4]={target='Classic:Locations/Town', label='Town', zh='城镇', char='T', class='yellow'} } },
{ text='#########', locations={} },
},
}
function p.render(frame)
local edition = frame.args.edition or (mw.title.getCurrentTitle().namespace == 3002 and 'classic' or 'remake')
local map = maps[edition] or maps.remake
local root = mw.html.create('div'):addClass('omega-map-layout')
local mapNode = root:tag('div')
:addClass('omega-map')
:attr('role', 'group')
:attr('aria-label', edition .. ' map')
local locations = {}
for _, line in ipairs(map) do
local rowNode = mapNode:tag('div'):addClass('omega-map-row')
for col = 1, #line.text do
local char = line.text:sub(col, col)
local location = line.locations[col]
if location then
local marker = mw.html.create('span')
:addClass('omega-color-' .. location.class)
:attr('title', location.label .. ' (' .. location.zh .. ')')
:attr('aria-label', location.label .. ' (' .. location.zh .. ')')
:wikitext(mw.text.nowiki(location.char))
rowNode:wikitext('[[' .. location.target .. '|' .. tostring(marker) .. ']]')
locations[#locations+1] = {
target = location.target,
label = location.label,
zh = location.zh,
}
else
rowNode:wikitext(mw.text.nowiki(char))
end
end
end
local directory = root:tag('div')
:addClass('omega-map-directory')
:attr('role', 'navigation')
:attr('aria-label', 'Locations')
local list = directory:tag('ol')
for _, location in ipairs(locations) do
local item = list:tag('li')
item:wikitext('[[' .. location.target .. '|' .. mw.text.nowiki(location.label) .. ']]')
item:wikitext(' ')
item:tag('span')
:attr('lang', 'zh-Hans')
:wikitext(mw.text.nowiki(location.zh))
end
return tostring(root)
end
return p