Module:Room features: Difference between revisions

From Brighter Shores Wiki
Jump to navigation Jump to search
Content added Content deleted
No edit summary
No edit summary
Line 17: Line 17:
'[[Located in::' .. location .. ']]',
'[[Located in::' .. location .. ']]',
'?Location object#-',
'?Location object#-',
'?Location object.Name',
'?Location object.Name=name_sub',
'?Location object.Image#-',
'?Location object.Image#-=image_sub',
'?Location object.Infobox',
'?Location object.Infobox=infobox_sub',
'?Location quantity'
'?Location quantity',
'?#-',
'?Name=name',
'?Image#-=image',
'?Infobox=infobox'
}
}
return ret
return ret
Line 37: Line 41:
end
end
for i,v in ipairs(query) do
for i,v in ipairs(query) do
local key = infobox_cat_map[v.Infobox]
local key = infobox_cat_map[v.infobox_sub or v.infobox]
table.insert(results_by_type[key], v)
table.insert(results_by_type[key], v)
end
end
Line 46: Line 50:
local gallery = '<gallery>\n'
local gallery = '<gallery>\n'
for i,v in ipairs(results) do
for i,v in ipairs(results) do
local image = v.Image or 'File:Section anchor light.svg'
local image = v.image_sub or v.image or 'File:Section anchor light.svg'
local quantity = ''
local quantity = ''
if v['Location quantity'] ~= 'Unknown' then
if v['Location quantity'] and v['Location quantity'] ~= 'Unknown' then
quantity = string.format('%s × ', v['Location quantity'])
quantity = string.format('%s × ', v['Location quantity'])
end
end
gallery = gallery .. string.format('%s|%s[[%s|%s]]\n', image, quantity, v['Location object'], v.Name)
gallery = gallery .. string.format('%s|%s[[%s|%s]]\n', image, quantity, v['Location object'] or v[1], v.name_sub or v.name)
end
end
gallery = gallery .. '</gallery>\n\n'
gallery = gallery .. '</gallery>\n\n'
Line 59: Line 63:
end
end
end
end
mw.log(ret)
return frame:preprocess(ret)
return frame:preprocess(ret)

Revision as of 23:24, 4 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'
}

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()
	
	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]
			table.insert(results_by_type[key], v)
		end
		for cat,results in pairs(results_by_type) do
			if #results > 0 then
				ret = ret .. '===' .. cat .. '===\n'
				
				local gallery = '<gallery>\n'
				for i,v in ipairs(results) do
					local image = v.image_sub or v.image or 'File:Section anchor light.svg'
					local quantity = ''
					if v['Location quantity'] and v['Location quantity'] ~= 'Unknown' then
						quantity = string.format('%s × ', v['Location quantity'])
					end
					gallery = gallery .. string.format('%s|%s[[%s|%s]]\n', image, quantity, v['Location object'] or v[1], v.name_sub or v.name)
				end
				gallery = gallery .. '</gallery>\n\n'
				
				ret = ret .. gallery
			end
		end
	end
	mw.log(ret)
	
	return frame:preprocess(ret)
end

return p