Module:Infobox
Naar navigatie springen
Naar zoeken springen
Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Infobox/doc
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, usetitlefor)
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
if (not is_empty(args[arg])) then
table.insert(res, label .. "'''" .. outputname .. "'''" .. " || " .. args[arg]);
end
end
--Main function
function p.main(frame)
parent = frame:getParent();
args = parent.args;
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
--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]; end
table.insert(res, '\n|-\n| align="center" colspan="2" bgcolor="#00aaFF" | '
.."<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"] = "290px"; 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
--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
args["vlag"] = '{{'..
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
table.insert(res, label.."'''Land'''".." || "..args["vlag"])
--Plaats (voorbeeld enkel item)
appendtable("plaats", "P131", "Plaats", true)
--Status(enkel item) In gebruik of niet, P5817
appendtable("gebruiksstatus", "P5817", "Status", true)
--Stationscode (enkel item) Voor deze infobox de Franse stationscode, P8181
appendtable("stationscode_fr", "P8181", "Stationscode")
--Stationscode UIC (enkel item) UIC stationscode, P722
appendtable("stationscode_uic", "P722", "UIC-identificatie")
--Openingsdatum (NB dit voorbeeld stript maand en dag, moet opgeruimd worden)
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];
date_string = mw.text.split(date_string, "-")[1];
args["opening"] = "[["..date_string.."]]"; end
if(not is_empty(args["opening"])) then
table.insert(res, label.."'''Opening'''".." || "..args["opening"]); end
--Sluitingsdatum (NB dit voorbeeld stript maand en dag, moet opgeruimd worden)
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"] = "[[" .. date_string .. "]]" .. editsymbol("P3999"); end
end
end
if(not is_empty(args["sluiting"])) then
table.insert(res, label.."'''Sluiting'''".." || "..args["sluiting"]); end
--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
table.insert(res, label.."'''Perronsporen'''".." || "..args["perronsporen"]); end
--Spoorlijnen (voorbeeld van mogelijk meerdere items)
if(is_empty(args["lijnen"]) and item and item.claims["P81"]) then
lijnen_lijst = {};
--there can be multiple values of P81, adding each of them to the table
for i = 1, #item.claims["P81"] do
table.insert(lijnen_lijst, title_for(item.claims["P81"][i].mainsnak.datavalue.value.id)); end
args["lijnen"] = table.concat(lijnen_lijst, ", <br/>") .. editsymbol("P81"); --result is a table concatenated with separator being a comma and newline
end
if(not is_empty(args["lijnen"])) then
table.insert(res, label.."'''Lijnen'''".." || "..args["lijnen"]); end
--Aansluitende diensten
if(is_empty(args["aansluitende_dienst"]) and item and item.claims["P1192"]) then
aansluitende_dienst = {};
--there can be multiple values of P1192, adding each of them to the table
for i = 1, #item.claims["P1192"] do
table.insert(aansluitende_dienst, title_for(item.claims["P1192"][i].mainsnak.datavalue.value.id)); end
args["aansluitende_dienst"] = table.concat(aansluitende_dienst, ", <br/>") .. editsymbol("P1192"); --result is a table concatenated with separator being a comma and newline
end
if(not is_empty(args["aansluitende_dienst"])) then
table.insert(res, label.."'''Aansluiting'''".." || "..args["aansluitende_dienst"]); end
--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
--Architect (mogelijk meerdere items)
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
table.insert(res, label.."'''Architect'''".." || "..args["architect"]); 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
--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
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
return frame:preprocess(table.concat(res)..'\n|}'); --the final result id the concatenated result table
end
return p;