Module:Room features: Difference between revisions

From Brighter Shores Wiki
Jump to navigation Jump to search
Content added Content deleted
mNo edit summary
(Add text and category when there are no features)
Line 35: Line 35:
function p._main(args)
function p._main(args)
local frame = mw.getCurrentFrame()
local frame = mw.getCurrentFrame()
local ret = {}
local ret = mw.html.create()
local location = args[1] or mw.title.getCurrentTitle().fullText
local location = args[1] or mw.title.getCurrentTitle().fullText


Line 53: Line 53:
for cat,results in pairs(results_by_type) do
for cat,results in pairs(results_by_type) do
if #results > 0 then
if #results > 0 then
ret
table.insert(ret, tostring(mw.html.create('h3'):wikitext(header_text_override[cat] or cat)))
:tag('h3'):wikitext(header_text_override[cat] or cat):done()


local gallery_lines = {}
local gallery_lines = {}
Line 72: Line 73:
end
end


table.insert(ret, tostring(frame:extensionTag{ name = 'gallery', content = table.concat(gallery_lines, '\n'), args = {} }))
ret:node(frame:extensionTag{ name = 'gallery', content = table.concat(gallery_lines, '\n'), args = {} })
end
end
end
end
else
ret:tag('dd')
:wikitext("''No room features found''[[Category:Empty room features]] ")
:wikitext(require('Module:Purge')._purge{ anchor = 'roomfeatures_purge', text = '(refresh)' })
:done()
end
end

return table.concat(ret, '')
return ret
end
end



Revision as of 18:02, 12 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)
end

local infobox_cat_map = {
	['Monster'] = 'Monsters',
	['NPC'] = 'Non-player characters',
	['Scenery'] = 'Scenery',
	['Skill_node'] = '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 = mw.html.create()
	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
				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
	else
		ret:tag('dd')
			:wikitext("''No room features found''[[Category:Empty room features]] ")
			:wikitext(require('Module:Purge')._purge{ anchor = 'roomfeatures_purge', text = '(refresh)' })
		:done()
	end

	return ret
end

return p