;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

Ministro da Agricultura da França critica qualidade da carne brasileira

Processamento de carne de frango em frigorífico de Itatinga (SP) - Paulo Whitaker
Processamento de carne de frango em frigorífico de Itatinga (SP) Imagem: Paulo Whitaker

Da EFE, em Paris (França)

10/09/2021 22h15

O ministro da Agricultura da França, Julien Denormandie, questionou hoje a qualidade dos peitos de frango importados do Brasil e disse que eles "não têm o mesmo impacto sobre a saúde das crianças" que a carne produzida no país europeu.

"Não nos enganemos: dar um peito de frango do Brasil ou da Ucrânia a nossos filhos simplesmente não tem o mesmo impacto sobre sua saúde que um peito de frango francês", declarou Denormandie em uma feira agrícola em Corbières-en-Provence, no sul da França.

"Por fim, vamos implementar o famoso regulamento sobre a origem da carne. A partir de 2022, será obrigatório em todas as cantinas públicas ou privadas indicar a origem da carne", destacou.

De acordo com o ministro, "quando um pai vê que a carne vem do Brasil ou da Ucrânia, talvez desperte sua consciência".

As declarações de Denormandie foram feitas em um momento de incertezas sobre o acordo de livre-comércio entre a União Europeia e o Mercosul, do qual a França é forte opositora, alegando que o bloco sul-americano não cumpre as regras ambientais e sanitárias europeias.

A fala do ministro aconteceu em uma feira na qual o presidente francês, Emmanuel Macron, também discursou sobre a "soberania" agrícola da França.

"Não vamos importar produtos de fora supostamente com regras sanitárias menos rigorosas do que as nossas. Isso é um absurdo", disse Macron.

O presidente francês também falou em reduzir o uso de produtos fitossanitários, como o glifosato, e opinou que esta é uma questão que precisa ser abordada "em nível europeu".

"Não adianta reduzir os produtos fitossanitários se o esforço em um país vizinho não for o mesmo e a estratégia não for a mesma", advertiu, argumentando que isso cria uma concorrência desleal entre os países do bloco europeu.

Macron também afirmou que só substituirá os pesticidas quando houver um substituto menos prejudicial. No caso dos inseticidas neonicotinoides, que são considerados um risco para a população de abelhas, ele reconheceu que estão sendo mantidos por falta de uma alternativa.