Jump to content

Module:MGT

From Wikipedia, the free encyclopedia
local p = {}

-- ==================================================
-- Province data (77 provinces, 3-letter codes)
-- ==================================================
local provinces = {
	BKK = { en = "Bangkok", th = "กรุงเทพมหานคร" },
	SPK = { en = "Samut Prakan", th = "สมุทรปราการ" },
	NTB = { en = "Nonthaburi", th = "นนทบุรี" },
	PTE = { en = "Pathum Thani", th = "ปทุมธานี" },
	AYA = { en = "Phra Nakhon Si Ayutthaya", th = "พระนครศรีอยุธยา" },
	ATG = { en = "Ang Thong", th = "อ่างทอง" },
	LBR = { en = "Lopburi", th = "ลพบุรี" },
	SBR = { en = "Sing Buri", th = "สิงห์บุรี" },
	CHN = { en = "Chai Nat", th = "ชัยนาท" },
	SRI = { en = "Saraburi", th = "สระบุรี" },

	CCO = { en = "Chachoengsao", th = "ฉะเชิงเทรา" },
	CBI = { en = "Chonburi", th = "ชลบุรี" },
	RYG = { en = "Rayong", th = "ระยอง" },
	CTI = { en = "Chanthaburi", th = "จันทบุรี" },
	TRT = { en = "Trat", th = "ตราด" },
	PCB = { en = "Prachinburi", th = "ปราจีนบุรี" },
	SKA = { en = "Sa Kaeo", th = "สระแก้ว" },

	NMA = { en = "Nakhon Ratchasima", th = "นครราชสีมา" },
	BUR = { en = "Buri Ram", th = "บุรีรัมย์" },
	SUR = { en = "Surin", th = "สุรินทร์" },
	SIS = { en = "Si Sa Ket", th = "ศรีสะเกษ" },
	UBN = { en = "Ubon Ratchathani", th = "อุบลราชธานี" },
	YAS = { en = "Yasothon", th = "ยโสธร" },
	CHA = { en = "Chaiyaphum", th = "ชัยภูมิ" },
	AMN = { en = "Amnat Charoen", th = "อำนาจเจริญ" },
	BKN = { en = "Bueng Kan", th = "บึงกาฬ" },

	NKI = { en = "Nong Khai", th = "หนองคาย" },
	LEI = { en = "Loei", th = "เลย" },
	UDN = { en = "Udon Thani", th = "อุดรธานี" },
	SKN = { en = "Sakon Nakhon", th = "สกลนคร" },
	NPM = { en = "Nakhon Phanom", th = "นครพนม" },
	KLS = { en = "Kalasin", th = "กาฬสินธุ์" },
	MKM = { en = "Maha Sarakham", th = "มหาสารคาม" },
	ROI = { en = "Roi Et", th = "ร้อยเอ็ด" },
	KKN = { en = "Khon Kaen", th = "ขอนแก่น" },
	NBR = { en = "Nong Bua Lamphu", th = "หนองบัวลำภู" },

	CMI = { en = "Chiang Mai", th = "เชียงใหม่" },
	LPG = { en = "Lamphun", th = "ลำพูน" },
	LPN = { en = "Lampang", th = "ลำปาง" },
	UTD = { en = "Uttaradit", th = "อุตรดิตถ์" },
	PRE = { en = "Phrae", th = "แพร่" },
	NAN = { en = "Nan", th = "น่าน" },
	CRI = { en = "Chiang Rai", th = "เชียงราย" },
	MSH = { en = "Mae Hong Son", th = "แม่ฮ่องสอน" },

	NWK = { en = "Nakhon Sawan", th = "นครสวรรค์" },
	UTI = { en = "Uthai Thani", th = "อุทัยธานี" },
	KPT = { en = "Kamphaeng Phet", th = "กำแพงเพชร" },
	TAK = { en = "Tak", th = "ตาก" },
	STI = { en = "Sukhothai", th = "สุโขทัย" },
	PLO = { en = "Phitsanulok", th = "พิษณุโลก" },
	PCH = { en = "Phichit", th = "พิจิตร" },
	PBI = { en = "Phetchabun", th = "เพชรบูรณ์" },

	PKB = { en = "Prachuap Khiri Khan", th = "ประจวบคีรีขันธ์" },
	PET = { en = "Phetchaburi", th = "เพชรบุรี" },
	RBR = { en = "Ratchaburi", th = "ราชบุรี" },
	KAN = { en = "Kanchanaburi", th = "กาญจนบุรี" },
	SSK = { en = "Samut Sakhon", th = "สมุทรสาคร" },
	SSN = { en = "Samut Songkhram", th = "สมุทรสงคราม" },
	NSA = { en = "Nakhon Pathom", th = "นครปฐม" },

	CPN = { en = "Chumphon", th = "ชุมพร" },
	RNG = { en = "Ranong", th = "ระนอง" },
	STO = { en = "Surat Thani", th = "สุราษฎร์ธานี" },
	PNG = { en = "Phang Nga", th = "พังงา" },
	PHK = { en = "Phuket", th = "ภูเก็ต" },
	KBV = { en = "Krabi", th = "กระบี่" },
	NST = { en = "Nakhon Si Thammarat", th = "นครศรีธรรมราช" },
	TRG = { en = "Trang", th = "ตรัง" },
	PLG = { en = "Phatthalung", th = "พัทลุง" },
	STN = { en = "Satun", th = "สตูล" },
	SKA2 = { en = "Songkhla", th = "สงขลา" },
	PAT = { en = "Pattani", th = "ปัตตานี" },
	YLA = { en = "Yala", th = "ยะลา" },
	NWT = { en = "Narathiwat", th = "นราธิวาส" },
}

--------------------------------------------------
-- Group labels
--------------------------------------------------
local groups = {
	C  = "Central",
	N  = "Northern",
	NE = "Northeastern",
	S  = "Southern",
	E  = "Eastern",
	W  = "Western"
}

--------------------------------------------------
-- Utilities
--------------------------------------------------
local function trim(v)
	if not v then return nil end
	return mw.text.trim(v)
end

local function formatHeight(m)
	m = tonumber(m)
	if not m then return "–" end

	local inches = m * 39.3701
	local ft = math.floor(inches / 12)
	local inch = math.floor((inches % 12) + 0.5)

	return string.format("%.2f m (%d ft %d in)", m, ft, inch)
end

local function getArg(args, i)
	return trim(args[i] or args[tostring(i)])
end

--------------------------------------------------
-- Main row renderer
--------------------------------------------------
function p.row(frame)
	local args = frame:getParent().args

	local idx = tonumber(getArg(args, 1)) or 0
	local code = string.format("MGT%02d", idx)

	local provCode = getArg(args, 2)
	local prov = provinces[provCode] or { en = provCode or "–" }

	local name   = getArg(args, 3) or "–"
	local age    = getArg(args, 4) or "–"
	local height = formatHeight(getArg(args, 5))
	local group  = groups[getArg(args, 6)] or "–"

	local provinceLink = "[[Miss Grand " .. prov.en .. "|" .. prov.en .. "]]"

	return
	"|- style=\"vertical-align:middle;\"\n" ..
	"| style=\"padding:0.15em; white-space:nowrap;\" | " .. code .. "\n" ..
	"| style=\"padding:0.15em;\" | " .. provinceLink .. "\n" ..
	"| style=\"padding:0.15em;\" | " .. name .. "\n" ..
	"| style=\"padding:0.15em; text-align:center;\" | " .. age .. "\n" ..
	"| style=\"padding:0.15em; white-space:nowrap;\" | " .. height .. "\n" ..
	"| style=\"padding:0.15em; text-align:center;\" | " .. group .. "\n"
end

return p