Module:Jct/city/sandbox

From Wikipedia, the free encyclopedia
local p = {}

local concat = table.concat
local insert = table.insert


local city
local location
local areadab
local countydab
local state
local pageContainsLink

local function stateName(args)
	local AUSabbrs = {NT = "Northern Territory", WA = "Western Australia"}
	
	local data = mw.loadData("Module:Jct/statename")
	local abbr = args.state or args.province
	local country = args.country
	if country == 'AUS' then
		return AUSabbrs[abbr] or data[abbr]
	else
		return data[abbr]
	end
end

local function generateText(num, insertPrefix)
	local parts
	if insertPrefix then
		if num == 1 then
			parts = {"– "}
		else
			parts = {", "}
		end
	end
	
	if location then
		insert(parts, location)
		return concat(parts)
	end
	
	if not pageContainsLink then
	    insert(parts, "[[" .. city)
		if areadab then
			insert(parts, " (" .. areadab .. ")")
		end
		if countydab then
			insert(parts, ", " .. countydab .. " County")
		end
		if state then
			insert(parts, ", " .. state)
		end
		insert(parts, "|" .. city .. "]]")
		
		return concat(parts)
	else 
		insert(parts, city)
		return concat(parts)
	end
end

local function _location(args, num, page)
	city = args["city" .. num]
	location = args["location" .. num]
	areadab = args["areadab" .. num]
	countydab = args["countydab" .. num]
	
	if not(city or location) then
		return ''
	end
	
	if pageContainsLink == false then
		local place = city or location
		
		local jctString = "{{jct/sandbox|" .. ".+" .. place .. ".+" .. "}}"
		local linkString = generateText(num, false)
		
		local firstPosition = strfind(page, linkString)
		
		if firstPosition then
			local secondPosition = strfind(page, linkString, firstPosition)
			if secondPosition or string.find(page, jctString) then 
				pageContainsLink = true
			end
		end
	end
	
	return generateText(num, true)
end

function p.city(args, page)
	state = stateName(args)
	local cities = {}
	local locationCount = 1
	repeat
		local location = _location(args, locationCount, page)
		insert(cities, location)
		local empty = (location == '')
		locationCount = locationCount + 1
	until empty
	return concat(cities)
end

return p