Modul:RegionList

Aus Wikivoyage
Zur Navigation springen Zur Suche springen
Template-info.png Dokumentation für das Modul RegionList[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Dieses Modul enthält Funktionen für die Vorlagen {{Region List}} und {{Region Item}}. Die Funktionen können nicht über <#invoke: …>, sondern müssen über den entsprechenden Vorlagenaufruf aufgerufen werden.

Funktionen

Die Verwendung des Moduls mit Beispielen kann man unter {{Region List}} einsehen.

  • listItem – Die Funktion formatiert einen einzelnen Listeneintrag.
  • list – Die Funktion erzeugt den Rahmen für eine Regionenliste und bindet ein Kartenbild ein.

Erzeugter HTML-Code

+ <div class="regionListFrame regionVersion1/regionVersionX">
  + <div class="regionListMap">
  + <div class="regionList">
    + <div class="regionHeader">
      + <div class="regionName"> … <span class="regionColon">:</span>
      + <div class="regionDescription">
    + </div>
    + <div class="regionItems">
  + </div>
  + …
+ </div>
Hinweise
-- module import
local yn = require( 'Module:Yesno' )

-- module variable
local regList = {
	categories = {
		withoutMap    = '[[Category:Regionenlisten ohne Karte]]',
		unknownParams = '[[Category:Regionenlisten mit fehlerhaften Parametern]]'
	},

	delimiter = ' <b>·</b> ',

	itemParams = {
		color        = { 'color', 'farbe', default = '#ff0000' }, -- red
		description  = { 'description', 'beschreibung' },
		name         = { 'name', default = 'Name' },
		noRegionLink = ''
	},

	listParams = {
		imagemap  = '',
		map       = { 'map', 'karte' },
		mapLink   = '',
		mapSize   = { 'mapSize', 'größe', default = '300px' },
		title     = { 'title', 'titel', default = 'Regionenkarte' },
		version   = { 'version', default = '1' }
	}
}

local function checkParams( frameArgs, list )
	local complete = {}, i, key, key2, value, value2
	local args = {}

	for key, value in pairs( list ) do
		if type( value ) == 'table' then
			for key2, value2 in ipairs( value ) do
				complete[ value2 ] = key
				args[ key ] = args[ key ] or frameArgs[ value2 ]
			end
			args[ key ] = args[ key ] or ''
		elseif value ~= '' then
			complete[ value ] = key
			args[ key ] = frameArgs[ value ] or ''
		else
			complete[ key ] = key
			args[ key ] = frameArgs[ key ] or ''
		end
		if args[ key ] == '' and type( value ) == 'table' and value.default then
			args[ key ] = value.default
		end
	end

	i = true
	for key, value in pairs( frameArgs ) do
		if tonumber( key ) then
			-- frameArgs[ key ] cannot be nil
			args[ key ] = mw.text.trim( frameArgs[ key ] )
		end
		if not complete[ key ] and not tonumber( key ) then
			i = false
		end
	end
	return args, i
end

function regList.listItem( frame )
	local args, key, result, value
	args, result = checkParams( frame:getParent().args, regList.itemParams )
	result = result and '' or regList.categories.unknownParams
	args.noRegionLink = yn( args.noRegionLink, false )

	if not args.noRegionLink then
		args.name = '[[' .. args.name .. ']]'
	end
	if args.description ~= '' then
		args.name = args.name .. '<span class="regionColon">:</span>'
	end
	result = result
		.. '<div class="regionList" style="border-left-color: ' .. args.color .. ';">'
		.. '<div class="regionHeader"><div class="regionName">' .. args.name .. '</div>'
	if args.description ~= '' then
		result = result .. '<div class="regionDescription">' .. args.description .. '</div>'
	end
	result = result .. '</div>' -- regionHeader

	local items = ''
	for key, value in ipairs( args ) do
		if value ~= '' then
			items = items .. ( items ~= '' and regList.delimiter or '' )
				.. '[[' .. value .. ']]'
		end
	end
	if items ~= '' then
		result = result .. '<div class="regionItems">' .. items .. '</div>'
	end

	return result .. '</div>' -- regionList
end

function regList.list( frame )
	local args, key, result, value
	args, result = checkParams( frame:getParent().args, regList.listParams )
	result = result and '' or regList.categories.unknownParams
	if not tonumber( args.version ) then
		args.version = '1'
	end

	if args.map == '' and args.imagemap == '' then
		result = result .. regList.categories.withoutMap
	end
	result = result .. '<div class="regionListFrame regionVersion'
		.. args.version .. '">'
	if args.imagemap == '' and args.map ~= '' then
		result = result .. '<div class="regionListMap">[[File:' .. args.map
			.. '|border|' .. args.mapSize .. '|' .. args.title
		if args.mapLink ~= '' then
			result = result .. '|link=' .. args.mapLink
		end
		result = result .. ']]</div>' -- regionListMap
	end
	if args.imagemap ~= '' then
		result = result .. '<div class="regionListMap">' .. args.imagemap .. '</div>'
	end
	for key, value in ipairs( args ) do
		if value ~= '' then
			result = result .. frame:preprocess( value )
		end
	end
	return result .. '</div>' -- regionListFrame
end

return regList