;(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
Topo

Saci - Um duende brasileiro

Da Página 3 Pedagogia & Comunicação

(Atualizado em 15/08/2013, às 13h57)

O mito do Saci ou Saci Pererê data do fim do século 18 ou início do século 19, segundo o folclorista Luís da Câmara Cascudo. Está presente em muitas regiões do Brasil, desde o Amazonas ao Rio Grande do Sul. Saci é uma palavra tupi e pode ser usado como substantivo próprio ou comum.

Há muitas variantes ou versões do personagem. Em algumas, o Saci é considerado um ser brincalhão, enquanto que em outras ele é visto como uma criatura do mal. Sua figura, no entanto, é sempre semelhante: um menino negro, de uma perna só, que fuma cachimbo e usa um gorro vermelho.

Para alguns, é justamente este gorro que lhe dá poderes mágicos. Entre outros, o poder de desaparecer e aparecer quando quiser. O Saci gosta de travessuras e se diverte espantando cavalos, ou trançando-lhes a crina, queimando a comida e acordando as pessoas com gargalhadas.

Também gosta de esconder brinquedos e derramar sal nas cozinhas. Ele não atravessa córregos nem riachos. Se alguém for perseguido por um saci, deve jogar cordas com nós em seu caminho, pois ele vai parar para desatar os nós.

Dizem que os sacis viajam no interior de redemoinhos de vento. Se alguém jogar no redemoinho um rosário ou uma peneira, pode capturá-lo. Se conseguir tomar sua carapuça, vai realizar um desejo.

Na origem do mito do Saci encontram-se alguns pássaros, capazes de enganar os homens com seu assobio, pois, como ventríloquos, essas aves seriam capazes de projetar sua voz, de modo que quem o escuta não sabe ao certo onde ele está. Entre outros pássaros, o Saci é identificado com o Sem-fim (Tapera naevia). Também pode ser o Mati-taperê ou Matita-Pereira ou ainda Matintapereira(Cuculus cornutus).

Este último faz parte de algumas crenças indígenas, segundo as quais os pajés ou feiticeiros se transformam nesse pássaro para se transportar de um lugar a outro e levar a cabo uma vingança.

No Estado de São Paulo e no município de Vitória, por leis locais, o 31 de outubro é o dia do Saci, que busca transformar num evento mais brasileiro o dia das bruxas ou halloween, do folclore norte-americano.

O Saci Pererê também se transformou em personagem nos livros de Monteiro Lobato e em histórias em quadrinhos, no traço bem humorado de Ziraldo, o conhecido autor de "O Menino Maluquinho".