Module:Room features: Difference between revisions
(Created page with "local p = {} function p.main(frame) local args = frame:getParent().args return p._main(args) end local categories = { 'Non-player characters', 'Monsters', 'Skill nodes', 'Scenery' } function base_query(location, category) return { '[[Has subobject::<q>Located in::' .. location .. '</q>]]', 'category=' .. category, '?#-', '?Name', '?Image#-', } end function p._main(args) local ret = '' local location = args[1] or mw.title.getCurrentTitle() f...") |
Im Wired In (talk | contribs) (Change fallback image to a questionmark, link image to the target page) |
||
(14 intermediate revisions by 4 users not shown) | |||
Line 6: | Line 6: | ||
end |
end |
||
local |
local infobox_cat_map = { |
||
⚫ | |||
'Non-player characters', |
['NPC'] = 'Non-player characters', |
||
⚫ | |||
['Scenery'] = 'Scenery', |
|||
'Skill nodes' |
['Skill_node'] = 'Skill nodes' |
||
'Scenery' |
|||
} |
} |
||
local header_text_override = { |
|||
⚫ | |||
['Non-player characters'] = 'Personalities' |
|||
⚫ | |||
} |
|||
⚫ | |||
'category=' .. category, |
|||
⚫ | |||
local ret = { |
|||
⚫ | |||
'?Location object#-', |
|||
'?Location object.Name=name_sub', |
|||
'?Location object.Image#-=image_sub', |
|||
'?Location object.Infobox=infobox_sub', |
|||
'?Location quantity', |
|||
'?#-', |
'?#-', |
||
'?Name', |
'?Name=name', |
||
'?Image#-', |
'?Image#-=image', |
||
'?Infobox=infobox' |
|||
} |
} |
||
⚫ | |||
end |
end |
||
function p._main(args) |
function p._main(args) |
||
local |
local frame = mw.getCurrentFrame() |
||
local ret = {} |
|||
local location = args[1] or mw.title.getCurrentTitle() |
local location = args[1] or mw.title.getCurrentTitle().fullText |
||
⚫ | |||
⚫ | |||
⚫ | |||
ret = ret .. '===' .. cat .. '===\n' |
|||
if query ~= nil then |
|||
⚫ | |||
local results_by_type = {} |
|||
⚫ | |||
local gallery = '<gallery>\n' |
|||
results_by_type[v] = {} |
|||
⚫ | |||
end |
|||
gallery = gallery .. (v.Image or 'File:Section anchor light.svg') .. '|' .. '[[' .. v[1] .. '|' .. v.Name .. ']]\n' |
|||
⚫ | |||
local key = infobox_cat_map[v.infobox_sub or v.infobox] |
|||
-- 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 |
|||
table.insert(ret, tostring(mw.html.create('h3'):wikitext(header_text_override[cat] or cat))) |
|||
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 |
|||
table.insert(ret, tostring(frame:extensionTag{ name = 'gallery', content = table.concat(gallery_lines, '\n'), args = {} })) |
|||
end |
|||
end |
end |
||
gallery = gallery .. '</gallery>\n' |
|||
ret = ret .. frame:preprocess(gallery) |
|||
end |
end |
||
⚫ | |||
return table.concat(ret, '') |
|||
end |
end |
||
Latest revision as of 03:18, 22 November 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.
local p = {}
function p.main(frame)
local args = frame:getParent().args
return p._main(args)
end
local infobox_cat_map = {
['Monster'] = 'Monsters',
['NPC'] = 'Non-player characters',
['Scenery'] = 'Scenery',
['Skill_node'] = 'Skill nodes'
}
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 quantity',
'?#-',
'?Name=name',
'?Image#-=image',
'?Infobox=infobox'
}
return ret
end
function p._main(args)
local frame = mw.getCurrentFrame()
local ret = {}
local location = args[1] or mw.title.getCurrentTitle().fullText
local query = mw.smw.ask(base_query(location))
if query ~= nil then
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 key = infobox_cat_map[v.infobox_sub or v.infobox]
-- 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
table.insert(ret, tostring(mw.html.create('h3'):wikitext(header_text_override[cat] or cat)))
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
table.insert(ret, tostring(frame:extensionTag{ name = 'gallery', content = table.concat(gallery_lines, '\n'), args = {} }))
end
end
end
return table.concat(ret, '')
end
return p