Module:Slovak municipality
Appearance
![]() | This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing. |
Usage
[edit]{{#invoke:Slovak municipality|function_name}}
About
[edit]Get statistic data about Slovak municipalities.
This template is a sibling of Template:Slovak municipality.
This template use the data from CC-BY database.
Original first author: Dušan Kreheľ.
Reference implementation is on hrwiki.
Parameters
[edit]First paramer
[edit]Meaning | Parameter | Code | Code output |
---|---|---|---|
Population | p | {{#invoke:Slovak municipality|sk|p|SK0417524395}} | 2550 |
Population (source URL) |
P | {{#invoke:Slovak municipality|sk|P|SK0417524395}}<br>{{#invoke:Slovak municipality|sk|P|SK}}<br>{{#invoke:Slovak municipality|sk|P|SK0106}} | https://datacube.statistics.sk/#!/view/sk/vbd_dem/om7101rr/v_om7101rr_00_00_00_sk https://datacube.statistics.sk/#!/view/sk/vbd_dem/om7102rr/v_om7102rr_00_00_00_sk https://datacube.statistics.sk/#!/view/sk/vbd_dem/om7102rr/v_om7102rr_00_00_00_sk |
Population (ex. for table) |
p | {{#invoke:Slovak municipality|sk|o|SK0417524395}} | 2,550 |
Population Id | r | {{#invoke:Slovak municipality|sk|r|SK0417524395}} | om7101rr |
Area | a | {{#invoke:Slovak municipality|sk|a|SK0417524395}} | 11.24 |
Area (source URL) |
A | {{#invoke:Slovak municipality|sk|A|SK0417524395}} | https://datacube.statistics.sk/#!/view/sk/vbd_dem/om7014rr/v_om7014rr_00_00_00_sk |
Area Id | b | {{#invoke:Slovak municipality|sk|b|SK0417524395}} | om7014rr |
Population density (as population/area) |
d | {{#invoke:Slovak municipality|sk|d}} | 226.78 |
Data year | y | {{#invoke:Slovak municipality|sk|y}} | |
Last acces | l | {{#invoke:Slovak municipality|sk|l}} | |
Last update | u | {{#invoke:Slovak municipality|sk|u}} | |
Is slovak municipality (none support %i) |
i | {{#invoke:Slovak municipality|sk|i|SK0417524395}} | 1 |
Get NUTS/LAU code (none support %e) |
e |
You can used both the format string like printf() with parameters from table.
Code: | {{#invoke:Slovak municipality|sk|%p (source: %P)|SK0417524395}} |
Output: | 2550 (source: https://datacube.statistics.sk/#!/view/sk/vbd_dem/om7101rr/v_om7101rr_00_00_00_sk |
Second parameter
[edit]It is a STUN or LAU code for place sup-place (ex. SK0417524395). If none, then code is automatic based on the actual page.
-- Project "[[:wikidata:Q132395970|Module:SK]]"
local sk = {}
sk.error_place="Unknown place."
sk.error_code="Unknown code."
sk.decimal_separator="."
sk.thousands_separator=","
sk.percentage_delimer=" "
sk.percent_first_value=true
sk.year_suffix=""
sk.minus="−"
sk.open_th="<th>"
sk.open_td="<td>"
sk.none_value="–"
function sk.table_list(args)
local places=args.args[1]
local items=mw.text.split(places,";", true)
local output=""
local data=false
local data_sup=false
local custom_text=false
local label
local lau
local record
local population
local lang=mw.language.getContentLanguage()
for i,item in ipairs(items) do
label=""
custom_text=string.find(item, "::")
if custom_text then
label=string.sub(item, custom_text+2)
lau=string.sub(item, 1, custom_text-1)
end
if string.len(lau) == 12 then
if not data then
data=mw.ext.data.get("Statistics of Slovak municipalities.tab")
end
record=sk.get_line_data(data, lau)
else
if not data_sup then
data_sup=mw.ext.data.get("Statistics of Slovak supmunicipalities.tab")
end
record=sk.get_line_data(data_sup, lau)
end
population=record[2]
area=record[3]
output=output.."<tr><td>"..label.."</td><td>"..sk.localised_number(area).."</td><td>"..lang:formatNum(population).."</td></tr>\n"
end
return output
end
function sk.get_nuts_lua()
local place_info
local nuts_lau
code=mw.wikibase.getEntityIdForCurrentPage()
if code == nil then
return nil
end
-- Source of 2 codes: https://commons.wikimedia.org/w/index.php?title=Data:Statistics_of_Slovak_supmunicipalities.tab&oldid=1001162094
if code == "Q1780" then return "SK_CAP" end
if code == "Q25409" then return "SK0422_0425" end
if code == "Q214" then return "SK0" end
if code == "SK" then return "SK0" end
while 1 do
place_info=mw.wikibase.getBestStatements(code,"P605")
if place_info[1] == nil then
break
end
nuts_lau=place_info[1]["mainsnak"]['datavalue']['value']
if nuts_lau == nil then
else
return nuts_lau
end
break
end
while 1 do
place_info=mw.wikibase.getBestStatements(code,"P782")
if place_info[1] == nil then
break
end
nuts_lau=place_info[1]["mainsnak"]['datavalue']['value']
if nuts_lau == nil then
else
return nuts_lau
end
break
end
return nil
end
function sk.is_slovak(args)
local nuts_lau=args.args[1]
if nuts_lau == nil or nuts_lau == "" then
nuts_lau=sk.get_nuts_lua()
if nuts_lau == nil then
return ""
end
end
if string.sub(nuts_lau, 1, 2) == "SK" then
return "1"
end
return ""
end
function sk.localised_number(number)
local number2
local offset
local offset_end
local first
local second
local first_length
local Output
number2=tostring(number)
offset, offset_end=string.find(number2, "%.")
if offset == nil then
first=number
second=""
else
first=string.sub(number2, 1, offset-1)
second=sk.decimal_separator..string.sub(number2, offset+1, offset+2)
end
if first == nil then
first=""
end
first_length=string.len(first)
if(first_length <= 4) then
return first..second
end
Output=string.sub(first, -3, -1)
if(first_length > 3) then
Output=string.sub(first, -6, -4)..sk.thousands_separator..Output
end
if(first_length > 6) then
Output=string.sub(first, -9, -7)..sk.thousands_separator..Output
end
if(first_length > 9) then
Output=string.sub(first, -12, -10)..sk.thousands_separator..Output
end
if second == nil then
return Output
else
return Output..second
end
end
function sk.delta_progress(count_a, count_b) -- count_a < count_b
if count_a == 0 or count_b == 0 then
return "–"
end
local value
value=tostring(count_b/(count_a/100)-100)
if string.sub(value, 1, 1) == "-" then
value_string=string.sub(value, 2)
value=sk.minus..sk.localised_number(value_string)
else
value="+"..sk.localised_number(value)
end
if sk.percent_first_value then
value=value..sk.percentage_delimer.."%"
else
value="%"..sk.percentage_delimer..value
end
return value
end
function sk.get_line_data(data, nuts_lau)
index=1
while 1 do
item=data.data[index]
if item == nil then
break
end
if item[1] == nuts_lau then
break
end
index=index+1
end
if item == nil then
mw.addWarning(sk.error_place)
end
return item
end
function sk.constant_code(code)
if code == nil then
return nil
end
if string.len(code) == 2 then
-- Source of 2 codes: https://commons.wikimedia.org/w/index.php?title=Data:Statistics_of_Slovak_supmunicipalities.tab&oldid=1001162094
if code == "BA" then return "SK_CAP" end
if code == "KE" then return "SK0422_0425" end
if code == "SK" then return "SK0" end
end
return code
end
-- Reference data are for population
function sk.population_table(args)
local style=args.args[1] -- format
local nuts_lau=args.args[2] -- nuts / LAU, default: automatic
local count_years
local count_years_stop
local data
local head
local index
local item
local i_start
local i_end
local text
local one_step_year
local one_step_values
local value
local value_string
local year
local years={}
nuts_lau=sk.constant_code(nuts_lau)
-- get NUTS/LUA for page
if nuts_lau == nil or nuts_lau == "" then
nuts_lau=sk.get_nuts_lua()
if nuts_lau == nil then
return ""
end
end
-- select date line
if string.len(nuts_lau) == 12 then
data=mw.ext.data.get("Population statistic of Slovak municipalities (some years).tab")
else
data=mw.ext.data.get("Population statistic of Slovak supmunicipalities (some years).tab")
end
-- get years
head=""
text=data.sources
i_start, i_end=string.find(text, "years: ")
offset=i_start+7
count_years=0
while 1 do
year=string.sub(text, offset, offset+3)
count_years=count_years+1
years[count_years]=year
if string.sub(text, offset+4, offset+4) == " " then
offset=offset+7
break
end
offset=offset+6
end
year=string.sub(text, offset, offset+3)
count_years=count_years+1
years[count_years]=year
count_years_stop=count_years+1
head=""
for i=2,count_years_stop do
year_index=i-1
while 1 do
if year_index+1 < count_years_stop then
if (years[year_index]-years[year_index+1]) == -1 then
break
end
end
head=head..sk.open_th..years[year_index]..sk.year_suffix.."</th>"
break
end
end
if style == "h" then
return head
end
-- values
item=sk.get_line_data(data, nuts_lau)
if item == nil then
mw.addWarning(sk.error_place)
end
-- get values
content=""
if style == "d" or style == "Y" or style == "V" or style == "P" then
one_step_year=""
one_step_values=""
one_step_progress=""
content="<td></td>\n"
for i=3,count_years_stop do
year_index=i-1
while 1 do
-- check the first item with delta = 1
if year_index+1 < count_years_stop then
if (years[year_index]-years[year_index+1]) == -1 then
one_step_year=one_step_year..sk.open_th..years[year_index]..sk.year_suffix.."</th>"
one_step_values=one_step_values..sk.open_td..sk.localised_number(item[i]).."</td>"
one_step_progress=one_step_progress.."<td></td>"
break
end
end
-- check the second item with delta = 1
if year_index > 1 then
if (years[year_index]-years[year_index-1]) == 1 then
one_step_year=one_step_year..sk.open_th..years[year_index]..sk.year_suffix.."</th>"
one_step_values=one_step_values..sk.open_td..sk.localised_number(item[i]).."</td>"
one_step_progress=one_step_progress..sk.open_td..sk.delta_progress(item[i-1], item[i]).."</td>"
content=content..sk.open_td..sk.delta_progress(item[i-2], item[i]).."</td>\n"
break
end
end
content=content..sk.open_td..sk.delta_progress(item[i-1], item[i]).."</td>\n"
break
end
end
if style == "Y" then
return one_step_year
end
if style == "V" then
return one_step_values
end
if style == "P" then
return one_step_progress
end
return content
end
content=""
for i=2,count_years_stop do
year_index=i-1
while 1 do
if year_index+1 < count_years_stop then
if (years[year_index]-years[year_index+1]) == -1 then
break
end
end
content=content..sk.open_td..sk.localised_number(item[i]).."</td>"
break
end
end
return content
end
function sk.sk(args)
local style=args.args[1] -- format
local nuts_lau=args.args[2] -- nuts / LAU, default: automatic
local code
local data
local index
local info
local item
local i_start
local i_start2
local i_end
local lang
local last_acces
local last_update
local place_info
local url_population
local url_area
local year
lang=mw.language.getContentLanguage()
-- select date line
nuts_lau=sk.constant_code(nuts_lau)
if nuts_lau == nil or nuts_lau == "" then
nuts_lau=sk.get_nuts_lua()
if nuts_lau == nil then
return ""
end
end
if style == "i" then
local parameters={args={nuts_lau}}
return sk.is_slovak(parameters)
end
if style == "e" then
i_start, i_end=string.find(nuts_lau, "_")
if i_start == nil then
return nuts_lau
else
return ""
end
end
-- select date line
if string.len(nuts_lau) == 12 then
data=mw.ext.data.get("Statistics of Slovak municipalities.tab")
else
data=mw.ext.data.get("Statistics of Slovak supmunicipalities.tab")
end
-- get NUTS/LUA for page
if style == "l" or style == "u" or style == "y" then
else
item=sk.get_line_data(data, nuts_lau)
if item == nil then
mw.addWarning(sk.error_place)
end
end
-- year
i_start, i_end=string.find(data.sources, "year: ")
year=string.sub(data.sources, i_start+6, i_start+9)
-- last acces
i_start, i_end=string.find(data.sources, "acces: ")
if i_start == nil then
i_start, i_end=string.find(data.sources, "access: ")
last_acces=string.sub(data.sources, i_start+8, i_start+17)
else
last_acces=string.sub(data.sources, i_start+7, i_start+16)
end
-- last update
i_start, i_end=string.find(data.sources, "update: ")
last_update=string.sub(data.sources, i_start+8, i_start+17)
-- url_population
i_start, i_end=string.find(data.sources, "http")
i_start2, i_end=string.find(string.sub(data.sources, i_start), " ")
i_start2=i_start+i_start2-1
url_population=string.sub(data.sources, i_start, i_start2)
-- url_area
i_start, i_end=string.find(data.sources, "http")
info=string.sub(data.sources, i_start+1)
i_start, i_end=string.find(info, "http")
i_start2, i_end=string.find(string.sub(info, i_start), " ")
i_start2=i_start+i_start2-1
url_area=string.sub(info, i_start, i_start2)
-- population_id
i_start, i_end=string.find(url_population, "/vbd_dem/")
info=string.sub(url_population, i_start+9)
i_start, i_end=string.find(info, "/")
population_id=string.sub(info, 1, i_start-1)
-- area_id
i_start, i_end=string.find(url_area, "/vbd_dem/")
info=string.sub(url_area, i_start+9)
i_start, i_end=string.find(info, "/")
area_id=string.sub(info, 1, i_start-1)
-- render
i_start, i_end = string.find(style, "%%")
if i_start == nil then
if style == "p" or style == "o" or style == "d" then
if item[2] then
if style == "p" then return sk.localised_number(item[2]) end
if style == "o" then return lang:formatNum(item[2]) end
if style == "d" then
if item[2] ~= 0 then
if item[3] and item[3] ~= 0 then
return sk.localised_number(item[2]/item[3])
end
end
end
end
return sk.none_value
end
if style == "a" then
if item[3] then
return sk.localised_number(item[3])
else
return sk.none_value
end
end
if style == "P" then return url_population end
if style == "A" then return url_area end
if style == "y" then return year end
if style == "l" then return last_acces end
if style == "u" then return last_update end
if style == "r" then return population_id end
if style == "b" then return area_id end
mw.addWarning(sk.error_code)
else
Output=style
Output=string.gsub(Output, "%%p", sk.localised_number(item[2]))
Output=string.gsub(Output, "%%P", url_population)
Output=string.gsub(Output, "%%a", sk.localised_number(item[3]))
Output=string.gsub(Output, "%%o", lang:formatNum(item[2]))
Output=string.gsub(Output, "%%A", url_area)
local density;
if item[2] == nil or item[2] == 0 then
density=sk.none_value;
else
density=sk.localised_number(item[2]/item[3])
end
Output=string.gsub(Output, "%%d", density)
Output=string.gsub(Output, "%%y", year)
Output=string.gsub(Output, "%%l", last_acces)
Output=string.gsub(Output, "%%u", last_update)
Output=string.gsub(Output, "%%r", population_id)
Output=string.gsub(Output, "%%b", area_id)
return Output
end
end
return sk