Modul:MapshapeBase

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

Anwendung

Der Modul stellt gemeinsame Funktionen für die Module Mapframe, Mapshape und Mapshapes zur Verfügung. Modul:MapshapeBase/i18n enthält Zeichenketten für die Internationalisierung.

Funktionen

function mb.isSet( param )

liefert true, wenn die Zeichenkette param einen nicht-leeren Wert enthält.

function mb.getParameter( arg, default )

liefert das Argument arg, wenn es nicht leer ist, ansonsten den Wert default.

function mb.getNumber( arg, default )

liefert den Zahlenwert für arg, wenn es eine Zahl ist, ansonsten den Wert default.

function mb.getFirstId( ids )

liefert die erste Wikidata-id aus einer kommaseparierten id-Liste.

function mb.getColor( id )

liefert einen Farbwert zur Wikidata-id, falls vorhanden, ansonsten eine leere Zeichenkette.

function mb.getImage( id )

liefert eine Abbildung zur Wikidata-id, falls vorhanden, ansonsten eine leere Zeichenkette.

function mb.getTitle( id )

liefert einen Titel zur Wikidata-id. Zuerst wird versucht, das Lemma eines möglicherweise vorhandenen Artikels auf dem lokalen Wiki zu bestimmen. Danach wird nach einem Label in der Sprache des Wikis oder in Englisch gesucht. Ansonsten wird der Name der aktuellen Unterseite bzw. Seite zurückgeliefert.

function mb.checkParams( frameArgs, list, moduleName, errorCateg )

überprüft die korrekte Schreibung von Parameternamen.

  • frameArgs Tabelle mit Vorlagenparametern.
  • list Tabelle mit den erlaubten Parametern, z. B. Modul:Mapframe/Params. Eine leere Zeichenkette bedeutet Parametername wird beibehalten, eine nicht leere Zeichenkette definiert den zu verwendenden Parameternamen, eine Tabelle einen Satz möglicher Parameternamen.
  • moduleName Name des Moduls, in dem die die Funktion eingesetzt wird, ohne Modul:.
  • errorCateg Fehlerkategorie in der Form [[Kategorie:Name der Kategorie]].
function mb.getCategories( formatStr )
  • Liefert eine Zeichenkette mit den Kategorie-Links aller verwendeten Wikidata-Eigenschaften zurück.

liefert das Versionsdatum des Moduls zurück. Siehe auch Modul:Failsafe.

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: FastWikidata • MapshapeBase/i18n

Verwendung in anderen Modulen

Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese Tracking-Kategorie um Fehler zu finden, die sich dann auf Artikel auswirken:

Hinweise
-- base functions for Mapshapes

-- documentation
local MapshapeBase = {
	suite  = 'MapshapeBase',
	serial = '2020-06-05',
	item   = 65447201
}

-- module import
local fw = require( 'Modul:FastWikidata' )
local mi = mw.loadData( 'Module:MapshapeBase/i18n' )

local mb = {}

-- helper functions
function mb.isSet( param )
	return param and param ~= '';
end

function mb.getParameter( arg, default )
	local r = arg or default
	if r == '' then
		r = default
	end
	return r
end

function mb.getNumber( arg, default )
	return tonumber( arg or default ) or default
end

function mb.getFirstId( ids )
	if not mb.isSet( ids ) then
		return ''
	end
	
	local sep = ids:find( ',' )
	if sep then
		return mw.text.trim( ids:sub( 1, sep - 1 ) )
	end
	return ids
end

function mb.getColor( id )
	local color, colorId

	if not mb.isSet( id ) then
		color = ''
	else
		-- getting P465: sRGB color hex triplet
		color = fw.getValue( id, 'P465' )
		if color == '' then
			-- getting P462: color id
			colorId = fw.getId( id, 'P462' )
			if colorId ~= '' then
				color = fw.getValue( colorId, 'P465' )
			end
		end
		if color ~= '' then
			color = '#' .. color
		end
	end
	return color
end

function mb.getImage( id )
	if not mb.isSet( id ) then
		return ''
	end
	return fw.getValue( id, 'P18' )
end

function mb.getTitle( id )
	if not mb.isSet( id ) then
		return nil
	end
	local label = mw.wikibase.getSitelink( id )
	if label then
		return label
	end
	label = mw.wikibase.getLabel( id ) or
		mw.wikibase.getLabelByLang( id, 'en' )
	if label then
		return label
	end
	return mw.title.getCurrentTitle().subpageText
end

-- checking and copying parameters
function mb.checkParams( frameArgs, list, moduleName, errorCateg )
	local complete = {}
	local args = {}
	local mismatch = {}
	moduleName = '<span class="error">' .. moduleName .. ': </span>'

	-- creating complete parameter list for check
	for key, value in pairs( list ) do
		if type( value ) == 'table' then
			for key2, value2 in ipairs( value ) do
				complete[ value2 ] = key
			end
		elseif value ~= '' then
			complete[ value ] = key
		else
			complete[ key ] = key
		end
	end

	local number, param
	for key, value in pairs( frameArgs ) do
		value = mw.text.trim( value )
		if value == '' then
			value = nil
		end

		-- splitting numbered parameters
		param = key
		number = ''
		if not tonumber( key ) then
			number, _ = mw.ustring.gsub( key, '^([%a\-]+)(%d+)$', '%2' )
			if number == key then
				number = ''
			else
				param, _ = mw.ustring.gsub( key, '^([%a\-]+)(%d+)$', '%1' )
			end
		end

		-- complete[ param ] makes translation
		key2 = complete[ param ]
		if not key2 and not tonumber( key ) then
			table.insert( mismatch, "''" .. key .. "''" )
		else
			-- copying parameters to result array args
			if tonumber( key ) and not key2 then
				-- param can be a number, too
				args[ key ] = args[ key ] or value
			else
				args[ key2 .. number ] = args[ key2 .. number ] or value
			end
		end
	end

	for key, value in pairs( list ) do
		-- only for unnumbered parameters
		args[ key ] = args[ key ] or ''
	end

	local errorMsgs = ''
	if #mismatch == 1 then
		errorMsgs = mw.ustring.format( moduleName .. mi.unknownParam, mismatch[ 1 ] )
			.. errorCateg
	elseif #mismatch > 1 then
		errorMsgs = mw.ustring.format( moduleName .. mi.unknownParams,
			table.concat( mismatch, ', ' ) ) .. errorCateg
	end

	return args, errorMsgs
end

function mb.getCategories( formatStr )
	return fw.getCategories( formatStr )
end


-- add Wikivoyage link if available
function mb.addLink( title, id, entityId, wikiLang )
	if mb.isSet( title ) and not title:find( '[[', 1, true ) and id ~= entityId then
		local link = mw.wikibase.getSitelink( id, wikiLang .. 'wikivoyage' )
		if link then
			title = mw.ustring.format( '[[%s|%s]]', link, title )
		end
	end
	return title
end

return mb