Modul:Navbox person: Unterschied zwischen den Versionen

CamNet - das Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 10: Zeile 10:


local processedArguments = {}
local processedArguments = {}
if args.clan and #args.clan > 0 then
if args.clan and string.len( args.clan ) > 0 then
processedArguments.clan = clan
processedArguments.clan = args.clan
end
if args.coterie and string.length(args.coterie) > 0 then
processedArguments.coterie = YesNo( args.coterie, true )
end
end
processedArguments.coterie = args.coterie == nil and true or YesNo( args.coterie, true )
processedArguments.displayAll = args.display and args.display == 'all'
processedArguments.displayAll = args.display and args.display == 'all'
Zeile 26: Zeile 24:
local query = {
local query = {
select = { '[[is_member_of_class::Person]]' },
select = { '[[is_member_of_class::Person]]' },
fields = { 'is_of_character_type=type', 'is_member_of_the_coterie=coterie', 'is_member_of_clan=clan' }
fields = { 'is_of_character_type=type', 'is_member_of_the_coterie=coterie', 'is_member_of_clan#=clan' }
}
}
local attributes = {
local attributes = {
Zeile 47: Zeile 45:
all = {},
all = {},
}
}
if not data then
return processedData
end
for _, row in pairs(data) do
for _, row in pairs(data) do
if row.coterie then
if row.coterie then
Zeile 69: Zeile 70:
displayNavbox = function( data, args )
displayNavbox = function( data, args )
local typeDisplayOrder = {
local typeDisplayOrder = {
'Vampir', 'Ghul', 'Mensch', 'Gargyl', 'Kuei-Jin', 'Magus', 'Kithain',
'Vampir', 'Ghul', 'Mensch', 'Gargyl', 'Kithain', 'Magus', 'Kuei-Jin',  
'Fea', 'Wechselbalg', 'Werwolf', 'Wiedergänger', 'Geist', 'Jäger', 'KI'
'Werwolf', 'Wiedergänger', 'Geist', 'Jäger', 'KI'
}
}
local navbox = require('Module:Navbox')._navbox
local navbox = require('Module:Navbox')._navbox
Zeile 106: Zeile 107:
end
end


function p.main(frame)
function p.dataTest()
local rawargs = getArgs(frame)
local data = getData()
local args = processArguments( rawargs )
data = processData( data )
 
return data
end
 
function p._navbox( args )
local data = getData()
local data = getData()
data = processData( data )
data = processData( data )


local tt = require('Module:TableTools')
return displayNavbox( data, args )
return tostring( displayNavbox( data, args ) ) .. '<pre>' .. tt.printTable( rawargs ) .. '\n' .. tt.printTable( args ) .. '</pre>'
end
 
function p.navbox(frame)
local rawargs = getArgs(frame)
local args = processArguments( rawargs )
 
return tostring( p._navbox( args ) )
end
end


return p
return p

Aktuelle Version vom 17. September 2024, 21:11 Uhr

Documentation icon Module documentation


This module implements the {{Navbox person}} template. Please see the template page for usage instructions.


Usage[Quelltext bearbeiten]

{{#invoke:Navbox person|navbox}}

local p = {}
local YesNo = require( 'Module:Yesno' )


getArgs = function ( frame )
	return require('Module:Arguments').getArgs( frame )
end

processArguments = function ( args )

	local processedArguments = {}
	if args.clan and string.len( args.clan ) > 0 then
		processedArguments.clan = args.clan
	end
	processedArguments.coterie = args.coterie == nil and true or YesNo( args.coterie, true )
	processedArguments.displayAll = args.display and args.display == 'all'
	
	return processedArguments
end

getData = function ()

	local SmwUtil = require('Module:SmwUtil')
	local query = {
		select = { '[[is_member_of_class::Person]]' },
		fields = { 'is_of_character_type=type', 'is_member_of_the_coterie=coterie', 'is_member_of_clan#=clan' }
	}
	local attributes = {
		sort = 'has display title',
		order = 'asc',
		mainlabel = 'name'
	}
	return SmwUtil.ask(query, attributes)
	-- returns data as follows
	-- clan : (string) clan; WARNING: OPTIONAL
	-- type : (string) person type; Vampire, Kithain, etc.
	-- name : (string) pagename
	-- coterie : (bool) member of the coterie; WARNING: OPTIONAL
end

processData = function ( data )
	
	local processedData = {
			coterie = {},
			all = {},
		}
	if not data then
		return processedData
	end
	for _, row in pairs(data) do
		if row.coterie then
			table.insert(processedData.coterie, row.name)
		end
		if row.clan then
			if not processedData[row.clan] then
				processedData[row.clan] = {}
			end
			table.insert(processedData[row.clan], row.name)
		end
		if not processedData[row.type] then
			processedData[row.type] = {}
		end
		table.insert(processedData[row.type], row.name)
		table.insert(processedData.all, row.name)
	end
	
	return processedData
end

displayNavbox = function( data, args )
	local typeDisplayOrder = {
		'Vampir', 'Ghul', 'Mensch', 'Gargyl', 'Kithain', 'Magus', 'Kuei-Jin', 
		'Werwolf', 'Wiedergänger', 'Geist', 'Jäger', 'KI'
	}
	local navbox = require('Module:Navbox')._navbox
	local sep = '&nbsp;&nbsp;&bull;&nbsp; '
	
	local arguments = {
		navbar = 'off',
		title = 'Personen',
		state = 'expanded',
	}
	if args.coterie then
		arguments.group1 = 'Klüngelmitglieder'
		arguments.list1 = '[[' .. table.concat(data.coterie, ']]' .. sep .. '[[') ..']]'
	end
	if args.clan and data[args.clan] and #data[args.clan] > 0 then
		arguments.group2 = 'Bekannte ' .. args.clan
		arguments.list2 = '[[' .. table.concat(data[args.clan], ']]' .. sep .. '[[') ..']]'
	end
	local num = 4
	if args.displayAll then
		--arguments.group3 = 'Weitere Personen'
		arguments.list3 = '[[' .. table.concat(data.all, ']]' .. sep .. '[[') ..']]'
	else
		for _, personType in pairs( typeDisplayOrder ) do
			if data[personType] and #data[personType] > 0 then
				arguments['group' .. num] = personType
				arguments['list' .. num] = '[[' .. table.concat(data[personType], ']]' .. sep .. '[[') ..']]'
				num = num + 1
			end
		end
	end

	local html = mw.html.create('')
	return html:node( navbox(arguments) )
end

function p.dataTest()
	local data = getData()
	data = processData( data )

	return data	
end

function p._navbox( args )
	
	local data = getData()
	data = processData( data )

	return displayNavbox( data, args )
end

function p.navbox(frame)
	local rawargs = getArgs(frame)
	local args = processArguments( rawargs )

	return tostring( p._navbox( args ) )
end

return p