PageSourceSearch

https://defesacivil.blumenau.sc.gov.br/static/breaknews/breaknews.js

js blumenau.sc.gov.br collected 2026-09-24 09:31:15 UTC 17,285 bytes, 480 lines download raw bytes

1//-----------------------------------
2//ANTIGO - VOLTOU --- INICIO
3function downloadTemperatura(){
4    $.get(URL_BREAKNEWS_TEMPERATURA, function( data ) {
5        //let dados=JSON.parse(data);
6        let dados = dataToJson(data);
7        downloadBreakNewsNivelRio();
8        drawBreakNewsTemp(dados);
9    });
10}
11
12function drawBreakNewsTemp(dados){
13    breakTemperatura='';
14    if(dados){
15        let temperatura = dados[dados.length-1];
16        if(temperatura){
17            breakTemperatura=' <i class="fa fa-thermometer-three-quarters" aria-hidden="true"></i> Temperatura Atual: '+numeroBR(temperatura.valor)+'°C '+breakNewsDot();
18        }
19    }
20}
21
22function dataToJson(data){
23    let ret = data;
24    try{
25        ret =JSON.parse(data);  
26    } catch (e) {
27        ret = data;
28    }
29    return ret;
30}
31
32function downloadBreakNews(){
33    try{
34        $.get(URL_BREAKNEWS_SIT_ATU, function( data ) {
35            let dados1=data;
36            $.get(URL_BREAKNEWS_RIO, function( data ) {
37                let dados2=data;
38                drawBreakNewsNivel(dados2);
39            });
40            drawBreakNews(dados1);
41        });
42    }finally{
43        $.get(URL_BREAKNEWS_SIT_ATU, function( data ) {
44            //let dados=JSON.parse(data);
45            //let dados = dataToJson(data);
46            let dados = dataToJson(data);
47            downloadBreakNewsNivelRio();
48            drawBreakNews(dados);
49        });
50    }
51
52//    $.get(URL_BREAKNEWS_SIT_ATU, function( data ) {
53//        let dados1=data;
54//        $.get(URL_BREAKNEWS_RIO, function( data ) {
55//            let dados2=data;
56//            drawBreakNewsNivel(dados2);
57//        });
58//        drawBreakNews(dados1);
59//    });
60
61
62//    $.get(URL_BREAKNEWS_SIT_ATU, function( data ) {
63//        let dados=JSON.parse(data);
64//        downloadBreakNewsNivelRio();
65//        drawBreakNews(dados);
66//    });
67
68}
69
70var breakNewsCorpo='';
71var breakNivel='';
72var breakSituacao='';
73var breakTemperatura='';
74
75function downloadBreakNewsNivelRio(){
76    $.get(URL_BREAKNEWS_RIO, function( data ) {
77        //let dados=JSON.parse(data);
78        let dados = dataToJson(data);
79        drawBreakNewsNivel(dados);
80    });
81}
82
83function repaintBreakNews(){
84    breakNewsCorpo='Situação Atual em Blumenau - '+breakNivel+breakSituacao+breakTemperatura;
85    document.getElementById('breaknews_corpo').innerHTML=breakNewsCorpo;
86}
87
88function drawBreakNews(dados){
89    maximoIndicador(dados);
90    breakSituacao='';
91    breakSituacao+='Atualização: '+formatDtBr(dados.datahoraAtualizacao)+breakNewsDot();
92    dados.dados.map(function(umDado) {
93        if(umDado.tipo=='cch'){
94            breakSituacao+='<i class="fa fa-cloud" aria-hidden="true"></i> '
95        }
96        if(umDado.tipo=='pes'){
97            breakSituacao+='<i class="fa fa-industry" aria-hidden="true"></i> ';
98        }
99
100        breakSituacao+=umDado.tipoNome+breakNewsDot();
101        umDado.sitregioes.map(function(umTipo){
102            breakSituacao+='Região: '+umTipo.regiao.nome+' ';
103
104            let cond=umTipo.condicao;
105            breakSituacao+='<span class="breaknews_condicao" style="background-color:'+cond.cor_fundo+'; color: '+cond.cor_fonte+'">'+cond.condicao+'</span>'+breakNewsDot();
106        });
107    });
108
109}
110
111function maximoIndicador(dados){
112    let condicaoMaxima={nivel:0};
113    dados.dados.map(function(umDado) {
114        breakSituacao+=umDado.tipoNome+breakNewsDot();
115        umDado.sitregioes.map(function(umTipo){
116            let cond=umTipo.condicao;
117            if(cond.nivel > condicaoMaxima.nivel){
118                condicaoMaxima=cond;
119            }
120        });
121    });
122    if(condicaoMaxima.nivel>0){
123        let breaknews_status = document.getElementById('breaknews_status')
124        breaknews_status.style.color = condicaoMaxima.cor_fonte;
125        breaknews_status.style.backgroundColor = condicaoMaxima.cor_fundo;
126        document.getElementById('breaknews_wrap').style.border= 'solid 1px #'+condicaoMaxima.cor_fundo;
127        document.getElementById('breaknews_status').innerHTML = condicaoMaxima.condicao;
128    }
129}
130
131function formatDtBr(umDt){
132	let dt = new Date(umDt);
133	return dt.toLocaleDateString()+' '+dt.toLocaleTimeString().substr(0,5);
134}
135
136function numeroBR(num){
137    return (num)?(''+num.toFixed(2)).replace('.',','):'';
138}
139
140function drawBreakNewsNivel(niveis){
141    let nivel= niveis.niveis[niveis.niveis.length-1].nivel;
142    breakNivel='<i class="fa fa-line-chart" aria-hidden="true"></i> ';
143    breakNivel+='Nível do Rio Itajaí-Açu em Blumenau: '+numeroBR(nivel)+flechaNivelRio(niveis)+breakNewsDot();
144    repaintBreakNews();
145}
146
147function flechaSubiu(){
148    return '<i class="fa fa-arrow-up" style="color:red;" aria-hidden="true"></i>';
149}
150
151function flechaDesceu(){
152    return '<i class="fa fa-arrow-down" style="color:green;" aria-hidden="true"></i>';
153}
154
155function flechaNivelRio(niveis){
156    let atual= niveis.niveis[niveis.niveis.length-1].nivel;
157    let anterior= niveis.niveis[niveis.niveis.length-2].nivel;
158    let flecha = ' ';
159    if(atual!=anterior){
160        flecha=(atual>anterior)?flechaSubiu()+' Subiu '+' ':flechaDesceu()+' Desceu '+' ';
161    }
162    return flecha;
163}
164
165function breakNewsDot(){
166    return ' <span class="breaknews_dot"></span> ';
167}
168
169function refreshBreakNews(){
170    downloadBreakNews();
171    downloadTemperatura();
172}
173
174function main_BreakNews(){
175    refreshBreakNews();
176    setInterval(function(){ refreshBreakNews(); }, 2*60*1000);
177}
178
179main_BreakNews();
180//ANTIGO - VOLTOU --- FIM
181//------------------------------
182
183/*
184
185//NOVO - REMOVIDO --- INICIO
186
187var breakNewsCorpo = '';
188var breakNivel = '';
189var breakSituacao = '';
190var breakTemperatura = '';
191
192function dataToJson(data) {
193    let ret = data;
194    try {
195        ret = typeof data === 'string' ? JSON.parse(data) : data;
196    } catch (e) {
197        ret = data;
198    }
199    return ret;
200}
201
202function formatDtBr(umDt) {
203    let dt = new Date(umDt);
204    return dt.toLocaleDateString() + ' ' + dt.toLocaleTimeString().substr(0, 5);
205}
206
207function numeroBR(num) {
208    return (num !== undefined && num !== null) ? ('' + Number(num).toFixed(2)).replace('.', ',') : '';
209}
210
211function flechaSubiu() {
212    return '<i class="fa fa-arrow-up" style="color:#ef4444; margin-left: 4px;" aria-hidden="true"></i>';
213}
214
215function flechaDesceu() {
216    return '<i class="fa fa-arrow-down" style="color:#22c55e; margin-left: 4px;" aria-hidden="true"></i>';
217}
218
219function flechaNivelRio(niveis) {
220    if (!niveis || !niveis.niveis || niveis.niveis.length < 2) return '';
221    let atual = niveis.niveis[niveis.niveis.length - 1].nivel;
222    let anterior = niveis.niveis[niveis.niveis.length - 2].nivel;
223    if (atual !== anterior) {
224        return (atual > anterior) ? flechaSubiu() : flechaDesceu();
225    }
226    return '';
227}
228
229function maximoIndicador(dados) {
230    var $statusTexto = $('#breaknews_status');
231    var $statusIcon = $('#breaknews_status_icon');
232
233    if (!$statusTexto.length) return;
234
235    var maiorNivel = 0;
236    var situacaoAtual = 'Normalidade';
237    var corFundo = '#64EE64'; // Verde padrão do JSON
238
239    // Percorre o JSON para encontrar o maior nível de alerta ativo
240    if (dados && dados.dados && Array.isArray(dados.dados)) {
241        dados.dados.forEach(function(topico) {
242            if (topico.sitregioes && Array.isArray(topico.sitregioes)) {
243                topico.sitregioes.forEach(function(item) {
244                    if (item.condicao && item.condicao.nivel > maiorNivel) {
245                        maiorNivel = item.condicao.nivel;
246                        situacaoAtual = item.condicao.condicao;
247                        corFundo = item.condicao.cor_fundo || '#64EE64';
248                    }
249                });
250            }
251        });
252    }
253
254    // 1. Atualiza o texto do status geral
255    $statusTexto.text(situacaoAtual).css({
256    'color': corFundo,
257    'background-color': 'transparent',
258    'background': 'none'
259});
260
261    // 2. Atualiza o ícone e a borda dinamicamente
262    if ($statusIcon.length) {
263        let icone = 'fa-check'; // Padrão Normalidade
264
265        // Define o ícone de acordo com o texto da condição
266        var textoLower = situacaoAtual.toLowerCase();
267        if (textoLower.includes('aten')) {
268            icone = 'fa-exclamation-triangle';
269        } else if (textoLower.includes('alert') || textoLower.includes('emerg')) {
270            icone = 'fa-exclamation-circle';
271        }
272
273        $statusIcon.css({
274            'border-color': corFundo,
275            'color': corFundo,
276            'background-color': 'rgba(255, 255, 255, 0.05)'
277        }).html('<i class="fa ' + icone + '"></i>');
278    }
279}
280//NOVO - REMOVIDO --- FIM
281*/
282
283/*
284//OLD - NAO USADO--- INICIO
285function drawBreakNews(dados) {
286    maximoIndicador(dados);
287    breakSituacao = '';
288
289    if (dados && dados.dados) {
290        dados.dados.forEach(function(umDado) {
291            
292            // Define o tópico (Condições Meteorológicas, Risco de Deslizamento...)
293            let tipoTitulo = umDado.tipoNome || 'Situação';
294
295            // Escolhe o ícone de acordo com o tópico que veio do JSON
296            let iconeClasse = 'fa-info-circle';
297            let nomeLower = tipoTitulo.toLowerCase();
298
299            if (nomeLower.includes('meteorolog') || nomeLower.includes('tempo')) {
300                iconeClasse = 'fa-cloud'; // Ícone de nuvem
301            } else if (nomeLower.includes('desliz') || nomeLower.includes('solo') || nomeLower.includes('geolog')) {
302                iconeClasse = 'fa-industry'; // ou 'fa-mountain' / 'fa-exclamation-triangle'
303            } else if (nomeLower.includes('regi')) {
304                iconeClasse = 'fa-map-marker'; // Ícone de localização
305            }
306            breakSituacao += '<div class="dash-card">';
307            breakSituacao += '  <div class="dash-card-icon"><i class="fa ' + iconeClasse + '"></i></div>';
308            breakSituacao += '  <div class="dash-card-info">';
309            breakSituacao += '    <span class="dash-card-label">' + tipoTitulo + '</span>';
310            breakSituacao += '  </div>';
311            breakSituacao += '</div>';
312
313            if (umDado.sitregioes) {
314                umDado.sitregioes.forEach(function(umTipo) {
315                    let cond = umTipo.condicao;
316                    let corDot = cond.cor_fundo || '#22c55e';
317                    
318                    // Nome da região ou tópico(deslizamento e condições meteorológicas)
319                    let nomeRegiao = umTipo.regiao ? umTipo.regiao.nome : '';
320                    let labelCompleto = nomeRegiao ? tipoTitulo + ': ' + nomeRegiao : tipoTitulo;
321
322                    breakSituacao += '<div class="dash-card">';
323                    breakSituacao += '  <div class="dash-card-icon"><i class="fa fa-map-marker"></i></div>';
324                    breakSituacao += '  <div class="dash-card-info">';
325                    breakSituacao += '    <span class="dash-card-label">' + labelCompleto + '</span>';
326                    breakSituacao += '    <span class="dash-card-status" style="color: #ffffff;">';
327                    breakSituacao += '      <span class="status-dot" style="background-color:' + corDot + ';"></span> ';
328                    breakSituacao +=       cond.condicao;
329                    breakSituacao += '    </span>';
330                    breakSituacao += '  </div>';
331                    breakSituacao += '</div>';
332                });
333            }
334        });
335    }
336    repaintBreakNews();
337//OLD - NAO USADO--- FIM    
338}*/
339
340/*
341//NOVO - REMOVIDO --- INICIO
342function drawBreakNews(dados) {
343    maximoIndicador(dados);
344    breakSituacao = '';
345
346    if (dados && dados.dados) {
347        dados.dados.forEach(function(umDado) {
348            
349            // Define o tópico (Condições Meteorológicas, Risco de Deslizamento)
350            let tipoTitulo = umDado.tipoNome || 'Situação';
351
352            // Escolhe o ícone de acordo com o tópico
353            let iconeClasse = 'fa-info-circle';
354            // Remove acentos e converte para minúsculas
355            let nomeLower = tipoTitulo.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
356
357            // Checa palavras-chave sem se preocupar com acentuação
358            if (nomeLower.includes('meteorolog') || nomeLower.includes('tempo') || nomeLower.includes('clima') || nomeLower.includes('previsao')) {
359                iconeClasse = 'fa-cloud'; // Ícone de nuvem
360            } else if (nomeLower.includes('desliz') || nomeLower.includes('solo') || nomeLower.includes('geolog')) {
361                iconeClasse = 'fa-industry';
362            } else if (nomeLower.includes('regi')) {
363                iconeClasse = 'fa-map-marker';
364}
365
366            // CARD DO TÓPICO PRINCIPAL (adicionada a classe 'label-topico')
367            breakSituacao += '<div class="dash-card">';
368            breakSituacao += '  <div class="dash-card-icon"><i class="fa ' + iconeClasse + '"></i></div>';
369            breakSituacao += '  <div class="dash-card-info">';
370            breakSituacao += '    <span class="dash-card-label label-topico">' + tipoTitulo + '</span>';
371            breakSituacao += '  </div>';
372            breakSituacao += '</div>';
373
374            // CARDS DAS REGIÕES VINCULADAS
375            if (umDado.sitregioes) {
376                umDado.sitregioes.forEach(function(umTipo) {
377                    let cond = umTipo.condicao;
378                    let corDot = cond.cor_fundo || '#22c55e';
379                    
380                    let nomeRegiao = umTipo.regiao ? umTipo.regiao.nome : '';
381                    let labelCompleto = nomeRegiao ? tipoTitulo + ': ' + nomeRegiao : tipoTitulo;
382
383                    breakSituacao += '<div class="dash-card">';
384                    breakSituacao += '  <div class="dash-card-icon"><i class="fa fa-map-marker"></i></div>';
385                    breakSituacao += '  <div class="dash-card-info">';
386                    breakSituacao += '    <span class="dash-card-label">' + labelCompleto + '</span>';
387                    breakSituacao += '    <span class="dash-card-status">';
388                    breakSituacao += '      <span class="status-dot" style="background-color:' + corDot + ';"></span> ';
389                    breakSituacao +=       cond.condicao;
390                    breakSituacao += '    </span>';
391                    breakSituacao += '  </div>';
392                    breakSituacao += '</div>';
393                });
394            }
395        });
396    }
397    repaintBreakNews();
398}
399
400function drawBreakNewsNivel(niveis) {
401    if (niveis && niveis.niveis && niveis.niveis.length > 0) {
402        let nivel = niveis.niveis[niveis.niveis.length - 1].nivel;
403        breakNivel = '<div class="dash-card">' +
404            '  <div class="dash-card-icon"><i class="fa fa-line-chart"></i></div>' +
405            '  <div class="dash-card-info">' +
406            '    <span class="dash-card-label">Nível do Rio Itajaí-Açu</span>' +
407            '    <span class="val-rio">' + numeroBR(nivel) + ' m ' + flechaNivelRio(niveis) + '</span>' +
408            '  </div>' +
409            '</div>';
410    }
411    repaintBreakNews();
412}
413
414function drawBreakNewsTemp(dados) {
415    if (dados && dados.length > 0) {
416        let temperatura = dados[dados.length - 1];
417        if (temperatura) {
418            breakTemperatura = '<div class="dash-card">' +
419                '  <div class="dash-card-icon"><i class="fa fa-thermometer-half"></i></div>' +
420                '  <div class="dash-card-info">' +
421                '    <span class="dash-card-label">Temperatura Atual</span>' +
422                '    <span class="val-temp">' + numeroBR(temperatura.valor) + '°C</span>' +
423                '  </div>' +
424                '</div>';
425        }
426    }
427    repaintBreakNews();
428}
429
430function downloadBreakNewsNivelRio() {
431    $.get(URL_BREAKNEWS_RIO, function(data) {
432        let dados = dataToJson(data);
433        drawBreakNewsNivel(dados);
434    });
435}
436
437function downloadTemperatura() {
438    $.get(URL_BREAKNEWS_TEMPERATURA, function(data) {
439        let dados = dataToJson(data);
440        drawBreakNewsTemp(dados);
441    });
442}
443
444function downloadBreakNews() {
445    $.get(URL_BREAKNEWS_SIT_ATU, function(data) {
446        let dados = dataToJson(data);
447        downloadBreakNewsNivelRio();
448        drawBreakNews(dados);
449    });
450}
451
452function repaintBreakNews() {
453    let blocoOriginal = breakNivel + breakSituacao + breakTemperatura;
454    
455    // Duplica o conteúdo para não ter espaço vazio quando acabar as informações
456    let el = document.getElementById('breaknews_corpo');
457    if (el) {
458        el.innerHTML = blocoOriginal + blocoOriginal;
459    }
460}
461
462function refreshBreakNews() {
463    downloadBreakNews();
464    downloadTemperatura();
465}
466
467// Função para disparar todas as chamadas
468function main_BreakNews() {
469    refreshBreakNews();
470    setInterval(function() {
471        refreshBreakNews();
472    }, 2 * 60 * 1000); 
473}
474
475// Executa assim que o navegador terminar de carregar o HTML
476$(document).ready(function() {
477    main_BreakNews();
478});
479//NOVO - REMOVIDO --- FIM
480*/

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.