Módulo:TabelaAvisosTufão

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:TabelaAvisosTufão/doc

local getArgs = require('Module:Arguments').getArgs
local yesno = require("Module:Yesno")
local stormColor = require("Module:Categorias ciclone tropical")._color;
local zh = require("Module:Zh")._Zh
local p = {}
--------------------------------------------------------------------------------
-- Global functions
--------------------------------------------------------------------------------
function p.header(country, time)
				return mw.html.create("tr"):node(
								mw.html.create("th")
												:css("font-weight", "normal")
												:attr("colspan", 3)
												:wikitext("'''" .. country .. "'''" .. (
																time and
																				" (desde as " .. time .. ")" or ""
												))
				)
end
--------------------------------------------------------------------------------
---------------------------- COUNTRY-BASED WARNINGS ----------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- China
--
-- Storm signals in China are defined by the CMA.
--------------------------------------------------------------------------------
-- Note: v (in m/s) = 0.386B^(3/2), where B is the Beaufort force
function p.cma_signals(signal)
				if signal == "4" or signal == "blue" or signal == "b" or signal == "Azul" then
								return {
												level = 4,
												color = "#3265FE",
												name = "Alerta de tufão Azul",
												name_zh = "台风蓝色预警信号",
												image = "Blue typhoon alert - China.svg",
												details = "Média de [[Escala Beaufort|Força Beaufort]] 6 (44 km/h; 27 mph) "
																			.. "ou com velocidade mais alta na costa ou terra, com rajadas até força Beaufort 8 "
																			.. "(68 km/h; 42 mph), dentro de 24 horas."
								}
				elseif signal == "3" or signal == "yellow" or signal == "amarelo" or signal == "y" then
								return {
												level = 3,
												color = "#FAEC2C",
												name = "Aviso de Tufão Amarelo",
												name_zh = "台风黄色预警信号",
												image = "Yellow typhoon alert - China.svg",
												details = "Média de [[Escala Beaufort|Força Beaufort]] 8 (68 km/h; 42 mph) "
																			.. "ou com velocidade mais alta na costa ou terra, com rajadas até força Beaufort 10 "
																			.. "(95 km/h; 59 mph), dentro de 24 horas."
								}
				elseif signal == "2" or signal == "orange" or signal == "o" then
								return {
												level = 2,
												color = "#F68C1F",
												name = "Aviso de tufão Laranja",
												name_zh = "台风橙色预警信号",
												image = "Orange typhoon alert - China.svg",
												details = "Média de [[Escala Beaufort|Força Beaufort]] 10 (95 km/h; 59 mph) "
																			.. "ou com velocidade mais alta na costa ou terra, com rajadas até força Beaufort 12 "
																			.. "(125 km/h; 78 mph), dentro de 12 horas."
								}
				elseif signal == "1" or signal == "red" or signal == "r" then
								return {
												level = 1,
												color = "#D62F28",
												name = "Aviso de tufão vermelho",
												name_zh = "台风红色预警信号",
												image = "Red typhoon alert - China.svg",
												details = "Média de [[Escala Beaufort|Força Beaufort]] 12 (125 km/h; 78 mph) "
																			.. "ou com velocidade mais alta na costa ou terra, com rajadas até força Beaufort 14 "
																			.. "(158 km/h; 98 mph), dentro de 6 horas."
								}
				else
								return {
												level = 0,
												color = "#000000",
												name = "Nível de alerta de tufão desconhecido",
												name_zh = "台风未知预警信号",
												image = "Stop hand nuvola.svg",
												details = "Please make sure that the parameter is a valid signal. "
																			.. "Consulte a [[Predefinição:TabelaAvisoTufão#Hong Kong|documentação]] para mais detalhes."
								}
				end
end
function p.cma_level_row(signal)
				return mw.html.create("tr")
								:node(
												mw.html.create("td")
																:css("width", "700px")
																:css("text-align", "center")
																:attr("colspan", 3)
																:node(
																				mw.html.create("span")
																								:css("font-size", "large")
																								:css("font-weight", "bold")
																								:wikitext(signal.name)
																)
																:wikitext("<br/>" .. zh{["c"] = signal.name_zh, ["labels"] = "no"})
																:wikitext("<p>[[Imagem:" .. signal.image .. "|100px]]</p>")
																:node(
																				mw.html.create("p")
																								:css("margin", "0")
																								:wikitext(signal.details)
																)
								)
end
function p.china(outputTable, args)
				local CNsignal = args["CNsignal"] or args["CNsinal"]
				if CNsignal then
								-- Create the header
								outputTable:node(
												p.header("China", args["CNtime"] or args["CNtempo"])
								)
								local signalData = p.cma_signals(CNsignal)
								outputTable:node(p.cma_level_row(signalData))
								-- Create the footer
								local fonteCN = args["CNsource"] or args["CNfonte"]
								if fonteCN then
												outputTable:node(
																mw.html.create("tr"):node(
																				mw.html.create("td")
																								:attr("colspan", 3)
																								:wikitext("Fonte: " .. fonteCN)
																)
												)
								end
				end
end
--------------------------------------------------------------------------------
-- Hong Kong
--
-- Storm signals in Hong Kong are defined by the HKO.
--------------------------------------------------------------------------------
function p.hko_signals(signal, direction)
				if signal == 1 then
								return {
												name = "Sinal No. 01 - Sinal Alerta",
												image = "No. 01 Standby Signal.png",
												summary = "Um ciclone tropical está centrado dentro de 800&nbsp;km do território."
								}
				elseif signal == 3 then
								return {
												name = "Sinal No. 03 - Sinal de vento forte",
												image = "No. 03 Strong Wind Signal.png",
												summary = "Ventos fortes em geral sobre Hong Kong ao nível do mar esperados em 12 horas.",
												details = "Espere ventos fortes com velocidades sustentadas de 41–62&nbsp;km/h e rajadas até 110&nbsp;km/h."
								}
				elseif signal == 8 then
								local direction = (
												(direction == "ne" or direction == "noroeste") and "Northeast" or (
												(direction == "nw" or direction == "nordeste") and "Northwest" or (
												(direction == "se" or direction == "sudeste") and "Southeast" or (
												(direction == "sw" or direction == "sudoeste") and "Southwest" or (
																nil
												)))))
								if direction then
												return {
																name = "Sinal No. 08 - " .. direction .. " Sinal de Vendaval ou Tempestade",
																image = "No. 8 " .. direction .. " Gale or Storm Signal.png",
																summary = "Ventos de força vendaval ou tempestade esperados.",
																details = "Espere ventos fortes com velocidade sustentadas de 63–117&nbsp;km/h desde a direção de "
																				.. string.lower(direction) ..
																" rajadas e quadrante até 180&nbsp;km/h."
												}
								else
												return {
																name = "Sinal de direção inválido do Observatório de Hong Kong",
																image = "Stop hand nuvola.svg",
																summary = "Sinal No. 8 usado sem direção do vento válido.",
																details = "Use <code>8NE</code>, <code>8SE</code>, <code>8NW</code>, ou <code>8SW</code> em alternativa. "
																							.. "Consulte a [[Predefinição:TabelaAvisoTufão#Hong Kong|documentação]] para mais detalhes."
												}
								end
				elseif signal == 9 then
								return {
												name = "Sinal No. 09 - Sinal de Aumento de Vendaval ou Tempestade",
												image = "No. 09 Increasing Gale or Storm Signal.png",
												summary = "Ventos fortes ou tempestades estão aumentando ou espera-se que aumentem significativamente em força.",
												details = "Espere ventos fortes com velocidades sustentadas de 88–117&nbsp;km/h com rajadas mais fortes de 220&nbsp;km/h."
								}
				elseif signal == 10 then
								return {
												name = "Sinal No. 10 - Sinal Furacão",
												image = "No. 10 Hurricane Signal.png",
												summary = "Ventos de força de Furacão.",
												details = "Espere ventos fortes acima de 117 km/h e rajadas de mais de 220 km/h."
								}
				else
								return {
												name = "Sinal inválido Hong Kong Observatory",
												image = "Stop hand nuvola.svg",
												summary = "usado sem sinal de tempestade válido, parâmetro <code>HKsinal</code>.",
												details = "Por favor verifique que o parâmetro é um sinal válido parâmetro. "
																			.. "Consulte a [[Predefinição:TabelaAvisoTufão#Hong Kong|documentação]] para mais detalhes."
								}
				end
end
function p.hong_kong(outputTable, args)
				local HKsignal = args["HKsignal"] or args["HKsinal"]
				if HKsignal then
								-- Create the header
								outputTable:node(
												p.header("Hong Kong", args["HKtime"] or args["HKtempo"])
								)
								HKsignal = string.lower(HKsignal)
								local signal = nil
								if HKsignal == "1" then
												signal = p.hko_signals(1)
								elseif HKsignal == "3" then
												signal = p.hko_signals(3)
								elseif HKsignal == "8" then
												-- Provide the opportunity for an editor to see that a quadrant is
												-- required.
												signal = p.hko_signals(8)
								elseif HKsignal == "8nw" then
												signal = p.hko_signals(8, "nw")
								elseif HKsignal == "8ne" then
												signal = p.hko_signals(8, "ne")
								elseif HKsignal == "8sw" then
												signal = p.hko_signals(8, "sw")
								elseif HKsignal == "8se" then
												signal = p.hko_signals(8, "se")
								elseif HKsignal == "9" then
												signal = p.hko_signals(9)
								elseif HKsignal == "10" then
												signal = p.hko_signals(10)
								else
												signal = p.hko_signals(HKsignal)
								end
								outputTable
												:node(
																mw.html.create("tr"):node(
																				mw.html.create("td")
																								:css("width", "700px")
																								:css("text-align", "center")
																								:attr("colspan", 3)
																								:node(
																												mw.html.create("span")
																																:css("font-size", "large")
																																:css("font-weight", "bold")
																																:wikitext(signal.name)
																								)
																								:wikitext("<br/>[[Imagem:" .. signal.image .. "|80px]]<br/>")
																								:node(
																												mw.html.create("p")
																																:wikitext(signal.summary)
																								)
																								:node(
																												mw.html.create("p")
																																:css("font-style", "italic")
																																:wikitext(signal.details)
																								)
																)
												)
								-- Create the footer
								local fonteHK = args["Hksource"] or args["Hkfonte"]
								if fonteHK then
												outputTable:node(
																mw.html.create("tr"):node(
																				mw.html.create("td")
																								:attr("colspan", 3)
																								:wikitext("Fonte: " .. fonteHK)
																)
												)
								end
				else
								return ""
				end
end
--------------------------------------------------------------------------------
-- Philippines
--
-- Storm signals in the Philippines are defined by the PAGASA.
--------------------------------------------------------------------------------
p.pagasa_signals = {
				s5 = {
								name = "Sinal #5",
								color = "#CD77CD",
								speed = "mais que 220&nbsp;km/h (137&nbsp;mph)",
								time = "12 horas"
				},
				s4 = {
								name = "Sinal #4",
								color = "#FF6060",
								speed = "171–220&nbsp;km/h (106–137&nbsp;mph)",
								time = "12 horas"
				},
				s3 = {
								name = "Sinal #3",
								color = "#FFAA00",
								speed = "121–170&nbsp;km/h (74–105&nbsp;mph)",
								time = "18 horas"
				},
				s2 = {
								name = "Sinal #2",
								color = "#FFF200",
								speed = "61–120&nbsp;km/h (38–73&nbsp;mph)",
								time = "24 horas"
				},
				s1 = {
								name = "Sinal #1",
								color = "#00AAFF",
								speed = "30–60&nbsp;km/h (20–37&nbsp;mph)",
								time = "36 horas"
				}
}
function p.pagasa_row(signal, data, args)
				return mw.html.create("tr")
								:node(
												mw.html.create("td")
																:css("width", "12.6em")
																:css("text-align", "center")
																:css("vertical-align", "middle")
																:css("color", "black")
																:css("background-color", p.pagasa_signals[signal].color)
																:wikitext("'''" .. p.pagasa_signals[signal].name .. "'''<br/>")
																:wikitext(
																				"''Ventos de  " .. p.pagasa_signals[signal].speed .. (
																								yesno(args["PHhistorical"] or args["PHhistorico"]) and "" or " são " .. (
																												yesno(args["PHactive"] or args["PHativo"]) and "prevalentes ou " or ""
																								) .. "esperados para ocorrer dentro " ..
																												p.pagasa_signals[signal].time
																				)  .. ".''"
																)
								)
								:node(
												mw.html.create("td")
																:css("vertical-align", "middle")
																:wikitext("\n" .. data .. "\n")
								)
end
function p.philippines(outputTable, args)
				local PH1 = args["PH1"]
				local PH2 = args["PH2"]
				local PH3 = args["PH3"]
				local PH4 = args["PH4"]
				local PH5 = args["PH5"]
				if PH1 or PH2 or PH3 or PH4 or PH5 then
								-- Create the header
								outputTable:node(
												p.header("Filipinas", args["PHtime"] or args["PHtempo"])
								)
								if PH5 then
												outputTable:node(p.pagasa_row("s5", PH5, args))
								end
								if PH4 then
												outputTable:node(p.pagasa_row("s4", PH4, args))
								end
								if PH3 then
												outputTable:node(p.pagasa_row("s3", PH3, args))
								end
								if PH2 then
												outputTable:node(p.pagasa_row("s2", PH2, args))
								end
								if PH1 then
												outputTable:node(p.pagasa_row("s1", PH1, args))
								end
								-- Create the footer
								local fontePH = args["PHsource"] or args["PHfonte"]
								if fontePH then
												outputTable:node(
																mw.html.create("tr"):node(
																				mw.html.create("td")
																								:attr("colspan", 3)
																								:wikitext("Fonte: " .. fontePH)
																)
												)
								end
				else
								return ""
				end
end
function p.taiwan(outputTable, args, frame)
				if args["TW"] then
								-- Create the header
								outputTable:node(
												p.header("Taiwan", args["TWtime"] or args["TWtempo"])
								)
								-- Graphic cell
								local graphic = mw.html.create("td")
												:attr("rowspan", "4")
												:css("padding-right", "32px")
												:css("white-space", "nowrap")
												:css("box-sizing", "border-box")
												:node(
																-- Red block
																mw.html.create("div")
																				:css("display", "inline-block")
																				:css("height", "64px")
																				:css("width", "24px")
																				:css("margin-right", "16px")
																				:css("background-color", "red")
																				:css("vertical-align", "top")
												)
												:wikitext(
																-- Icon
																"[[Imagem:CWB Typhoon Warning Icon.svg|64px|alt=Sea and Land Typhoon Warning icon]]"
												)
								local content = mw.html.create("td")
												:node(
																mw.html.create("span")
																				:css("font-size", "large")
																				:css("font-weight", "bold")
																				:wikitext("Aviso Tufão de Mar e Terra")
												)
												:node(
																mw.html.create("p")
																				:wikitext("Um aviso de mar e terra foi emitido para as seguintes áreas.")
												)
												:node(frame:expandTemplate{ title = 'div col', args = { colwidth = "10em" } }) -- No module equivalent
												:wikitext("\n" .. args["TW"] .. "\n")
												:node(frame:expandTemplate{ title = 'div col end' }) -- No module equivalent
												:node(
																mw.html.create("p")
																				:wikitext("''Vento esperados mais fortes que 55 km/h dentro de 18 horas.''")
												)
								-- Create the inner table
								local iTable = mw.html.create("table")
								iTable:node(
												mw.html.create("tr")
																:node(graphic)
																:node(content)
								)
								outputTable:node(
												mw.html.create("tr"):node(
																mw.html.create("td")
																				:attr("colspan", "3")
																				:node(iTable)
												)
								)
								-- Create the footer
								local fonteTW = args["TWsource"] or args["TWfonte"]
								if fonteTW then
												outputTable:node(
																mw.html.create("tr"):node(
																				mw.html.create("td")
																								:attr("colspan", 3)
																								:wikitext("Fonte: " .. fonteTW)
																)
												)
								end
				else
								return ""
				end
end
--------------------------------------------------------------------------------
---------------------------- AGENCY-BASED WARNINGS -----------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- National Weather Service, Tiyan, Guam
--
-- Storm signals (Typhoon and Tropical Storm Warnings, etc.) issued by the NWS.
--------------------------------------------------------------------------------
p.nws_criteria = {
				tyw = {
								name = "Aviso Tufão",
								color = stormColor("cat5"),
								description = "Condições de tufão de ($speed) esperadas dentro $duration.",
								speed = "mais que 118&nbsp;km/h (74&nbsp;mph)",
								duration = "24 horas"
				},
				tya = {
								name = "Alerta Tufão",
								color = stormColor("cat4"),
								description = "Condições de tufão de ($speed) possíveis dentro de $duration.",
								speed = "mais que 118&nbsp;km/h (74&nbsp;mph)",
								duration = "24 horas"
				},
				trw = {
								name = "Aviso Tempestade Tropical",
								color = stormColor("cat3"),
								description = "Condições de tempestade tropical de ($speed) esperadas dentro de $duration.",
								speed = "88–117&nbsp;km/h (55–73&nbsp;mph)",
								duration = "24 horas"
				},
				tra = {
								name = "Alerta Tempestade Tropical",
								color = stormColor("cat2"),
								description = "Condições possíveis de tempestade tropical de ($speed) dentro de $duration.",
								speed = "88–117&nbsp;km/h (55–73&nbsp;mph)",
								duration = "24 horas"
				},
				gaw = {
								name = "Aviso Vendaval",
								color = stormColor("ts"),
								description = "Condições de vendaval de ($speed) esperadas dentro de $duration.",
								speed = "63-87&nbsp;km/h (39–72&nbsp;mph)",
								duration = "24 horas"
				}
}
function p.nws_row(signal, data)
				return mw.html.create("tr")
								:node(
												mw.html.create("td")
																:css("width", "14em")
																:css("text-align", "center")
																:css("vertical-align", "middle")
																:css("color", "black")
																:css("background-color", "#" .. p.nws_criteria[signal].color)
																:wikitext("'''" .. p.nws_criteria[signal].name .. "'''<br/>")
																:wikitext(
																				"''" ..
																								string.gsub(
																												string.gsub(
																																p.nws_criteria[signal].description,
																																"%$speed",
																																p.nws_criteria[signal].speed
																												),
																												"%$duration",
																												p.nws_criteria[signal].duration
																								)
																				.. "''"
																)
								)
								:node(
												mw.html.create("td")
																:css("vertical-align", "middle")
																:wikitext("\n" .. data .. "\n")
								)
end
function p.nws(outputTable, args)
				local TYW = args["TYW"]
				local TYA = args["TYA"]
				local TRW = args["TRW"] or args["TSW"]
				local TRA = args["TRA"] or args["TSA"]
				local GAW = args["GAW"]
				if TYW or TYA or TRW or TRA or GAW then
								-- Create the header
								outputTable:node(
												p.header("Serviço Nacional de Meteorologia (NWS)", args["NWStime"] or args["NWStempo"])
								)
								if TYW then
												outputTable:node(p.nws_row("tyw", TYW))
								end
								if TYA then
												outputTable:node(p.nws_row("tya", TYA))
								end
								if TRW then
												outputTable:node(p.nws_row("trw", TRW))
								end
								if TRA then
												outputTable:node(p.nws_row("tra", TRA))
								end
								if GAW then
												outputTable:node(p.nws_row("gaw", GAW))
								end
								-- Create the footer
								local fonteNWS = args["NWSsource"] or args["NWSfonte"]
								if fonteNWS then
												outputTable:node(
																mw.html.create("tr"):node(
																				mw.html.create("td")
																								:attr("colspan", 3)
																								:wikitext("Fonte: " .. fonteNWS)
																)
												)
								end
				else
								return ""
				end
end
--------------------------------------------------------------------------------
-- Template invocation features
--------------------------------------------------------------------------------
function p.main(frame)
				local args = getArgs(frame, {
								trim = true,
								removeBlanks = true
				})
				return p._main(frame, args)
end
function p._main(frame, args)
				-- Generate table
				local finalTable = mw.html.create("table")
								:attr("class", "wikitable typhoon-warnings-table")
				if yesno(args["float"] or  args["flutuar"]) then
								finalTable:css("float", args["align"] or "left")
				elseif yesno(args["demo"]) then
								finalTable:css("float", "right")
				end
				if args["width"] then
								finalTable:css("width", args["width"] or args["largura"])
				end
				-- Save the table prior to row insertion
				local premake = tostring(finalTable);
				-- Generate rows
				p.china(finalTable, args)
				p.hong_kong(finalTable, args)
				p.philippines(finalTable, args)
				p.taiwan(finalTable, args, frame)
				p.nws(finalTable, args)
				-- Save the table after row insertion
				local postmake = tostring(finalTable)
				-- If there is no difference between the table before insertion and after
				-- insertion, it is fair to assume that there were no arguments given.
				if postmake == premake then
								finalTable:node(
												mw.html.create("tr"):node(
																mw.html.create("td")
																				:attr("colspan", 3)
																				:css("color", "black")
																				:css("background-color", "#" .. stormColor("td"))
																				:wikitext("Sem '''Alertas ou Avisos de ciclones tropicais''' emitidos neste momento.")
												)
								)
								postmake = tostring(finalTable)
				end
				-- Output
				return tostring(postmake)
								.. (yesno(args["clear"] or args["limpar"]) and ("\n" .. frame:expandTemplate{
												title = "limpar"
								}) or "")
end
return p