Module:MonsterIndex: Difference between revisions

From Omega Wiki
Jump to navigation Jump to search
Fix imported seed rendering
Refresh OmegaTheme homepage and navigation
 
(2 intermediate revisions by the same user not shown)
Line 10: Line 10:
  },
  },
}
}
local function matches(m, filter)
return filter == '' or m.name:lower():find(filter, 1, true) or m.char == filter or m.category == filter
end
local function marker(m)
return mw.html.create('span')
  :addClass('omega-color-' .. m.class)
  :attr('aria-label', m.name .. ' (' .. m.zh .. ')')
  :wikitext(mw.text.nowiki(m.char))
end
function p.render(frame)
function p.render(frame)
  local edition = frame.args.edition or (mw.title.getCurrentTitle().namespace == 3002 and 'classic' or 'remake')
  local edition = frame.args.edition or (mw.title.getCurrentTitle().namespace == 3002 and 'classic' or 'remake')
  local filter = mw.text.trim(frame.args.filter or ''):lower()
  local filter = mw.text.trim(frame.args.filter or ''):lower()
  local out = {'<table class="wikitable omega-monster-index"><tr><th>Char</th><th>Name</th><th>Category</th></tr>'}
  local mode = mw.text.trim(frame.args.mode or ''):lower()
 
if mode == 'compact' then
  local strip = mw.html.create('div')
  :addClass('omega-monster-strip')
  :attr('role', 'navigation')
  :attr('aria-label', edition .. ' monster index')
  for _, m in ipairs(data[edition] or {}) do
  if matches(m, filter) then
    strip:wikitext('[[' .. m.target .. '|' .. tostring(marker(m)) .. ']]')
  end
  end
  return tostring(strip)
end
 
local tableNode = mw.html.create('table'):addClass('wikitable omega-monster-index')
local header = tableNode:tag('tr')
header:tag('th'):wikitext('Char')
header:tag('th'):wikitext('Name')
header:tag('th'):wikitext('Category')
  for _, m in ipairs(data[edition] or {}) do
  for _, m in ipairs(data[edition] or {}) do
   if filter == '' or m.name:lower():find(filter, 1, true) or m.char == filter or m.category == filter then
   if matches(m, filter) then
   local target = tostring(mw.uri.fullUrl(m.target))
  local row = tableNode:tag('tr')
   out[#out+1] = string.format('<tr><td><a class="omega-color-%s" href="%s" aria-label="%s (%s)">%s</a></td><td><a href="%s">%s</a> <span lang="zh-Hans">%s</span></td><td>%s</td></tr>', m.class, target, m.name, m.zh, m.char, target, m.name, m.zh, m.category)
  row:tag('td'):wikitext('[[' .. m.target .. '|' .. tostring(marker(m)) .. ']]')
   local nameCell = row:tag('td')
  nameCell:wikitext('[[' .. m.target .. '|' .. mw.text.nowiki(m.name) .. ']]')
   nameCell:wikitext(' ')
  nameCell:tag('span')
    :attr('lang', 'zh-Hans')
    :wikitext(mw.text.nowiki(m.zh))
  row:tag('td'):wikitext(mw.text.nowiki(m.category))
   end
   end
  end
  end
out[#out+1] = '</table>'
  return tostring(tableNode)
  return table.concat(out)
end
end
return p
return p

Latest revision as of 06:32, 24 July 2026

Documentation for this module may be created at Module:MonsterIndex/doc

local p = {}
local data = {
 remake = {
  { char='d', name='Dire rat', zh='巨鼠', category='beast', target='Monster/Dire rat', class='red' },
  { char='D', name='Dragon', zh='龙', category='dragon', target='Monster/Dragon', class='yellow' },
 },
 classic = {
  { char='d', name='Giant rat', zh='巨鼠', category='beast', target='Classic:Monster/Giant rat', class='red' },
  { char='D', name='Dragon', zh='龙', category='dragon', target='Classic:Monster/Dragon', class='yellow' },
 },
}

local function matches(m, filter)
 return filter == '' or m.name:lower():find(filter, 1, true) or m.char == filter or m.category == filter
end

local function marker(m)
 return mw.html.create('span')
  :addClass('omega-color-' .. m.class)
  :attr('aria-label', m.name .. ' (' .. m.zh .. ')')
  :wikitext(mw.text.nowiki(m.char))
end

function p.render(frame)
 local edition = frame.args.edition or (mw.title.getCurrentTitle().namespace == 3002 and 'classic' or 'remake')
 local filter = mw.text.trim(frame.args.filter or ''):lower()
 local mode = mw.text.trim(frame.args.mode or ''):lower()

 if mode == 'compact' then
  local strip = mw.html.create('div')
   :addClass('omega-monster-strip')
   :attr('role', 'navigation')
   :attr('aria-label', edition .. ' monster index')
  for _, m in ipairs(data[edition] or {}) do
   if matches(m, filter) then
    strip:wikitext('[[' .. m.target .. '|' .. tostring(marker(m)) .. ']]')
   end
  end
  return tostring(strip)
 end

 local tableNode = mw.html.create('table'):addClass('wikitable omega-monster-index')
 local header = tableNode:tag('tr')
 header:tag('th'):wikitext('Char')
 header:tag('th'):wikitext('Name')
 header:tag('th'):wikitext('Category')
 for _, m in ipairs(data[edition] or {}) do
  if matches(m, filter) then
   local row = tableNode:tag('tr')
   row:tag('td'):wikitext('[[' .. m.target .. '|' .. tostring(marker(m)) .. ']]')
   local nameCell = row:tag('td')
   nameCell:wikitext('[[' .. m.target .. '|' .. mw.text.nowiki(m.name) .. ']]')
   nameCell:wikitext(' ')
   nameCell:tag('span')
    :attr('lang', 'zh-Hans')
    :wikitext(mw.text.nowiki(m.zh))
   row:tag('td'):wikitext(mw.text.nowiki(m.category))
  end
 end
 return tostring(tableNode)
end
return p