Module:Sandbox/Innesw/Infobox Australian place-upgrade
![]() | This module is rated as pre-alpha. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure. |
This module is the existing Infobox Australian place template (as of March 2024) transferred from normal template syntax to a Lua module, and then further modified.
The original transfer from template to module syntax is here.
This upgrade version of the module includes more substantive changes to the behaviour of the template, together with a few additional parameters. It is still in development, and further changes are likely.
New Parameters
There are some additional parameters implemented:
Parameter | Available for |type=
|
Description | Notes | Potential sources | Values |
---|---|---|---|---|---|
native_name_footnotes | all | A reference demonstrating the Indigenous name | Prerequisite parameters:
|
Wikitext (can contain links). Best when used with <ref></ref> tags and a citation template. | |
local_map_caption | all | Caption for the local map | Prerequisite parameters:
|
Plain text or wikitext. | |
logo_caption | all | Caption for the logo image | Prerequisite parameters:
|
Plain text or wikitext. |
General Changes
- the parameter
|short description=
is no longer supported - both error messages for the non-existence of (or unsupported values for)
|type=
and|state=
are in the heading of the infobox - new parameter native_name_footnotes
- removes the difference between
|type=protected
and other types in the call to {{coords}} - fixes the response to 'flag' parameters (local_map, force_national_map, use_lga_map, relief, _noautocat) so 'no' = <blank>, any other value = 'yes'
- the following values for
|map_type=
now have priority over the deprecated (but still implemented) parameters|force_national_map=
,|use_lga_map=
and|alternative_location_map=
|map_type=national
or|map_type=australia
- force the location map to be a map of Australia|map_type=state
- force the location map to be the state map|map_type=lga
- force the location map to be the map of the lga (as specified in|lga=
)|map_type=nomap
- suppresses any location map|map_type=(any other value)
- assumes the provided value is the name of a specific map to use as the location map
- the local_map (if shown) can have a caption, by setting
|local_map_caption=
- if
|pop=<blank>
, and therefore replaced by wikidata population data:- a value for
|pop2=
(with |pop2_year and |pop2_footnotes) is still shown - a value for
|poprank=
is still shown
- a value for
- the space between the density and its reference (footnotes) has been removed
- the logo (if shown) can have a caption, by setting
|logo_caption=
- the background colour of the headings for the climate and places-near sub-tables is now the same as the 'above' text (the infobox header) and the labels column
Changes to Categories
Auto Categories
- when adding to the [[Category:Populated places established in /year/]]
|established=
is now treated the same as|est=
- an article is placed in the category no matter what the
|type=
value (instead of only for|type=lga
)
Tracking Categories
- obsolete parameters (alt, alt2, image_alt2, imagesize, image_size, imagesize2, image_size2, logo_alt, logosize) are now simply ignored. Any use of them will add the page to [[Category:Pages using infobox Australian place with unknown parameters]]
- articles are added to a new category [[Pages using infobox Australian place with parameter issues]] if:
- there are formatting errors in the template call
|type=
or|state=
are missing- population (
|pop=
or|pop2=
) are set, but no related year (|pop_year=
or|pop2_year=
) is given - a parameter with an associated reference parameter (
|..._footnotes=
) is given, but the reference parameter is missing (eg:|pop=
is given, but no|pop_footnotes=
, or|elevation=
but no|elevation_footnotes=
) - there are density errors, ie: where
|pop=
and|area=
are both given, but one of them is not a number (so a density cannot be calculated) - the automatic categories are explicitly suppressed , ie:
|_noautocat=
is not blank
Testing
This module can be tested with a call to {{Sandbox/Innesw/Infobox_Australian_place-upgrade}}
, in general with any of the same parameters as the existing template.
There is a testcases page, comparing this module with the existing template.
-- This is Template:Infobox_Australian_place converted to Lua
-- With changes for the proposed upgrade.
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:Sandbox/Innesw/Australian_place_map-upgrade').main
local mapframe = require('Module:Mapframe')._main
local coordinates = require('Module:Coordinates').coordinsert
local populationFromWikidata = require('Module:Sandbox/Innesw/PopulationFromWikidata-upgrade')
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 isnot_blankorno(s)
if s == 'no' then
return false
else
return inb(s)
end
end
local function table_empty(t)
if type(t) ~= 'table' then
return true
end
for a, b in pairs(t) do
return false
end
return true
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 == 'settlement' then
colour = '#d7f9da'
elseif typ == 'locality' then
colour = '#f9de9d'
elseif typ == 'townandlocality' then
colour = '#f1f1b7'
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 = 'unk'
else
-- state not supplied
longname = ''
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 towns_catname(state)
state = string.lower(state)
local cname = ''
if state == 'sa' then
cname = 'Category:Towns in South Australia'
elseif state == 'vic' then
cname = 'Category:Towns in Victoria (state)'
elseif state == 'nsw' then
cname = 'Category:Towns in New South Wales'
elseif state == 'qld' then
cname = 'Category:Towns in Queensland'
elseif state == 'nt' then
cname = 'Category:Towns in the Northern Territory'
elseif state == 'wa' then
cname = 'Category:Towns in Western Australia'
elseif state == 'tas' then
cname = 'Category:Towns in Tasmania'
elseif state == 'act' then
cname = 'Category:Towns in the Australian Capital Territory'
elseif state == 'ni' then
cname = 'Category:Populated places in Norfolk Island'
end
return cname
end
local function pageExists(pagename)
local pageTitle = mw.title.makeTitle("", pagename)
if pageTitle then
return pageTitle.exists
end
return false
end
local function commonsDataFileExists(filename)
if mw.ext.data.get(filename) then
return true
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|')
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 == 'settlement' then
table.insert(sd, 'Settlement in')
elseif typ == 'locality' then
table.insert(sd, 'Locality in')
elseif typ == 'townandlocality' then
table.insert(sd, 'Town and Locality in')
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
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 state_long = state_longname(state)
local name = args.name or ''
InfoboxArgs.bodyclass = 'vcard'
InfoboxArgs.abovestyle = 'font-size: 125%; line-height: 1.3em; background-color:' .. backcolour(typ)
tmp = ''
if inb(name) then
tmp = 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 .. (args.native_name_footnotes or '') .. '</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_long ..'</span>'
end
if typ == '' then
tmp = '<span style="font-weight:normal; font-size:70%;">' .. lframe:expandTemplate{ title = 'Error', args = {'Error: <code>|type=</code> not defined ([[Template:Infobox Australian place#type|help]])'} } .. '</span><br />'
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 = '<span style="font-weight:normal; font-size:70%;">' .. lframe:expandTemplate{ title = 'Error', args = {'Error: unknown <code>|type=</code> value (=' .. typ .. ') ([[Template:Infobox Australian place#type|help]])'} } .. '</span><br />'
end
if inb(name) and state_long == '' then
tmp = tmp .. '<span style="font-weight:normal; font-size:70%;">' .. lframe:expandTemplate{ title = 'Error', args = {'Error: <code>|state=</code> not defined ([[Template:Infobox Australian place#type|help]])'} } .. '</span><br />'
elseif state_long == 'unk' then
tmp = tmp .. '<span style="font-weight:normal; font-size:70%;">' .. lframe:expandTemplate{ title = 'Error', args = {'Error: unknown <code>|state=</code> value (=' .. state .. ') ([[Template:Infobox Australian place#type|help]])'} } .. '</span><br />'
state_long = ''
end
InfoboxArgs.above = tmp
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 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, sizedefault = 'frameless', upright = upr, alt = ialt} }
end
InfoboxArgs.imagestyle = nil
InfoboxArgs.caption = (args.caption or '')
InfoboxArgs.captionstyle = nil
if inb(args.image2) then
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
end
InfoboxArgs.image2 = infoboxImage{args = {image = args.image2, 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.image3 = australianPlaceMap(lframe)
InfoboxArgs.image4 = nil
if isnot_blankorno(args.local_map) then
local mapFileName = 'Australia/Victoria.map' -- name .. ', ' .. state .. ' UCL.map' -- for testing of upgrade
if typ == 'townandlocality' and commonsDataFileExists(mapFileName) then
-- show a map containing:
-- the OSM data linked from the wikidata item for the article - assumed to be the locality (SAL)
-- the map of the UCL in commons data
InfoboxArgs.image4 = lframe:preprocess(mapframe{
args = {frame = 'yes',
plain = 'yes',
type = 'shape',
id = (args.local_map_id or ''),
["fill"] = '#ff0000',
["fill-opacity"] = 0.2,
type2 = 'data',
from2 = mapFileName
} } )
-- this caption may be over-written if the user sets local_map_caption
InfoboxArgs.caption4 = name .. ' <span style="color:red; font-weight:bold;">Locality (SAL)</span> & <span style="color:blue; font-weight:bold;">Urban area (UCL)</span>'
else
-- show the map of the OSM data linked from the wikidata item for the article
InfoboxArgs.image4 = lframe:expandTemplate{ title = 'Infobox mapframe', args = {zoom = (args.zoom or ''), id = (args.local_map_id or '')} }
end
end
InfoboxArgs.caption4 = (args.local_map_caption or '')
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 = ''
mtyp = 'city'
InfoboxArgs.data4 = coordinates{args = {args.coordinates, 'type:' .. mtyp, 'region:' .. coords_region(state)} } .. (args.coord_ref or '')
end
local poplist = false
InfoboxArgs.label5 = 'Population'
tmp = ''
if inb(args.pop) then
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
else
local wdpop = populationFromWikidata.ListForInfobox( {args = {type = typ, wikidata = (args.wikidata or '')} } )
if inb(wdpop) then
if inb(args.poprank) then
wdpop = wdpop .. ' ([[List of cities in Australia by population|' .. args.poprank .. ']])'
end
poplist = string.find(wdpop, '*', 1, true)
-- The <div> here prevents the output from populationFromWikidata appearing above the infobox instead of within it.
tmp = '<div>' .. wdpop .. '</div>'
end
end
InfoboxArgs.data5 = tmp
InfoboxArgs.label6 = ' '
tmp = ''
if inb(args.pop2) then
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 '')
if poplist then
tmp = '\n*' .. tmp
end
-- The <div> here prevents the output containing \n* (for bulleted list) appearing above the infobox instead of within it.
tmp = '<div>' .. tmp .. '</div>'
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
local upr = '0.8'
if inb(args.logo_upright) then
upr = args.logo_upright
end
InfoboxArgs.data28 = infoboxImage{args = {image = args.logo, sizedefault = 'frameless', upright = upr} }
end
InfoboxArgs.data29 = args.logo_caption or ''
InfoboxArgs.label30 = '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.data30 = tmp
end
InfoboxArgs.label31 = '<span style="white-space: nowrap">Managing authorities</span>'
if inb(args.managing_authorities) then
InfoboxArgs.data31 = lframe:expandTemplate{title = 'auto link', args = {args.managing_authorities} }
end
end
InfoboxArgs.label32 = 'Website'
if inb(args.url) then
InfoboxArgs.data32 = 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: ' .. backcolour(typ) .. '; border: 1px #FFF solid; text-align:center; width:33%;">' .. '\'\'\'Mean max temp\'\'\'' .. (args.maxtemp_footnotes or '') .. '</td>'
tmp = tmp .. '<td style="background-color: ' .. backcolour(typ) .. '; border: 1px #FFF solid; text-align:center; width:33%;">\'\'\'Mean min temp\'\'\'' .. (args.mintemp_footnotes or '') .. '</td>'
tmp = tmp .. '<td style="background-color: ' .. backcolour(typ) .. '; 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.data33 = 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-s'])
or inb(args['near-se']) 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:' .. backcolour(typ) .. '; 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 inb(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>'
tmp = tmp .. '<td style="text-align:center; vertical-align:middle; padding:3px 0px; width:34%; font-weight:bold;">' .. (args['near'] or name) .. '</td>'
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.data34 = tmp
InfoboxArgs.label35 = 'Footnotes'
InfoboxArgs.data35 = args.footnotes or ''
InfoboxArgs.label36 = 'See also'
if typ == 'protected' and inb(args.iucn_category) and state~= '' then
InfoboxArgs.data36 = state_protectedPage(state)
end
return infobox(InfoboxArgs)
end
local function categories(args)
local cats = {}
local typ = string.lower(args.type or '')
local state = string.lower(args.state or '')
local lga = (args.lga or '')
if mw.title.getCurrentTitle().namespace == 0 then
-- no categories are created except in article namespace
if inb(args._noautocat) then
-- suppress auto categories. Does not suppress the tracking categories.
else
local name = (args.name or '')
if typ == 'town' then
table.insert(cats, '[[' .. towns_catname(state) .. '|' .. name .. ']]')
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 typ == 'settlement' then
-- assumed no categories for settlements
elseif typ == 'locality' then
local cname = 'Localities of ' .. lga
if pageExists(cname) then
table.insert(cats, '[[' .. cname .. '|' .. name .. ']]')
end
elseif typ == 'townandlocality' then
table.insert(cats, '[[' .. towns_catname(state) .. '|' .. name .. ']]')
local cname = 'Localities of ' .. lga
if pageExists(cname) then
table.insert(cats, '[[' .. cname .. '|' .. name .. ']]')
end
end
if inb(args.established) or inb(args.est) then
if pageExists('Category:Populated places established in ' .. (args.established or args.est or '')) then
table.insert(cats, '[[Category:Populated places established in ' .. (args.established or args.est or '') .. '|' .. name .. ']]')
elseif pageExists('Category:Populated places established in the ' .. (args.established or args.est or '')) then
table.insert(cats, '[[Category:Populated places established in the ' .. (args.established or args.est or '') .. '|' .. name .. ']]')
end
if pageExists('Category:' .. (args.established or args.est or '') .. ' establishments in Australia') then
table.insert(cats, '[[Category:' .. (args.established or 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:Pages using infobox Australian place with parameter issues|1]]')
end
if (args.type or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|U]]')
end
if (args.state or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|S]]')
end
if inb(args.pop) then
if (args.pop_year or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|Y]]')
end
if (args.pop_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|P]]')
end
end
if inb(args.pop2) then
if (args.pop2_year or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|Y]]')
end
if (args.pop2_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|P]]')
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:Pages using infobox Australian place with parameter issues|D]]')
end
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
-- location map has been forced on by a specific parameter
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
-- for type = 'lga', forcing the location map off is redundant, so not tracked
else
-- location map has been forced on by some other value of map_type
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
-- location map has been suppressed, we need to track why
table.insert(cats, '[[Category:Pages using infobox Australian place with an explicitly suppressed location map]]')
end
end
if inb(args.established) or inb(args.est) then
if (args.established_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|E]]')
end
end
if inb(args.elevation) then
if (args.elevation_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|H]]')
end
end
if inb(args.area) then
if (args.area_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|A]]')
end
end
if inb(args.visitation) then
if (args.visitation_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|V]]')
end
end
if inb(args.maxtemp) then
if (args.maxtemp_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|C]]')
end
end
if inb(args.mintemp) then
if (args.mintemp_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|C]]')
end
end
if inb(args.rainfall) then
if (args.rainfall_footnotes or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|C]]')
end
end
if inb(args.timezone) then
if (args.utc or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|Z]]')
end
end
if inb(args.timezone-dst) then
if (args.utc-dst or '') == '' then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|Z]]')
end
end
if inb(args._noautocat) then
table.insert(cats, '[[Category:Pages using infobox Australian place with parameter issues|Q]]')
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_caption', 'local_map_id', 'location1', 'location2', 'location3', 'location4', 'location5', 'logo', 'logo_alt', 'logo_caption', 'logo_upright',
'managing_authorities', 'map_alt', 'map_type', 'maxtemp', 'maxtemp_footnotes', 'mayor', 'mayortitle', 'mintemp', 'mintemp_footnotes',
'name', 'native_name_footnotes', '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 args = getArgs(frame)
if table_empty(args) then
return ''
end
return shortDesc(args) .. ibox(args) .. categories(args)
end
return p