Modul:Mapshape utilities
Dieses Modul wird auf vielen Seiten benutzt, und Änderungen werden projektweit sofort wahrgenommen. Bitte teste Änderungen vorher im /Sandkasten oder in deinem Benutzernamensraum. Die getestete Änderung sollte dann in einem einzigen Edit auf dieser Seite eingefügt werden. Bitte diskutiere Änderungen zuerst auf der Diskussionsseite bevor du sie implementierst. |
Dieses Modul ist geschützt. Es wird sehr häufig verwendet oder substituiert. Änderungen können zu einer großen Serverlast führen, und Vandalismus kann sich auf eine Vielzahl von Artikel auswirken. |
Dieses Modul benutzt die Wikidata-Eigenschaften:
|
Anwendung
Das Modul stellt gemeinsame Funktionen für die Module Mapframe, Mapshape und Mapshapes zur Verfügung. Modul:Mapshape utilities/i18n enthält Zeichenketten für die Internationalisierung.
Versionsbezeichnung auf Wikidata: 2023-05-03
Funktionen
function mu.isSet( param )
liefert true
, wenn die Zeichenkette param
einen nicht-leeren Wert enthält.
function mu.getParameter( arg, default )
liefert das Argument arg
, wenn es nicht leer ist, ansonsten den Wert default
.
function mu.getNumber( arg, default )
liefert den Zahlenwert für arg
, wenn es eine Zahl ist, ansonsten den Wert default
.
function mu.getSize( arg, default )
löscht ein möglicherweise vorhandenes endständiges „px“ und liefert dann den Zahlenwert für arg
, wenn es eine Zahl ist, ansonsten den Wert default
.
function mu.getFirstId( ids )
liefert die erste Wikidata-id aus einer kommaseparierten id-Liste.
function mu.getColor( id )
liefert einen Farbwert zur Wikidata-id, falls vorhanden, ansonsten eine leere Zeichenkette.
function mu.getImage( id )
liefert eine Abbildung zur Wikidata-id, falls vorhanden, ansonsten eine leere Zeichenkette.
function mu.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 mu.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, ohneModul:
.errorCateg
Fehlerkategorie in der Form[[Kategorie:Name der Kategorie]]
.
function mu.getCategories( formatStr )
- Liefert eine Zeichenkette mit den Kategorie-Links aller verwendeten Wikidata-Eigenschaften zurück.
function mu.getMapshapes( wdId )
- Liefert eine Tabelle der Bestandteile eines Mapshapes-Satzes zurück.
wdId
ist die Wikidata-Id des Mapshapes-Satzes.
Benötigte weitere Module
Dieses Modul benötigt folgende weitere Module: Mapshape utilities/i18n • Wikidata utilities
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:
- Mapframe • Mapshape • Mapshapes
- Modul benötigt das Modul Mapshape utilities – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.
- Die obige Dokumentation wurde aus der Seite Modul:Mapshape utilities/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
-- base functions for Mapshapes
-- documentation
local MapshapeUtilities = {
suite = 'Mapshape utilities',
serial = '2023-05-03',
item = 65447201
}
-- module import
-- require( 'strict' )
local mg = mw.loadData( 'Module:Marker utilities/Groups' )
local mi = mw.loadData( 'Module:Mapshape utilities/i18n' )
local wu = require( 'Module:Wikidata utilities' )
-- module variable and administration
local mu = {
moduleInterface = MapshapeUtilities
}
-- helper functions
function mu.isSet( param )
return param and param ~= '';
end
function mu.getParameter( arg, default )
local r = arg or default
if r == '' then
r = default
end
return r
end
function mu.getNumber( arg, default )
return tonumber( arg or default ) or default
end
function mu.getSize( arg, default )
arg = arg:gsub( 'px$', '' )
return mu.getNumber( arg, default )
end
function mu.getFirstId( ids )
if not mu.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 mu.getColor( id )
local color, colorId
if not mu.isSet( id ) then
color = ''
else
-- getting P465: sRGB color hex triplet
color = wu.getValue( id, 'P465' )
if color == '' then
-- getting P462: color id
colorId = wu.getId( id, 'P462' )
if colorId ~= '' then
color = wu.getValue( colorId, 'P465' )
end
end
if color ~= '' then
color = '#' .. color
end
end
return color
end
function mu.getImage( id )
if not mu.isSet( id ) then
return ''
end
return wu.getValue( id, 'P18' )
end
function mu.getTitle( id )
if not mu.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 mu.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 = ''
local count
if not tonumber( key ) then
number, count = mw.ustring.gsub( key, '^([%a%-]+)(%d+)$', '%2' )
if number == key then
number = ''
else
param, count = mw.ustring.gsub( key, '^([%a%-]+)(%d+)$', '%1' )
end
end
-- complete[ param ] makes translation
local 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 mu.getCategories( formatStr )
return wu.getCategories( formatStr )
end
-- add Wikivoyage link if available
function mu.addLink( title, id, entityId, wikiLang )
if mu.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
function mu.getMapshapes( wdId )
local values
for i, property in ipairs( mi.mapshapesProps ) do
values = wu.getValues( wdId, property, nil )
if #values > 0 then
break
end
end
return values
end
-- create a table of aliases for groups
function mu.getAliases( tab, indx )
local result = {}
if not tab then
return result
end
local iItem
for key, item in pairs( tab ) do
iItem = item[ indx ]
if iItem then
if type( iItem ) == 'table' then
for i, q in ipairs( iItem ) do
result[ q ] = key
end
else
result[ iItem ] = key
end
end
end
return result
end
-- check if group is allowed or return a default value
function mu.checkGroup( group )
if mu.isSet( group ) then
local aliases = mu.getAliases( mg.groups, 'alias' )
if aliases[ group ] then
group = aliases[ group ]
end
return group
else
return mi.defaultGroup
end
end
-- group translation for map legend into Wiki language
function mu.translateGroup( group )
if not mu.isSet( group ) then
group = mi.defaultGroup
end
local t = mg.groups[ group ]
if t then
t = t.map or t.label or t.alias or group
if type( t ) == 'table' then
t = t[ 1 ]
end
return t
else
return group
end
end
return mu