showErrorDiv = (callout, subject, body, identifier, isKnownIssueUrl=undefined) => {
    let errDivStyle = document.getElementById('error-div').style;
    if (errDivStyle.opacity < 0.7) {
        // Partially faded away as user interacted with circuit.
        // Enough time to justify updating the message despite the risk of clearing the user's selection.
        _alreadySeenBodies = [];
        _alreadySeenIdentifiers = [];
    }

    // Error just happened, so this should be showing and highlighted.
    errDivStyle.backgroundColor = '#FFA';
    errDivStyle.opacity = 1.0;
    errDivStyle.display = 'block';

    if (_alreadySeenBodies.indexOf(body) !== -1) {
        return;
    }
    _alreadySeenBodies.push(body);

    if (_alreadySeenIdentifiers.length > 0) {
        body += "\n\nCOVERED\n" + _alreadySeenIdentifiers.join("\n-------------\n");
    }
    if (_alreadySeenIdentifiers.indexOf(identifier) === -1) {
        _alreadySeenIdentifiers.push(identifier);
    }

    let handler = checkForKnownIssueHandler(subject, isKnownIssueUrl);
    if (handler !== undefined) {
        handler();
        return;
    }

    showErrorDiv_forced(callout, subject, body, isKnownIssueUrl);
}
@param {!string} callout Scary 'there was an error' title show to user.
@param {!string} subject Subject used for github issue / mailto link.
@param {!string} body Body used for github issue / mailto link.
@param {!string} identifier A minimal description of the error that shouldn't vary as the circuit is edited, so
@param {undefined|!string} isKnownIssueUrl
errors covering other errors also get reported.