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

Depois da Amazon, agora a Apple Store pode ganhar seu primeiro sindicato

Silhueta de cliente em frente à loja da Apple Store, em Nova York, nos Estados Unidos - Mike Segar/Reuters
Silhueta de cliente em frente à loja da Apple Store, em Nova York, nos Estados Unidos Imagem: Mike Segar/Reuters

Da Redação de Tilt

Em São Paulo

21/04/2022 09h40

Pela primeira vez, os trabalhadores de uma Apple Store podem criar um sindicato específico para a classe. Funcionários da filial no shopping Cumberland Mall, em Atlanta, deram entrada com os documentos para iniciar o processo eletivo, segundo apurou a Businees Insider.

Os organizadores informam que mais de 70% dos trabalhadores am seus cartões sindicais. Se a votação junto ao Comitê Nacional de Relações Trabalhistas for positiva, o sindicato terá 107 membros e se chamará Apple Workers Union (Sindicato dos Trabalhadores da Apple).

Derrick Bowles, um dos líderes da iniciativa, contou à CNBC que se inspirou "no que estava acontecendo em Bessemer, Alabama, com o depósito da Amazon."

Em 1/4, os trabalhadores de um depósito da Amazon em Staten Island (Nova York) aprovaram a criação do primeiro sindicato dos trabalhadores da gigante do varejo.

Mas também há outros exemplos dentro da própria Apple. Trabalhadores da loja na Grand Central Terminal, em Nova York, começaram a coletar s para oficializar um sindicato afiliado ao grupo Worker Unite. (O de Atlanta será associado ao Communications Workers of America.)

"Muitos de nós estão aqui há muitos anos, e não acho que você continua firme num lugar a não ser que você o ame", afirmou Bowles em um comunicado à imprensa.

"A Apple é um lugar profundamente positivo para se trabalhar, mas sabemos que a companhia pode melhorar seu comprometimento com seus ideais, então estamos empolgados em nos juntar com nossos colegas de trabalhar para trazer a Apple à mesa de negociação e tornar esse aqui um lugar ainda melhor para se trabalhar", continuou.

Segundo o Washington Post, outras três filiais da Apple Store nos EUA também estão em processo de sindicalização. E, de acordo com o Huffington Post, outras manifestações coletivas estão se tornando mais comuns. Na véspera do Natal de 2021, mais de 50 profissionais do varejo fizeram uma greve solicitando melhores condições de trabalho, incluindo proteção contra covid-19 — e contra clientes abusivos.