An error has occurred

{{terminalError}}

If you’re satisfied with how corporate media is responding to the pandemic, you can ignore this message. But if you believe this moment demands bold independent journalism, we need your support. Our journalists are reporting stories that would otherwise go untold, about governments and corporations taking deadly risks with people’s lives. But we’ve had to take on unexpected expenses to keep providing the investigations and analysis you rely on.
We’re racing to report on how governments and corporations are taking deadly risks with people’s lives. But we’ve had to take on unexpected expenses to keep providing the hard-hitting investigations and analysis you rely on.
As a nonprofit, our future depends on your generosity. Help reach our $500,000 goal by May 31.
RAISED
${amount.condensed} {amount.scaleAbbreviation}
GOAL
${goal.condensed}{goal.scaleAbbreviation}
// You cannot have < or > inside of this tag (function setupResponsiveContainer(containerId, breakpoints) { var container; var firstResize = true; function handleMessage(event) { var data = event.data; if (typeof data == 'string') { try { data = JSON.parse(data); } catch (e) {} } if (data && data.event) { if (data.event.type === 'resize') { handleParentResize(data.event); if (firstResize) { setTimeout(function(){ addHtmlClass('loaded'); }, 75); firstResize = false; } if (data.event.height < 545) { document.body.classList.add('extraSmallHeight'); } else { document.body.classList.remove('extraSmallHeight'); } return; } } } function roundToEven(n) { return 2 * Math.round(n / 2); } var resizeInt; function handleParentResize(event) { container = container || document.getElementById(containerId) if (!container) { return } // remove the existing breakpoint class (if any) and add in the current one' container.className = container.className .split(/\s+/) .filter(isNotBreakpointClassName) .concat([ event.breakpoint ]) .join(' '); clearTimeout(resizeInt); resizeInt = setTimeout(function() { var height = 'auto'; if (event.breakpoint === 'large') { height = '' + roundToEven(event.height) + 'px'; } $('body').css('height', height); }, 50); } function isNotBreakpointClassName(className) { return (breakpoints.indexOf(className) < 0) } window.addEventListener('message', handleMessage, false) })('ng-app', [ 'extraSmall', 'small', 'medium', 'large' ]) function animateNumber(elemSelector, start, end, duration, commas, prefix) { // assumes integer values for start and end var obj = $(elemSelector)[0]; if (!obj) { return; } var range = end - start; // no timer shorter than 50ms (not really visible any way) var minTimer = 50; // calc step time to show all interediate values var stepTime = Math.abs(Math.floor(duration / range)); // never go below minTimer stepTime = Math.max(stepTime, minTimer); // get current time and calculate desired end time var startTime = new Date().getTime(); var endTime = startTime + duration; var timer; function run() { var now = new Date().getTime(); var remaining = Math.max((endTime - now) / duration, 0); var value = Math.round(end - (remaining * range)); if (commas) { value = value.toLocaleString(); } if (prefix && prefix.length) { value = prefix + value; } obj.innerHTML = value; if (value == end) { clearInterval(timer); } } timer = setInterval(run, stepTime); run(); } function Div(props) { return $(FLMPiano.dom.renderElement('div', props)); } function initThermometer(className, dataUrl) { var showThermo = 'yes'.toLowerCase() == 'yes'; $.getJSON(dataUrl).then(function(data) { var thermos = $('.' + className); if (!showThermo) { thermos.hide(); $('.thermo-stats, .thermo-percent-markers').hide(); } else { // Set thermometer level thermos.each(function(_, thermoView) { thermoView = $(thermoView) if (thermoView.length === 0) return; var thermoBorder = Div({ class: className+'-border' }); var thermoDividers = Div({ class: 'dividers' }); thermoDividers.append(Div(), Div(), Div(), Div()); var thermoLevelView = Div({ class: className+'-level' }); thermoBorder.append(thermoLevelView, thermoDividers); thermoView.append(thermoBorder); var percent = parseInt(data.progress); if (percent == 100 || percent == 0) { thermoLevelView.addClass('no-border'); } // setTimeout needed to invoke CSS animation setTimeout(function(){ thermoLevelView.css('width', percent + '%'); }, 50); //var thermoAmountView = Div({ class: className+'-amount' }); //thermoView.append(thermoAmountView); //thermoAmountView.text(data.goal.condensed + data.goal.scaleAbbreviation); thermoView.css('opacity', 1); }); } // Update sentence which states donation levels updateTextPlaceholders(data); if (showThermo) { var animationSecs = 2.5; // animateNumber('.thermo-stats .raised .number', 0, data.amount.value, animationSecs, true, '$'); /* FLMPiano.animations.animateNumberElement( '.thermo-stats .raised .number', { from: 0, to: data.amount.condensed }, { prefix: '$', duration: animationSecs * 1000 } ); */ } }); } function updateTextPlaceholders(data) { $('.has-placeholder-text').each(function(_, elem) { var $elem = $(elem); $elem.html(FLMPiano.formatText($elem.html(), data)); }); } function reportLoaded() { document.getElementById('Piano-loaded').click(); // the GA event doesn't get sent immediately when the iframe loads. // wait for 3 secs for GA to be completely initialized before sending the event. setTimeout(function() { sendGAEvent('direct-ask: popup open', 3); }, 3000); } function sendGAEvent(eventAction, key) { var metricKey = 'metric' + String(key); if (window.ga) ga('send', 'event', 'piano', eventAction, getURL().href, { [metricKey]: 1, 'page': getURL().pathname }); } function getURL() { return new URL(window.TPParam.params.url); } function addHtmlClass(cssClass){ var html = document.getElementsByTagName('html')[0]; html.className = html.className + ' ' + cssClass; } function trackConvertLink(linkElemId, experiencePrefix, source, realm) { var elem = document.getElementById(linkElemId); elem.href = FLMPiano.buildUrl(elem.href, { source: source }); elem.addEventListener('click', function() { FLMPiano.dispatchEventToParent('experience:convert', { experiencePrefix: experiencePrefix }); FLMPiano.trackGAEvent({ eventLabel: 'end-of-article ask: click' }); piano.logConversion(realm, 'Donate Click', 1) }); } const REDACT_LEFT = String.fromCharCode(60); const REDACT_RIGHT = String.fromCharCode(62); function displayRedactedStyle(wrapper, text) { wrapper.classList.add('redacted'); wrapper.innerHTML = ''; const redactedTextTmpl = document.getElementById('redacted-text-tmpl').textContent.trim(); const words = text.trim().replace(/ +/, ' ').split('').reduce((out, inn) => { if (inn.charAt(0) == REDACT_LEFT || inn.charAt(0) == REDACT_RIGHT) { out.push(inn); } else { out[out.length-1] += inn; } return out }, []).map(s=>s.trim()); var html = ''; for (let i = 0; i < words.length; i++) { html += FLMPiano.formatText(redactedTextTmpl, { class: words[i].charAt(0) == REDACT_RIGHT ? 'right': 'left', text: words[i].substr(1) }); } wrapper.innerHTML = html; } window.addEventListener('load', function(event) { var experiencePrefix = '2020_takeover_spring'; var source = 'web_intercept_20200530_sitewide_longask_therm_satisfied_yellow'; var realm = 'theintercept'; reportLoaded(); var introDiv = document.getElementById('intro'); var introText = document.getElementById('intro-text-string').textContent.trim(); if (introText.charAt(0) == REDACT_LEFT) { displayRedactedStyle(introDiv, introText) } else { introDiv.textContent = introText; } if (!window.ga) addHtmlClass('loaded') initThermometer('thermo', 'https://static.theintercept.com/actionkit/thermometers/2020_spring_campaign/data.json'); //FLMPiano.setUpResponsiveContainer('#Piano'); var donateLink = document.getElementById('donate-link'); donateLink.href = FLMPiano.buildUrl(donateLink.href, { source: source }); donateLink.addEventListener('click', function() { FLMPiano.dispatchEventToParent('experience:convert', { experiencePrefix: experiencePrefix }); FLMPiano.trackGAEvent({ eventLabel: 'end-of-article ask: click' }); piano.logConversion(realm, 'Donate Click', 1) }); FLMPiano.getCustomVariables().then(function(customVariables) { if (typeof customVariables.referrer_post_id === 'string') { donateLink.href = FLMPiano.buildUrl(donateLink.href, { referrer_post_id: customVariables.referrer_post_id }); } }); })