Module:Sandbox/Innesw/Infobox Australian place
Appearance
This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
This module is the existing Infobox Australian place template (as of March 2024) transferred from normal template syntax to a Lua module.
There are a few minor changes from the behaviour of the original template:
- shows different error texts for unrecognised vs empty
|type=
and|state=
parameters - removes the space between density and density_footnotes
- if calculating density, and
|pop=
or|area=
are non-numeric, does not output any density (instead of showing an error) - the colon at the end of the title of the places-near sub-table is removed
- except in article namespace, all categories - including tracking categories - are suppressed
- removes any response to
|short description=
Usage
[edit]To test this module, call {{Sandbox/Innesw/Infobox Australian place}}
with any of the same parameters as the existing template.
Testcases
[edit]There is a testcases page, comparing this module with the existing template.
-- This is Template:Infobox_Australian_place converted to Lua
local p = {}
local lframe
local shortDescription = require('Module:GetShortDescription').main
local plainText = require('Module:Plain text')._main
local infobox = require('Module:Infobox').infobox
local getArgs = require('Module:Arguments').getArgs
local infoboxImage = require('Module:InfoboxImage').InfoboxImage
local australianPlaceMap = require('Module:Australian place map').main
local coordinates = require('Module:Coordinates').coordinsert
local populationFromWikidata = require('Module:PopulationFromWikidata').ListForInfobox
local url = require('Module:URL')._url
local check = require('Module:Check for unknown parameters')._check
local lang = mw.language.getContentLanguage()
local function inb(s) -- is not blank
return s and s ~= ''
end
local function backcolour(typ)
local colour
if typ == 'city' then
colour = '#f9f6d2'
elseif typ == 'town' then
colour = '#e9f9d2'
elseif typ == 'suburb' then
colour = '#f9e2d2'
elseif typ == 'lga' then
colour = '#d2d5f9'
elseif typ == 'region' then
colour = '#e6c4fb'
elseif typ == 'cadastral' then
colour = '#ffffe0'
elseif typ == 'protected' then
colour = 'transparent'
elseif typ == 'other' then
colour = 'transparent'
else
colour = '#ccc'
end
return colour
end
local function state_longname(state)
state = string.lower(state)
local longname
if state == 'sa' then
longname = '[[South Australia]]'
elseif state == 'vic' then
longname = '[[Victoria (state)|Victoria]]'
elseif state == 'nsw' then
longname = '[[New South Wales]]'
elseif state == 'qld' then
longname = '[[Queensland]]'
elseif state == 'nt' then
longname = '[[Northern Territory]]'
elseif state == 'wa' then
longname = '[[Western Australia]]'
elseif state == 'tas' then
longname = '[[Tasmania]]'
elseif state == 'act' then
longname = '[[Australian Capital Territory]]'
elseif state == 'jbt' then
longname = '[[Jervis Bay Territory]]'
elseif state == 'ni' then
longname = '[[Norfolk Island]]'
elseif state == 'au' then
longname = 'Australia'
elseif inb(state) then
-- state supplied, but with unrecognised value
longname = lframe:expandTemplate{title = 'error', args = {'Error: unknown <code>|state=</code> value (=' .. state .. ') ([[Template:Infobox Australian place#state|help]])'} }
else
-- state not supplied
longname = lframe:expandTemplate{title = 'error', args = {'Error: <code>|state=</code> not defined ([[Template:Infobox Australian place#state|help]])'} }
end
return longname
end
local function coords_region(state)
state = string.lower(state)
local region
if state == 'sa' then
region = 'AU-SA'
elseif state == 'vic' then
region = 'AU-VIC'
elseif state == 'nsw' then
region = 'AU-NSW'
elseif state == 'qld' then
region = 'AU-QLD'
elseif state == 'nt' then
region = 'AU-NT'
elseif state == 'wa' then
region = 'AU-WA'
elseif state == 'tas' then
region = 'AU-TAS'
elseif state == 'act' then
region = 'AU-ACT'
elseif state == 'jbt' then
region = 'AU-JBT'
elseif state == 'ni' then
region = 'NF'
else
region = 'AU'
end
return region
end
local function location(loc, dir, dist, list)
if not (inb(loc) and inb(dist)) then
return ''
end
local sloc = {}
if list then
table.insert(sloc, '<li>')
end
table.insert(sloc, lframe:expandTemplate{title = 'convert', args = {dist, 'km', 'mi', 0, abbr='on'} })
if inb(dir) then
table.insert(sloc, ' ' .. dir .. ' of ')
else
table.insert(sloc, ' from ')
end
if inb(loc) then
table.insert(sloc, lframe:expandTemplate{title = 'auto link', args = {loc} })
end
if list then
table.insert(sloc, '</li>')
end
return table.concat(sloc)
end
local function lgas_article(state)
state = string.lower(state)
local art
if state == 'sa' then
art = '[[Local government areas of South Australia|LGA(s)]]'
elseif state == 'vic' then
art = '[[Local government in Victoria|LGA(s)]]'
elseif state == 'nsw' then
art = '[[Local government areas of New South Wales|LGA(s)]]'
elseif state == 'qld' then
art = '[[Local government areas of Queensland|LGA(s)]]'
elseif state == 'nt' then
art = '[[Local government areas of the Northern Territory|LGA(s)]]'
elseif state == 'wa' then
art = '[[Local government areas of Western Australia|LGA(s)]]'
elseif state == 'tas' then
art = '[[Local government areas of Tasmania|LGA(s)]]'
elseif state == 'act' then
art = 'District'
else
art = '[[Local government in Australia|LGA(s)]]'
end
return art
end
local function pageExists(pagename)
local pageTitle = mw.title.makeTitle("", pagename)
if pageTitle then
return pageTitle.exists
end
return false
end
local function state_protectedPage(state)
state = string.lower(state)
local prot
if state == 'sa' then
prot = '[[Protected areas of South Australia]]'
elseif state == 'vic' then
prot = '[[Protected areas of Victoria]]'
elseif state == 'nsw' then
prot = '[[Protected areas of New South Wales|Protected areas of<br />New South Wales]]'
elseif state == 'qld' then
prot = '[[Protected areas of Queensland]]'
elseif state == 'nt' then
prot = '[[Protected areas of the Northern Territory]]'
elseif state == 'wa' then
prot = '[[List of protected areas of Western Australia|List of protected areas of<br />Western Australia]]'
elseif state == 'tas' then
prot = '[[Protected areas of Tasmania]]'
elseif state == 'act' then
prot = '[[List of Australian Capital Territory protected areas|Australian Capital Territory<br />protected areas]]'
else
prot = nil
end
return prot
end
local function shortDesc(args)
local sd = {}
-- only set short description in article namespace, and for articles where not already set
local title = mw.title.getCurrentTitle()
if title.namespace == 0 and shortDescription({name=title.text, only='explicit'}) == '' then
table.insert(sd, '{{short description|')
if inb(args['short description']) then
table.insert(sd, args['short description'])
else
local typ = (args.type or ''):lower()
if typ == 'city' then
table.insert(sd, 'City in')
elseif typ == 'town' then
table.insert(sd, 'Town in')
elseif typ == 'suburb' then
local subb
local city = args.city or ''
local lga = args.lga or ''
if city ~= '' then
subb = 'Suburb of ' .. city .. ','
elseif lga ~= '' then
subb = 'Suburb of ' .. lga .. ','
else
subb = 'Suburb in'
end
table.insert(sd, plainText(subb))
elseif typ == 'lga' then
table.insert(sd, 'Local government area in')
elseif typ == 'region' then
table.insert(sd, 'Region in')
elseif typ == 'cadastral' then
table.insert(sd, 'Cadastral in')
elseif typ == 'protected' then
table.insert(sd, 'Protected area in')
else
table.insert(sd, 'Place in')
end
local state = (args.state or ''):lower()
if state == 'sa' then
table.insert(sd, ' South Australia')
elseif state == 'vic' then
table.insert(sd, ' Victoria, Australia')
elseif state == 'nsw' then
table.insert(sd, ' New South Wales, Australia')
elseif state == 'qld' then
table.insert(sd, ' Queensland, Australia')
elseif state == 'nt' then
table.insert(sd, ' the Northern Territory, Australia')
elseif state == 'wa' then
table.insert(sd, ' Western Australia')
elseif state == 'tas' then
table.insert(sd, ' Tasmania, Australia')
elseif state == 'act' then
table.insert(sd, ' Australian Capital Territory')
elseif state == 'jbt' then
table.insert(sd, ' the Jervis Bay Territory, Australia')
elseif state == 'ni' then
table.insert(sd, ' Norfolk Island, Australia')
elseif state == 'au' then
table.insert(sd, ' Australia')
else
table.insert(sd, ' Australia')
end
end
table.insert(sd, '|noreplace}}')
end
return table.concat(sd)
end
local function ibox(args)
local tmp
local InfoboxArgs = {}
local typ = (args.type or ''):lower()
local city = args.city or ''
local state = (args.state or ''):lower()
local name = args.name or ''
InfoboxArgs.bodyclass = 'vcard'
InfoboxArgs.abovestyle = 'font-size: 125%; line-height: 1.3em; background-color:' .. backcolour(typ)
if inb(name) then
tmp = '<span class="fn org locality">' .. name .. '</span><br />'
if inb(args.native_name) then
tmp = tmp .. '<div style="font-weight:normal;font-size:88%;"'
if inb(args.native_name_lang) then
tmp = tmp .. ' lang="' .. args.native_name_lang .. '"'
end
tmp = tmp .. '>' .. args.native_name .. '</div>'
end
tmp = tmp .. '<span style="font-weight:normal; font-size:88%" class="region">'
if city ~= '' then
tmp = tmp .. lframe:expandTemplate{title = 'auto link', args = { city } } .. ', '
end
tmp = tmp .. state_longname(state) ..'</span>'
InfoboxArgs.above = tmp
end
InfoboxArgs.aboveclass = 'adr'
InfoboxArgs.subheaderstyle = 'font-size: 100%;'
if typ == 'protected' then
InfoboxArgs.subheader1 = lframe:expandTemplate{ title = 'IUCN banner', args = { (args.iucn_category or ''), (args.iucn_ref or '') } }
end
if inb(args.image) then
local siz
if inb(args.image_size) then
siz = args.image_size
elseif inb(args.imagesize) then
siz = args.imagesize
end
local upr = '1.23'
if inb(args.image_upright) then
upr = args.image_upright
end
local ialt
if inb(args.image_alt) then
ialt = args.image_alt
elseif inb(args.alt) then
ialt = args.alt
end
InfoboxArgs.image = infoboxImage{args = {image = args.image, size = siz, sizedefault = 'frameless', upright = upr, alt = ialt} }
end
InfoboxArgs.imagestyle = nil
InfoboxArgs.caption = (args.caption or '')
InfoboxArgs.captionstyle = nil
if inb(args.image2) then
local siz
if inb(args.image_size2) then
siz = args.image_size2
elseif inb(args.imagesize2) then
siz = args.imagesize2
end
local upr = '1.23'
if inb(args.image2_upright) then
upr = args.image2_upright
end
local ialt
if inb(args.image2_alt) then
ialt = args.image2_alt
elseif inb(args.alt2) then
ialt = args.alt2
end
InfoboxArgs.image2 = infoboxImage{args = {image = args.image2, size = siz, sizedefault = 'frameless', upright = upr, alt = ialt} }
end
InfoboxArgs.caption2 = (args.caption2 or '')
InfoboxArgs.headerstyle = 'background-color:#ddf;'
InfoboxArgs.labelstyle = 'width:40%; background-color:' .. backcolour(typ)
InfoboxArgs.datastyle = nil
InfoboxArgs.data1 = australianPlaceMap(lframe)
InfoboxArgs.data2 = nil
if inb(args.local_map) then
InfoboxArgs.data2 = lframe:expandTemplate{ title = 'Infobox mapframe', args = {zoom = (args.zoom or ''), id = (args.local_map_id or '')} }
end
InfoboxArgs.label3 = '<span style="white-space: nowrap">Nearest town or city</span>'
InfoboxArgs.data3 = nil
if typ == 'protected' then
InfoboxArgs.data3 = lframe:expandTemplate{ title = 'auto link', args = {(args.nearest_town_or_city or '') } }
end
InfoboxArgs.label4 = '[[Geographic coordinate system|Coordinates]]'
InfoboxArgs.data4 = nil
if inb(args.coordinates) then
-- the type: and region: parameters to Module:Coordinates seem to be over-ridden by this code, even though they could be in the {{coords}} call that produces the content of the coordinates parameter
local mtyp = ''
if typ == 'protected' then
mtyp = 'landmark'
else
mtyp = 'city'
end
InfoboxArgs.data4 = coordinates{args = {args.coordinates, 'type:' .. mtyp, 'region:' .. coords_region(state)} } .. (args.coord_ref or '')
end
InfoboxArgs.label6 = 'Population'
tmp = nil
if inb(args.pop) then
if inb(args.pop2) then
tmp = '<ul style="margin-top: 0px; margin-bottom: 0px;"><li>'
else
tmp = ''
end
if tonumber(args.pop) then
-- pop looks like a number
tmp = tmp .. lang:formatNum(tonumber(args.pop))
else
-- just show it
tmp = tmp .. args.pop
end
if inb(args.pop_year) then
tmp = tmp .. ' (' .. args.pop_year .. ')'
end
tmp = tmp .. (args.pop_footnotes or '')
if inb(args.poprank) then
tmp = tmp .. ' ([[List of cities in Australia by population|' .. args.poprank .. ']])'
end
if inb(args.pop2) then
tmp = tmp .. '</li><li> '
if tonumber(args.pop2) then
-- pop2 looks like a number
tmp = tmp .. lang:formatNum(tonumber(args.pop2))
else
-- just show it
tmp = tmp .. args.pop2
end
if inb(args.pop2_year) then
tmp = tmp .. ' (' .. args.pop2_year .. ')'
end
tmp = tmp .. (args.pop2_footnotes or '')
tmp = tmp .. '</li></ul>'
end
else
local wdpop = populationFromWikidata{args = {type = typ, wikidata = (args.wikidata or '')} }
if inb(wdpop) then
-- The <div> here prevents the output from populationFromWikidata appearing above the infobox instead of within it.
-- I don't know why, but the output from {{#invoke:PopulationFromWikidata | ListForInfobox }} in the template version is treated properly,
-- but the output from calling require('Module:PopulationFromWikidata').ListForInfobox in this module is not, requiring this fix.
tmp = '<div>' .. wdpop .. '</div>'
end
end
InfoboxArgs.data6 = tmp
InfoboxArgs.label7 = ' • Density'
tmp = nil
if inb(args.density) then
tmp = lframe:expandTemplate{ title = 'convert', args = {args.density, '/km2', '/sqmi', abbr='on'} } .. ' ' .. (args.density_footnotes or '')
else
if inb(args.pop) and lang:parseFormattedNumber(args.pop) and inb(args.area) then
tmp = lframe:expandTemplate{ title = 'Pop density', args = {lang:parseFormattedNumber(args.pop), args.area, 'km2', 'sqmi'} } .. ' ' .. (args.density_footnotes or '')
end
end
InfoboxArgs.data7 = tmp
InfoboxArgs.label8 = 'Established'
tmp = nil
if inb(args.established) then
tmp = args.established .. (args.established_footnotes or '')
elseif inb(args.est) then
tmp = args.est .. (args.established_footnotes or '')
end
InfoboxArgs.data8 = tmp
InfoboxArgs.label9 = 'Abolished'
InfoboxArgs.data9 = args.abolished or ''
InfoboxArgs.label10 = '[[Gazetteer of Australia|Gazetted]]'
InfoboxArgs.data10 = args.gazetted or ''
InfoboxArgs.label11 = '[[Postcodes in Australia|Postcode(s)]]'
InfoboxArgs.data11 = args.postcode or ''
InfoboxArgs.label12 = 'Elevation'
if inb(args.elevation) then
InfoboxArgs.data12 = lframe:expandTemplate{ title = 'convert', args = {args.elevation, 'm', 'ft', 0, abbr='on'} } .. (args.elevation_footnotes or '')
end
InfoboxArgs.label13 = 'Area'
if inb(args.area) then
InfoboxArgs.data13 = lframe:expandTemplate{ title = 'convert', args = {args.area, 'km2', 'sqmi', 1, abbr='on'} } .. (args.area_footnotes or '')
end
InfoboxArgs.label14 = '[[Time in Australia|Time zone]]'
if inb(args.timezone) then
InfoboxArgs.data14 = args.timezone .. ' ' .. '([[UTC' .. (args.utc or '') .. ']])'
end
InfoboxArgs.label15 = ' • Summer ([[Daylight saving time|DST]])'
if inb(args['timezone-dst']) then
InfoboxArgs.data15 = args['timezone-dst'] .. ' ' .. '([[UTC' .. (args['utc-dst'] or '') .. ']])'
end
InfoboxArgs.label16 = (args.mayortitle or 'Mayor')
if typ == 'lga' and inb(args.mayor) then
InfoboxArgs.data16 = args.mayor
end
InfoboxArgs.label17 = 'Location'
tmp = ''
if inb(args.dist2) then
tmp = '<ul style="margin-top: 0px; margin-bottom: 0px;">'
tmp = tmp .. location(args.location1, args.dir1, args.dist1, true)
tmp = tmp .. location(args.location2, args.dir2, args.dist2, true)
tmp = tmp .. location(args.location3, args.dir3, args.dist3, true)
tmp = tmp .. location(args.location4, args.dir4, args.dist4, true)
tmp = tmp .. location(args.location5, args.dir5, args.dist5, true)
tmp = tmp .. '</ul>'
elseif inb(args.location1) then
tmp = location(args.location1, args.dir1, args.dist1, false)
end
InfoboxArgs.data17 = tmp
InfoboxArgs.label18 = lgas_article(state)
tmp = nil
if inb(args.lga) then
local lga2 = args.lga2 or ''
if lga2 ~= '' then
tmp = '<ul style="margin-top: 0px; margin-bottom: 0px;"><li>'
else
tmp = ''
end
tmp = tmp .. lframe:expandTemplate{title = 'auto link', args = {args.lga} }
if lga2 ~= '' then
tmp = tmp .. '</li><li>' .. lframe:expandTemplate{title = 'auto link', args = {lga2} } .. '</li>'
end
if inb(args.lga3) then
tmp = tmp .. '<li>' .. lframe:expandTemplate{title = 'auto link', args = {args.lga3} } .. '</li>'
end
if inb(args.lga4) then
tmp = tmp .. '<li>' .. lframe:expandTemplate{title = 'auto link', args = {args.lga4} } .. '</li>'
end
if inb(args.lga5) then
tmp = tmp .. '<li>' .. lframe:expandTemplate{title = 'auto link', args = {args.lga5} } .. '</li>'
end
if lga2 ~= '' then
tmp = tmp .. '</ul>'
end
end
InfoboxArgs.data18 = tmp
InfoboxArgs.label19 = 'Council seat'
InfoboxArgs.data19 = args.seat or ''
InfoboxArgs.label20 = '[[List of regions of Australia|Region]]'
if inb(args.region) then
InfoboxArgs.data20 = lframe:expandTemplate{title = 'auto link', args = {args.region} }
end
InfoboxArgs.label21 = '[[Lands administrative divisions of Australia|County]]'
if inb(args.county) then
InfoboxArgs.data21 = lframe:expandTemplate{title = 'auto link', args = {args.county} }
end
InfoboxArgs.label22 = '[[Parish (administrative division)|Parish]]'
InfoboxArgs.data22 = args.parish or ''
if typ == 'cadastral' then
InfoboxArgs.label23 = '[[Hundred (county division)|Hundred]]'
InfoboxArgs.data23 = args.hundred or ''
InfoboxArgs.label24 = '[[Hundred (county division)|Hundred (former)]]'
InfoboxArgs.data24 = args.former_hundred or ''
InfoboxArgs.label25 = '[[Lands administrative divisions of New South Wales|Division]]'
InfoboxArgs.data25 = args.division or ''
end
if state == 'act' or state == 'nt' or state == 'jbt' then
InfoboxArgs.label26 = '[[Electorates of the Australian states and territories|Territory electorates(s)]]'
else
InfoboxArgs.label26 = '[[Electorates of the Australian states and territories|State electorate(s)]]'
end
tmp = nil
if inb(args.stategov) then
local stategov2 = (args.stategov2 or '')
if stategov2 ~= '' then
tmp = '<ul style="margin-top: 0px; margin-bottom: 0px;"><li>'
else
tmp = ''
end
tmp = tmp .. args.stategov
if stategov2 ~= '' then
tmp = tmp .. '</li><li>' .. stategov2 .. '</li>'
end
if inb(args.stategov3) then
tmp = tmp .. '<li>' .. args.stategov3 .. '</li>'
end
if inb(args.stategov4) then
tmp = tmp .. '<li>' .. args.stategov4 .. '</li>'
end
if inb(args.stategov5) then
tmp = tmp .. '<li>' .. args.stategov5 .. '</li>'
end
if stategov2 ~= '' then
tmp = tmp .. '</ul>'
end
end
InfoboxArgs.data26 = tmp
InfoboxArgs.label27 = '[[Divisions of the Australian House of Representatives|Federal division(s)]]'
tmp = nil
if inb(args.fedgov) then
local fedgov2 = args.fedgov2 or ''
if fedgov2 ~= '' then
tmp = '<ul style="margin-top: 0px; margin-bottom: 0px;"><li>'
else
tmp = ''
end
tmp = tmp .. args.fedgov
if fedgov2 ~= '' then
tmp = tmp .. '</li><li>' .. fedgov2 .. '</li>'
end
if inb(args.fedgov3) then
tmp = tmp .. '<li>' .. args.fedgov3 .. '</li>'
end
if inb(args.fedgov4) then
tmp = tmp .. '<li>' .. args.fedgov4 .. '</li>'
end
if fedgov2 ~= '' then
tmp = tmp .. '</ul>'
end
end
InfoboxArgs.data27 = tmp
if inb(args.logo) then
local siz
if inb(args.logosize) then
siz = args.logosize
end
local upr = '0.8'
if inb(args.logo_upright) then
upr = args.logo_upright
end
local lalt
if inb(args.logo_alt) then
lalt = args.logo_alt
end
InfoboxArgs.data28 = infoboxImage{args = {image = args.logo, size = siz, sizedefault = 'frameless', upright = upr, alt = lalt} }
end
InfoboxArgs.label29 = 'Visitation'
if typ == 'protected' then
tmp = nil
if inb(args.visitation_num) then
if tonumber(args.visitation_num) then
-- visitation_num looks like a number
tmp = lang:formatNum(tonumber(args.visitation_num))
else
-- just show it
tmp = args.visitation_num
end
if inb(args.visitation_year) then
tmp = tmp .. ' (in ' .. args.visitation_year .. ')'
end
tmp = tmp .. (args.visitation_footnotes or '')
InfoboxArgs.data29 = tmp
end
InfoboxArgs.label30 = '<span style="white-space: nowrap">Managing authorities</span>'
if inb(args.managing_authorities) then
InfoboxArgs.data30 = lframe:expandTemplate{title = 'auto link', args = {args.managing_authorities} }
end
end
InfoboxArgs.label31 = 'Website'
if inb(args.url) then
InfoboxArgs.data31 = url(args.url, name) .. ' '
end
tmp = nil
if inb(args.maxtemp) or inb(args.mintemp) or inb(args.rainfall) then
tmp = '<table cellpadding=4 cellspacing=0 style="width:100%; border: 1px #ddd solid;">'
tmp = tmp .. '<tr class=mergedrow>'
tmp = tmp .. '<td style="background-color:#f0f0ff;border: 1px #FFF solid; text-align:center; width:33%;">' .. '\'\'\'Mean max temp\'\'\'' .. (args.maxtemp_footnotes or '') .. '</td>'
tmp = tmp .. '<td style="background-color:#f0f0ff;border: 1px #FFF solid; text-align:center; width:33%;">\'\'\'Mean min temp\'\'\'' .. (args.mintemp_footnotes or '') .. '</td>'
tmp = tmp .. '<td style="background-color:#f0f0ff;border: 1px #FFF solid; text-align:center; width:33%;">\'\'\'Annual rainfall\'\'\'' .. (args.rainfall_footnotes or '') .. '</td>'
tmp = tmp .. '</tr>'
tmp = tmp .. '<tr style="border: 1px #FFF solid" class=mergedrow>'
tmp = tmp .. '<td style="padding: 2px 0px; text-align:center; width:33%;">'
if inb(args.maxtemp) then
tmp = tmp .. lframe:expandTemplate{ title = 'convert', args = {args.maxtemp, 'C', 'F', 0, disp='br'} } .. '</td>'
else
tmp = tmp .. '?</td>'
end
tmp = tmp .. '<td style="padding: 2px 0px; text-align:center; width:33%;">'
if inb(args.mintemp) then
tmp = tmp .. lframe:expandTemplate{ title = 'convert', args = {args.mintemp, 'C', 'F', 0, disp='br'} } .. '</td>'
else
tmp = tmp .. '?</td>'
end
tmp = tmp .. '<td style="padding: 2px 0px; text-align:center; width:33%;">'
if inb(args.rainfall) then
tmp = tmp .. lframe:expandTemplate{ title = 'convert', args = {args.rainfall, 'mm', 'in', 1, disp='br', abbr='on'} } .. '</td>'
else
tmp = tmp .. '?</td>'
end
tmp = tmp .. '</tr></td></table>'
end
InfoboxArgs.data32 = tmp
tmp = nil
if inb(args['near'])
or inb(args['near-nw'])
or inb(args['near-n'])
or inb(args['near-ne'])
or inb(args['near-w'])
or inb(args['near-e'])
or inb(args['near-sw'])
or inb(args['near-se'])
or inb(args['near-s']) then
tmp = '<table cellpadding=4 cellspacing=3 style="width:100%; border: 1px #ddd solid;">'
tmp = tmp .. '<tr class=mergedrow><td colspan=3 style="background-color:#f0f0ff;padding: 2px 0px; text-align:center;">\'\'\''
if typ == 'cadastral' then
tmp = tmp .. '[[Lands administrative divisions of Australia|Lands administrative divisions]]'
elseif typ == 'lga' then
tmp = tmp .. '[[Local government in Australia|LGAs]]'
elseif typ == 'suburb' then
if city ~= '' then
if pageExists('List of ' .. city .. ' suburbs') then
tmp = tmp .. '[[List of ' .. city .. ' suburbs|Suburbs]]'
elseif pageExists('Category:Suburbs of the City of ' .. city) then
tmp = tmp .. '[[Category:Suburbs of the City of ' .. city .. '|Suburbs]]'
elseif pageExists('Category:Suburbs of ' .. city) then
tmp = tmp .. '[[Category:Suburbs of ' .. city .. '|Suburbs]]'
else
tmp = tmp .. 'Suburbs'
end
else
tmp = tmp .. 'Suburbs'
end
else
tmp = tmp .. 'Localities'
end
tmp = tmp .. ' around '
if name ~= '' then
tmp = tmp .. name
else
tmp = tmp .. lframe:expandTemplate{ title = 'PAGENAMEBASE'}
end
tmp = tmp .. '\'\'\'</td></tr>'
tmp = tmp .. '<tr class=mergedrow>'
tmp = tmp .. '<td style="text-align:center; padding:3px 0px; width:33%;">' .. (args['near-nw'] or '') .. '</td>'
tmp = tmp .. '<td style="text-align:center; padding:3px 0px; width:34%;">' .. (args['near-n'] or '') .. '</td>'
tmp = tmp .. '<td style="text-align:center; padding:3px 0px; width:33%;">' .. (args['near-ne'] or '') .. '</td>'
tmp = tmp .. '</tr><tr class=mergedrow>'
tmp = tmp .. '<td style="text-align:center; vertical-align:middle; padding:3px 0px; width:33%;">' .. (args['near-w'] or '') .. '</td>'
if inb(args['near']) then
tmp = tmp .. '<td style="text-align:center; vertical-align:middle; padding:3px 0px; width:34%; font-weight:bold;">' .. args['near'] .. '</td>'
else
tmp = tmp .. '<td style="text-align:center; vertical-align:middle; padding:3px 0px; width:33%; font-weight:bold;">' .. name .. '</td>'
end
tmp = tmp .. '<td style="text-align:center; vertical-align:middle; padding:3px 0px; width:33%;">' .. (args['near-e'] or '') .. '</td>'
tmp = tmp .. '</tr><tr class=mergedrow>'
tmp = tmp .. '<td style="text-align:center; padding:3px 0px; width:33%;">' .. (args['near-sw'] or '') .. '</td>'
tmp = tmp .. '<td style="text-align:center; padding:3px 0px; width:34%;">' .. (args['near-s'] or '') .. '</td>'
tmp = tmp .. '<td style="text-align:center; padding:3px 0px; width:33%;">' .. (args['near-se'] or '') .. '</td>'
tmp = tmp .. '</tr></table>'
end
InfoboxArgs.data33 = tmp
InfoboxArgs.label34 = 'Footnotes'
InfoboxArgs.data34 = args.footnotes or ''
InfoboxArgs.label35 = 'See also'
if typ == 'protected' and inb(args.iucn_category) and state~= '' then
InfoboxArgs.data35 = state_protectedPage(state)
end
tmp = nil
if typ == '' then
tmp = lframe:expandTemplate{ title = 'Error', args = {'Error: <code>|type=</code> not defined ([[Template:Infobox Australian place#type|help]])'} }
elseif not (typ == 'city' or typ == 'town' or typ == 'suburb' or typ == 'lga' or typ == 'region' or typ == 'cadastral' or typ == 'protected' or typ == 'other') then
tmp = lframe:expandTemplate{ title = 'Error', args = {'Error: unknown <code>|type=</code> value (=' .. typ .. ') ([[Template:Infobox Australian place#type|help]])'} }
end
InfoboxArgs.data36 = tmp
return infobox(InfoboxArgs)
end
local function categories(args)
local cats = {}
local typ = string.lower(args.type or '')
local state = string.lower(args.state or '')
if mw.title.getCurrentTitle().namespace == 0 then
-- no categories are created except in article namespace
if inb(args._noautocat) then
-- suppress auto categories. Note: does not suppress the tracking categories
else
local name = (args.name or '')
if typ == 'town' then
if state == 'sa' then
table.insert(cats, '[[Category:Towns in South Australia|' .. name .. ']]')
elseif state == 'vic' then
table.insert(cats, '[[Category:Towns in Victoria (state)|' .. name .. ']]')
elseif state == 'nsw' then
table.insert(cats, '[[Category:Towns in New South Wales|' .. name .. ']]')
elseif state == 'qld' then
table.insert(cats, '[[Category:Towns in Queensland|' .. name .. ']]')
elseif state == 'nt' then
table.insert(cats, '[[Category:Towns in the Northern Territory|' .. name .. ']]')
elseif state == 'wa' then
table.insert(cats, '[[Category:Towns in Western Australia|' .. name .. ']]')
elseif state == 'tas' then
table.insert(cats, '[[Category:Towns in Tasmania|' .. name .. ']]')
elseif state == 'act' then
table.insert(cats, '[[Category:Towns in the Australian Capital Territory|' .. name .. ']]')
elseif state == 'ni' then
table.insert(cats, '[[Category:Populated places in Norfolk Island|' .. name .. ']]')
end
elseif typ == 'suburb' then
local city = args.city or ''
if pageExists('Category:Suburbs of the City of ' .. city) then
table.insert(cats, '[[Category:Suburbs of the City of ' .. city .. '|' .. name .. ']]')
elseif pageExists('Category:Suburbs of ' .. city) then
table.insert(cats, '[[Category:Suburbs of ' .. city .. '|' .. name .. ']]')
else
if state == 'sa' and pageExists('Category:Suburbs of ' .. city .. ', South Australia') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', South Australia|' .. name .. ']]')
elseif state == 'vic' and pageExists('Category:Suburbs of ' .. city .. ', Victoria') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', Victoria|' .. name .. ']]')
elseif state == 'nsw' and pageExists('Category:Suburbs of ' .. city .. ', New South Wales') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', New South Wales|' .. name .. ']]')
elseif state == 'qld' and pageExists('Category:Suburbs of ' .. city .. ', Queensland') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', Queensland|' .. name .. ']]')
elseif state == 'nt' and pageExists('Category:Suburbs of ' .. city .. ', Northern Territory') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', Northern Territory|' .. name .. ']]')
elseif state == 'wa' and pageExists('Category:Suburbs of ' .. city .. ', Western Australi') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', Western Australia|' .. name .. ']]')
elseif state == 'tas' and pageExists('Category:Suburbs of ' .. city .. ', Tasmania') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', Tasmania|' .. name .. ']]')
elseif state == 'act' and pageExists('Category:Suburbs of ' .. city .. ', ACT') then
table.insert(cats, '[[Category:Suburbs of ' .. city .. ', ACT|' .. name .. ']]')
end
end
elseif inb(args.est) and typ == 'lga' then
if pageExists('Category:Populated places established in ' .. (args.est or '')) then
table.insert(cats, '[[Category:Populated places established in ' .. (args.est or '') .. '|' .. name .. ']]')
elseif pageExists('Category:Populated places established in the ' .. (args.est or '')) then
table.insert(cats, '[[Category:Populated places established in the ' .. (args.est or '') .. '|' .. name .. ']]')
elseif pageExists('Category:' .. (args.est or '') .. ' establishments in Australia') then
table.insert(cats, '[[Category:' .. (args.est or '') .. ' establishments in Australia|' .. name .. ']]')
end
end
end
-- Tracking categories
if args['1'] then
-- The '1' parameter occurs when there is a missing equals sign, or spurious pipes. Usually harmless, but can mask other issues, so it is better to track them.
table.insert(cats, '[[Category:Australian place articles using missing parameters|1]]')
end
if (args.type or '') == '' then
table.insert(cats, '[[Category:Australian place articles using missing parameters|U]]')
end
if (args.state or '') == '' then
table.insert(cats, '[[Category:Australian place articles using missing parameters|S]]')
end
if inb(args.pop) then
if (args.pop_year or '') == '' then
table.insert(cats, '[[Category:Australian place articles with no population year]]')
end
if (args.pop_footnotes or '') == '' then
table.insert(cats, '[[Category:Australian place articles with no population footnotes]]')
end
end
if inb(args.pop2) then
if (args.pop2_year or '') == '' then
table.insert(cats, '[[Category:Australian place articles with no population year]]')
end
if (args.pop2_footnotes or '') == '' then
table.insert(cats, '[[Category:Australian place articles with no population footnotes]]')
end
end
if (args.density or '') == '' and inb(args.pop) and inb(args.area) then
if lang:parseFormattedNumber(args.pop) and type(args.area) == 'number' then
-- density calculation should be OK
else
table.insert(cats, '[[Category:Australian place articles with density errors]]')
end
end
if args.imagesize or args.image2size or args.imagesize2 or args.image_alt2 then
table.insert(cats, '[[Category:Australian place articles using missing parameters|I]]')
end
if args.logosize then
table.insert(cats, '[[Category:Australian place articles using missing parameters|L]]')
end
if args.official_site then
table.insert(cats, '[[Category:Australian place articles using missing parameters|O]]')
end
if args.coordinates then
if typ == 'lga' then
if string.lower(args.map_type or '') == '' or string.lower(args.map_type or '') == 'auto' then
if inb(args.alternative_location_map) or inb(args.force_national_map) or inb(args.use_lga_map) then
table.insert(cats, '[[Category:Pages using infobox Australian place with lga type and location map]]')
else
table.insert(cats, '[[Category:Pages using infobox Australian place with an implicitly suppressed location map]]')
end
else
table.insert(cats, '[[Category:Pages using infobox Australian place with lga type and location map]]')
end
elseif string.lower(args.map_type or '') == 'nomap' then
table.insert(cats, '[[Category:Pages using infobox Australian place with an explicitly suppressed location map]]')
end
end
table.insert(cats, check({
unknown='[[Category:Pages using infobox Australian place with unknown parameters|_VALUE_' .. lframe:expandTemplate{title = 'PAGENAME'} .. ']]',
preview='Page using [[Template:Infobox Australian place]] with unknown parameter "_VALUE_"',
ignoreblank='y',
'_noautocat',
'abolished', 'alternative_location_map', 'area', 'area_footnotes',
'caption', 'caption2', 'city', 'coord_ref', 'coordinates ', 'county',
'density', 'density_footnotes', 'dir1', 'dir2', 'dir3', 'dir4', 'dir5', 'dist1', 'dist2', 'dist3', 'dist4', 'dist5', 'division',
'elevation', 'elevation_footnotes', 'est', 'established', 'established_footnotes',
'fedgov', 'fedgov2', 'fedgov3', 'fedgov4', 'footnotes', 'force_national_map', 'former_hundred', 'gazetted', 'hundred',
'image', 'image_alt', 'image_upright', 'image2', 'image2_alt', 'image2_upright', 'iucn_category', 'iucn_ref',
'lga', 'lga2', 'lga3', 'lga4', 'lga5', 'local_map', 'local_map_id', 'location1', 'location2', 'location3', 'location4', 'location5', 'logo', 'logo_upright',
'managing_authorities', 'map_alt', 'map_type', 'maxtemp', 'maxtemp_footnotes', 'mayor', 'mayortitle', 'mintemp', 'mintemp_footnotes',
'name', 'native_name_lang', 'native_name', 'near', 'near-e', 'nearest_town_or_city', 'near-n', 'near-ne', 'near-nw', 'near-s', 'near-se', 'near-sw', 'near-w',
'parish', 'pop', 'pop_footnotes', 'pop_year', 'pop2', 'pop2_footnotes', 'pop2_year', 'poprank', 'postcode', 'pushpin_label_position', 'pushpin_map_caption',
'rainfall', 'rainfall_footnotes', 'region', 'relief', 'seat', 'state', 'stategov', 'stategov2', 'stategov3', 'stategov4', 'stategov5',
'timezone', 'timezone-dst', 'type', 'url', 'use_lga_map', 'utc', 'utc-dst',
'visitation_footnotes', 'visitation_num', 'visitation_year', 'wikidata', 'zoom'
}, args))
end
return table.concat(cats)
end
function p.main(frame)
lframe = frame
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return shortDesc(args) .. ibox(args) .. categories(args)
end
return p