Module:MGT
Appearance
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