Modul:Marker
Dokumentation für das Modul Marker[Ansicht] [Bearbeiten] [Versionsgeschichte] [ ]
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 getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf Marker/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Dieses Modul benutzt die Wikidata-Eigenschaften:
|
Dieses Modul enthält Funktionen zur Darstellung von Karten-Markern. Die Funktionen des Moduls werden nicht direkt aufgerufen, sondern über die Vorlage {{Marker}}.
Versionsbezeichnung auf Wikidata: 2024-11-10
Funktionen
function mk.marker( frame )
Die Funktion prüft die Parameter der Vorlage {{Marker}} und führt die Markerdarstellung aus. Die möglichen Parameter sind in der Vorlage {{Marker}} beschrieben. Im Projektnamensraum befindet sich die technische Dokumentation.
Benötigte weitere Module
Hinweise
- Die obige Dokumentation wurde aus der Seite Modul:Marker/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
-- module variable and administration
local mk = {
moduleInterface = {
suite = 'Marker',
serial = '2024-11-10',
item = 40852170
}
}
-- module import
local mi = require( 'Module:Marker utilities/i18n' )
local mu = require( 'Module:Marker utilities' )
local mp = require( 'Module:Marker/Params' )
local cm = require( 'Module:CountryData' )
local wu = require( 'Module:Wikidata utilities' )
-- adding from-WD class
local function addWdClass( key )
return mu.addWdClass( mp.wdContent[ key ] )
end
-- taking mp.ynCheckList into account
local function checkYn( args )
local s
for i, key in ipairs( mp.ynCheckList ) do
args[ key ] = args[ key ] or ''
s = mu.yesno( args[ key ] )
if s then -- 'y' or 'n'
args[ key ] = ''
mp.wdContent[ key ] = ( s == 'y' ) and true or nil
elseif args[ key ] ~= '' then
mp.wdContent[ key ] = nil
end
end
end
local function initialParametersCheck( frame )
local entity = nil
local wrongQualifier = false
local show = {}
-- checking keys and copying values to args
local args = mu.checkArguments( frame:getParent().args, mp.p )
-- removing control characters
local descrDiv
for key, v in pairs( mp.p ) do
if args[ key ] and args[ key ] ~= '' then
args[ key ], descrDiv = mu.removeCtrls( args[ key ], true )
else
args[ key ] = ''
end
end
-- checking Wikidata entitity
if args.wikidata ~= '' then
-- args.wikidata, entity, wrongQualifier = wu.getEntityId( args.wikidata or '' )
args.wikidata, entity, wrongQualifier = wu.getEntity( args.wikidata or '' )
if wrongQualifier then
mu.addMaintenance( 'wrongQualifier' )
elseif args.wikidata ~= '' then
mu.addMaintenance( 'wikidata' )
end
end
-- making web addresses table
local web = {}
mu.tableInsert( web, args.url )
-- getting country-specific technical parameters
local country = cm.getCountryData( entity, nil, args.country, args.wikidata, web )
if country.unknownCountry then
mu.addMaintenance( 'unknownCountry' )
end
-- for map support
country.extra = mi.map.defaultSiteType
if mu.isSet( country.iso_3166 ) then
country.extra = country.extra .. '_region:' .. country.iso_3166
end
-- checking show parameter
show = mu.getShow( mp.defaultShow, args, mp.show )
-- y/n allow/disallow output
if not mu.isSet( args.nameLocal ) then
args.nameLocal = 'n'
end
checkYn( args )
args.noGpx = mu.yesno( args.noGpx ) == 'y'
mu.checkStatus( args )
mu.checkStyles( args )
-- checking coordinates and converting DMS to decimal coordinates if necessary
mu.checkCoordinates( args )
mu.checkZoom( args )
-- removing namespace from category
mu.checkCommonsCategory( args )
for i, param in ipairs( mi.options.parameters ) do
if mu.isSet( args[ param ] ) then
mu.addMaintenance( 'parameterUsed', param )
end
end
return args, entity, show, country
end
-- getting data from Wikidata
local function getDataFromWikidata( args, show, page, country, entity )
local function singleProperty( propDef, maxCount )
local v = wu.getValues( entity, propDef.p, maxCount )
if propDef.f then
for i = 1, #v, 1 do -- formatting
if mu.isSet( v[ i ] ) then
v[ i ] = propDef.f:format( v [ i ] )
end
end
end
return v
end
local function getValues( propDef )
local v
local maxCount = propDef.c or 1
local tp = type( propDef.p )
if tp == 'string' then
v = singleProperty( propDef, maxCount )
elseif tp == 'table' then
for i, sngl in ipairs( propDef.p ) do
if type( sngl ) == 'table' then
v = singleProperty( sngl, maxCount )
if #v > 0 then
break
end
end
end
end
return table.concat( v, ', ' )
end
if args.wikidata == '' then
return
end
mu.getTypeFromWikidata( args, entity )
args.nameLocal = mp.wdContent.nameLocal or args.nameLocal
mu.getNamesFromWikidata( args, mp.wdContent, page, country, entity )
mu.getCoordinatesFromWikidata( args, mp.wdContent, entity )
mu.getCommonsCategory( args, entity )
if show.name then
mu.getArticleLink( args, entity, page )
end
-- getting more values from Wikidata
local p
for key, value in pairs( mp.wdContent ) do
p = mp.wd[ key ]
if p and not mu.isSet( args[ key ] ) then
args[ key ] = getValues( p )
mp.wdContent[ key ] = args[ key ] ~= ''
end
end
end
local function finalParametersCheck( args, show, country, entity )
-- creating givenName, displayName tables
mu.prepareNames( args )
-- coordinates are neccessary
show.noCoord = args.lat == '' or args.long == ''
if show.noCoord then
show.name, show.poi, show.coord = 1, false, false
mu.addMaintenance( 'missingCoord' )
end
-- getting Marker type, group, and color
mu.checkTypeAndGroup( args )
-- image check
if not mp.wdContent.image or mi.options.WDmediaCheck then
mu.checkImage( args, entity )
end
mu.checkUrl( args )
args.commonscat = args.commonscat:gsub( ' ', '_' )
end
local function makeMetadata()
return mi.options.markerMetadata and tostring( mw.html.create( 'span' )
:attr( 'class', 'listing-metadata listing-metadata-items' )
:wikitext( '' ) ) or ''
end
local function makeOutput( args, show, page, country, entity, frame )
local result = {} -- output string table, wrapper is added later
-- adding status icons
mu.tableInsert( result, mu.makeStatusIcons( args ) )
-- adding marker symbol
args.metadata = makeMetadata()
if show.poi or mu.isSet( args.copyMarker ) then
table.insert( result, mu.makeMarkerSymbol( args, show, frame ) ..
( show.name and '' or args.metadata ) )
end
if #result > 0 then
result = { table.concat( result, mi.texts.space ) }
end
-- adding name, airport code, sister-project icons, and coordinate
if show.name then
local nameClass = addWdClass( 'name' )
if not show.noCoord and not show.poi and not show.coord then
nameClass = nameClass .. ' listing-without-marker'
end
if args.displayName.all ~= '' or args.nameExtra ~= '' or args.nameLocal ~= '' then
mu.makeName( result, args, show, page, country, nameClass, addWdClass( 'nameLocal' ) )
elseif args.url ~= '' then
table.insert( result, mu.makeSpan( '[' .. args.url .. ']', 'listing-url' ) )
end
result = { table.concat( result, mi.texts.space ) ..
mu.makeIcons( args, page, country, entity, show, mp.wdContent ) }
end
-- adding coordinate if requested and available
if show.coord then
mu.tableInsert( result, mu.dmsCoordinates( args.lat, args.long,
args.givenName.name, mp.wdContent.lat, country.extra, not show.name ) )
end
return table.concat( result, mi.texts.space )
-- removing succeeding brackets
:gsub( '%)(</span>)%s*(<span [^>]*>)%s*%(', '%1; %2' )
end
-- main marker function
function mk.marker( frame )
mu.initMaintenance()
local page = mu.getPageData()
-- copying frame:getParent().args to template arguments, args, parameter check
-- returning Wikidata entity and display options
local args, mkEntity, show, country = initialParametersCheck( frame )
show.inline = true
-- associated Wikivoyage page of the location in current Wikivoyage branch
-- possibly modified by mu.getArticleLink()
args.wikiPage = ''
args.template = 'Marker'
getDataFromWikidata( args, show, page, country, mkEntity )
-- parameter check after data import from Wikidata
finalParametersCheck( args, show, country, mkEntity )
-- generating output
local result = makeOutput( args, show, page, country, mkEntity, frame )
return mu.makeWrapper( result, args, page, country, show, mp.markerData, frame )
.. mu.makeMaintenance( page, { wu, mu, cm } )
end
return mk