Modul:BS-daten
A modult a Modul:BS-daten/doc lapon tudod dokumentálni
require('strict')
local p = {}
-- TODO: add other types
local electricity_types = {
Q1412243 = '[[25 kV-os villamos vontatás|25 kV]] [[Váltakozó áram|~]]',
Q1415234 = '[[15 kV-os villamos vontatás|15 kV]] [[Váltakozó áram|~]]'
}
local function get_param(args, params)
for _, n in ipairs(params) do
if args[n] then
return args[n]
end
end
end
local function formatStatements(...)
formatStatements = require('Modul:Wikidata').formatStatements
return formatStatements(...)
end
local function wd(args)
args['felsorolás'] = 'table'
return formatStatements(nil, args)
end
local function image(rows, file, size, alt, capture)
if not file then
return
end
local link = ('[[Fájl:%s|%s%s]]'):format(file, size or '250px', alt and '|'..alt or '')
capture = capture and ('<div style="font-size:smaller;">%s</div>'):format(capture) or ''
table.insert(rows, ('<tr style="text-align:center;"><td colspan="2">%s%s</td></tr>'):format(link, capture))
end
local function data_cell(rows, name, value, ext)
if value then
local pl = ''
if type(value) == 'table' then
if #value == 0 then
return
end
if ext then
for i, _ in ipairs(value) do
value[i] = value[i] .. ' ' .. ext
end
end
if #value == 1 then
value = value[1]
else
pl = ' class="plainlist"'
value = '\n* ' .. table.concat(value, '\n* ') .. '\n'
value = mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Plainlist/style.css'}) .. value
end
else
if ext then
value = value .. ' ' .. ext
end
end
table.insert(rows, ('<tr style="vertical-align:top;"><td>%s:</td><td%s>%s</td></tr>'):format(name, pl, value))
end
end
local function data_field(args, rows, params, name, ext, wd_config)
local param = get_param(args, params)
if param == '-' then
-- Wikidata opt-out
return
end
if (not param) and wd_config then
if type(wd_config) == 'table' then
wd_config.entityId = wd_config.entityId or args.entityId
param = wd(wd_config)
else
param = wd{ property = wd_config, entityId = args.entityId }
end
end
data_cell(rows, name, param, ext)
end
local function get_images(args, rows)
local file = args['logó']
local size = args['logóméret']
local description = args['logóaláírás']
if not file then
file, description = require('Modul:Infobox').image(nil, nil, 'P154', args.entityId)
end
if file and file ~= '-' then
image(rows, file, size, description, description)
end
file = args.BILDPFAD_FOTO or args['kép']
size = args.PIXEL_FOTO or args['képméret']
description = args.TEXT_FOTO or args['képaláírás']
if not file then
file, description = require('Modul:Infobox').image(nil, nil, 'P18', args.entityId)
end
if file and file ~= '-' then
image(rows, file, size, description, description)
end
file = args.BILDPFAD_KARTE or args['térkép']
size = args.PIXEL_KARTE or args['térképméret']
if not file then
file = wd{ property = 'P15', first = true, entityId = args.entityId }[1]
end
if file and file ~= '-' then
local name = args['név'] or require('Module:String').simpletitle()
local az = mw.getContentLanguage():ucfirst(require('Modul:Nyelvtani modul').az(name))
image(rows, file, size, ('%s %s útvonala'):format(az, name))
end
end
local function get_electrification(args, rows)
local list = {}
local dc = get_param(args, {'STROMG', 'egyenfeszültség'})
if dc and dc ~= '-' then
table.insert(list, dc .. ' [[Egyenáram|=]]')
end
local ac = get_param(args, {'STROMW', 'váltakozó feszültség'})
if ac and ac ~= '-' then
table.insert(list, ac .. ' [[Váltakozó áram|~]]')
end
local three = get_param(args, {'STROMD', 'háromfázisú feszültség'})
if three and three ~= '-' then
table.insert(list, three .. ' [[Háromfázisú feszültség|∆]]')
end
if #list > 0 then
data_cell(rows, 'Feszültség', list)
elseif dc ~= '-' and ac ~= '-' and three ~= '-' then
local entity = mw.wikibase.getEntity(args.entityId)
if not entity then
return
end
local statements = entity:getBestStatements('P930')
for _, v in ipairs(statements) do
if v.mainsnak and v.mainsnak.snaktype == 'value' and electricity_types[v.mainsnak.datavalue.value.id] then
data_cell(rows, 'Feszültség', {electricity_types[v.mainsnak.datavalue.value.id]})
end
end
end
end
local function get_gradient(args, rows)
local value = get_param(args, {'NEIGUNG', 'legnagyobb emelkedés'})
local adhesion = get_param(args, {'NEIGUNGA', 'legnagyobb adhéziós emelkedés'})
if value == '-' or adhesion == '-' then
return
end
if value and adhesion then
value = ('<small>Adhéziós</small> %s [[ezrelék|‰]]<br/><small>Fogasléc</small> %s'):format(value, adhesion)
data_cell(rows, 'Maximális emelkedés', value, '‰')
elseif value then
data_cell(rows, 'Maximális emelkedés', value, '[[ezrelék|‰]]')
else
local entity = mw.wikibase.getEntity(args.entityId)
if not entity then
return
end
local statements = entity:getBestStatements('P2595')
local values = {}
local lang = mw.getContentLanguage()
for _, v in ipairs(statements) do
if v.mainsnak and v.mainsnak.datavalue and v.mainsnak.datavalue.value then
value = v.mainsnak.datavalue.value
-- per mille
if value.unit == 'http://www.wikidata.org/entity/Q181011' then
value = tonumber(value.amount)
-- per cent
elseif value.unit == 'http://www.wikidata.org/entity/Q11229' then
value = tonumber(value.amount)
if value then
value = 10 * value
end
elseif value.unit == '1' then
value = tonumber(value.amount)
if value then
value = 1000 * value
end
else
value = nil
end
if value then
table.insert(values, ('%s ‰'):format(lang:formatNum(value)))
end
end
end
if #values > 0 then
values[1] = values[1]:gsub('‰', '[[ezrelék|‰]]')
end
data_cell(rows, 'Maximális emelkedés', values)
end
end
function p.main(frame)
local args = require('Modul:Arguments').getArgs(frame)
local rows = {}
local function data(...)
data_field(args, rows, ...)
end
get_images(args, rows)
data({'NETZKATEGORIE', 'hálózatkategória'}, 'Hálózatkategória')
data({'STRECKENKLASSE', 'osztály'}, 'Osztály')
data({'DE-KBS', 'Kurbuchstrecke-vonalszám'}, 'Vonalszám')
data({'STRECKENNR', 'vonalszám'}, 'Vonal', nil, 'P1671')
data({'LÄNGE', 'hossz'}, 'Hossz', 'km', {property = 'P2043', unit = 'km'})
-- if no parameter given, fall back to the width (P2049)
-- of the item in the track gauge (P1064) statement
data({'SPURWEITE', 'nyomtávolság'}, '[[Nyomtávolság]]', 'mm',
{property = 'P2049', unit = 'mm', entityId = wd{property = 'P1064', format = 'raw', entityId = args.entityId}[1] or ''})
get_electrification(args, rows)
data({'üzemeltető'}, 'Üzemeltető', nil, {property = 'P137', excludespecial = true, showQualifiers = true})
get_gradient(args, rows)
data({'RADIUS', 'legkisebb ívsugár'}, 'Legkisebb ívsugár', 'm')
data({'ZAHNSTANGE', 'fogassínrendszer'}, 'Fogassínrendszer')
data({'V-MAX', 'legnagyobb sebesség'}, 'Maximális sebesség', 'km/h', {property = 'P3086', unit = 'km/h'})
local commons = mw.getCurrentFrame():expandTemplate{
title = 'Infobox/Commons',
args = {args.wikicommons, args['név'], [5] = 'width:250px;', [6] = args.entityId}
}
if commons and commons ~= '' then
table.insert(rows, commons)
end
return table.concat(rows, '\n')
end
return p