มอดูล:กล่องข้อมูล เหตุการณ์สภาพอากาศ/มาตราส่วน
หน้าตา
มอดูลนี้ได้รับการจัดอันดับว่าพร้อมใช้งานทั่วไป มีความสมบูรณ์แล้วและคิดว่าจะปราศจากข้อผิดพลาดและพร้อมสำหรับการใช้งานตามความเหมาะสม พร้อมจะกล่าวถึงในหน้าช่วยเหลือและแหล่งข้อมูลวิกิพีเดียอื่น ๆ ว่าเป็นตัวเลือกสำหรับผู้ใช้ใหม่ในการเรียนรู้ เพื่อลดภาระของเซิร์ฟเวอร์และเอาต์พุตที่ไม่ดี ควรปรับปรุงโดยการทดสอบที่กระบะทราย แทนที่จะแก้ไขแบบลองผิดลองถูกซ้ำ ๆ |
มอดูลนี้จะสร้างแถบมาตราส่วนสำหรับหน้าเอกสารกล่องย่อยขนาดกล่องข้อมูลเหตุการณ์สภาพอากาศโดยอัตโนมัติ และไม่ต้องใช้หน้ารองในการคำนวณหมวดหมู่
การใช้งาน
[แก้]{{#invoke:กล่องข้อมูล เหตุการณ์สภาพอากาศ/มาตราส่วน|main}}
คู่มือการใช้งานที่ปรากฏด้านบนนี้ดึงมาจาก มอดูล:กล่องข้อมูล เหตุการณ์สภาพอากาศ/มาตราส่วน/doc (แก้ | ประวัติ) ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (สร้าง | คัดลอก) และชุดทดสอบ (สร้าง) ของมอดูลนี้ หน้าย่อยของมอดูลนี้ |
local getArgs = require('มอดูล:Arguments').getArgs
local cats = require('มอดูล:Storm categories')
local p = {}
function p.main(frame)
local args = getArgs(frame, {
trim = true
})
return p._main(frame, args)
end
function p._main(frame, args)
local infoboxScale = args["scale"]
local basin = args["basin"]
function getCategory(winds)
templateArgs = {
categoryonly = "y",
winds = winds,
basin = basin
}
return frame:expandTemplate{ title = 'กล่องข้อมูล เหตุการณ์สภาพอากาศ/' .. infoboxScale, args = templateArgs }
end
local steps = {}
local start = getCategory(0)
local last = start
local lastMinimum = 0
for i = 0, 140 do
local category = getCategory(i)
if category ~= last then
if last == start then
-- first category
table.insert(steps, { last, nil, i - 1 })
else
table.insert(steps, { last, lastMinimum, i - 1 })
end
last = category
lastMinimum = i
end
end
table.insert(steps, { last, lastMinimum, nil })
function barCell(category, minimumWinds, maximumWinds)
local minKmh = minimumWinds and (1.852 * minimumWinds) or nil
local minMph = minimumWinds and (1.151 * minimumWinds) or nil
local maxKmh = maximumWinds and (1.852 * maximumWinds) or nil
local maxMph = maximumWinds and (1.151 * maximumWinds) or nil
local nameCell = mw.html.create("td")
:css("text-align", "center")
:css("background-color", "#" .. cats._color(category))
:wikitext("'''" .. cats._name(category, args['basin']) .. "'''<br/>")
local windsCell = mw.html.create("td")
:css("text-align", "center")
:css("vertical-align", "top")
if minimumWinds ~= nil and maximumWinds ~= nil then
windsCell:wikitext(
"''" .. minimumWinds .. "–" .. maximumWinds .. " นอต, "
.. math.floor(minKmh) .. "–" .. math.floor(maxKmh) .. " กม./ชม., "
.. math.floor(minMph) .. "–" .. math.floor(maxMph) .. " ไมล์/ชม.''"
)
elseif minimumWinds == nil then
windsCell:wikitext(
"''<" .. maximumWinds .. " นอต, <"
.. math.floor(maxKmh) .. " กม./ชม., <" .. math.floor(maxMph) .. " ไมล์/ชม.''"
)
elseif maximumWinds == nil then
windsCell:wikitext(
"''>" .. minimumWinds .. " นอต, >"
.. math.floor(minKmh) .. " กม./ชม., >" .. math.floor(minMph) .. " ไมล์/ชม.''"
)
end
return { nameCell, windsCell }
end
local nameBar = mw.html.create("tr")
local windsBar = mw.html.create("tr")
for i, v in ipairs(steps) do
local cells = barCell(v[1], v[2], v[3])
nameBar:node(cells[1])
windsBar:node(cells[2])
end
return tostring(
mw.html.create("table")
:addClass("wikitable")
:css("width", "100%")
:node(nameBar)
:node(windsBar)
)
end
return p