Modul:Navbox person: Unterschied zwischen den Versionen
Noémi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Noémi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 10: | Zeile 10: | ||
local processedArguments = {} | local processedArguments = {} | ||
if args.clan and string.length(args.clan) > 0 then | if args.clan and string.length(args.clan) > 0 then | ||
processedArguments.clan = clan | processedArguments.clan = clan | ||
end | end | ||
if args.coterie and string.length(args.coterie) > 0 then | if args.coterie and string.length(args.coterie) > 0 then | ||
processedArguments.coterie = YesNo( args.coterie, true ) | processedArguments.coterie = YesNo( args.coterie, true ) | ||
end | end | ||
processedArguments.displayAll = args.display and args.display == 'all' | |||
return processedArguments | return processedArguments | ||
| Zeile 42: | Zeile 41: | ||
end | end | ||
processData = function ( data | processData = function ( data ) | ||
local processedData = { | local processedData = { | ||
coterie = {}, | coterie = {}, | ||
all = {}, | all = {}, | ||
} | } | ||
for _, row in pairs(data) do | for _, row in pairs(data) do | ||
if data.coterie then | if data.coterie then | ||
table.insert(processedData.coterie, data.name) | table.insert(processedData.coterie, data.name) | ||
end | |||
if data.clan then | |||
if not processedData[data.clan] then | |||
processedData[data.clan] = {} | |||
end | |||
table.insert(processedData[data.clan], data.name) | |||
end | end | ||
if not processedData[data.type] then | if not processedData[data.type] then | ||
| Zeile 64: | Zeile 65: | ||
end | end | ||
displayNavbox = function( data, coterie ) | displayNavbox = function( data, args ) | ||
local typeDisplayOrder = { | |||
'Vampir', 'Ghul', 'Mensch', 'Gargyl', 'Kuei-Jin', 'Magus', 'Kithain', | |||
'Fea', 'Wechselbalg', 'Werwolf', 'Wiedergänger', 'Geist', 'Jäger', 'KI' | |||
} | |||
local navbox = require('Module:Navbox')._navbox | |||
local sep = ' • ' | |||
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 | |||
if args.displayAll then | |||
--arguments.group3 = 'Weitere Personen' | |||
arguments.list3 = '[[' .. table.concat(data.all, ']]' .. sep .. '[[') ..']]' | |||
else | |||
local num = 4 | |||
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('') | local html = mw.html.create('') | ||
return html:node( navbox(arguments) ) | |||
end | end | ||
| Zeile 74: | Zeile 109: | ||
local data = p.getData() | local data = p.getData() | ||
data = p.processData( data | data = p.processData( data ) | ||
return tostring( displayNavbox( data, args ) ) | |||
end | end | ||
return p | return p | ||
Version vom 3. September 2021, 09:23 Uhr
| This module depends on the following other modules: |
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.length(args.clan) > 0 then
processedArguments.clan = clan
end
if args.coterie and string.length(args.coterie) > 0 then
processedArguments.coterie = YesNo( args.coterie, true )
end
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 = {},
}
for _, row in pairs(data) do
if data.coterie then
table.insert(processedData.coterie, data.name)
end
if data.clan then
if not processedData[data.clan] then
processedData[data.clan] = {}
end
table.insert(processedData[data.clan], data.name)
end
if not processedData[data.type] then
processedData[data.type] = {}
end
table.insert(processedData[data.type], data.name)
table.insert(processedData.all, data.name)
end
end
displayNavbox = function( data, args )
local typeDisplayOrder = {
'Vampir', 'Ghul', 'Mensch', 'Gargyl', 'Kuei-Jin', 'Magus', 'Kithain',
'Fea', 'Wechselbalg', 'Werwolf', 'Wiedergänger', 'Geist', 'Jäger', 'KI'
}
local navbox = require('Module:Navbox')._navbox
local sep = ' • '
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
if args.displayAll then
--arguments.group3 = 'Weitere Personen'
arguments.list3 = '[[' .. table.concat(data.all, ']]' .. sep .. '[[') ..']]'
else
local num = 4
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.main(frame)
local args = getArgs(frame)
args = processArguments( args )
local data = p.getData()
data = p.processData( data )
return tostring( displayNavbox( data, args ) )
end
return p