Modul:Participation: Unterschied zwischen den Versionen

This is [[MediaWiki:Tagline]]. Set to <code>display:none</code> by chameleon skin.
Wechseln zu:Navigation, Suche
Zeile 72: Zeile 72:
 
'?#=play',
 
'?#=play',
 
'?Has number#=number',
 
'?Has number#=number',
'?Has character participating#=players',
+
'?Has character participating#=characters',
 
'?Has display name#=displayName',
 
'?Has display name#=displayName',
 
'?Has title#=title',
 
'?Has title#=title',
 +
'?Is held in#=place',
 +
'?Is held at#=time',
 
'mainlabel=-'
 
'mainlabel=-'
 
}
 
}
Zeile 84: Zeile 86:
 
for k, row in pairs(res) do
 
for k, row in pairs(res) do
 
if row and row.number and row.title then
 
if row and row.number and row.title then
if not row.players then
+
if not row.characters then
row.players = {}
+
row.characters = {}
 
end
 
end
if type( row.player ) ~= 'table' then
+
if type( row.characters ) ~= 'table' then
row.players = { row.players }
+
row.characters = { row.characters }
 
end
 
end
 
playData[row.number] = row
 
playData[row.number] = row
Zeile 94: Zeile 96:
 
end
 
end
 
return playData
 
return playData
 +
end
 +
 +
function buildControlStatusButton( characters, character )
 +
return 'Teilnehner: \'\'' .. mw.text.listToText( characters ) .. '\'\' bedeutet ' .. character ' ist \'\'\''
 +
.. ( tt.inTable( characters, character ) and 'dabei' or 'nicht dabei' ) .. '\'\'\'!'
 +
end
 +
 +
function buildControlTableBody( playData, character )
 +
-- nach oben schieben
 +
local html = mw.html.create()
 +
local header = mw.html.create( 'tr' )
 +
header:tag('th')
 +
:wikitext('Spiel')
 +
:done()
 +
:tag('th')
 +
:wikitext('Titel')
 +
:done()
 +
:tag('th')
 +
:wikitext('Ort')
 +
:done()
 +
:tag('th')
 +
:wikitext('Jahr')
 +
:done()
 +
:tag('th')
 +
:wikitext('Status')
 +
:done()
 +
local body = mw.html.create('tbody')
 +
for num, play in pairs( playData ) do
 +
local tr = mw.html.create('tr')
 +
tr:tag( 'td' )
 +
:wikitext( play.play  )
 +
:done()
 +
tr:tag( 'td' )
 +
:wikitext( play.title  )
 +
:done()
 +
tr:tag( 'td' )
 +
:wikitext( play.place and play.place or 'unbekannt'  )
 +
:done()
 +
tr:tag( 'td' )
 +
:wikitext( play.time and play.time or 'unbekannt'  )
 +
:done()
 +
tr:tag( 'td' )
 +
:wikitext(
 +
buildControlStatusButton( play.characters, character )
 +
)
 +
:done()
 +
end
 +
html:node( header )
 +
:node( body )
 +
return html
 
end
 
end
  
 
function printParticipationControl( playData, character )
 
function printParticipationControl( playData, character )
 +
local ret = '== Spielteilnahmen für ' .. character .. ' ==\n'
 +
ret = ret .. 'Diese Seite zeigt Dir eine Übersicht der Spielteilnahmen für die Figur \'\''
 +
.. character .. [[
 +
\'\ und erlaubt es Dir, sie für Spiele einzutragen oder aus Spielen wieder auszutragen. Bitte beachte, dass
 +
jeder Vorgang das neu Laden der Seite nach sich zieht und daher etwas dauern kann. ]]
 +
 +
local t = mw.html.create('table')
 +
t:addClass( 'mwtable' )
 +
t:node( buildControlTableBody( playData, character ) )
 +
 +
return ret .. tostring(t)
 +
--[[
 
return '== ' .. character .. ' ==\n'
 
return '== ' .. character .. ' ==\n'
 
.. '<pre>\n'
 
.. '<pre>\n'
 
.. tt.printTable( playData )
 
.. tt.printTable( playData )
 
.. '</pre>\n'
 
.. '</pre>\n'
 +
--]]
 
end
 
end
  
function p.main()
+
function p.main( frame )
 
local assesmentResult, assesmentMessage = assesPrerequisites()
 
local assesmentResult, assesmentMessage = assesPrerequisites()
 
if not assesmentResult then
 
if not assesmentResult then
Zeile 113: Zeile 178:
 
playData,
 
playData,
 
getCurrentTitle().text
 
getCurrentTitle().text
)
+
) . frame:getTitle().text
 
end
 
end
  

Version vom 23. Dezember 2017, 22:07 Uhr

Documentation icon Module documentation[view] [edit] [history] [purge]

Dieses Modul kommt direkt auf Seiten im Namensraum "Spielteilnahme" zum Einsatz. Es prüft, ob es eine Spielfigur mit dem gleichen Namen wie die aktuelle Seite hat gibt und zeigt dann für die entsprechende Figur eine Übersicht aller Spiele und den Teilnahmestatus an. Zusätzlich gibt es für jedes Spiel eine Möglichkeit, sich direkt An- oder abzumelden.

Usage[Quelltext bearbeiten]

{{#invoke:Participation|main}}

Example[Quelltext bearbeiten]

See Spielteilnahme:Caspar.

local config = {
	validNamespace = 'Spielteilnahme',
	validTargetPageCategory = 'Figuren'
}

local p = {}
local smw = mw.smw
local tt = require( 'Module:TableTools' )

local currentTitle = nil

function assertCorrectNamespace( title, namespace )
	return title.nsText == namespace
end

function assesPrerequisites()
	if not assertCorrectNamespace(
		getCurrentTitle(),
		config.validNamespace
		) then
		return false, 'Diese Vorlage darf nur im Namensraum \'\''
			.. config.validNamespace
			.. '\'\' verwendet werden!'
	end
	if not assertTargetIsValid(
		getCurrentTitle().text,
		config.validTargetPageCategory
		) then
		return false, 'Die Seite mit dem Namen \'\''
			.. getCurrentTitle().text
			.. '\'\' existiert nicht oder ist keine Figur!'
	end
	return true
end

function assertTargetIsValid( targetPageName, validCategory )
	--[=[
	-- ssc's '?Category:' .. validCategory handling seems broken atm
	local query = {
		'[[' .. targetPageName .. ']]',
		'?Category:' .. validCategory
	}
	--]=]
	local query = {
		'[[' .. targetPageName .. ']]',
		'?Category#=pageCategories'
	}
	local res = smw.ask ( query )
	if not res[1] or not res[1].pageCategories then
		return false
	end
	return tt.inTable( res[1].pageCategories, 'Kategorie:' .. validCategory )
end

function alertBox( text )
	return '<div class="alert alert-danger" role="alert">'
		.. '<strong>Achtung:</strong> ' .. text
		.. '</div>'
end

function getCurrentTitle()
	if currentTitle ~= nil then
		return currentTitle
	end
	currentTitle = mw.title.getCurrentTitle()
	return currentTitle
end

function getPlayData()
	local query = {
		'[[Category:Spiele]]',
		'?#=play',
		'?Has number#=number',
		'?Has character participating#=characters',
		'?Has display name#=displayName',
		'?Has title#=title',
		'?Is held in#=place',
		'?Is held at#=time',
		'mainlabel=-'
	}
	res = smw.ask( query )
	if not res then
		return {}
	end
	local playData = {}
	for k, row in pairs(res) do
		if row and row.number and row.title then
			if not row.characters then
				row.characters = {}
			end
			if type( row.characters ) ~= 'table' then
				row.characters = { row.characters }
			end
			playData[row.number] = row
		end
	end
	return playData
end

function buildControlStatusButton( characters, character )
	return 'Teilnehner: \'\'' .. mw.text.listToText( characters ) .. '\'\' bedeutet ' .. character ' ist \'\'\''
		.. ( tt.inTable( characters, character ) and 'dabei' or 'nicht dabei' ) .. '\'\'\'!'
end

function buildControlTableBody( playData, character )
	-- nach oben schieben
	local html = mw.html.create()
	local header = mw.html.create( 'tr' )
	header:tag('th')
		:wikitext('Spiel')
		:done()
		:tag('th')
		:wikitext('Titel')
		:done()
		:tag('th')
		:wikitext('Ort')
		:done()
		:tag('th')
		:wikitext('Jahr')
		:done()
		:tag('th')
		:wikitext('Status')
		:done()
	local body = mw.html.create('tbody')
	for num, play in pairs( playData ) do
		local tr = mw.html.create('tr')
		tr:tag( 'td' )
			:wikitext( play.play  )
			:done()
		tr:tag( 'td' )
			:wikitext( play.title  )
			:done()
		tr:tag( 'td' )
			:wikitext( play.place and play.place or 'unbekannt'  )
			:done()
		tr:tag( 'td' )
			:wikitext( play.time and play.time or 'unbekannt'  )
			:done()
		tr:tag( 'td' )
			:wikitext(
				buildControlStatusButton( play.characters, character )
			)
			:done()
	end
	html:node( header )
		:node( body )
	return html
end

function printParticipationControl( playData, character )
	local ret = '== Spielteilnahmen für ' .. character .. ' ==\n'
	ret = ret .. 'Diese Seite zeigt Dir eine Übersicht der Spielteilnahmen für die Figur \'\''
		.. character .. [[
\'\ und erlaubt es Dir, sie für Spiele einzutragen oder aus Spielen wieder auszutragen. Bitte beachte, dass
jeder Vorgang das neu Laden der Seite nach sich zieht und daher etwas dauern kann. ]]

	local t = mw.html.create('table')
	t:addClass( 'mwtable' )
	t:node( buildControlTableBody( playData, character ) )

	return ret .. tostring(t)
--[[
	return '== ' .. character .. ' ==\n'
		.. '<pre>\n'
		.. tt.printTable( playData )
		.. '</pre>\n'
--]]
end

function p.main( frame )
	local assesmentResult, assesmentMessage = assesPrerequisites()
	if not assesmentResult then
		return alertBox( assesmentMessage )
	end
	-- all is well
	local playData = getPlayData()
	return printParticipationControl(
		playData,
		getCurrentTitle().text
	) . frame:getTitle().text
end

-- pt = require('Module:TableTools').printTable

return p