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.

Versionsbezeichnung auf WikiData: 2020-05-16

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
-- documentation
local regionList = {
	suite  = 'RegionList',
	serial = '2020-05-16',
	item   = 91289446
}

-- module import
local fs = require( 'Module:Failsafe' )
local yn = require( 'Module:Yesno' )

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

	delimiter = " '''·''' ",

	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 = {}
	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

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

function regList.listItem( frame )
	local args, ok = checkParams( frame:getParent().args, regList.itemParams )
	local errors = ok and '' or regList.categories.unknownParams

	if not yn( args.noRegionLink, false ) then
		args.name = '[[' .. args.name .. ']]'
	end
	if args.description ~= '' then
		args.name = args.name .. '<span class="regionColon">:&nbsp;</span>'
	end

	-- create header
	local header = mw.html.create( 'div' )
		:addClass( 'regionHeader' )
		:node( mw.html.create( 'div' )
			:addClass( 'regionName' )
			:wikitext( args.name )
		)
	if args.description ~= '' then
		header:node( mw.html.create( 'div' )
			:addClass( 'regionDescription' )
			:wikitext( args.description )
		)
	end

	-- create region frame and insert header
	local region = mw.html.create( 'div' )
		:addClass( 'regionList' )
		:css( 'border-left-color', args.color )
		:node( header )

	-- insert region items
	local items = {}
	for key, value in ipairs( args ) do
		if value ~= '' then
			table.insert( items, '[[' .. value .. ']]' )
		end
	end
	items = table.concat( items, regList.delimiter )
	if items ~= '' then
		region:node( mw.html.create( 'div' )
			:addClass( 'regionItems' )
			:wikitext( items )
		)
	end

	return errors .. tostring( region )
end

function regList.list( frame )
	local args, ok = checkParams( frame:getParent().args, regList.listParams )
	args.version = tonumber( args.version ) or 1

	local errors = ok and '' or regList.categories.unknownParams
	if args.map == '' and args.imagemap == '' then
		errors = errors .. regList.categories.withoutMap
	end

	-- create region-list frame
	local list = mw.html.create( 'div' )
		:attr( 'class', 'regionListFrame regionVersion' .. args.version )

	-- insert map
	local map = ''
	local link = ''
	if args.imagemap == '' and args.map ~= '' then
		if args.mapLink ~= '' then
			link = '|link=' .. args.mapLink
		end
		map = mw.ustring.format( '[[File:%s|border|%s%s|%s]]', args.map,
			args.mapSize, link, args.title )
	elseif args.imagemap ~= '' then
		map = args.imagemap
	end
	if map ~= '' then
		list:node( mw.html.create( 'div' )
			:addClass( 'regionListMap' )
			:wikitext( map )
		)
	end

	-- insert regions
	for key, value in ipairs( args ) do
		if value ~= '' then
			list:wikitext( frame:preprocess( value ) )
		end
	end

	return errors .. tostring( list )
end

-- module administration
function regList.regionList()
	return regionList
end

-- check modul version against Wikidata entry
function regList.failsafe( version )
	return fs._failsafe( version, regionList ) or ''
end

return regList