Module:Room features: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
No edit summary |
(variant categories will now be sorted by their category type) |
||
Line 7: | Line 7: | ||
local infobox_cat_map = { |
local infobox_cat_map = { |
||
[' |
['monster'] = 'Monsters', |
||
[' |
['npc'] = 'Non-player characters', |
||
[' |
['scenery'] = 'Scenery', |
||
[' |
['skill_node'] = 'Nodes', |
||
[' |
['venture'] = 'Ventures', |
||
[' |
['shop'] = 'Shops', |
||
['variant_category'] = 'Variants', |
|||
['Variant_Category'] = 'Nodes', -- merge with nodes, since the only variants with locations should be nodes |
|||
} |
} |
||
Line 27: | Line 27: | ||
'?Location object.Image#-=image_sub', |
'?Location object.Image#-=image_sub', |
||
'?Location object.Infobox=infobox_sub', |
'?Location object.Infobox=infobox_sub', |
||
'?Location object.Variant type=vartype_sub', |
|||
'?Location quantity', |
'?Location quantity', |
||
'?#-', |
'?#-', |
||
Line 48: | Line 49: | ||
results_by_type[v] = {} |
results_by_type[v] = {} |
||
end |
end |
||
-- FIXME: Variant category pages (like [[Sparring Guard]]) do not |
|||
-- have an infobox so are not shown |
|||
for i,v in ipairs(query) do |
for i,v in ipairs(query) do |
||
local |
local infobox_type = (v.infobox_sub=='Variant_Category' and v.vartype_sub) or v.infobox_sub or v.infobox or '' |
||
--convert to all lower case with underscores instead of spaces, for best possible matching |
|||
infobox_type = string.lower(infobox_type) |
|||
infobox_type = string.gsub(infobox_type,' ','_') |
|||
local key = infobox_cat_map[infobox_type] |
|||
-- Can be nil - See East Beach for example |
-- Can be nil - See East Beach for example |
||
if key ~= nil then |
if key ~= nil then |
Latest revision as of 21:46, 28 December 2024
Module documentation
This documentation is transcluded from Module:Room features/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Room features/doc. [edit]
Module:Room features's function main is invoked by Template:Room features.
Module:Room features requires Module:Purge.
local p = {}
function p.main(frame)
local args = frame:getParent().args
return p._main(args[1] or mw.title.getCurrentTitle().fullText, frame)
end
local infobox_cat_map = {
['monster'] = 'Monsters',
['npc'] = 'Non-player characters',
['scenery'] = 'Scenery',
['skill_node'] = 'Nodes',
['venture'] = 'Ventures',
['shop'] = 'Shops',
['variant_category'] = 'Variants',
}
local header_text_override = {
['Non-player characters'] = 'Personalities'
}
function base_query(location)
local ret = {
'[[Located in::' .. location .. ']]',
'?Location object#-',
'?Location object.Name=name_sub',
'?Location object.Image#-=image_sub',
'?Location object.Infobox=infobox_sub',
'?Location object.Variant type=vartype_sub',
'?Location quantity',
'?#-',
'?Name=name',
'?Image#-=image',
'?Infobox=infobox'
}
return ret
end
function p._main(location, frame)
frame = frame or mw.getCurrentFrame()
local ret = mw.html.create()
local query = mw.smw.ask(base_query(location))
local empty = true
if query ~= nil then
mw.logObject(query)
local results_by_type = {}
for i,v in pairs(infobox_cat_map) do
results_by_type[v] = {}
end
for i,v in ipairs(query) do
local infobox_type = (v.infobox_sub=='Variant_Category' and v.vartype_sub) or v.infobox_sub or v.infobox or ''
--convert to all lower case with underscores instead of spaces, for best possible matching
infobox_type = string.lower(infobox_type)
infobox_type = string.gsub(infobox_type,' ','_')
local key = infobox_cat_map[infobox_type]
-- Can be nil - See East Beach for example
if key ~= nil then
table.insert(results_by_type[key], v)
end
end
for cat,results in pairs(results_by_type) do
if #results > 0 then
empty = false
ret
:tag('h3'):wikitext(header_text_override[cat] or cat):done()
local gallery_lines = {}
for i,v in ipairs(results) do
local image = v.image_sub or v.image or 'File:Unknown episode infobox icon.png'
local quantity = ''
if v['Location quantity'] and (v['Location quantity'] ~= 'Unknown' and v['Location quantity'] ~= '1') then
quantity = string.format('%s × ', v['Location quantity'])
end
local obj_name = v['Location object'] or v[1]
local version_name = ''
local version = string.match(obj_name, "[^#]+%#([^#]+)")
if version then
version_name = string.format(" <sub>''%s''</sub>", version)
end
local display_name = v.name_sub or v.name
table.insert(gallery_lines, string.format('%s|link=%s|%s[[%s|%s%s]]', image, obj_name, quantity, obj_name, display_name, version_name))
end
ret:node(frame:extensionTag{ name = 'gallery', content = table.concat(gallery_lines, '\n'), args = {} })
end
end
end
if empty then
ret:tag('dd')
:wikitext("''No room features found" .. require('Module:Purge')._purge{ anchor = 'roomfeatures_purge', text = '(refresh)', tag = 'sup' } .. "''[[Category:Empty room features]]")
:done()
end
return ret
end
return p