Module:OmegaMap: Difference between revisions

From Omega Wiki
Jump to navigation Jump to search
Refresh OmegaWiki seed content
Refresh OmegaWiki seed content
 
Line 31: Line 31:
       local location = line.locations[col]
       local location = line.locations[col]
       if location then
       if location then
         local target = tostring(mw.uri.localUrl(location.target))
         local marker = mw.html.create('span')
        rowNode:tag('a')
           :addClass('omega-color-' .. location.class)
           :addClass('omega-color-' .. location.class)
          :attr('href', target)
           :attr('title', location.label .. ' (' .. location.zh .. ')')
           :attr('title', location.label .. ' (' .. location.zh .. ')')
           :attr('aria-label', location.label .. ' (' .. location.zh .. ')')
           :attr('aria-label', location.label .. ' (' .. location.zh .. ')')
           :wikitext(mw.text.nowiki(location.char))
           :wikitext(mw.text.nowiki(location.char))
        rowNode:wikitext('[[' .. location.target .. '|' .. tostring(marker) .. ']]')
         locations[#locations+1] = {
         locations[#locations+1] = {
           target = target,
           target = location.target,
           label = location.label,
           label = location.label,
           zh = location.zh,
           zh = location.zh,
Line 56: Line 55:
   for _, location in ipairs(locations) do
   for _, location in ipairs(locations) do
     local item = list:tag('li')
     local item = list:tag('li')
     item:tag('a')
     item:wikitext('[[' .. location.target .. '|' .. mw.text.nowiki(location.label) .. ']]')
      :attr('href', location.target)
      :wikitext(mw.text.nowiki(location.label))
     item:wikitext(' ')
     item:wikitext(' ')
     item:tag('span')
     item:tag('span')

Latest revision as of 03:31, 24 July 2026

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