このモジュールは多くのページで使用されており、変更はすぐにプロジェクト全体に反映されます。変更は事前にサンドボックス、またはあなたの利用者名前空間でテストしてください。テストした変更は、このページに1回の編集で挿入する必要があります。実装する前に、ノートページであらかじめ変更について合意形成してください。 |
このテンプレートは、以下のLuaモジュールを使用しています。 |
地図にマーカーを表示するモジュール。使用する際は{{Marker}}を呼び出してください。
関数
function mk.marker( frame )
テンプレートに与えられたパラメータを確認し、マーカーを表示します。使用可能なパラメータについてはテンプレート:Marker/docを参照してください。また、技術情報に関してはこちらをご覧ください。
使用状況
このモジュールを使用しているテンプレートは以下の通りです:
この解説は、モジュール:Marker/docから呼び出されています。 (編集 | 履歴) 編集者は、このモジュールをサンドボックス (編集 | 差分)とテストケース (作成)で試すことができます。(解説) このモジュールのサブページ一覧。 |
-- module variable and administration local mk = { moduleInterface = { suite = 'Marker', serial = '2025-02-14', 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 ) if not show.poi then -- This show option makes no sense for markers mu.addMaintenance( 'showNoneUsed' ) end -- 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 ) mu.checkId( 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