Module:Gemeente in Nederland: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Onderdrukking van foutmelding als page_id geen geldige waarde heeft
Betere namen van variabelen, beginnetje met sortering op plaatsnaam (hoofdplaatsen boven), benodigde credits toegevoegd, bron bij totaal inwoneraantal
Regel 4:
--Functie "settlements_table", maakt een tabel met alle woonplaatsen in een gemeente en de bijbehorende inwoneraantallen en markeert de hoofdplaats(en)
function p.settlements_table(frame)
local result = ''
--Argumenten ophalen
local args = frame.args
--Als het argument "gemeente_idwikidata_id" gegeven is, wordt diede gemeenteWikidata-pagina met dat ID gebruikt
if args.gemeente_idwikidata_id then
page_idmunicipality_id = args.gemeente_idwikidata_id
--Anders wordt het Wikidata-ID van de pagina zelf gebruikt
else
page_idmunicipality_id = mw.wikibase.getEntityIdForCurrentPage()
end
--Als de pagina geen Wikidata-ID heeft en ook geen Wikidata-ID is opgegeven, wordt een foutmelding geretourneerd
if page_idmunicipality_id == '' then
return result
return frame:expandTemplate{ title = 'Tekstkleur', args = {'red', '\nEr kon geen tabel gemaakt worden omdat deze pagina geen Wikidata-ID heeft en er geen Wikidata-ID is opgegeven als parameter (zie [[Sjabloon:Tabel woonplaatsen Nederlandse gemeente|hier]] welke parameters gebruikt kunnen worden).'} }
end
 
--De hoofdsteden van, kernen in en het totale bevolkinginwoneraantal van de gemeente worden opgehaald uit Wikidata
local capitals = mw.wikibase.getBestStatements(page_idmunicipality_id, 'P36')
local settlements = mw.wikibase.getBestStatements(page_idmunicipality_id, 'P1383')
local total_population_wd = tonumber(mw.wikibase.getBestStatements(page_idmunicipality_id, 'P1082')[1].mainsnak.datavalue.value.amount)
 
--De ID's van de hoofdsteden worden in een table gezet
local capital_ids = {}
for k in pairs(capitals) do
capital_ids[k] = capitals[k].mainsnak.datavalue.value.id
Regel 33 ⟶ 34:
local total_population_sum = 0
for k in pairs(settlements) do
local settlement_idid = settlements[k].mainsnak.datavalue.value.id
--Het inwoneraantal wordt opgehaald, alsmede het inwoneraantal met bron erachter
local population_numberpopulation = frame:expandTemplate{ title = 'Inwonertal', args = {id=settlement_idid, soort='waardepuur'} }
local population_datepopulation_with_source = frame:expandTemplate{ title = 'Inwonertal', args = {id=settlement_id, soort='datum'id} }
local populationpopulation_date = frame:expandTemplate{ title = 'Inwonertal', args = {id=settlement_idid, soort='datum'} }
 
--De naam van de kern wordt opgehaald
local settlement_namename = mw.wikibase.getLabelByLang(settlement_idid, 'nl')
 
--Voor de kernnamen worden links naar artikelen gemaakt
local sitelink = mw.wikibase.getSitelink(id)
local table_name = '[[' .. sitelink .. '|' .. name .. ']]'
 
--Als de kern een hoofdstad van de gemeente is, wordt hij gemarkeerd
iflocal is_capital = contains(capital_ids, settlement_idid) then
if is_capital then
table_settlement_nametable_name = '\'\'\'' .. settlement_nametable_name .. '\'\'\''
else
table_settlement_name = settlement_name
end
 
--Gegevens over de kern worden opgeslagen in een table
rows[k] = {name=table_settlement_namename, idtable_name=settlement_idtable_name, population_numberid=population_numberid, population=population, population_with_source=population_with_source, population_date=population_date, is_capital=is_capital}
 
--De som van alle inwoneraantallen wordt berekend
total_population_sum = total_population_sum + (population_numberpopulation ~= nil and tonumber(population_numberpopulation:gsub('%.', ''), 10) or 0)
end
 
--De table wordt gesorteerd op aflopendealfabetische volgorde van inwoneraantallenkernnamen, waarbij de hoofdplaatsen bovenaan staan (alfabetisch gesorteerd indien meer dan één)
table.sort(rows, compare_populationcompare_rows)
 
--De tabel wordt gemaakt met de gegevens uit de table "rows". Merk op dat hier "row.populationpopulation_with_source" wordt gebruikt, het inwoneraantal mét bron erachter
for k, row in pairs(rows) do
result = result .. '\n|-\n|' .. row.nametable_name .. '||' .. (row.population_numberpopulation ~= '' and row.populationpopulation_with_source or '?') .. '||' .. (row.population_date ~= nil and row.population_date)
end
 
result = '{| class="wikitable sortable"\n|-\n!Kern!!Inwoneraantal!!Peildatum' .. result .. '\n|-\n|Totaal:||' .. format_thousand(total_population_sum) .. '\n|}'
--Als de som van de inwoneraantallen niet gelijk is aan de waarde gegeven op Wikidata, wordt eenhet foutmeldingverschil getoondtoegevoegd aan de tabel als "Overig"
local population_difference = total_population_wd - total_population_sum
--Als de som van de inwoneraantallen niet gelijk is aan de waarde gegeven op Wikidata, wordt een foutmelding getoond
if total_population_wdpopulation_difference ~= total_population_sum0 then
result = result .. '\n|-\n|Overig||' .. format_thousand(population_difference) .. '||'
error = frame:expandTemplate{ title = 'Tekstkleur', args = {'red', '\nDe optelsom van de inwoneraantallen komt niet overeen met '.. format_thousand(total_population_wd) .. ', het aantal gegeven op [[:d:' .. page_id .. '|Wikidata]]!'} }
result = result .. error
end
 
--Het totale inwoneraantal van de gemeente uit Wikidata wordt onderaan de tabel gezet. Merk op dat hier "total_population_wd_with_source" wordt gebruikt, het inwoneraantal mét bron erachter
local total_population_wd_date = frame:expandTemplate{ title = 'Inwonertal', args = {id=municipality_id, soort='datum'} }
local total_population_wd_with_source = frame:expandTemplate{ title = 'Inwonertal', args = {id=municipality_id} }
result = '{| class="wikitable sortable"\n|-\n!Kern!!Inwoneraantal!!Peildatum' .. result .. '\n|-\n|Totaal:||' .. format_thousandtotal_population_wd_with_source .. '||' .. (total_population_sumtotal_population_wd_date ~= nil and total_population_wd_date) .. '\n|}'
 
--Het resultaat wordt geretourneerd
Regel 82 ⟶ 93:
end
 
--Functie "compare_rows", retourneert welke rij boven en welke onder de andere staat: op alfabetische volgorde van kernnamen, waarbij de hoofdplaatsen bovenaan staan (alfabetisch gesorteerd indien meer dan één)
--Functie "compare_population", vergelijkt twee inwoneraantallen en retourneert of de een groter is dan de ander
function compare_populationcompare_rows(a, b)
return a.is_capital and not b.is_capital
if (a.population_number == '') then
--[[WAAROM WERKT DIT NIET :(
return false
return a.is_capital and not b.is_capital or a.name <= b.name]]
elseif (b.population_number == '') then
return true
else
--Het inwoneraantal moet worden ontdaan van scheidingstekens voor duizendtallen (punten) en wordt vervolgens omgezet naar een getal. "10" geeft aan dat het decimale getallen betreft
return tonumber(a.population_number:gsub('%.', ''), 10) > tonumber(b.population_number:gsub('%.', ''), 10)
end
end
 
--Functie "format_thousand", voegt scheidingstekens voor duizendtallen (punten) toe aan een getal
--Credits: remiX (04-01-2013), van http://www.computercraft.info/forums2/index.php?/topic/8065-lua-thousand-separator/
function format_thousand(v)
local s = string.format("%d", math.floor(v))
Regel 103 ⟶ 110:
 
return p
 
--Buiten gebruik gesteld, vervangen door tabelwaarde "Overig"
--Als de som van de inwoneraantallen niet gelijk is aan de waarde gegeven op Wikidata, wordt een foutmelding getoond
--if total_population_wd ~= total_population_sum then
-- error = frame:expandTemplate{ title = 'Tekstkleur', args = {'red', '\nDe optelsom van de inwoneraantallen komt niet overeen met '.. format_thousand(total_population_wd) .. ', het aantal gegeven op [[:d:' .. page_idmunicipality_id .. '#P1082|Wikidata]]!'} }
-- result = result .. error
--end