<img src="https://dims.apnews.com/dims4/default/a35d585/2147483647/strip/true/crop/2118x1411+0+0/resize/980x653!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F32%2F58%2F7a8a6f5bddfc3d26204b21ade8c8%2F936ad31eea524e0abb05a644b23b52e0" width="100%"><small style="color: #999;">Oklahoma Republican gubernatorial candidate Mike Mazzei delivers his closing remarks at a televised debate in Tulsa, Okla., Monday, Aug. 3, 2026. (Jake Ramsey/Oklahoma Watch via AP)</small><p>2026-08-25T04:01:45Z</p>
<p>Tulsa businessman Mike Mazzei hopes to win Tuesday’s hotly contested Republican primary runoff for Oklahoma governor after President Donald Trump endorsed him and sharply attacked Mazzei’s rival, state Attorney General Gentner Drummond.</p><p>The contest between Mazzei and Drummond for the GOP nomination to replace term-limited Republican Gov. Kevin Stitt — <span><a
data-gtm-enhancement-style="LinkEnhancementA" href="https://apnews.com/article/trump-governors-meeting-democrats-white-house-invitation-a6078ac03332b55ccf8622fe261dd8bd">another Trump target</a></span> — is the biggest one on the ballot in their deeply conservative state. Drummond finished first among the nine candidates <span><a
data-gtm-enhancement-style="LinkEnhancementA" href="https://apnews.com/article/oklahoma-primary-election-senate-097714b0e2cec2d5beaeff86feff8baa">in the first round</a></span> of voting June 16, but only by about 1,100 ballots out of 403,000 cast, and both he and Mazzei received about 26% of the vote.</p><p>The winner will face Oklahoma House Minority Leader Cyndi Munson. A Democrat hasn’t won the governor’s race since 2006, and the GOP is heavily favored to keep the office in the November general election. </p>
<script data-cfasync="false" type="text/javascript">
freestar.queue.push(function () {
window.fsAdCount = window.fsAdCount + 1 || 0;
let customChannel = '/dynamic_' + fsAdCount;
let adList = document.querySelectorAll(".fs-feed-ad")
let thisAd = adList[fsAdCount];
let randId = Math.random().toString(36).slice(2);
thisAd.id = randId;
let thisPlacement = "apnews_story_feed_dynamic";
freestar.newAdSlots({
placementName: thisPlacement,
slotId: randId
}, customChannel);
});
</script>
<p>Mazzei, the 61-year-old founder of an investment management firm who served 12 years in the state Senate, received Trump’s endorsement in May. Trump has reaffirmed it several times on his Truth Social platform. <span><a
data-gtm-enhancement-style="LinkEnhancementA" href="https://truthsocial.com/@realDonaldTrump/posts/117116197583802302" target="_blank" rel="noopener">In a lengthy post</a></span> last week, Trump called Drummond a “FAKE Republican.” </p><p>Trump criticized Drummond for saying in a 2024 congressional hearing that he had no opinion on Trump’s 2021 impeachment after the Jan. 6 attack on the U.S. Capitol by Trump supporters. Drummond, a 62-year-old northern Oklahoma rancher and former Air Force pilot, was elected attorney general in 2022.</p>
<p>“You can forget about this guy — everybody I know dislikes him,” Trump said during a Monday evening call for Oklahoma Republicans. “Gentner Drummond does not stand for the values of Oklahoma, and he’s a guy that would be, I think, a disaster.”</p>
<a id="html-embed-module-110000"></a>
<!-- AP "Read More" embed (place mid-article) -->
<style>
/* Desktop-first: fully collapse by default */
#ap-readmore-embed {
display: none;
margin: 0;
padding: 0;
height: 0;
min-height: 0;
overflow: hidden;
text-align: center;
position: relative;
z-index: 2;
}
/* Only show on mobile */
@media (max-width: 767px) {
#ap-readmore-embed {
display: block;
margin: 28px 0;
height: auto;
overflow: visible;
}
}
#ap-readmore-embed .ap-readmore-btn {
appearance: none;
-webkit-appearance: none;
border: 0;
background: #000;
color: #fff;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 10px;
padding: 14px 22px;
border-radius: 999px;
font-family: inherit, "AP Sans", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
font-weight: 700;
font-size: 16px;
letter-spacing: 0.2px;
line-height: 1;
box-shadow: 0 10px 18px rgba(0,0,0,0.12);
transition: transform 120ms ease, box-shadow 120ms ease, opacity 120ms ease;
touch-action: manipulation;
-webkit-tap-highlight-color: transparent;
position: relative;
z-index: 3;
}
#ap-readmore-embed .ap-readmore-btn:hover {
transform: translateY(-1px);
box-shadow: 0 14px 22px rgba(0,0,0,0.16);
}
#ap-readmore-embed .ap-readmore-btn:active {
transform: translateY(0);
box-shadow: 0 10px 18px rgba(0,0,0,0.12);
opacity: 0.95;
}
#ap-readmore-embed .ap-readmore-btn:focus-visible {
outline: 3px solid rgba(228, 0, 43, 0.35);
outline-offset: 3px;
}
#ap-readmore-embed .ap-readmore-icon {
width: 10px;
height: 10px;
border-right: 2px solid currentColor;
border-bottom: 2px solid currentColor;
transform: rotate(45deg);
margin-top: -2px;
}
#ap-readmore-embed .ap-readmore-fade {
display: none;
height: 48px;
margin-top: -48px;
pointer-events: none;
background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,1));
}
</style>
<button type="button" id="apReadMoreBtn" aria-expanded="false">
Read More <span aria-hidden="true"></span>
</button>
<script>
(function () {
var APRM_EMBED_ID = "ap-readmore-embed";
var APRM_MOBILE_MQ = "(max-width: 767px)";
function APRM_onReady(fn) {
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", fn);
} else {
fn();
}
}
APRM_onReady(function () {
var APRM_embedEl = document.getElementById(APRM_EMBED_ID);
if (!APRM_embedEl) return;
// 🚨 DESKTOP: remove entire module wrapper and bail early
if (!window.matchMedia(APRM_MOBILE_MQ).matches) {
var APRM_rootModule =
APRM_embedEl.closest(".HTMLModuleEnhancement") ||
APRM_embedEl.closest(".HtmlModule");
if (APRM_rootModule && APRM_rootModule.parentNode) {
APRM_rootModule.parentNode.removeChild(APRM_rootModule);
} else if (APRM_embedEl.parentNode) {
APRM_embedEl.parentNode.removeChild(APRM_embedEl);
}
return; // stop the rest of the script from running
}
});
})();
</script>
<script>
(function () {
var EMBED_ID = "ap-readmore-embed";
var BTN_ID = "apReadMoreBtn";
var FADE_ID = "apReadMoreFade";
var STOP_SELECTOR = ".Page-below";
var SIGN_IN_GATE_SELECTOR = ".sign-in-gate-content";
var HIDDEN_ATTR = "data-ap-readmore-hidden";
var MOBILE_MQ = "(max-width: 767px)";
function ready(fn) {
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", fn);
} else {
fn();
}
}
function isElementNode(n) {
return n && n.nodeType === 1;
}
function cancelEvent(e) {
if (!e) return;
if (typeof e.preventDefault === "function") e.preventDefault();
if (typeof e.stopPropagation === "function") e.stopPropagation();
if (typeof e.stopImmediatePropagation === "function") e.stopImmediatePropagation();
e.cancelBubble = true;
e.returnValue = false;
}
function collapseDesktopEmbed(embed) {
if (!embed) return true;
if (!window.matchMedia(MOBILE_MQ).matches) {
var maybeWrappers = [
embed.parentElement,
embed.closest(".html-embed"),
embed.closest("[data-type='htmlembed']"),
embed.closest("[class*='embed']"),
embed.closest("[class*='Embed']")
].filter(Boolean);
embed.style.display = "none";
embed.style.margin = "0";
embed.style.padding = "0";
embed.style.height = "0";
embed.style.minHeight = "0";
embed.style.overflow = "hidden";
maybeWrappers.forEach(function (el) {
el.style.margin = "0";
el.style.padding = "0";
el.style.height = "0";
el.style.minHeight = "0";
el.style.overflow = "hidden";
});
if (embed.parentNode) {
embed.parentNode.removeChild(embed);
}
return true;
}
return false;
}
ready(function () {
var embed = document.getElementById(EMBED_ID);
var btn = document.getElementById(BTN_ID);
var fade = document.getElementById(FADE_ID);
if (!embed || !btn) return;
if (collapseDesktopEmbed(embed)) return;
var signInGate = document.querySelector(SIGN_IN_GATE_SELECTOR);
if (signInGate) {
embed.innerHTML = "";
return;
}
// — Analytics: impression when embed enters viewport —
if ("IntersectionObserver" in window) {
var io = new IntersectionObserver(function (entries, observer) {
if (entries[0].isIntersecting) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: "ap_readmore_impression" });
observer.disconnect();
}
}, { threshold: 0 });
io.observe(btn);
}
var stopEl = document.querySelector(STOP_SELECTOR);
if (!stopEl) return;
var rootCandidates = [
embed.closest(".Page"),
embed.closest("article"),
embed.closest("main"),
document.body
].filter(Boolean);
var root = rootCandidates.find(function (c) {
return c.contains(stopEl);
}) || document.body;
var all = root.getElementsByTagName("*");
var hidden = [];
for (var i = 0; i < all.length; i++) {
var el = all[i];
if (embed.contains(el)) continue;
if (el === stopEl || stopEl.contains(el)) continue;
var tag = el.tagName ? el.tagName.toLowerCase() : "";
if (tag === "script" || tag === "style" || tag === "link" || tag === "meta") continue;
if (!(embed.compareDocumentPosition(el) & Node.DOCUMENT_POSITION_FOLLOWING)) continue;
if (!(el.compareDocumentPosition(stopEl) & Node.DOCUMENT_POSITION_FOLLOWING)) continue;
if (el.contains(embed) || el.contains(stopEl)) continue;
el.setAttribute(HIDDEN_ATTR, "1");
el.style.display = "none";
hidden.push(el);
}
if (!hidden.length) return;
fade.style.display = "block";
var revealed = false;
var suppressClick = false;
function reveal(e) {
cancelEvent(e);
if (revealed) return false;
revealed = true;
// — Analytics: click —
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: "ap_readmore_click" });
hidden.forEach(function (el) {
if (!isElementNode(el)) return;
if (el.getAttribute(HIDDEN_ATTR) === "1") {
el.style.display = "";
el.removeAttribute(HIDDEN_ATTR);
}
});
btn.setAttribute("aria-expanded", "true");
if (embed.parentNode) {
embed.parentNode.removeChild(embed);
}
return false;
}
if (window.PointerEvent) {
btn.addEventListener("pointerup", function (e) {
suppressClick = true;
return reveal(e);
}, false);
}
btn.addEventListener("touchend", function (e) {
suppressClick = true;
return reveal(e);
}, false);
btn.addEventListener("click", function (e) {
if (suppressClick) {
suppressClick = false;
cancelEvent(e);
return false;
}
return reveal(e);
}, false);
btn.onclick = function (e) {
return reveal(e || window.event);
};
});
})();
</script>
<p>
</p>
<p>Trump carried Oklahoma with more than 65% of the vote in each of his three races for president without losing a single county. Drummond has suggested that Mazzei received Trump’s endorsement for hiring a consulting firm operated by longtime Trump friend and adviser Roger Stone, with Mazzei’s campaign paying it $67,500, according to campaign finance records. </p><p>Both Trump and Drummond have criticized Stitt, who endorsed Mazzei. The departing governor drew Trump’s ire earlier this year while leading the National Governors Association in a dispute over invitations to White House events, with Trump attacking Stitt as a “RINO,” or “Republican in Name Only.” Drummond said in an interview <span><a
data-gtm-enhancement-style="LinkEnhancementA" href="https://www.facebook.com/watch/?v=1548959606583272" target="_blank" rel="noopener">with Oklahoma City’s KOCO-TV</a></span> last month that under Stitt, the state had seen eight years of “mediocrity and flipping.”</p>
<script data-cfasync="false" type="text/javascript">
freestar.queue.push(function () {
window.fsAdCount = window.fsAdCount + 1 || 0;
let customChannel = '/dynamic_' + fsAdCount;
let adList = document.querySelectorAll(".fs-feed-ad")
let thisAd = adList[fsAdCount];
let randId = Math.random().toString(36).slice(2);
thisAd.id = randId;
let thisPlacement = "apnews_story_feed_dynamic";
freestar.newAdSlots({
placementName: thisPlacement,
slotId: randId
}, customChannel);
});
</script>
<p>“I respect the president,” Drummond said. “He’s a great leader.”</p>
<a id="html-embed-module-a00000"></a>
<!-- AP Morning Wire Newsletter Embed (self-contained) -->
<!-- Red AP Prompt Bar -->
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="6" viewBox="0 0 48 6" fill="none">
<rect width="48" height="5.76" fill="#FF1818"/>
</svg>
<strong>Sign up for Morning Wire:</strong>
Our flagship newsletter breaks down the biggest headlines of the day.
<form novalidate>
<input
type="text"
autocomplete="off"
tabindex="-1"
aria-hidden="true"
/>
<label for="ap-newsletter-email-nlmw25">Email address</label>
<input
id="ap-newsletter-email-nlmw25"
name="email"
type="email"
inputmode="email"
autocomplete="email"
placeholder="Email address"
aria-describedby="ap-newsletter-help-nlmw25 ap-newsletter-error-nlmw25"
required
/>
<button type="submit">
Sign up
</button>
<label>
<input type="checkbox" name="disclaimer" />
<span>
By checking this box, you agree to AP's
<a href="https://apnews.com/termsofservice" target="_blank" rel="noopener noreferrer">Terms of Use</a>
and acknowledge that AP may collect and use your data pursuant to our
<a href="https://apnews.com/privacystatement" target="_blank" rel="noopener noreferrer">Privacy Policy</a>.
</span>
</label>
<p id="ap-newsletter-error-nlmw25" role="alert" aria-live="polite"></p>
<p id="ap-newsletter-help-nlmw25"></p>
</form>
<style>
[data-ap-newsletter-embed-nlmw25] {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 16px;
width: 100%;
max-width: 720px;
min-width: 0;
padding: 16px 16px 16px 16px;
box-sizing: border-box;
border-radius: 8px;
border: 1px solid #E6E6E7;
background: #F2F2F2;
box-shadow: 0 4px 4px 4px rgba(102, 102, 102, 0.40);
font-family: "AP Var", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
color: #000;
container-type: inline-size;
container-name: ap-nl-nlmw25;
margin-left: auto;
margin-right: auto;
align-self: center;
justify-self: center;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-accent-nlmw25 {
width: 48px;
height: 6px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-title-nlmw25 {
align-self: stretch;
color: #000;
font-family: "AP Var", system-ui, sans-serif;
font-size: 18px;
font-style: normal;
font-weight: 400;
line-height: 150%;
margin: 0;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-title-nlmw25 strong {
font-weight: 700;
line-height: 130%;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-form-nlmw25 {
margin: 0;
display: flex;
flex-direction: column;
gap: 16px;
width: 100%;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-row-nlmw25 {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
flex-wrap: nowrap;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-nlmw25 {
width: 100%;
min-width: 0;
border: 1px solid #E6E6E7;
border-radius: 10px;
padding: 11px 12px;
font-size: 14px;
line-height: 1.2;
outline: none;
box-sizing: border-box;
background: #fff;
color: #000;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-wrapper-nlmw25 {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
flex: 1 0 0;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-nlmw25:focus {
border-color: rgba(0,0,0,.35);
box-shadow: 0 0 0 3px rgba(255, 50, 46, 0.18);
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-button-nlmw25 {
display: flex;
justify-content: center;
align-items: center;
height: 40px;
max-height: 40px;
padding: 8px 16px;
border-radius: 24px;
background: #191919;
color: #ffffff;
border: none;
font-size: 14px;
font-weight: 600;
line-height: 1;
cursor: pointer;
white-space: nowrap;
transition: background 150ms ease, transform 120ms ease;
flex: 0 0 auto;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-button-nlmw25:hover {
background: #000000;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-button-nlmw25:active {
transform: scale(0.98);
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-disclaimer-nlmw25 {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
align-self: stretch;
background: rgba(255, 255, 255, 0);
background-blend-mode: multiply;
margin: 0;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-check-nlmw25 {
display: flex;
gap: 8px;
align-items: flex-start;
user-select: none;
cursor: pointer;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-checkbox-nlmw25 {
margin-top: 2px;
width: 16px;
height: 16px;
accent-color: var(--ap-accent);
flex: 0 0 auto;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-checktext-nlmw25 {
font-size: 12px;
line-height: 1.35;
color: var(--ap-muted);
}
[data-ap-newsletter-embed-nlmw25] a {
color: var(--ap-text);
text-decoration: underline;
text-underline-offset: 2px;
}
[data-ap-newsletter-embed-nlmw25] a:hover {
color: var(--ap-accent);
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-messages-nlmw25 {
margin: 0;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-error-nlmw25:empty,
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-help-nlmw25:empty {
display: none;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-help-nlmw25 {
margin: 0;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-messages-nlmw25:has(.ap-newsletter-error-nlmw25:empty):has(.ap-newsletter-help-nlmw25:empty) {
display: none;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-error-nlmw25 {
margin: 0;
font-size: 12px;
line-height: 1.35;
color: var(--ap-error);
min-height: 1.2em;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-help-nlmw25 {
margin: 6px 0 0;
font-size: 12px;
line-height: 1.35;
color: var(--ap-muted);
}
[data-ap-newsletter-embed-nlmw25].is-submitted-nlmw25 .ap-newsletter-input-nlmw25 {
background: rgba(0,0,0,.04);
border-color: rgba(0,0,0,.10);
color: rgba(0,0,0,.70);
cursor: default;
}
[data-ap-newsletter-embed-nlmw25].is-submitted-nlmw25 .ap-newsletter-button-nlmw25 {
display: none;
}
[data-ap-newsletter-embed-nlmw25].is-submitted-nlmw25 .ap-newsletter-disclaimer-nlmw25 {
display: none;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-bot-field-nlmw25 {
position: absolute !important;
left: -9999px;
top: -9999px;
width: 1px;
height: 1px;
opacity: 0;
pointer-events: none;
}
[data-ap-newsletter-embed-nlmw25] .ap-sr-only-nlmw25 {
position: absolute !important;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
}
@container ap-nl-nlmw25 (max-width: 420px) {
[data-ap-newsletter-embed-nlmw25] {
max-width: 350px;
padding: 16px;
gap: 12px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-form-nlmw25 {
gap: 12px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-row-nlmw25 {
flex-direction: column;
align-items: stretch;
gap: 12px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-button-nlmw25 {
width: 100%;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-wrapper-nlmw25,
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-nlmw25 {
width: 100%;
}
}
@media (max-width: 420px) {
[data-ap-newsletter-embed-nlmw25] {
max-width: 350px;
padding: 16px;
gap: 12px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-form-nlmw25 {
gap: 12px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-row-nlmw25 {
flex-direction: column;
align-items: stretch;
gap: 12px;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-button-nlmw25 {
width: 100%;
}
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-wrapper-nlmw25,
[data-ap-newsletter-embed-nlmw25] .ap-newsletter-input-nlmw25 {
width: 100%;
}
}
</style>
<script>
const NL_DEFAULT_CONFIG_NLMW25 = {
apiUrl: '/api/newsletter/signup',
defaultNewsletterList: ['Morning Wire Subscribers'],
recaptchaSiteKey: '6Lf06WQrAAAAABB9Ms3Gru2SFLSxUYrLqP5YLDMn',
recaptchaHeader: 'X-ReCaptcha-Token',
/*
UTM params to append to the page URL used as the request referrer.
This does NOT modify the subscription payload.
*/
referrerUtmParams: {
utm_source: 'embed'
},
messages: {
invalidEmail: 'Please use a valid email address.',
disclaimerRequired: 'Please check disclaimer before proceeding.',
invalidBoth: 'Please provide a valid email address, and check disclaimer.',
genericError: 'Something went wrong. Please try again later.',
botBlocked: 'Please try again.',
recaptchaLoadFail: 'Failed to load reCAPTCHA. Please refresh the page and try again.',
recaptchaRequired: 'reCAPTCHA verification is required. Please ensure reCAPTCHA is loaded on this page.',
recaptchaFailed: 'reCAPTCHA verification failed. Please refresh the page and try again.',
verificationFailed: 'Verification failed. Please try again.'
}
};
(function (nlConfigNLMW25) {
const nlEmailRegexNLMW25 = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
const nlRecaptchaCheckIntervalNLMW25 = 100;
const nlRecaptchaMaxAttemptsNLMW25 = 50;
function nlIsValidEmailNLMW25(email) {
return nlEmailRegexNLMW25.test(String(email || '').trim());
}
function nlBuildReferrerUrlNLMW25(utmParams) {
try {
const url = new URL(window.location.href);
Object.entries(utmParams || {}).forEach(([key, value]) => {
if (value !== undefined && value !== null && value !== '') {
url.searchParams.set(key, value);
}
});
return url.toString();
} catch (err) {
console.warn('Unable to build referrer URL with UTM params:', err);
return window.location.href;
}
}
function nlLoadRecaptchaScriptNLMW25(siteKey, callback) {
if (typeof window.grecaptcha !== 'undefined') {
callback && callback();
return;
}
const existingScript = document.querySelector('script[src*="recaptcha/api.js"]');
if (existingScript) {
const checkInterval = setInterval(() => {
if (typeof window.grecaptcha !== 'undefined') {
clearInterval(checkInterval);
callback && callback();
}
}, nlRecaptchaCheckIntervalNLMW25);
return;
}
const script = document.createElement('script');
script.src = `https://www.google.com/recaptcha/api.js?render=${encodeURIComponent(siteKey)}`;
script.async = true;
script.defer = true;
script.onload = () => callback && callback();
script.onerror = () => {
console.error('Failed to load reCAPTCHA script');
callback && callback(false);
};
document.head.appendChild(script);
}
function nlWaitForRecaptchaNLMW25(callback, maxAttempts = nlRecaptchaMaxAttemptsNLMW25) {
let attempts = 0;
const checkRecaptcha = () => {
attempts++;
if (
typeof window.grecaptcha !== 'undefined' &&
typeof window.grecaptcha.execute === 'function'
) {
callback(true);
} else if (attempts < maxAttempts) {
setTimeout(checkRecaptcha, nlRecaptchaCheckIntervalNLMW25);
} else {
callback(false);
}
};
checkRecaptcha();
}
function nlExecuteRecaptchaNLMW25() {
return window.grecaptcha.execute()
.then(token => token && token.length > 0 ? token : null)
.catch(error => {
const errorMsg = error?.message || String(error);
if (
errorMsg.includes('No reCAPTCHA clients') ||
errorMsg.includes('not initialized') ||
errorMsg.includes('Invalid site key')
) {
throw new Error('recaptcha_failed');
}
throw error;
});
}
const nlEmbedsNLMW25 = document.querySelectorAll('[data-ap-newsletter-embed-nlmw25]');
nlEmbedsNLMW25.forEach((rootNLMW25, idxNLMW25) => {
const formNLMW25 = rootNLMW25.querySelector('.ap-newsletter-form-nlmw25');
const emailInputNLMW25 = rootNLMW25.querySelector('.ap-newsletter-input-nlmw25');
const checkboxNLMW25 = rootNLMW25.querySelector('.ap-newsletter-checkbox-nlmw25');
const errorElNLMW25 = rootNLMW25.querySelector('.ap-newsletter-error-nlmw25');
const helpElNLMW25 = rootNLMW25.querySelector('.ap-newsletter-help-nlmw25');
const botFieldNLMW25 = rootNLMW25.querySelector('.ap-newsletter-bot-field-nlmw25');
const recaptchaDivNLMW25 = rootNLMW25.querySelector('.ap-newsletter-recaptcha-nlmw25');
let nlIsSubmittingNLMW25 = false;
const newsletterListNLMW25 = nlConfigNLMW25.defaultNewsletterList;
const recaptchaSiteKeyNLMW25 = nlConfigNLMW25.recaptchaSiteKey;
const requestReferrerNLMW25 = nlBuildReferrerUrlNLMW25(nlConfigNLMW25.referrerUtmParams);
const emailIdNLMW25 = `nl-email-nlmw25-${idxNLMW25}`;
const helpIdNLMW25 = `nl-help-nlmw25-${idxNLMW25}`;
const errIdNLMW25 = `nl-error-nlmw25-${idxNLMW25}`;
const recaptchaIdNLMW25 = `recaptcha-nlmw25-${idxNLMW25}`;
emailInputNLMW25.id = emailIdNLMW25;
helpElNLMW25.id = helpIdNLMW25;
errorElNLMW25.id = errIdNLMW25;
if (recaptchaDivNLMW25) {
recaptchaDivNLMW25.id = recaptchaIdNLMW25;
if (recaptchaSiteKeyNLMW25) {
recaptchaDivNLMW25.setAttribute('data-sitekey', recaptchaSiteKeyNLMW25);
}
}
emailInputNLMW25.setAttribute('aria-describedby', `${helpIdNLMW25} ${errIdNLMW25}`);
const nlSetErrorNLMW25 = (msg) => {
errorElNLMW25.textContent = msg || '';
errorElNLMW25.style.display = msg ? 'block' : 'none';
};
const nlHideErrorNLMW25 = () => nlSetErrorNLMW25('');
const nlSetSubmittedNLMW25 = () => {
rootNLMW25.classList.add('is-submitted-nlmw25');
emailInputNLMW25.value = 'SUBMITTED';
emailInputNLMW25.style.fontWeight = 'bold';
emailInputNLMW25.setAttribute('readonly', 'readonly');
emailInputNLMW25.setAttribute('aria-invalid', 'false');
nlHideErrorNLMW25();
};
const nlSubscribeNLMW25 = (tokenNLMW25) => {
if (nlIsSubmittingNLMW25) return;
if (botFieldNLMW25?.value) {
console.warn('Bot field filled --', botFieldNLMW25.value);
nlSetErrorNLMW25(nlConfigNLMW25.messages.botBlocked);
return;
}
const emailNLMW25 = String(emailInputNLMW25.value || '').trim();
const emailOkNLMW25 = nlIsValidEmailNLMW25(emailNLMW25);
const disclaimerOkNLMW25 = checkboxNLMW25.checked;
if (!emailOkNLMW25 && !disclaimerOkNLMW25) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.invalidBoth);
emailInputNLMW25.setAttribute('aria-invalid', 'true');
emailInputNLMW25.focus();
return;
}
if (!emailOkNLMW25) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.invalidEmail);
emailInputNLMW25.setAttribute('aria-invalid', 'true');
emailInputNLMW25.focus();
return;
}
if (!disclaimerOkNLMW25) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.disclaimerRequired);
checkboxNLMW25.focus();
return;
}
nlIsSubmittingNLMW25 = true;
const headersNLMW25 = { 'Content-Type': 'application/json' };
if (tokenNLMW25) {
headersNLMW25[nlConfigNLMW25.recaptchaHeader] = tokenNLMW25;
}
fetch(nlConfigNLMW25.apiUrl, {
method: 'POST',
headers: headersNLMW25,
body: JSON.stringify({
emailId: emailNLMW25,
newsLetterListToSubscribe: newsletterListNLMW25
}),
/*
This is the key change:
send the current page URL + UTM params as the referrer.
Example:
https://.../article/... ?utm_source=embed
*/
referrer: requestReferrerNLMW25,
referrerPolicy: 'strict-origin-when-cross-origin'
})
.then(response =>
response.json()
.then(data => ({ status: response.status, data }))
.catch(() => ({ status: response.status, data: null }))
)
.then(result => {
nlIsSubmittingNLMW25 = false;
const hasVerificationErrorNLMW25 = result.data && (
result.data.message?.includes('Verification Failed') ||
result.data.error?.includes('Verification Failed')
);
if (hasVerificationErrorNLMW25) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.verificationFailed);
return;
}
if (result.status === 200) {
if (typeof window.NLSignup === 'function') {
try { window.NLSignup(emailNLMW25); } catch (err) {}
}
window.dispatchEvent(new CustomEvent('nl:newsletterSignup:nlmw25', {
detail: {
email: emailNLMW25,
source: 'Morning Wire Embed',
newsletters: newsletterListNLMW25,
referrer: requestReferrerNLMW25
}
}));
nlSetSubmittedNLMW25();
} else {
const errorMsgNLMW25 =
result.data?.message ||
result.data?.error ||
nlConfigNLMW25.messages.genericError;
nlSetErrorNLMW25(errorMsgNLMW25);
}
})
.catch(error => {
nlIsSubmittingNLMW25 = false;
console.error('Newsletter subscription error:', error);
nlSetErrorNLMW25(nlConfigNLMW25.messages.genericError);
});
};
const nlAttemptRecaptchaNLMW25 = () => {
if (!recaptchaSiteKeyNLMW25) {
nlWaitForRecaptchaNLMW25(isAvailable => {
if (!isAvailable) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.recaptchaRequired);
nlIsSubmittingNLMW25 = false;
return;
}
nlExecuteRecaptchaNLMW25()
.then(token => nlSubscribeNLMW25(token))
.catch(() => nlSubscribeNLMW25(null));
});
return;
}
nlLoadRecaptchaScriptNLMW25(recaptchaSiteKeyNLMW25, success => {
if (success === false) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.recaptchaLoadFail);
nlIsSubmittingNLMW25 = false;
return;
}
nlWaitForRecaptchaNLMW25(isAvailable => {
if (!isAvailable) {
nlSetErrorNLMW25(nlConfigNLMW25.messages.recaptchaRequired);
nlIsSubmittingNLMW25 = false;
return;
}
const runExecuteNLMW25 = () => {
nlExecuteRecaptchaNLMW25()
.then(token => nlSubscribeNLMW25(token))
.catch(error => {
if (error?.message === 'recaptcha_failed') {
nlSetErrorNLMW25(nlConfigNLMW25.messages.recaptchaFailed);
nlIsSubmittingNLMW25 = false;
} else {
console.warn('reCAPTCHA error:', error);
nlSubscribeNLMW25(null);
}
});
};
if (typeof window.grecaptcha.ready === 'function') {
window.grecaptcha.ready(runExecuteNLMW25);
} else {
runExecuteNLMW25();
}
});
});
};
formNLMW25.addEventListener('submit', e => {
e.preventDefault();
if (rootNLMW25.classList.contains('is-submitted-nlmw25') || nlIsSubmittingNLMW25) return;
nlHideErrorNLMW25();
nlAttemptRecaptchaNLMW25();
});
emailInputNLMW25.addEventListener('input', () => {
nlHideErrorNLMW25();
emailInputNLMW25.setAttribute('aria-invalid', 'false');
});
checkboxNLMW25.addEventListener('change', nlHideErrorNLMW25);
});
})(NL_DEFAULT_CONFIG_NLMW25);
</script>
<p>
</p>
<p>The 10-week runoff campaign has spawned more than $9 million in television and digital advertising, most of it from independent groups, according to the ad-track service AdImpact. That’s on top of the nearly $40 million spent in the governor’s race ahead of the runoff.</p><p>While Drummond has raised about $4.8 million more in cash contributions, Mazzei has funded his campaign largely through personal loans of at least $11.9 million. Drummond has loaned his campaign at least $3.5 million.</p>
</bsp-story-page>
<a href="https://apnews.com/author/john-hanna">
<picture data-crop="small-square">
<source type="image/webp" width="100" height="100" srcset="https://dims.apnews.com/dims4/default/97d6486/2147483647/strip/true/crop/1890x1890+0+114/resize/100x100!/format/webp/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F55%2F14%2Ff5acc83d4bc2baee3c81d3905cfe%2Fhanna-11-11-24d-1.JPG">
<source width="100" height="100" srcset="https://dims.apnews.com/dims4/default/dda1410/2147483647/strip/true/crop/1890x1890+0+114/resize/100x100!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F55%2F14%2Ff5acc83d4bc2baee3c81d3905cfe%2Fhanna-11-11-24d-1.JPG">
<img alt="JOHN HANNA" width="100" height="100" src="https://dims.apnews.com/dims4/default/dda1410/2147483647/strip/true/crop/1890x1890+0+114/resize/100x100!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F55%2F14%2Ff5acc83d4bc2baee3c81d3905cfe%2Fhanna-11-11-24d-1.JPG" loading="lazy"
>
</picture>
</a>
<a href="https://apnews.com/author/john-hanna">JOHN HANNA</a>
Hanna covers U.S. news, including politics and state government. He’s worked for AP in Topeka, Kansas, since 1986 and is a member of the Kansas Newspaper Hall of Fame.
<a rel="noreferrer" href="/cdn-cgi/l/email-protection#d3b9b7bbb2bdbdb293b2a3fdbca1b4" target="_blank" data-social-service="mailto">
<svg>
<use xlink:href="#mono-icon-mailto"></use>
</svg>
<span>
mailto
</span>
</a>