Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    Jack Kochanowicz To Undergo Tommy John Surgery

    June 9, 2026

    Resumen semanal de la ley de deportes y entretenimiento de K&C – junio de 2026 #2

    June 9, 2026

    Liberals open to shorter metadata rules but splitting bill ‘not an option’ – National

    June 9, 2026
    Facebook X (Twitter) Instagram
    Select Language
    Facebook X (Twitter) Instagram
    NEWS ON CLICK
    Subscribe
    Tuesday, June 9
    • Home
      • United States
      • Canada
      • Spain
      • Mexico
    • Top Countries
      • Canada
      • Mexico
      • Spain
      • United States
    • Politics
    • Business
    • Entertainment
    • Fashion
    • Health
    • Science
    • Sports
    • Travel
    NEWS ON CLICK
    Home»Top Countries»United States»Kroger to pay $1.25 million over alleged mislabeling of calorie content of bread products
    United States

    Kroger to pay $1.25 million over alleged mislabeling of calorie content of bread products

    News DeskBy News DeskJune 9, 2026No Comments7 Mins Read
    Share Facebook Twitter Pinterest Copy Link LinkedIn Tumblr Email VKontakte Telegram
    Kroger to pay $1.25 million over alleged mislabeling of calorie content of bread products
    Share
    Facebook Twitter Pinterest Email Copy Link

    ‘
    );
    }

    function setButtonState(button, state) {
    const hint = button.parentElement && button.parentElement.querySelector(‘[data-author-follow-hint]’);
    const followLabel = button.dataset.followLabel || ‘Follow’;
    const followingLabel = button.dataset.followingLabel || ‘Following’;
    const signinLabel = button.dataset.signinLabel || ‘Sign in to follow’;
    const loadingLabel = button.dataset.loadingLabel || ‘Saving…’;
    const pendingAuthLabel = button.dataset.pendingAuthLabel || ‘Loading…’;
    button.classList.remove(‘is-following’, ‘is-loading’, ‘is-auth-required’);

    if (state === ‘loading’) {
    button.classList.add(‘is-loading’);
    button.disabled = true;
    button.textContent = loadingLabel;
    if (hint) {
    hint.textContent=”Updating your followed authors…”;
    }
    return;
    }

    if (state === ‘pending-auth’) {
    button.classList.add(‘is-loading’);
    button.disabled = true;
    button.textContent = pendingAuthLabel;
    if (hint) {
    hint.textContent=”Checking your sign-in status…”;
    }
    return;
    }

    button.disabled = false;

    if (state === ‘following’) {
    button.classList.add(‘is-following’);
    button.textContent = followingLabel;
    if (hint) {
    hint.textContent = followingLabel === ‘Unfollow’
    ? ‘Remove this writer from your followed list.’
    : ‘Click again to unfollow.’;
    }
    return;
    }

    if (state === ‘signin’) {
    button.classList.add(‘is-auth-required’);
    button.textContent = signinLabel;
    if (hint) {
    hint.textContent=”Sign in to follow writers and manage your list.”;
    }
    return;
    }

    button.textContent = followLabel;
    if (hint) {
    hint.textContent=”Click to follow.”;
    }
    }

    function renderWidgets(scope) {
    const root = scope || document;
    root.querySelectorAll(‘[data-author-follow-widget]’).forEach(function (widget) {
    const button = widget.querySelector(‘[data-author-follow-button]’);
    if (!button) {
    return;
    }

    const staffId = widget.dataset.staffId;
    const hasToken = !!getBearerToken();

    if (!isPianoIdentityReady() && !hasToken) {
    setButtonState(button, ‘pending-auth’);
    return;
    }

    if (!hasToken) {
    setButtonState(button, ‘signin’);
    return;
    }

    if (followedAuthorsMap.has(String(staffId))) {
    setButtonState(button, ‘following’);
    } else {
    setButtonState(button, ‘follow’);
    }
    });
    }

    function renderManageList(container) {
    if (!container) {
    return;
    }

    const hasToken = !!getBearerToken();

    if (!isPianoIdentityReady() && !hasToken) {
    container.innerHTML = (
    ‘

    Checking your account status…

    ‘
    );
    return;
    }

    if (!hasToken) {
    container.innerHTML = (
    ‘

    Sign in to load the authors you follow. ‘ +
    ‘Sign in

    ‘
    );
    return;
    }

    const followedAuthors = Array.from(followedAuthorsMap.values());
    if (!followedAuthors.length) {
    container.innerHTML = (
    ‘

    You are not following any authors yet. ‘ +
    ‘Use the follow buttons on stories or staff pages to build your list.

    ‘
    );
    return;
    }

    container.innerHTML = followedAuthors
    .map(function (author) {
    return (
    ‘

    ‘ +
    ” +
    ‘

    ‘ +
    ‘‘ +
    ‘Remove this writer from your followed list.‘ +
    ‘

    ‘ +
    ‘

    ‘
    );
    })
    .join(”);

    bindEvents(container);
    renderWidgets(container);
    }

    async function refresh(scope, options) {
    const forceFetch = !!(options && options.force);

    if (!hasFollowWidgets(scope)) {
    return;
    }

    // Wipe the cached map BEFORE the first render so a user-switch can’t
    // momentarily display the previous user’s “Following” state.
    discardCacheIfTokenChanged();

    renderWidgets(scope);

    const manageContainer = document.querySelector(‘[data-author-follow-manage-list]’);
    const managePreferencesContainer = document.querySelector(‘[data-author-follow-manage-preferences]’);
    const hasToken = !!getBearerToken();

    if (!isPianoIdentityReady() && !hasToken) {
    renderWidgets(scope);
    renderManagePreferences(managePreferencesContainer);
    renderManageList(manageContainer);
    return;
    }

    if (!hasToken) {
    renderManagePreferences(managePreferencesContainer);
    renderManageList(manageContainer);
    return;
    }

    try {
    await loadFollowedAuthors(forceFetch);
    renderWidgets(scope);
    renderManagePreferences(managePreferencesContainer);
    renderManageList(manageContainer);
    } catch (error) {
    console.warn(‘Unable to load followed authors.’, error);
    if (error && error.code === ‘AUTH_REQUIRED’) {
    renderWidgets(scope);
    renderManagePreferences(managePreferencesContainer);
    renderManageList(manageContainer);
    }
    }
    }

    function startLoginPoll() {
    if (loginPoll) {
    clearInterval(loginPoll);
    }

    let attempts = 0;
    loginPoll = setInterval(function () {
    attempts += 1;
    if (getBearerToken() || isLoggedIn() || attempts > 25) {
    clearInterval(loginPoll);
    loginPoll = null;
    refresh(document, { force: true });
    }
    }, 1000);
    }

    function stopPianoReadyPoll() {
    if (pianoReadyPoll) {
    clearInterval(pianoReadyPoll);
    pianoReadyPoll = null;
    }
    }

    function startPianoReadyPoll() {
    stopPianoReadyPoll();

    let attempts = 0;
    pianoReadyPoll = setInterval(function () {
    attempts += 1;
    if (isPianoIdentityReady() || getBearerToken() || attempts > 40) {
    stopPianoReadyPoll();
    // Non-forced: if bindPianoInitRefresh already fetched, the TTL
    // dedupes this call. If it lost the race, this call wins.
    refresh(document);
    }
    }, 500);
    }

    function bindPianoInitRefresh() {
    if (pianoInitBound) {
    return;
    }

    pianoInitBound = whenPianoReady(function () {
    // The Piano init callback is the canonical “identity is ready” signal;
    // cancel the fallback poll so it can’t issue a redundant second fetch.
    stopPianoReadyPoll();
    refresh(document, { force: true });
    });
    }

    async function handleWidgetClick(widget, button) {
    const staffId = widget.dataset.staffId;

    if (!getBearerToken()) {
    setButtonState(button, isPianoIdentityReady() ? ‘signin’ : ‘pending-auth’);
    if (typeof window.showPianoLogin === ‘function’) {
    window.showPianoLogin();
    startLoginPoll();
    }
    return;
    }

    // If the identity changed since the cache was last filled, drop the stale
    // map before the follow/unfollow decision below — otherwise the click
    // could issue the wrong action against the previous user’s state.
    discardCacheIfTokenChanged();

    setButtonState(button, ‘loading’);

    try {
    if (followedAuthorsMap.has(String(staffId))) {
    await apiRequest(apiBaseUrl + “https://www.washingtontimes.com/” + staffId, { method: ‘DELETE’ });
    followedAuthorsMap.delete(String(staffId));
    removePushlyFollowedAuthorId(staffId);
    } else {
    const author = await apiRequest(apiBaseUrl + “https://www.washingtontimes.com/” + staffId, {
    method: ‘PUT’,
    body: JSON.stringify({
    push_enabled: followDeliveryPreferences.push_enabled,
    email_fallback_enabled: followDeliveryPreferences.email_fallback_enabled,
    }),
    });
    followedAuthorsMap.set(String(staffId), author);
    appendPushlyFollowedAuthorId(staffId);
    }

    saveStoredFollowDeliveryPreferences(
    deriveFollowDeliveryPreferences(Array.from(followedAuthorsMap.values())),
    );
    syncPushlyFollowedAuthorsProfile();
    renderManagePreferences(document.querySelector(‘[data-author-follow-manage-preferences]’));
    renderWidgets(document);
    renderManageList(document.querySelector(‘[data-author-follow-manage-list]’));
    } catch (error) {
    console.warn(‘Unable to update followed author.’, error);
    if (error && error.code === ‘AUTH_REQUIRED’) {
    setButtonState(button, ‘signin’);
    }
    renderWidgets(document);
    }
    }

    function bindEvents(scope) {
    const root = scope || document;
    root.querySelectorAll(‘[data-author-follow-widget]’).forEach(function (widget) {
    if (widget.dataset.followWidgetBound === ‘true’) {
    return;
    }
    widget.dataset.followWidgetBound = ‘true’;

    const button = widget.querySelector(‘[data-author-follow-button]’);
    if (!button) {
    return;
    }

    button.addEventListener(‘click’, function () {
    handleWidgetClick(widget, button);
    });
    });

    root.querySelectorAll(‘[data-author-follow-manage-preferences]’).forEach(function (container) {
    if (container.dataset.followGlobalPreferencesBound === ‘true’) {
    return;
    }
    container.dataset.followGlobalPreferencesBound = ‘true’;

    async function handlePreferenceChange() {
    const pushInput = container.querySelector(‘[data-author-follow-global-pref=”push”]’);
    const emailInput = container.querySelector(‘[data-author-follow-global-pref=”email”]’);
    if (!pushInput || !emailInput) {
    return;
    }

    const previousPreferences = {
    push_enabled: followDeliveryPreferences.push_enabled,
    email_fallback_enabled: followDeliveryPreferences.email_fallback_enabled,
    };
    const payload = {
    push_enabled: !!pushInput.checked,
    email_fallback_enabled: !!emailInput.checked,
    };
    // Drop a stale map if the identity changed before iterating — we
    // don’t want to issue follow updates against the previous user’s
    // authors with the current user’s bearer token.
    discardCacheIfTokenChanged();
    const followedAuthors = Array.from(followedAuthorsMap.values());

    saveStoredFollowDeliveryPreferences(payload);
    managePreferencesPending = true;
    pushInput.disabled = true;
    emailInput.disabled = true;

    try {
    await Promise.all(
    followedAuthors.map(function (author) {
    return updateFollowPreferences(author.id, payload);
    }),
    );
    renderManagePreferences(container);
    renderWidgets(document);
    renderManageList(document.querySelector(‘[data-author-follow-manage-list]’));
    } catch (error) {
    console.warn(‘Unable to update author follow preferences.’, error);
    saveStoredFollowDeliveryPreferences(previousPreferences);
    pushInput.checked = previousPreferences.push_enabled;
    emailInput.checked = previousPreferences.email_fallback_enabled;
    } finally {
    managePreferencesPending = false;
    pushInput.disabled = false;
    emailInput.disabled = false;
    }
    }

    container.addEventListener(‘change’, function (event) {
    const target = event.target;
    if (!target || !target.matches(‘[data-author-follow-global-pref]’)) {
    return;
    }
    handlePreferenceChange();
    });
    });
    }

    function init(scope) {
    const root = scope || document;
    if (!hasFollowWidgets(root)) {
    return;
    }
    bindEvents(root);
    renderWidgets(root);
    bindPianoInitRefresh();
    startPianoReadyPoll();
    refresh(root);
    }

    window.WTAuthorFollow = {
    init: init,
    refresh: refresh,
    };

    document.addEventListener(‘DOMContentLoaded’, function () {
    init(document);
    });

    window.addEventListener(‘focus’, function () {
    if (hasFollowWidgets(document)) {
    refresh(document);
    }
    });
    document.addEventListener(‘visibilitychange’, function () {
    if (!document.hidden && hasFollowWidgets(document)) {
    refresh(document);
    }
    });
    } else {
    window.WTAuthorFollow.init(document);
    }
    })();


    A Kroger grocery store is seen in Monroe, Ohio. (AP Photo/Jeff Dean, File)


    A Kroger grocery store is seen …

    more >

    Kroger is paying $1.25 million to settle a lawsuit from officials in California who alleged the calorie counts on certain Kroger breads were incorrect.

    The Ventura County District Attorney’s Office said Monday that Kroger, which owns Food 4 Less, Foods Co. and Ralphs stores across California, mislabeled the calories on five of its Carbmaster brand bread products and thereby violated state false-advertising laws.

    The Ventura County District Attorney’s Office worked with its counterparts in Santa Barbara County and Riverside County on the lawsuit and investigation.

    Starting in 2021, the Kroger-owned stores began selling Carbmaster white bread, wheat bread, multi-seed bread and hot dog and hamburger buns. The Ventura County District Attorney’s Office said the hamburger buns were listed as having 50 calories when they actually had 100, and that the white and wheat breads were listed at 30 calories but actually had 50 calories.

    The Santa Barbara County District Attorney’s Office said that while Kroger did fix the calorie listing on the FDA nutrition panel displayed on packages following complaints, the amount shown on consumer-facing parts of the packaging remained incorrect for months.

    The grocery chain is also accused of keeping the erroneous calorie listings for the products online for nearly two years after the complaints, even after becoming aware of the investigation.

    Kroger has not yet responded to a request for comment.

    Latest Video

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email Telegram Copy Link
    News Desk
    • Website

    News Desk is the dedicated editorial force behind News On Click. Comprised of experienced journalists, writers, and editors, our team is united by a shared passion for delivering high-quality, credible news to a global audience.

    Related Posts

    United States

    McDonald’s worker in ICU after coworker allegedly throws hot oil on him

    June 9, 2026
    United States

    Karmelo Anthony convicted of murder in Texas track meet stabbing

    June 9, 2026
    United States

    Man accused of killing Iryna Zarutska on Charlotte light rail found incompetent to stand trial

    June 9, 2026
    United States

    Supreme Court awaiting Trump appeals in ballroom battle, CNN defamation lawsuit

    June 9, 2026
    United States

    Over $500,000 worth of bourbon stolen in daylight warehouse heist

    June 9, 2026
    United States

    Federal appeals court says Alabama nitrogen gas execution inflicts unconstitutional suffering

    June 9, 2026
    Add A Comment
    Leave A Reply Cancel Reply

    Don't Miss

    Jack Kochanowicz To Undergo Tommy John Surgery

    News DeskJune 9, 20260

    Angels right-hander Jack Kochanowicz told members of the media, including Jeff Fletcher of the Orange…

    Resumen semanal de la ley de deportes y entretenimiento de K&C – junio de 2026 #2

    June 9, 2026

    Liberals open to shorter metadata rules but splitting bill ‘not an option’ – National

    June 9, 2026

    Benfica confirm Mourinho to leave for Real Madrid – with ex-Fulham boss Silva hired as replacement

    June 9, 2026
    Tech news by Newsonclick.com
    Top Posts

    Carine Tardieu shooting All the Little Live Things

    June 9, 2026

    Meghan Markle Upset Over One ‘SNL’ Joke, Claims Insider

    May 10, 2026

    Miesha Tate Credits Cycle-Syncing with Transforming Her Approach to Training

    May 10, 2026

    Toddler dies after falling from North York apartment building: police – Toronto

    May 10, 2026
    Stay In Touch
    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • Vimeo

    Subscribe to Updates

    Get the latest creative news from SmartMag about art & design.

    Editors Picks

    Jack Kochanowicz To Undergo Tommy John Surgery

    June 9, 2026

    Resumen semanal de la ley de deportes y entretenimiento de K&C – junio de 2026 #2

    June 9, 2026

    Liberals open to shorter metadata rules but splitting bill ‘not an option’ – National

    June 9, 2026

    Benfica confirm Mourinho to leave for Real Madrid – with ex-Fulham boss Silva hired as replacement

    June 9, 2026
    About Us

    NewsOnClick.com is your reliable source for timely and accurate news. We are committed to delivering unbiased reporting across politics, sports, entertainment, technology, and more. Our mission is to keep you informed with credible, fact-checked content you can trust.

    We're social. Connect with us:

    Facebook X (Twitter) Instagram Pinterest YouTube
    Latest Posts

    Jack Kochanowicz To Undergo Tommy John Surgery

    June 9, 2026

    Resumen semanal de la ley de deportes y entretenimiento de K&C – junio de 2026 #2

    June 9, 2026

    Liberals open to shorter metadata rules but splitting bill ‘not an option’ – National

    June 9, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    Facebook X (Twitter) Instagram Pinterest
    • About Us
    • Editorial Policy
    • Privacy Policy
    • Terms and Conditions
    • Disclaimer
    • Advertise
    • Contact Us
    © 2026 Newsonclick.com || Designed & Powered by ❤️ Trustmomentum.com.

    Type above and press Enter to search. Press Esc to cancel.