Close Menu

    Subscribe to Updates

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

    What's Hot

    England vs New Zealand 2026: Nottingham Weather Forecast and Trent Bridge Pitch Report for Final Test

    June 25, 2026

    How Much Travis Kelce Is Worth Ahead Of Taylor Swift Wedding

    June 25, 2026

    Raptors draft Jaden Bradley 50th overall

    June 25, 2026
    Facebook X (Twitter) Instagram
    Select Language
    Facebook X (Twitter) Instagram
    NEWS ON CLICK
    Subscribe
    Thursday, June 25
    • 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»A moderate earthquake rocks Northern California, but no immediate reports of damage or injuries
    United States

    A moderate earthquake rocks Northern California, but no immediate reports of damage or injuries

    News DeskBy News DeskJune 24, 2026No Comments7 Mins Read
    Share Facebook Twitter Pinterest Copy Link LinkedIn Tumblr Email VKontakte Telegram
    A moderate earthquake rocks Northern California, but no immediate reports of damage or injuries
    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);
    }
    })();


    In this July 10, 2002, file photo, an aerial view of the Georgia Pacific timber mill is seen in the foreground, in Fort Bragg, Calif. (AP Photo/Marcio Jose Sanchez) ** FILE **


    In this July 10, 2002, file …

    more >


    By Associated Press –

    Wednesday, June 24, 2026


    • A 5.6 magnitude earthquake struck Northern California on Wednesday morning.
    • The epicenter was about 140 miles northeast of San Francisco.
    • The quake was felt widely, including in Fort Bragg, California.
    • No major damage or injuries have been reported so far.



    FORT BRAGG, Calif. — A moderate earthquake shook a remote area of Northern California on Wednesday morning, but there were no immediate reports of major damage or injuries.

    The epicenter of the quake, with a preliminary magnitude of 5.6, was about 140 miles (225 kilometers) northeast of San Francisco, according to the U.S. Geological Survey. It was felt widely, including in the fishing city of Fort Bragg. The initial quake was centered inland about 50 miles (80 kilometers) east of Fort Bragg at 8:10 a.m. local time, and the U.S. Geological Survey said it was about 5 miles (8 kilometers) deep.

    Fawnell Dale, a dispatch supervisor at the Mendocino County Sheriff’s Office, described the shaking as mild and said they haven’t gotten any reports of any damage or injuries.

    Workers at Mendocino Coast Pharmacy were getting ready to open for the day when they all got quake alarms on their cellphones.

    “We looked at our phones, then we looked at each other, and that’s when we felt it,” said Angie, who declined to give her last name. She described it as a rolling shake that lasted just a few seconds. “It wasn’t that big, but it was a little scary,” she said.

    Andrea Medina, who works at Cafe One in Fort Bragg, said she felt it.

    “Things were shaking,” she said. “But it’s done, not too strong.”

    A 2.5 magnitude quake struck near the epicenter a few minutes later.

    Copyright © 2026 The Washington Times, LLC.

    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

    Snap sued over rape of minor who connected to adult attacker on Snapchat

    June 24, 2026
    United States

    Court filing reveals President Trump spoke to Live Nation CEO before antitrust case was settled

    June 24, 2026
    United States

    Pentagon restores mandatory flu shots for all recruits as boot camp outbreak sickens nearly 300

    June 24, 2026
    United States

    Contrary to reports, giraffe named Gracie still missing in Texas

    June 24, 2026
    United States

    Israel critics sweep New York House primaries, signaling Democratic shift

    June 24, 2026
    United States

    Transgender showdown looms at Daughters of the American Revolution’s annual meeting

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

    Don't Miss

    England vs New Zealand 2026: Nottingham Weather Forecast and Trent Bridge Pitch Report for Final Test

    News DeskJune 25, 20260

    The stage is perfectly set at Trent Bridge for a thrilling series decider as England…

    How Much Travis Kelce Is Worth Ahead Of Taylor Swift Wedding

    June 25, 2026

    Raptors draft Jaden Bradley 50th overall

    June 25, 2026

    Two powerful earthquakes of magnitude 7.2 and 7.5 struck northern Venezuela on Wednesday afternoon, hitting Caracas | International

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

    Vitamina K para mujeres en menopausia: alimentos y beneficios para huesos y peso

    May 14, 2026

    Knicks finish sweep of Cavs, make first NBA Finals since 1999

    May 26, 2026

    IPL 2026 Playoffs: Broadcast, Live streaming details – When and Where to watch in India, Australia, USA, UK & other countries

    May 26, 2026

    Benfica will double Mourinho asking price when clause expires

    May 26, 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

    England vs New Zealand 2026: Nottingham Weather Forecast and Trent Bridge Pitch Report for Final Test

    June 25, 2026

    How Much Travis Kelce Is Worth Ahead Of Taylor Swift Wedding

    June 25, 2026

    Raptors draft Jaden Bradley 50th overall

    June 25, 2026

    Two powerful earthquakes of magnitude 7.2 and 7.5 struck northern Venezuela on Wednesday afternoon, hitting Caracas | International

    June 25, 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

    England vs New Zealand 2026: Nottingham Weather Forecast and Trent Bridge Pitch Report for Final Test

    June 25, 2026

    How Much Travis Kelce Is Worth Ahead Of Taylor Swift Wedding

    June 25, 2026

    Raptors draft Jaden Bradley 50th overall

    June 25, 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.