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

Mãe americana descobre que seus dois filhos adotivos são irmãos biológicos

Katie Page, com os filhos, Grayson, de 2 anos, e Hannah, de 1 ano - Reprodução/Instagram
Katie Page, com os filhos, Grayson, de 2 anos, e Hannah, de 1 ano Imagem: Reprodução/Instagram

da Universa, em São Paulo

11/01/2019 15h48

Após se divorciar, a americana Katie Page resolveu, por sugestão do pastor de sua igreja, abrir sua casa para se tornar lar temporário para crianças que, por algum motivo, estivessem sob a guarda do Estado do Colorado, onde mora.

Um ano depois, em 2016, a convivência com as crianças havia a tornado mais aberta a ideia de adoção definitiva -- interesse que ela manifestou aos assistentes sociais que a visitavam para tratar dos procedimentos que envolviam a guarda provisória dos pequenos que ela já recebia em sua casa.

Algumas semanas depois, relatou Katie em suas redes sociais e ao site "Love What Matters", ela recebeu uma ligação a respeito de um menino que havia sido abandonado em um hospital. Ele tinha sido exposto a drogas, mas ava bem de saúde e recebia alta no dia seguinte.

"Eu o quero. Por favor, me dê cinco minutos e não ligue para mais ninguém!", respondeu ela. O recém-nascido, com apenas quatro dias, e ainda sem nome foi enviado para sua casa ainda naquele dia. 

Katie então o batizou Grayson e, após 11 meses, recebeu a guarda definitiva do filho. Com a chegada do seu primeiro ano de vida, ela decidiu buscar um irmãozinho ou irmãzinha para o menino. 

Em poucas semanas, ela recebeu a notícia de que uma menia havia sido deixada no mesmo hospital em que Grayson nasceu e em condições semelhantes de saúde. "Minha cabeça dizia 'não' porque não fazia sentido e não estava nos meus planos, mas algo dentro de mim mandava eu dizer 'sim. Eu pensei comigo mesma: 'você pode fazer isso, você já fez isso antes'", relembrou.

Ao checar os poucos dados que ela tinha da origem das crianças, ela viu que, em ambos os documentos, as mães biológicas registradas possuíam o mesmo primeiro nome e aniversário com apenas um dia de diferença. Katie chegou a duvidar de sua suspeita inicial ao levar em consideração o fato de que as crianças não eram parecidas.

No entanto, ela decidiu levar suas suspeitas para a assistente social que lidou com o caso da caçula, agora batizada por ela como Hannah. A profissional também não acreditou que Katie havia tido adotado dois irmãos.

Após se encontrar com a mãe biológica e com a assistente social que a trouxe Grayson, Katie pode confirmar que, sim, seus filhos tinham laços genéticos. "Quando finalmente fomos apresentadas, soube instantaneamente que estava olhando para a mãe do meu filho. Mas, ao mesmo tempo, eu tive que agir completamente normal e não enlouquecer! Ela me deu pequenos insights sobre sua vida que partiram meu coração. Ela era linda assim como meu filho", contou.

Em 28 de dezembro de 2018, Katie recebeu a guarda definitiva de Hannah -- e a família deve aumentar em breve.

"Nossa aventura continua porque, 13 meses depois que Hannah nasceu, a mãe biológica deu boas-vindas a outro menino neste mundo, do qual tenho guarda provisória, e com grandes esperanças de adotar em 2019."