Zum Inhalt springen

Modul:RegionList

Aus Wikivoyage
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. Die Dokumentation befindet sich in Wikivoyage:RegionList, die Stilvorlagen in Vorlage:Region List/styles.css und Vorlage:Region Item/styles.css.

Versionsbezeichnung auf Wikidata: 2024-09-14 Ok!

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="voy-regionListFrame voy-regionVersion1/voy-regionVersionX">
  <div class="voy-regionListMap">
  <div class="voy-regionList">
    <div class="voy-regionHeader">
      <div class="voy-regionName"><span class="voy-regionColon">:</span>
      <div class="voy-regionDescription">
    </div>
    <div class="voy-regionItems">
  </div></div>
Hinweise
-- documentation
local regionList = {
	suite  = 'RegionList',
	serial = '2024-09-14',
	item   = 91289446
}

-- module import

local yn = require( 'Module:Yesno' )

-- module variable
local regList = {
	-- administration
	moduleInterface = regionList,

	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 = '',
		styles       = { 'styles', 'stile' }
	},

	listParams = {
		imagemap  = '',
		map       = { 'map', 'karte' },
		mapLink   = '',
		mapSize   = { 'mapSize', 'größe', default = '300px' },
		styles    = { 'styles', 'stile' },
		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="voy-regionColon">:&nbsp;</span>'
	end

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

	-- create region frame and insert header
	local styles = 'border-left-color: ' .. args.color
	if args.styles ~= '' then
		styles = styles .. ';' .. args.styles
	end
	local region = mw.html.create( 'div' )
		:addClass( 'voy-regionList' )
		:cssText( styles )
		: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( 'voy-regionItems' )
			:wikitext( items )
		)
	end
	
	if items == '' and args.description == '' then
		region:addClass( 'voy-regionOnlyHeader' )
	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

	-- check 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|class=notpageimage|%s]]', args.map,
			args.mapSize, link, args.title )
	elseif args.imagemap ~= '' then
		map = args.imagemap
	end

	-- create region-list frame
	local list = mw.html.create( 'div' )
		:attr( 'class', 'voy-regionListFrame' ..
			( map ~= '' and '' or ' voy-regionListFrameWithoutMap' ) ..
			' voy-regionVersion' .. args.version )
		
	if args.styles ~= '' then
		list:cssText( args.styles )
	end

	-- insert map
	if map ~= '' then
		list:node( mw.html.create( 'div' )
			:addClass( 'voy-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

return regList