Module:Infobox station
Uiterlijk
Functies
[brontekst bewerken]is_empty
[brontekst bewerken]title_for
[brontekst bewerken]Main
[brontekst bewerken]Titel
[brontekst bewerken]Afbeelding
[brontekst bewerken]Onderschrift
[brontekst bewerken]Plaatsing en uitlijning in de tabel
[brontekst bewerken]land
[brontekst bewerken]Plaats (bestuurlijke eenheid
[brontekst bewerken]Status
[brontekst bewerken]Stationscode
[brontekst bewerken](enkel item) Voor deze infobox de Franse stationscode, P8181
Stationscode UIC
[brontekst bewerken](enkel item) UIC stationscode, P722
Voorbeeld waarde, geen id
Sluitingsdatum
[brontekst bewerken](NB dit voorbeeld stript maand en dag, moet opgeruimd worden)
Voorbeeld datum
Perronsporen
[brontekst bewerken]Voorbeeld getal (amount)
Spoorlijnen
[brontekst bewerken](voorbeeld van mogelijk meerdere items)
Aansluitende diensten
[brontekst bewerken]Exploitant
[brontekst bewerken]Architect
[brontekst bewerken]Links
[brontekst bewerken]Commonscategorie
[brontekst bewerken]Coordinaten en kaart
[brontekst bewerken]Werkt op basis van sjabloon:mapframe
local p = {}
--Function ter verificatie of een waarde leeg is (geen of lege string)
function is_empty(ie_val)
if(ie_val) then --if not nul, check for empty string
if(string.len(ie_val)>0 and ie_val~="-") then return false; --lengte van de waarde is niet nul en de waarde is geen streepje, derhalve niet leeg
elseif(ie_val=="-") then return true; --streepje, betekent leeg
else return true; end --lege string, betekent leeg
else return true; end --indien geen, betekent dat dat de waarde leeg is
end
--Function om een Wikidata item id te verkrijgen en daarmee een link naar het desbetreffende lemma te verkrijgen, of als er geen lemma voor deze tekst bestaat het wikidata label als tekst weer te geven
function title_for(item_id)
tf_item = mw.wikibase.getEntity(item_id);
if(tf_item.sitelinks and tf_item.sitelinks.nlwiki) then --er bestaat een sitelink naar nlwiki
page = tf_item.sitelinks.nlwiki.title;
return "[["..page.."|"..mw.text.split(page, " %(")[1].."]]";
elseif(tf_item.labels.nl) then return tf_item.labels.nl.value; --er bestaat op wikidata een label in het Nederlands
else return ""; end --als geen van beide bestaat, geef een lege string
end
--Function om een potloodje te plaatsen achter een Wikidatawaarde. Die verwijst de lezer naar de juiste Wikidataproperty om deze waarde aan te passen.
function editsymbol(pnr)
result = '<span style="float:right">[[File:OOjs UI icon edit-ltr-progressive.svg' ..
'|frameless|text-top|10px|Bewerken op Wikidata|link=https://www.wikidata.org/wiki/' ..
mw.wikibase.getEntityIdForCurrentPage() .. '?uselang=nl#' .. pnr .. ']]</span>'
return result
end
function appendtable(arg, pnr, outputname, groep, usetitlefor)
if (0==1) then
-- niet werkende zoekfunctie uitgeschakeld
if (is_empty(args[arg]) and item and item.claims[pnr]) then
if usetitlefor then
args[arg] = title_for(item:getBestStatements(pnr)[1].mainsnak.datavalue.value.id);
else
args[arg] = item:getBestStatements(pnr)[1].mainsnak.datavalue.value;
end
args[arg] = args[arg] .. editsymbol(pnr)
end
end
opgezocht = false;
if (is_empty(args[arg]) and item and item.claims[pnr] and usetitlefor) then
for j = 1, #item.claims[pnr] do
args[arg] = title_for(item.claims[pnr][j].mainsnak.datavalue.value.id); opgezocht=true;
end
end
if (is_empty(args[arg]) and item and item.claims[pnr]) then
if (#item.claims[pnr]>0) then args[arg]='{{#property:'..pnr..'}}';end --vangnet
end
if not (args[arg]) then args[arg]='';end
if (not is_empty(args[arg])) then
if groepen[groep]~='-' then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''"..groepen[groep].."'''"); --insert sectionheader into the result
groepen[groep]='-';
end
if pnr=='P2044' then
if landcode=='AT' then args[arg] = args[arg]..' [[Meter über Adria|m.ü.A.]]'; end
if landcode=='CH' then args[arg] = args[arg]..' [[Meter über Meer|m.ü.M.]]'; end
if landcode=='DK' then args[arg] = args[arg]..' moh.'; end
if landcode=='NL' then args[arg] = args[arg]..' [[Normaal Amsterdams Peil|NAP]]'; end
end
if (opgezocht) then args[arg]= args[arg] .. editsymbol(pnr); end
table.insert(res, label .. "'''" .. outputname .. "'''" .. " || " .. args[arg]);
end
end
function stasoort(bt) --bedrijfstype
if (bt=='1') then bt = [[Doorgangsstation]]; end
if (bt=='2') then bt = [[Richtingstation]]; end
if (bt=='3') then bt = [[Kruisingsstation]]; end
if (bt=='4') then bt = [[Kopstation]]; end
if (bt=='5') then bt = [[Halte (stopplaats)|Halte]]; end
if (bt=='6') then bt = [[Vorkstation]]; end
return bt
end
function stabouw(ct) --constructietype
if (ct=='0') then ct = [[Geul (sleuf)|Sleuf]]; end
if (ct=='1') then ct = [[Maaiveld]]; end
if (ct=='2') then ct = [[Talud]]; end
if (ct=='3') then ct = [[Viaductstation]]; end
if (ct=='4') then ct = [[Ondiep gelegen zuilenstation]]; end
if (ct=='5') then ct = [[Pylonenstation]]; end
if (ct=='6') then ct = [[Enkelgewelfdstation]]; end
if (ct=='7') then ct = [[Dubbelgewelfdstation]]; end
if (ct=='8') then ct = [[Kolommenstation]]; end
if (ct=='9') then ct = [[Caisson]]; end
if (ct=='10') then ct = [[Grotstation]]; end
if (ct=='11') then ct = Loods; end
if (ct=='12') then ct = [[Horizontale lift]]; end
if (ct=='13') then ct = [[Kuip (station)|Kuip]]; end
if (ct=='14') then ct = [[Semi-ondergrondsstation]]; end
if (ct=='15') then ct = Gestapeldstation; end
return ct
end
function perdeu(pd)
if (pd=='1') then pd = 'in perronhek'; end
if (pd=='2') then pd = 'in perronscherm'; end
if (pd=='3') then pd = 'in tunnelwand'; end
return pd
end
function treinsoort(td)
xq=0; yq=0; soort='P'; zq='';
itex = mw.wikibase.getEntity(td);
if (itex and itex.claims["P31"]) then --zoeken naar soort treindienst
for j = 1, #itex.claims["P31"] do
modaliteit = title_for (itex.claims["P31"][j].mainsnak.datavalue.value.id);
fltr = string.upper(modaliteit);
if (string.find(fltr,'RINGLIJN') )then yq = 1; end
if (string.find(fltr,'VOORSTAD') and xq < 7) then soort = 'S'; xq = 7; end
if (string.find(fltr,'TREINSERIE') and xq < 4) then soort = 'P'; xq = 4; end
if (string.find(fltr,'TREINDIENST') and xq < 4) then soort = 'P'; xq = 4; end
if (string.find(fltr,'TREINCATEGORIE') and xq < 4) then soort = 'P'; xq = 4; end
if (string.find(fltr,'LUCHTHAVENTREIN') and xq < 7) then soort = 'P'; xq = 7; end
if (string.find(fltr,'REIZIGERSTREIN') and xq < 7) then soort = 'P'; xq = 7; end
if (string.find(fltr,'METRO') and xq < 7) then soort = 'M'; xq = 7; end
if (string.find(fltr,'LIGHT') and xq < 5) then soort = 'L'; xq = 5; end
if (string.find(fltr,'LICHT') and xq < 5) then soort = 'L'; xq = 5; end
if (string.find(fltr,'SNELTRAM') and xq < 5) then soort = 'L'; xq = 5; end
if (string.find(fltr,'S-BAHN') and xq < 3) then soort = 'S'; xq = 3; end
if (string.find(fltr,'S-TREIN') and xq < 3) then soort = 'S'; xq = 3; end
if (string.find(fltr,'VOORMALIGE') and xq < 7) then soort = 'X'; xq = 7; end
if (string.find(fltr,'OPGEHEVEN') and xq < 7) then soort = 'X'; xq = 7; end
if (string.find(fltr,'HOOFD') and xq < 7) then soort = 'H'; xq = 7; end
if (string.find(fltr,'NEVEN') and xq < 7) then soort = 'H'; xq = 7; end
if (string.find(fltr,'HOGE') and xq < 7) then soort = 'H'; xq = 7; end
if (string.find(fltr,'SPOORLIJN') and xq < 4) then soort = 'H'; xq = 4; end
--if claim.lineName == 'Docklands Light Railway' then soort = 'X' end --niet netjes om een concrete waarde uit te sluiten maar gezien de vervuiling in wikidata onontkoombaar
--zq=zq..modaliteit..' '..soort..'<br>';
end
end
return soort;
end
function voluit(date_string)
jaar ='';
maand='';
dag='';
j=0;
for i = 1, #date_string do
local d = date_string:sub(i,i)
if d=='-' then j=j+1; else
if j==0 then jaar=jaar..d end
if j==1 then maand=maand..d end
if j==2 and i<11 then
if dag~='' then dag=dag..d; d='0'; end
if d~='0' then dag=dag..d; end
end
end
end
if dag[1]=='0' then dag=dag[2]; end
if maand=='00' then maand='';end
if maand=='01' then maand='januari'; end
if maand=='02' then maand='februari'; end
if maand=='03' then maand='maart'; end
if maand=='04' then maand='april'; end
if maand=='05' then maand='mei'; end
if maand=='06' then maand='juni'; end
if maand=='07' then maand='juli'; end
if maand=='08' then maand='augustus'; end
if maand=='09' then maand='september'; end
if maand=='10' then maand='oktober'; end
if maand=='11' then maand='november'; end
if maand=='12' then maand='december'; end
date_string = dag..' '..maand..' '..jaar;
return date_string
end
--Main function
function p.main(frame)
parent = frame:getParent();
args = parent.args;
groepen = {'Algemeen','Geschiedenis','Vroegere namen','Stationsbouw','Spoorlijn(en)','Treindienst(en)','Voorstadsdienst(en)','Metro','Metrolijn(en)','Lightrail','Overig openbaar vervoer','Ligging'}
item = mw.wikibase.getEntity(mw.wikibase.getEntityIdForCurrentPage());
label = '\n|-\n| style="width:120px" | '; --begin van een rij
res = {'{| class="infobox" style="width:{{Infobox/breedte}}px; font-size:85%;"'}; --tabel waar het resultaat in zal worden opgeslagen
--Opmaak instellingen #00aaFF
letters = 'white';
balk = 'maroon';
landcode='';
portaal='';
if(is_empty(args["land"]) and item and item.claims["P17"]) then
args["land"] = title_for(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id); end
if(is_empty(args["vlag"]) and item and item.claims["P17"]) then
--getting the item for country, then retrieving iso-2 code from it to use in Template:Vlagland
country_item = mw.wikibase.getEntity(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id);
if (country_item.id=='Q55') then landcode='NL'; else
if(country_item and country_item.claims["P297"] and #country_item:getBestStatements('P297')>0) then
landcode = country_item:getBestStatements('P297')[1].mainsnak.datavalue.value; end
end
if landcode=='AT' then letters='white'; balk='red'; portaal='Oostenrijk'; end
if landcode=='BE' then letters='white'; balk='darkblue'; portaal='België'; end
if landcode=='CH' then letters='white'; balk='red'; portaal='Zwitserland'; end
if landcode=='CZ' then letters='white'; balk='#138fd6'; portaal='Tsjechië'; end
if landcode=='ES' then letters='red'; balk='yellow'; portaal='Spanje'; end
if landcode=='FR' then letters='white'; balk='navy'; portaal='Frankrijk'; end
if landcode=='HU' then letters='white'; balk='green'; portaal='Hongarije'; end
if landcode=='IT' then letters='white'; balk='green'; portaal='Italië'; end
if landcode=='LI' then letters='yellow'; balk='navy'; portaal='Liechtenstein'; end
if landcode=='NL' then letters='white'; balk='darkblue'; portaal='Nederland'; end
if landcode=='PT' then letters='yellow'; balk='green'; portaal='Portugal'; end
if landcode=='SK' then letters='white'; balk='navy'; portaal='Slowakije'; end
if landcode=='SI' then letters='white'; balk='blue'; portaal='Slovenië'; end
end
stijl="color:"..letters..";background-color:"..balk;
--Titel
if(is_empty(args["naam"])) then --if argument "naam" not set, it gets page name with text in brackets removed
args["naam"] = mw.text.split(tostring(mw.title.getCurrentTitle()), " %(")[1];
memo = args["naam"]; local l=0
local weergave=''
for l = 1, #memo do
d = memo:sub(l,l);
weergave=weergave..d;
if string.upper(weergave)=="STATION " then weergave='' end
end
args["naam"]=weergave;
end
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."<big>'''"..args["naam"].."'''</big>"); --insert argument "naam" into the result
--Afbeelding
if(is_empty(args["afbeelding"]) and item and item.claims["P18"]) then
args["afbeelding"] = item:getBestStatements('P18')[1].mainsnak.datavalue.value; end
if(is_empty(args["afbeeldingbreedte"])) then args["afbeeldingbreedte"] = "275px"; end
if(is_empty(args["beschrijving_afbeelding"]) and
item and item.claims["P18"] and
item.claims["P18"][1].qualifiers and
item.claims["P18"][1].qualifiers["P2096"]) then
desc_text = ""; nl_index = -1;
desc = item:getBestStatements('P18')[1].qualifiers["P2096"];
--iterate over P2096 qualifiers, untill there is one with dutch language
for i = 1, #desc do
if(desc[i].datavalue.value.language=="nl") then
nl_index = i; break; end
end
if(nl_index~=-1) then args["beschrijving_afbeelding"] = desc[nl_index].datavalue.value.text; end
end
--insert image and its description, if present, into the result table
if(not is_empty(args["afbeelding"])) then
table.insert(res, '\n|-\n| align="center" colspan="2" | [[Bestand:'..
args["afbeelding"].."|"..args["afbeeldingbreedte"].."|center]]"); end
if(not is_empty(args["beschrijving_afbeelding"])) then
table.insert(res, "{{center|1=''"..args["beschrijving_afbeelding"].."''}}"); end
--ALGEMEEN (1)
--Stationsafkorting
appendtable("stationscode", "P296", "Afkorting",1)
--Stationscode (enkel item) Voor deze infobox de Franse stationscode, P8181
appendtable("stationscode_fr", "P8181", "Stationscode",1)
--Stationscode UIC (enkel item) UIC stationscode, P722
appendtable("stationscode_uic", "P722", "UIC-identificatie",1)
--Status(enkel item) In gebruik of niet, P5817
appendtable("gebruiksstatus", "P5817", "Status", 1, true)
--Exploitant (voorbeeld van mogelijk meerdere items)
if(is_empty(args["exploitant"]) and item and item.claims["P137"]) then
exploitant_lijst = {};
--there can be multiple values of P137, adding each of them to the table
for i = 1, #item.claims["P137"] do
table.insert(exploitant_lijst, title_for(item.claims["P137"][i].mainsnak.datavalue.value.id)); end
args["exploitant"] = table.concat(exploitant_lijst, ", <br/>") .. editsymbol("P137"); --result is a table concatenated with separator being a comma and newline
end
if(not is_empty(args["exploitant"])) then
table.insert(res, label.."'''Exploitant'''".." || "..args["exploitant"]); end
--Links
if (is_empty(args["beschreven_op"]) and item and item.claims["P973"]) then
url_list = {};
--there can be multiple values of P973, adding each of them to the table
for i = 1, #item.claims["P973"] do
link = item.claims["P973"][i].mainsnak.datavalue.value;
--link text will be a part of url between http:// and first /
link_text = mw.text.split(mw.text.split(link, "//")[2], "/")[1];
table.insert(url_list, "["..link.." "..link_text.."]"); end
args["beschreven_op"] = table.concat(url_list, "<br/>") .. editsymbol("P973");
end
if (not is_empty(args["beschreven_op"])) then
table.insert(res, label.."'''Beschreven op'''"..
" || <small>"..args["beschreven_op"].."</small>"); end
--Commonscategorie, P373
if (is_empty(args["commonscategorie"]) and item and item.claims["P373"]) then
args["commonscategorie"] = item:getBestStatements('P373')[1].mainsnak.datavalue.value;
args["commonscategorie"] = args["commonscategorie"]
cces = true
end
if (not is_empty(args["commonscategorie"])) then
cctxt = label.."'''Commonscategorie'''".." || [[Commons:Category:"..args["commonscategorie"].."|"..args["commonscategorie"].."]]"
if cces then
cctxt = cctxt .. editsymbol("P373")
end
table.insert(res, cctxt)
end
--GESCHIEDENIS (2)
--Openingsdatum
if(is_empty(args["opening"]) and item and item.claims["P1619"]) then
--date in Wikidata is stored in format +YYYY-MM-DD... , only year is needed
date_string = item:getBestStatements('P1619')[1].mainsnak.datavalue.value.time;
date_string = mw.text.split(date_string, "+")[2];
args["opening"] = voluit(date_string).. editsymbol("P1619");
end
if(not is_empty(args["opening"])) then kop = true; end
--Sluitingsdatum
if(is_empty(args["sluiting"]) and item and item.claims["P3999"]) then
--date in Wikidata is stored in format +YYYY-MM-DD... , only year is needed
local sluitDatum = item:getBestStatements('P3999');
if #sluitDatum > 0 then
local dv = sluitDatum[1].mainsnak.datavalue
if dv then
date_string = dv.value.time;
date_string = mw.text.split(date_string, "+")[2];
date_string = mw.text.split(date_string, "-")[1];
args["sluiting"] = voluit(date_string) .. editsymbol("P3999");
end
end
end
if(not is_empty(args["sluiting"])) then kop = true;end
if (kop) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Geschiedenis'''");end --insert sectionheader into the result
if(not is_empty(args["opening"])) then
table.insert(res, label.."'''Opening'''".." || "..args["opening"]); end
if(not is_empty(args["sluiting"])) then
table.insert(res, label.."'''Sluiting'''".." || "..args["sluiting"]); end
--VROEGERE NAMEN (3)
j=0; breed='';
if ((not is_empty(args["naam1"])) and (not is_empty(args["datum1"])) ) then
breed=breed..'<tr><td>'..args["naam1"]..'</td><td>'..args["datum1"]..'</td></tr>';
j=j+1;
end
if ((not is_empty(args["naam2"])) and (not is_empty(args["datum2"])) ) then
breed=breed..'<tr><td>'..args["naam2"]..'</td><td>'..args["datum2"]..'</td></tr>';
j=j+1;
end
if ((not is_empty(args["naam3"])) and (not is_empty(args["datum3"])) ) then
breed=breed..'<tr><td>'..args["naam3"]..'</td><td>'..args["datum3"]..'</td></tr>';
j=j+1;
end
if ((not is_empty(args["naam4"])) and (not is_empty(args["datum4"])) ) then
breed=breed..'<tr><td>'..args["naam4"]..'</td><td>'..args["datum4"]..'</td></tr>';
j=j+1;
end
if ((not is_empty(args["naam5"])) and (not is_empty(args["datum5"])) ) then
breed=breed..'<tr><td>'..args["naam5"]..'</td><td>'..args["datum5"]..'</td></tr>';
j=j+1;
end
if (j>0) then
if (j==1) then groepen[3] = 'Vroegere naam'; end
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''"..groepen[3].."'''"); --insert sectionheader into the result
breed= '<table><tr><td style="width:132px">Naam</td><td style="width:132px">Tot</td></tr>'..breed..'</table>';
table.insert(res, '\n|-\n| align="center" colspan="2" | '..breed );
groepen[3]='-';
end
--CONSTRUCTIE (4)
kop = false;
--Architect (mogelijk meerdere items) 4.1
if(is_empty(args["architect"]) and item and item.claims["P84"]) then
architect_lijst = {};
--there can be multiple values of P84, adding each of them to the table
for i = 1, #item.claims["P84"] do
table.insert(architect_lijst, title_for(item.claims["P84"][i].mainsnak.datavalue.value.id));
end
args["architect"] = table.concat(architect_lijst, ", <br/>"); --result is a table concatenated with separator being a comma and newline
end
if(not is_empty(args["architect"])) then kop = true; end
-- bedrijfstype
if (not is_empty(args["bedrijfstype"])) then
args["bedrijfstype"]=stasoort(args["bedrijfstype"]);
if(not is_empty(args["bedrijfstype"])) then kop = true; end
end
--constructietype
if (not is_empty(args["type"])) then
args["ctype"]=stabouw(args["type"]);
if(not is_empty(args["ctype"])) then kop = true; end
end
--totaal aantal sporen
if (not is_empty(args["sporen"])) then kop = true;end
--aantal perronsporen
if (is_empty(args["perronsporen"]) and item and item.claims["P1103"]) then
args["perronsporen"] = tonumber(item:getBestStatements('P1103')[1].mainsnak.datavalue.value.amount);
args["perronsporen"] = args["perronsporen"] .. editsymbol("P1103")
end
if(not is_empty(args["perronsporen"])) then kop=true; end
--totaal aantal perrons
if(not is_empty(args["perrons"])) then kop = true;end
--perrondeuren
if (args["type"]=='12') then args["perrondeur"]='3'; end
if (not is_empty(args["perrondeur"])) then
args["perrondeur"]=perdeu(args["perrondeur"]);
if(not is_empty(args["perrondeur"])) then kop = true; end
end
--totaal aantal roltrappen
if(not is_empty(args["roltrappen"])) then kop = true;end
--totaal aantal liften
if(not is_empty(args["liften"])) then kop = true;end
--bij ondergrondse stations diepte onder de straat
if(not is_empty(args["diepte"])) then kop = true;end
if (kop) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Stationsbouw'''");end --insert sectionheader into the result
if (not is_empty(args["architect"])) then
table.insert(res, label.."'''Architect'''".." || "..args["architect"]); end
if (not is_empty(args["bedrijfstype"])) then
table.insert(res, label.."'''Bedrijfstype'''".." || "..args["bedrijfstype"]); end
if (not is_empty(args["ctype"])) then
table.insert(res, label.."'''Constructie'''".." || "..args["ctype"]); end
if (not is_empty(args["sporen"])) then
table.insert(res, label.."'''Sporen'''".." || "..args["sporen"]); end
if (not is_empty(args["perronsporen"])) then
table.insert(res, label.."'''Perronsporen'''".." || "..args["perronsporen"]); end
if (not is_empty(args["perrons"])) then
table.insert(res, label.."'''Perrons'''".." || "..args["perrons"]); end
if (not is_empty(args["perrondeuren"])) then
table.insert(res, label.."'''Perrondeuren'''".." || "..args["perrondeuren"]); end
if (not is_empty(args["roltrappen"])) then
table.insert(res, label.."'''Roltrappen'''".." || "..args["roltrappen"]); end
if (not is_empty(args["liften"])) then
table.insert(res, label.."'''Liften'''".." || "..args["liften"]); end
if (not is_empty(args["diepte"])) then
table.insert(res, label.."'''Diepte'''".." || "..args["diepte"]); end
--SPOORLIJNEN (5) (voorbeeld van mogelijk meerdere items)
breed=''; lijnen_lijst = {};
if(is_empty(args["lijnen"]) and item and item.claims["P81"]) then
logo = 'Aiga railtransportation 25.svg';
station = item.id;
for i = 1, #item.claims["P81"] do
zulu = true;
lijn_item = mw.wikibase.getEntity(item:getBestStatements('P81')[i].mainsnak.datavalue.value.id);
if(lijn_item and lijn_item.claims["P527"]) then --primair zoeken naar stations van de lijn
richting=''; stainricht='Eindpunt'; size_logo=25; stainblok=2;
for j = 1, #lijn_item.claims["P527"] do
--hier controleren of de P527 een station is.
vergelijker = lijn_item.claims["P527"][j].mainsnak.datavalue.value.id;
if (vergelijker == station) then
if breed=='' then breed=breed..'<table><tr><td>Lijn</td><td>Richting</td><td>Volgend station</td></tr>'; end
if (j==1) then richting = station; end
breed=breed..'<tr><td colspan="3"><hr></td></tr>';
breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(richting).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
stainblok = 0; zulu = false;
else
if richting=='' then richting = vergelijker; end
if stainblok ~=1 then
stainricht = title_for(lijn_item.claims["P527"][j].mainsnak.datavalue.value.id);
stainblok=stainblok+1;
end
end
end
if stainblok==0 then stainricht='Eindpunt'; stainblok=1; end
if stainblok==1 then
breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(vergelijker).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
breed=breed..'<tr><td colspan="3" align="center">('..title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)..')</td></tr>';
end;
end --einde P527
if (0==1) then
if(lijn_item and lijn_item.claims["P197"] and zulu) then --subsidiair zoeken naar opvolgende stations bij het station
richting=''; stainricht='Eindpunt'; size_logo=25; stainblok=2;
--for j = 1, #lijn_item.claims["P197"] do
--hier controleren of het gevonden station aan de lijn ligt
vergelijker = lijn_item.claims["P197"][j].mainsnak.datavalue.value.id;
if (vergelijker == station) then
if breed=='' then breed=breed..'<table><tr><td>Lijn</td><td>Richting</td><td>Volgend station</td></tr>'; end
if (j==1) then richting = station; end
breed=breed..'<tr><td colspan="3"><hr></td></tr>';
breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(richting).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
stainblok = 0; zulu = false;
else
if richting=='' then richting = vergelijker; end
if stainblok ~=1 then
stainricht = title_for(lijn_item.claims["P197"][j].mainsnak.datavalue.value.id);
stainblok=stainblok+1;
end
end
end
if stainblok==0 then stainricht='Eindpunt'; stainblok=1; end
if stainblok==1 then
breed=breed..'<tr><td style="width:32px">[[Bestand:' ..logo .. '|' .. size_logo .. ' px]]</td><td style="width:116px">' ..title_for(vergelijker).. '</td><td style="width:116px">' ..stainricht.. '</td></tr>';
breed=breed..'<tr><td colspan="3" align="center">('..title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)..')</td></tr>';
end;
end --einde P197
if (zulu) then table.insert(lijnen_lijst, title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)); end
end -- einde aflopen P81
if breed~='' then
breed=breed..'<tr><td colspan="3"><hr></td></tr>';
breed=breed..'<tr><td colspan="3" align="center"><small>Brongegevens aanpassen in wikidata'..editsymbol("P81")..'</small></td></tr>';
breed=breed..'</table>';
else
args["lijnen"] = table.concat(lijnen_lijst, ", <br/>") .. editsymbol("P81"); --result is a table concatenated with separator being a comma and newline
end
end
if(not is_empty(args["lijnen"])) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Spoorlijn(en)'''"); --insert sectionheader into the result
table.insert(res, label.."'''Lijnen'''".." || "..args["lijnen"]);
else
if breed=='' then os = '{{Opvolgende stations|||||H}}'; else os=breed; end --terugval op os als P527 niets oplevert (moet verder uitgewerkt)
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Spoorlijn(en)'''"); --insert sectionheader into the result
table.insert(res, '\n|-\n| align="center" colspan="2" | '..os );
table.insert(res, '\n|-\n| align="center" colspan="2" | '..table.concat(lijnen_lijst, ", <br/>"));
end
--Modaliteiten in de juiste lijst zetten
if(is_empty(args["aansluitende_dienst"]) and item and item.claims["P1192"]) then
aansluitende_dienst = {}; ad=false; args["aansluitende_dienst"]='';
voorstads_dienst = {}; vd=false; args["voorstads_dienst"]='';
metro_dienst = {}; md=false; args["metro_dienst"]='';
sneltram_dienst = {}; ld=false; args["sneltram_dienst"]='';
--there can be multiple values of P1192, adding each of them to the table
for i = 1, #item.claims["P1192"] do
lijn_item = item.claims['P1192'][i].mainsnak.datavalue.value.id;
lijn_naam = title_for(lijn_item);
td = treinsoort(lijn_item);
--lijn_naam = lijn_naam..'('..td..')';
td = td:sub(1,1);
if (td=='P') then table.insert(aansluitende_dienst, lijn_naam); ad=true; end
if (td=='S') then table.insert(voorstads_dienst, lijn_naam); vd=true; end
if (td=='M') then table.insert(metro_dienst, lijn_naam); md=true; end
if (td=='L') then table.insert(sneltram_dienst, lijn_naam); ld=true; end
end
if (ld) then args["sneltram_dienst"] = table.concat(sneltram_dienst, ", <br/>") .. editsymbol("P1192"); end
if (md) then args["metro_dienst"] = table.concat(metro_dienst, ", <br/>") .. editsymbol("P1192"); end
if (ad) then args["aansluitende_dienst"] = table.concat(aansluitende_dienst, ", <br/>") .. editsymbol("P1192"); end
if (vd) then args["voorstads_dienst"] = table.concat(voorstads_dienst, ", <br/>") .. editsymbol("P1192"); end --result is a table concatenated with separator being a comma and newline
end
--TREINDIENSTEN (6)
if(not is_empty(args["aansluitende_dienst"])) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Treindienst(en)'''"); --insert sectionheader into the result
os = '{{Opvolgende stations|||||P}}';
table.insert(res, '\n|-\n| align="center" colspan="2" | '..os );
if (args["aansluitende_dienst"]~='') then table.insert(res, label.."'''Aansluiting'''".." || "..args["aansluitende_dienst"]); end
end
--VOORSTADSDIENSTEN (7)
if(not is_empty(args["voorstads_dienst"])) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Voorstadsdienst(en)'''"); --insert sectionheader into the result
os = '{{Opvolgende stations|||||S}}';
table.insert(res, '\n|-\n| align="center" colspan="2" | '..os );
table.insert(res, label.."'''Aansluiting'''".." || "..args["voorstads_dienst"]);
end
--METROSTATION (8)
--METRODIENSTEN (9)
if(not is_empty(args["metro_dienst"])) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Metro'''"); --insert sectionheader into the result
os = '{{Opvolgende stations|||||M}}';
table.insert(res, '\n|-\n| align="center" colspan="2" | '..os );
table.insert(res, label.."'''Aansluiting'''".." || "..args["metro_dienst"]);
end
--SNELTRAM / LIGHTRAIL (A)
if(not is_empty(args["sneltram_dienst"])) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Sneltram/Lightrail'''"); --insert sectionheader into the result
os = '{{Opvolgende stations|||||L}}';
table.insert(res, '\n|-\n| align="center" colspan="2" | '..os );
table.insert(res, label.."'''Aansluiting'''".." || "..args["sneltram_dienst"]);
end
--OVERIG OV--
kop = false;
if(not is_empty(args["spoorwegstation"])) then kop = true;end --B1
if(not is_empty(args["voorstadstation"])) then kop = true;end --B2
if(not is_empty(args["metrostation"])) then kop = true;end --B3
if(not is_empty(args["sneltram"])) then kop = true;end --B4
if(not is_empty(args["tramlijnen"])) then kop = true;end --B5
if(not is_empty(args["buslijnen"])) then kop = true;end --B6
if(not is_empty(args["trolleylijnen"])) then kop = true;end --B7
if(not is_empty(args["kabeltram"])) then kop = true;end --B8
if (kop) then
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Overig openbaar vervoer'''"); --insert sectionheader into the result
groepen[11]='-';
if(not is_empty(args["spoorwegstation"])) then
table.insert(res, label.."'''Spoorwegstation(s)'''".." || "..args["spoorwegstation"]); end
if(not is_empty(args["voorstadstation"])) then
table.insert(res, label.."'''Voorstadstation(s)'''".." || "..args["voorstadstation"]); end
if(not is_empty(args["metrostation"])) then
table.insert(res, label.."'''Metrostation(s)'''".." || "..args["metrostation"]); end
if(not is_empty(args["sneltram"])) then
table.insert(res, label.."'''Sneltram(s)'''".." || "..args["sneltram"]); end
if(not is_empty(args["tramlijnen"])) then
table.insert(res, label.."'''Tramlijn(en)'''".." || "..args["tramlijnen"]); end
if(not is_empty(args["buslijnen"])) then
table.insert(res, label.."'''Buslijn(en)'''".." || "..args["buslijnen"]); end
if(not is_empty(args["trolleylijnen"])) then
table.insert(res, label.."'''Trolleylijn(en)'''".." || "..args["trolleylijnen"]); end
if(not is_empty(args["kabeltram"])) then
table.insert(res, label.."'''Kabeltram'''".." || "..args["kabeltram"]); end
end
--LIGGING
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '
.."'''Ligging'''"); --insert sectionheader into the result
groepen[12]='-';
--Land
--Land
if(is_empty(args["land"]) and item and item.claims["P17"]) then
args["land"] = title_for(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id); end
if(is_empty(args["vlag"]) and item and item.claims["P17"]) then
--getting the item for country, then retrieving iso-2 code from it to use in Template:Vlagland
country_item = mw.wikibase.getEntity(item:getBestStatements('P17')[1].mainsnak.datavalue.value.id);
if(country_item and country_item.claims["P297"]) then
if (landcode~='') then args["vlag"] = '{{'..landcode..'}} '; else args["vlag"] = ""; end
--country_item:getBestStatements('P297')[1].mainsnak.datavalue.value..'}} ';
else args["vlag"] = ""; end
elseif(is_empty(args["vlag"])) then args["vlag"] = ""; end --if there is no iso-2 code, there would be no flag
if (args["vlag"]~='') then table.insert(res, label.."'''Land'''".." || "..args["vlag"].. editsymbol("P17")); end
--C2
--Kanton (CH)
if(not is_empty(args["kanton"])) then
opschrift = 'Kanton';
if landcode=='CH' then opschrift = '[[Kantons van Zwitserland|Kanton]]'; end
table.insert(res, label.."'''"..opschrift.."''' || "..args["kanton"]);
end
--Deelstaat (AT & DE)
if(not is_empty(args["deelstaat"])) then
opschrift = 'Deelstaat';
if landcode=='AT' then opschrift = '[[Deelstaten van Oostenrijk|Deelstaat]]'; end
table.insert(res, label.."'''"..opschrift.."''' || "..args["deelstaat"]);
end
--Regio (FR, IT, DK, ES)
if(not is_empty(args["regio"])) then
opschrift = 'Regio';
if landcode=='DK' then opschrift = "[[Regio's van Denemarken|Regio]]"; end
if landcode=='IT' then opschrift = "[[Regio's van Italië|Regio]]"; end
table.insert(res, label.."'''"..opschrift.."''' || "..args["regio"]);
end
--Landschap
if(not is_empty(args["landschap"])) then
opschrift = 'Landschap';
if landcode=='SE' then opschrift = '[[Landschappen van Zweden|Landschap]]'; end
table.insert(res, label.."'''"..opschrift.."''' || "..args["landschap"]);
end
--C2&C3
--Provincie (C2:NO, NL, BE, C3:SE, IT, ES)
if(not is_empty(args["provincie"])) then
opschrift = 'Provincie';
if landcode=='SE' then opschrift = '[[Län|Provincie]]'; end
if landcode=='NO' then opschrift = '[[Provincies van Noorwegen|Provincie]]'; end
if landcode=='NL' then opschrift = '[[Provincies van Nederland|Provincie]]'; end
table.insert(res, label.."'''"..opschrift.."''' || "..args["provincie"]);
end
--C3
--Departement (FR)
if(not is_empty(args["departement"])) then
opschrift = 'Departement';
table.insert(res, label.."'''"..opschrift.."''' || "..args["departement"]);
end
--District (CH, AT, DE)
if(not is_empty(args["district"])) then
opschrift = 'District';
if landcode=='AT' then opschrift = '[[Districten van Oostenrijk|District]]'; end
table.insert(res, label.."'''"..opschrift.."''' || "..args["district"]);
end
--C4
if(not is_empty(args["gemeente"])) then
opschrift = 'Gemeente';
table.insert(res, label.."'''"..opschrift.."''' || "..args["gemeente"]);
end
--C5
--Plaats (voorbeeld enkel item)
appendtable("plaats", "P131", "Plaats", 12, true)
--C6
--stadsdeel
if(not is_empty(args["stadsdeel"])) then
opschrift = 'Stadsdeel';
table.insert(res, label.."'''"..opschrift.."''' || "..args["stadsdeel"]);
end
--Adres (voorbeeld enkel item)
appendtable("adres", "P6375", "Adres", 12)
--Hoogte (voorbeeld enkel item)
appendtable("hoogte", "P2044", "Hoogte", 12)
--Coordinates and map
if (is_empty(args["breedtegraad"]) or is_empty(args["lengtegraad"])) and
item and item.claims["P625"] then
--if arguments "breedtegraad" and "lengtegraad" not set, take value from Wikidata
coord = item:getBestStatements('P625')[1].mainsnak.datavalue.value;
args["breedtegraad"] = coord.latitude;
args["lengtegraad"] = coord.longitude;
end
--if both latitude and longtitude are set, add an OSM-map
if( (not is_empty(args["breedtegraad"])) and (not is_empty(args["lengtegraad"])) ) then
geocoord="{{Coor dec2|"..args["breedtegraad"].."|"..args["lengtegraad"].."||type:railwaystation_scale:6250_region:GB}}"
table.insert(res, label.."'''Coördinaten'''".." || "..geocoord.. editsymbol("P625"))
if(is_empty(args["mapframe_breedte"])) then
args["mapframe_breedte"] = mw.text.split(args["afbeeldingbreedte"], "px")[1];
else args["mapframe_breedte"] = mw.text.split(args["mapframe_breedte"], "px")[1]; end
table.insert(res, '\n|-\n| align="center" colspan="2" | '..
'<mapframe width='..args["mapframe_breedte"]..' height='..args["mapframe_breedte"]..
' latitude='..args["breedtegraad"]..' longitude='..args["lengtegraad"]..
' zoom=11 frameless align="center">'..
'{"type": "Feature","geometry": { "type": "Point", "coordinates": ['..
args["lengtegraad"]..','..args["breedtegraad"]..
'] },"properties": {"title": "'..args["naam"]..'"'..
',"marker-symbol": "rail","marker-size": "medium","marker-color": "C0C"'..
'}}</mapframe>');
end
voet = '<table><tr><td style="vertical-align:middle;"><b>Portaal</b> [[Bestand:Portal.svg|22px|link=Portal.svg]]</td><td class="ta-left">[[Portaal:Openbaar vervoer|<b style="color:'..letters..'">Openbaar vervoer</b>]]';
if portaal~='' then voet=voet..'<br>[[Portaal:'..portaal..'|<b style="color:'..letters..'">'..portaal..'</b>]]'; end
voet = voet..'</td></tr></table>';
table.insert(res, '\n|-\n| align="center" colspan="2" style="'..stijl..'" | '..voet);
return frame:preprocess(table.concat(res)..'\n|}'); --the final result id the concatenated result table
end
return p;