1/* @license GNU-GPL-2.0-or-later https://raw.githubusercontent.com/RobLoach/jquery-once/2.2.3/LICENSE.md */ 2/*! 3 * jQuery Once v2.2.3 - http://github.com/robloach/jquery-once 4 * @license MIT, GPL-2.0 5 * http://opensource.org/licenses/MIT 6 * http://opensource.org/licenses/GPL-2.0 7 */ 8(function(e){"use strict";if(typeof exports==="object"&&typeof exports.nodeName!=="string"){e(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(t){"use strict";var r=function(e){e=e||"once";if(typeof e!=="string"){throw new TypeError("The jQuery Once id parameter must be a string")}return e};t.fn.once=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)!==true}).data(n,true)};t.fn.removeOnce=function(e){return this.findOnce(e).removeData("jquery-once-"+r(e))};t.fn.findOnce=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)===true})}}); 9 10/* @license GPL-2.0-or-later https://www.drupal.org/licensing/faq */ 11(function(){const settingsElement=document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]');window.drupalSettings={};if(settingsElement!==null)window.drupalSettings=JSON.parse(settingsElement.textContent);})();; 12window.Drupal={behaviors:{},locale:{}};(function(Drupal,drupalSettings,drupalTranslations,console,Proxy,Reflect){Drupal.throwError=function(error){setTimeout(()=>{throw error;},0);};Drupal.attachBehaviors=function(context,settings){context=context||document;settings=settings||drupalSettings;const behaviors=Drupal.behaviors;Object.keys(behaviors||{}).forEach((i)=>{if(typeof behaviors[i].attach==='function')try{behaviors[i].attach(context,settings);}catch(e){Drupal.throwError(e);}});};Drupal.detachBehaviors=function(context,settings,trigger){context=context||document;settings=settings||drupalSettings;trigger=trigger||'unload';const behaviors=Drupal.behaviors;Object.keys(behaviors||{}).forEach((i)=>{if(typeof behaviors[i].detach==='function')try{behaviors[i].detach(context,settings,trigger);}catch(e){Drupal.throwError(e);}});};Drupal.checkPlain=function(str){str=str.toString().replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''');return str;};Drupal.formatString=function(str,args){const processedArgs={};Object.keys(args||{}).forEach((key)=>{switch(key.charAt(0)){case '@':processedArgs[key]=Drupal.checkPlain(args[key]);break;case '!':processedArgs[key]=args[key];break;default:processedArgs[key]=Drupal.theme('placeholder',args[key]);break;}});return Drupal.stringReplace(str,processedArgs,null);};Drupal.stringReplace=function(str,args,keys){if(str.length===0)return str;if(!Array.isArray(keys)){keys=Object.keys(args||{});keys.sort((a,b)=>a.length-b.length);}if(keys.length===0)return str;const key=keys.pop();const fragments=str.split(key);if(keys.length){for(let i=0;i<fragments.length;i++)fragments[i]=Drupal.stringReplace(fragments[i],args,keys.slice(0));}return fragments.join(args[key]);};Drupal.t=function(str,args,options){options=options||{};options.context=options.context||'';if(drupalTranslations?.strings?.[options.context]?.[str])str=drupalTranslations.strings[options.context][str];if(args)str=Drupal.formatString(str,args);return str;};Drupal.url=function(path){return drupalSettings.path.baseUrl+drupalSettings.path.pathPrefix+path;};Drupal.url.toAbsolute=function(url){const urlParsingNode=document.createElement('a');urlParsingNode.setAttribute('href',url);return urlParsingNode.href;};Drupal.url.isLocal=function(url){let absoluteUrl=Drupal.url.toAbsolute(url);let {protocol}=window.location;if(protocol==='http:'&&absoluteUrl.startsWith('https:'))protocol='https:';let baseUrl=`${protocol}//${window.location.host}${drupalSettings.path.baseUrl.slice(0,-1)}`;try{absoluteUrl=decodeURIComponent(absoluteUrl);}catch(e){}try{baseUrl=decodeURIComponent(baseUrl);}catch(e){}return absoluteUrl===baseUrl||absoluteUrl.startsWith(`${baseUrl}/`);};Drupal.formatPlural=function(count,singular,plural,args,options){args=args||{};args['@count']=count;const pluralDelimiter=drupalSettings.pluralDelimiter;const translations=Drupal.t(singular+pluralDelimiter+plural,args,options).split(pluralDelimiter);let index=0;
12if(drupalTranslations?.pluralFormula)index=count in drupalTranslations.pluralFormula?drupalTranslations.pluralFormula[count]:drupalTranslations.pluralFormula.default;else{if(args['@count']!==1)index=1;}return translations[index];};Drupal.encodePath=function(item){return window.encodeURIComponent(item).replace(/%2F/g,'/');};Drupal.deprecationError=({message})=>{if(drupalSettings.suppressDeprecationErrors===false&&console?.warn)console.warn(`[Deprecation] ${message}`);};Drupal.deprecatedProperty=({target,deprecatedProperty,message})=>{if(!Proxy||!Reflect)return target;return new Proxy(target,{get:(target,key,...rest)=>{if(key===deprecatedProperty)Drupal.deprecationError({message});return Reflect.get(target,key,...rest);}});};Drupal.theme=function(func,...args){if(typeof Drupal.theme?.[func]==='function')return Drupal.theme[func](...args);Drupal.throwError(new TypeError(`Drupal.theme.${func} must be function type.`));};Drupal.theme.placeholder=function(str){return `<em class="placeholder">${Drupal.checkPlain(str)}</em>`;};Drupal.elementIsVisible=function(elem){return !!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length);};Drupal.elementIsHidden=function(elem){return !Drupal.elementIsVisible(elem);};})(Drupal,window.drupalSettings,window.drupalTranslations,window.console,window.Proxy,window.Reflect);; 13if(window.jQuery)jQuery.noConflict();document.documentElement.className+=' js';(function(Drupal,drupalSettings){const domReady=(callback)=>{const listener=()=>{callback();document.removeEventListener('DOMContentLoaded',listener);};if(document.readyState!=='loading')setTimeout(callback,0);else document.addEventListener('DOMContentLoaded',listener);};domReady(()=>{Drupal.attachBehaviors(document,drupalSettings);});})(Drupal,window.drupalSettings);; 14jQuery(document).ready(function($){const currentPath=window.location.pathname.toLowerCase().replace(/\/$/,"");if(currentPath!=="/nhra")return;const schedulePageUrl="/schedule/2026";const today=new Date();today.setHours(0,0,0,0);const eventBackgrounds={"Gainesville-Mar":"/sites/default/files/2026-02/GFL_Historical%20%281%29.jpg","Chandler-Mar":"/sites/default/files/2026-02/PA1_Historical.jpg","Pomona-Apr":"/sites/default/files/2026-02/PC1_Historical.jpg","Concord-Apr":"/sites/default/files/2026-02/CN1_Historic.jpg","Adel-May":"/sites/default/files/2026-02/VG1_Historic.jpg","Joliet-May":"/sites/default/files/2026-02/CI1_Historic2.jpg","Mechanicsville-May":"/sites/default/files/2026-02/MM1_Historic.jpg","Epping-Jun":"/sites/default/files/2026-02/NH1_Historic.jpg","Bristol-Jun":"/sites/default/files/2026-02/BT1_Historical.jpg","Norwalk-Jun":"/sites/default/files/2026-02/N01_%20Historic.jpg","Sonoma-Jul":"/sites/default/files/2026-02/SC1_Historic.jpg","Kent-Jul":"/sites/default/files/2026-02/SW1_Historical%20%281%29.jpg","Brainerd-Aug":"/sites/default/files/2026-02/BM1_Historical.jpg","Indianapolis-Sep":"/sites/default/files/2026-02/II1_Historic.jpg","Martin-Sep":"/sites/default/files/2026-02/GM1_Historic.jpg","Rockingham-Sep":"/sites/default/files/2026-02/RN1_Historic.jpg","Madison-Oct":"/sites/default/files/2026-06/MidwestNats26.png","Ennis-Oct":"/sites/default/files/2026-02/DTX_Historic.jpg","Las Vegas-Oct":"/sites/default/files/2026-02/LV1_Historic.jpg","Pomona-Nov":"/sites/default/files/2026-02/PC2_Historical.jpg"};if(!$('.programmatic-slider').length)return;let countdownInterval=null;function parseScheduleDate(dateString){if(!dateString)return new Date(NaN);var normalized=dateString.replace(/([+-]\d{2})(\d{2})$/,'$1:$2');return new Date(normalized);}function deriveEndDateFromHeadingText(startDateObj,headingText){if(!headingText||!startDateObj||isNaN(startDateObj.getTime()))return null;var match=headingText.match(/([A-Za-z]{3,})\.?\s+(\d{1,2})/);if(!match)return null;var monthNames=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];var monthIndex=monthNames.indexOf(match[1].toLowerCase().substring(0,3));if(monthIndex===-1)return null;var day=parseInt(match[2],10);var year=startDateObj.getFullYear();if(monthIndex<startDateObj.getMonth())year+=1;var derived=new Date(year,monthIndex,day,23,59,59,999);return isNaN(derived.getTime())?null:derived;}const styleOverrides=` 15 <style> 16 .nhra-slider-wrapper { 17 width: 100% !important; 18 max-width: 100% !important; 19 padding: 25px 0 !important; 20 box-sizing: border-box !important; 21 position: relative !important; 22 margin: 0 !important; 23 } 24 .slider-container-col { 25 width: 88% !important; 26 max-width: 1440px !important; 27 margin: 0 auto !important; 28 position: relative !important; 29 box-sizing: border-box !important; 30 padding: 0 45px !important; 31 } 32 .myDynamicSwiper { 33 width: 100% !important; 34 overflow: hidden !important; 35 } 36 37 /* Equal Height Equalizer Structure */ 38 .myDynamicSwiper .swiper-wrapper { 39 display: flex !important; 40 align-items: stretch !important; 41 } 42 .myDynamicSwiper .swiper-slide { 43 height: auto !important; 44 display: flex !important; 45 } 46 47 /* Main Card Frame Design */ 48 .race-card { 49 background-color: #1a1a1a !important; 50 border-radius: 8px !important; 51 overflow: hidden !important; 52 border: 1px solid #2d2d2d !important; 53 box-sizing: border-box !important; 54 height: 100% !important; 55 width: 100% !important; 56 display: flex !important; 57 flex-direction: column !important; 58 transition: border-color 0.3s !important; 59 min-height: 520px !important; 60 } 61 .swiper-slide-active .race-card { 62 border-color: #e31837 !important; 63 box-shadow: 0 0 15px rgba(227, 24, 55, 0.2) !important; 64 } 65 66 .race-card .race-image-container { 67 display: flex !important; 68 align-items: center !important; 69 justify-content: center !important; 70 height: 160px !important; 71 flex-shrink: 0 !important; 72 position: relative !important; 73 background-repeat: no-repeat !important; 74 background-size: cover !important; 75 background-position: center !important; 76 } 77 .race-card .race-image { 78 max-width: 85% !important; 79 max-height: 85% !important; 80 object-fit: contain !important; 81 z-index: 2 !important; 82 } 83 84 .race-card .race-content { 85 padding: 20px !important; 86 display: flex !important; 87 flex-direction: column !important; 88 flex-grow: 1 !important; 89 justify-content: space-between !important; 90 position: relative !important; 91 } 92 93 .race-card .race-text-wrapper { 94 min-height: 120px !important; 95 display: flex !important; 96 flex-direction: column !important; 97 } 98 .race-card .race-meta { 99 font-size: 12px !important; 100 color: #ffb300 !important; 101 font-weight: bold !important; 102 text-transform: uppercase !important; 103 margin-bottom: 6px !important; 104 } 105 .race-card .race-title { 106 font-size: 14px !important; 107 font-weight: 700 !important; 108 line-height: 1.3 !important; 109 color: #ffffff !important; 110 margin: 0 0 8px 0 !important; 111 min-height: 36px !important; 112 } 113 .race-card .race-location, .race-card .race-city { 114 font-size: 12px !important; 115 color: #cccccc !important; 116 margin: 0 0 4px 0 !important; 117 white-space: nowrap !important; 118 overflow: hidden !important; 119 text-overflow: ellipsis !important; 120 } 121 122 /* RESERVED MIDDLE SLOT (Prevents Card Height Jumping) */ 123 .race-card .middle-slot-wrapper { 124 height: 70px !important; 125 margin: 15px 0 !important; 126 display: flex !important; 127 align-items: center !important; 128 justify-content: center !important; 129 width: 100% !important; 130 box-sizing: border-box !important; 131 } 132 133 /* COUNTDOWN BLOCK DESIGN 134 Base state is hidden. It becomes visible only when: 135 1) its slide is the active slide, AND 136 2) it has NOT been explicitly marked "countdown-hidden" 137 by the ticker (i.e. the countdown has not reached zero). */ 138 .race-card .card-countdown-wrapper { 139 background: #111111 !important; 140 border: 1px solid #333333 !important; 141 border-radius: 6px !important; 142 padding: 10px 8px !important; 143 display: flex !important; 144 justify-content: center !important; 145 align-items: center !important; 146 gap: 6px !important; 147 width: 100% !important; 148 height: 100% !important; 149 box-sizing: border-box !important; 150 visibility: hidden; 151 opacity: 0; 152 transition: opacity 0.3s ease; 153 } 154 155 .swiper-slide-active .card-countdown-wrapper:not(.countdown-hidden
155) { 156 visibility: visible !important; 157 opacity: 1 !important; 158 } 159 160 /* Explicit "countdown reached zero" hide state, driven by JS 161 rather than inferred from other attributes. Kept as its own 162 rule (instead of folding into the base state) so the reason 163 for hiding is unambiguous and easy to target/debug. */ 164 .race-card .card-countdown-wrapper.countdown-hidden { 165 visibility: hidden !important; 166 opacity: 0 !important; 167 pointer-events: none !important; 168 display: none !important; 169 } 170 171 /* LIVE ACTIONS PANEL (Live Timing & NHRA.tv) */ 172 .race-card .card-live-actions { 173 display: none !important; 174 gap: 8px !important; 175 width: 100% !important; 176 height: 100% !important; 177 align-items: center !important; 178 box-sizing: border-box !important; 179 } 180 .event-is-live .card-live-actions { 181 display: flex !important; 182 } 183 .card-live-actions .btn-live-timing { background-color: #ffb300 !important; color: #0c1426 !important; } 184 .card-live-actions .btn-live-timing:hover { background-color: #e5a100 !important; } 185 .card-live-actions .btn-tv { background-color: #0288d1 !important; color: #ffffff !important; } 186 .card-live-actions .btn-tv:hover { background-color: #01579b !important; } 187 188 /* GLOBAL BOTTOM ACTIONS PANEL */ 189 .nhra-slider-wrapper .race-actions { 190 display: flex !important; 191 flex-direction: column !important; 192 gap: 8px !important; 193 margin-top: auto !important; 194 width: 100% !important; 195 } 196 .nhra-slider-wrapper .action-sub-row { 197 display: flex !important; 198 gap: 8px !important; 199 width: 100% !important; 200 } 201 .nhra-slider-wrapper .nhra-btn { 202 text-align: center !important; 203 font-size: 12px !important; 204 font-weight: bold !important; 205 text-transform: uppercase !important; 206 padding: 10px 4px !important; 207 border-radius: 4px !important; 208 text-decoration: none !important; 209 display: inline-block !important; 210 box-sizing: border-box !important; 211 } 212 213 .nhra-slider-wrapper .btn-hero { width: 100% !important; } 214 .action-sub-row .nhra-btn { flex: 1 !important; } 215 .card-live-actions .nhra-btn { flex: 1 !important; } 216 217 .nhra-slider-wrapper .btn-tickets { background-color: #e31837 !important; color: #ffffff !important; } 218 .nhra-slider-wrapper .btn-tickets:hover { background-color: #b7122a !important; } 219 .nhra-slider-wrapper .btn-results { background-color: #e31837 !important; color: #ffffff !important; } 220 .nhra-slider-wrapper .btn-results:hover { background-color: #b7122a !important; } 221 .nhra-slider-wrapper .btn-details { background-color: #333333 !important; color: #ffffff !important; border: 1px solid #444444 !important; } 222 .nhra-slider-wrapper .btn-details:hover { background-color: #444444 !important; } 223 .nhra-slider-wrapper .btn-lodging { background-color: #2e7d32 !important; color: #ffffff !important; } 224 .nhra-slider-wrapper .btn-lodging:hover { background-color: #1b5e20 !important; } 225 226 /* Arrow Controls Configuration */ 227 .nhra-prev-btn, .nhra-next-btn { 228 position: absolute !important; 229 top: 50% !important; 230 transform: translateY(-50%) !important; 231 width: 44px !important; 232 height: 44px !important; 233 background: #e31837 !important; 234 border-radius: 50% !important; 235 z-index: 10 !important; 236 cursor: pointer !important; 237 display: flex !important; 238 align-items: center !important; 239 justify-content: center !important; 240 color: #ffffff !important; 241 box-shadow: 0 4px 10px rgba(0,0,0,0.4) !important; 242 border: none !important; 243 } 244 .nhra-prev-btn:hover, .nhra-next-btn:hover { background: #b7122a !important; } 245 .nhra-prev-btn { left: -12px !important; } 246 .nhra-next-btn { right: -12px !important; } 247 .nhra-prev-btn::after { content: 'â¹' !important; font-size: 28px !important; font-weight: 700 !important; line-height: 1; margin-right: 2px; } 248 .nhra-next-btn::after { content: 'âº' !important; font-size: 28px !important; font-weight: 700 !important; line-height: 1; margin-left: 2px; } 249 .swiper-button-disabled { opacity: 0.15 !important; cursor: default !important; background: #333333 !important; } 250 251 @media(max-width: 768px) { 252 .slider-container-col { 253 width: 100% !important; 254 padding: 0 40px !important; 255 } 256 .nhra-prev-btn { left: 0px !important; } 257 .nhra-next-btn { right: 0px !important; } 258 } 259 </style> 260 `;$('head').append(styleOverrides);const cleanSliderLayoutMarkup=` 261 <div class="nhra-slider-wrapper"> 262 <div class="slider-container-col"> 263 <div class="nhra-prev-btn" id="dynamic-prev"></div> 264 <div class="nhra-next-btn" id="dynamic-next"></div> 265 <div class="swiper myDynamicSwiper"> 266 <div class="swiper-wrapper"></div> 267 </div> 268 </div> 269 </div> 270 `;$('.programmatic-slider').html(cleanSliderLayoutMarkup);$.get(schedulePageUrl,function(htmlData){let liveEvents=[];const $parsedHtml=$(htmlData);$parsedHtml.find('.accordion--schedule .views-row').each(function(){const $scheduleItem=$(this).find('.schedule');
270if(!$scheduleItem.length)return;const monthText=$scheduleItem.find('.schedule__item--date [property="startDate"]').text().replace(/[\r\n\t ]+/g,' ').trim();const daysText=$scheduleItem.find('.schedule__item--date .schedule__heading--major').text().replace(/[\r\n\t ]+/g,' ').replace(/\s+/g,' ').trim();const displayDate=monthText+" "+daysText;let extractedMonthToken=monthText.substring(0,3);if(extractedMonthToken.toLowerCase()==="sep")extractedMonthToken="Sep";const cleanTitle=$scheduleItem.find('.schedule__item--info [property="name"] a').text().trim();const cleanTrack=$scheduleItem.find('.schedule__location--name').text().trim();const cityText=$scheduleItem.find('[property="addressLocality"]').text().trim();const stateText=$scheduleItem.find('[property="addressRegion"]').text().trim();const generatedCityMonthKey=cityText+"-"+extractedMonthToken;const defaultDetailsUrl=$scheduleItem.find('.schedule__item--logo').attr('href')||"";const defaultResultsUrl=$scheduleItem.find('a:contains("Results")').attr('href')||"/results/2026/nhra-mission-foods-drag-racing-series";let computedDetailsTargetUrl=defaultDetailsUrl;const scrapedEventGuideUrl=$scheduleItem.find('a:contains("Event Guide")').attr('href');if(scrapedEventGuideUrl&&scrapedEventGuideUrl!=="#")computedDetailsTargetUrl=scrapedEventGuideUrl;let dynamicLiveTimingUrl="/results/2026/nhra-mission-foods-drag-racing-series";$scheduleItem.find('.button, a').each(function(){let btnText=$(this).text().toLowerCase();if(btnText.indexOf("live timing")!==-1){let verifiedHref=$(this).attr('href');if(verifiedHref&&verifiedHref!=="#"){dynamicLiveTimingUrl=verifiedHref;return false;}}});let dynamicLodgingUrl="";$scheduleItem.find('.button, a').each(function(){let btnText=$(this).text().toLowerCase();if(btnText.indexOf("lodging")!==-1){let verifiedLodgingHref=$(this).attr('href');if(verifiedLodgingHref&&verifiedLodgingHref!=="#"){dynamicLodgingUrl=verifiedLodgingHref;return false;}}});let startTimestamp=parseScheduleDate($scheduleItem.find('[property="startDate"]').attr('content')).getTime();let parsedEndDate=parseScheduleDate($scheduleItem.find('[property="endDate"]').attr('content'));if(isNaN(parsedEndDate.getTime())){let startDateObj=parseScheduleDate($scheduleItem.find('[property="startDate"]').attr('content'));let derivedEnd=deriveEndDateFromHeadingText(startDateObj,daysText);if(derivedEnd){parsedEndDate=derivedEnd;console.warn('[NHRA Slider] endDate content attribute was empty for "'+(cleanTitle||'(untitled event)')+'" â derived end date from heading text instead:',derivedEnd);}}let endTimestamp=parsedEndDate.getTime();parsedEndDate.setHours(23,59,59,999);let finalEndTimestamp=parsedEndDate.getTime();if(isNaN(startTimestamp)||isNaN(finalEndTimestamp)){console.warn('[NHRA Slider] Skipping event with unparseable date:',cleanTitle||'(untitled event)');return;}liveEvents.push({dateText:displayDate,title:cleanTitle,track:cleanTrack,cityState:cityText+", "+stateText,cityMonthSignature:generatedCityMonthKey,logo:$scheduleItem.find('.schedule__item--logo img').attr('src'),detailsUrl:computedDetailsTargetUrl,ticketsUrl:$scheduleItem.find('a:contains("Get Tickets")').attr('href')||"#",resultsUrl:defaultResultsUrl,liveTimingUrl:dynamicLiveTimingUrl,lodgingUrl:dynamicLodgingUrl,startMs:startTimestamp,endMs:finalEndTimestamp,dateObj:parse
270ScheduleDate($scheduleItem.find('[property="startDate"]').attr('content'))});});if(liveEvents.length===0)return;liveEvents.sort((a,b)=>a.dateObj-b.dateObj);let upcomingEvents=liveEvents.filter((ev)=>ev.endMs>=new Date().getTime());let primaryHeroEvent=upcomingEvents.length>0?upcomingEvents[0]:liveEvents[liveEvents.length-1];let anchorSlideIndex=liveEvents.indexOf(primaryHeroEvent);if(anchorSlideIndex<0)anchorSlideIndex=0;const $swiperWrapper=$('.myDynamicSwiper .swiper-wrapper');liveEvents.forEach(function(ev){let nowMs=new Date().getTime();let isPastEvent=nowMs>ev.endMs;let actionButtonsMarkup='';if(isPastEvent)actionButtonsMarkup=` 271 <div class="action-sub-row"> 272 <a class="nhra-btn btn-results" href="${ev.resultsUrl}">Results</a> 273 <a class="nhra-btn btn-details" href="${ev.detailsUrl}" target="_blank">Details</a> 274 </div> 275 `;else{let lodgingBtnMarkup='';if(ev.lodgingUrl!=="")lodgingBtnMarkup=`<a class="nhra-btn btn-lodging" href="${ev.lodgingUrl}">Lodging</a>`;actionButtonsMarkup=` 276 <a class="nhra-btn btn-tickets btn-hero" href="${ev.ticketsUrl}" target="_blank">Get Tickets</a> 277 <div class="action-sub-row"> 278 <a class="nhra-btn btn-details" href="${ev.detailsUrl}" target="_blank">Details</a> 279 ${lodgingBtnMarkup} 280 </div> 281 `;}let stringA=ev.cityMonthSignature.toLowerCase().replace(/[^a-z0-9]/g,'');let computedStyleAttr='';for(const key in eventBackgrounds){let stringB=key.toLowerCase().replace(/[^a-z0-9]/g,'');if(stringA.indexOf(stringB)!==-1||stringB.indexOf(stringA)!==-1){computedStyleAttr=`style="background-image: url('${eventBackgrounds[key]}') !important;"`;break;}}
281let slideMarkup=` 282 <div class="swiper-slide" data-start="${ev.startMs}" data-end="${ev.endMs}"> 283 <div class="race-card"> 284 <div class="race-image-container" ${computedStyleAttr}> 285 <img class="race-image" src="${ev.logo}" alt="${ev.title}"> 286 </div> 287 <div class="race-content"> 288 <div class="race-text-wrapper"> 289 <div class="race-meta"><span>${ev.dateText}</span></div> 290 <h3 class="race-title">${ev.title}</h3> 291 <p class="race-location">ð ${ev.track}</p> 292 <p class="race-city">${ev.cityState}</p> 293 </div> 294 295 <div class="middle-slot-wrapper"> 296 <div class="card-countdown-wrapper"> 297 <div class="h-time-block"><span class="h-time-val class-d">00</span><span class="h-time-label">Days</span></div> 298 <div class="h-time-block"><span class="h-time-val class-h">00</span><span class="h-time-label">Hrs</span></div> 299 <div class="h-time-block"><span class="h-time-val class-m">00</span><span class="h-time-label">Min</span></div> 300 <div class="h-time-block"><span class="h-time-val class-s">00</span><span class="h-time-label">Sec</span></div> 301 </div> 302 303 <div class="card-live-actions"> 304 <a class="nhra-btn btn-live-timing" href="${ev.liveTimingUrl}">Live Timing</a> 305 <a class="nhra-btn btn-tv" href="https://nhra.tv" target="_blank">NHRA.tv</a> 306 </div> 307 </div> 308 309 <div class="race-actions"> 310 ${actionButtonsMarkup} 311 </div> 312 </div> 313 </div> 314 </div> 315 `;$swiperWrapper.append(slideMarkup);});if(typeof Swiper!=='undefined')new Swiper('.myDynamicSwiper',{slidesPerView:4,spaceBetween:20,initialSlide:anchorSlideIndex,navigation:{nextEl:'#dynamic-next',prevEl:'#dynamic-prev'},breakpoints:{0:{slidesPerView:1},640:{slidesPerView:2},1024:{slidesPerView:3},1366:{slidesPerView:4}},on:{init:function(){handleTimelineCountdownSwitch(this);},slideChange:function(){handleTimelineCountdownSwitch(this);}}});});function handleTimelineCountdownSwitch(swiper){if(countdownInterval)clearInterval(countdownInterval);function updateCardClock(){let currentTimestamp=new Date().getTime();swiper.slides.forEach(function(slideElement){let $slideNode=$(slideElement);let $countdownWrapper=$slideNode.find('.card-countdown-wrapper');let startMs=parseInt($slideNode.attr('data-start'),10);let endMs=parseInt($slideNode.attr('data-end'),10);if(isNaN(startMs)||isNaN(endMs))return;let diff=startMs-currentTimestamp;if(currentTimestamp>=startMs&¤tTimestamp<=endMs){$slideNode.addClass('event-is-live');$slideNode.attr('data-is-upcoming','false');$countdownWrapper.addClass('countdown-hidden');}else if(currentTimestamp>endMs){$slideNode.removeClass('event-is-live');$slideNode.attr('data-is-upcoming','false');$countdownWrapper.addClass('countdown-hidden');}else if(diff<=0){$slideNode.removeClass('event-is-live');$slideNode.attr('data-is-upcoming','false');$countdownWrapper.addClass('countdown-hidden');}else{$slideNode.removeClass('event-is-live');$slideNode.attr('data-is-upcoming','true');$countdownWrapper.removeClass('countdown-hidden');let days=Math.floor(diff/(1000*60*60*24));let hours=Math.floor((diff%(1000*60*60*24))/(1000*60*60));let minutes=Math.floor((diff%(1000*60*60))/(1000*60));let seconds=Math.floor((diff%(1000*60))/1000);$slideNode.find('.class-d').text(days<10?"0"+days:days);$slideNode.find('.class-h').text(hours<10?"0"+hours:hours);$slideNode.find('.class-m').text(minutes<10?"0"+minutes:minutes);$slideNode.find('.class-s').text(seconds<10?"0"+seconds:seconds);}});}countdownInterval=setInterval(updateCardClock,1000);updateCardClock();}});; 316(function($,Drupal){'use strict';Drupal.behaviors.backToTopButton={attach:function(context,settings){$('body',context).once('backToTopButton').each(function(){var $button=$('
316<button id="backToTopBtn" aria-label="Back to top"></button>').appendTo('body');$button.on('click',function(e){e.preventDefault();$('html, body').animate({scrollTop:0},'slow');});$(window).on('scroll.backToTop resize.backToTop',function(){var scrollTop=$(window).scrollTop();var docHeight=$(document).height();var winHeight=$(window).height();if(docHeight>winHeight){var scrollPercent=(scrollTop/(docHeight-winHeight))*100;if(scrollPercent>=25)$button.addClass('visible');else $button.removeClass('visible');}else $button.removeClass('visible');});});}};})(jQuery,Drupal);; 317setTimeout(function(){if(window.outerWidth>979)$(".indy-banner").hide();if(window.location.href.indexOf("/nhra")>0)jQuery("body[data-active-series='nhra']").find('.hero').css('cursor','pointer').click(function(){window.location="/schedule/2025/nhra-mission-foods-drag-racing-series/nhra-gatornationals";});if(window.location.href.indexOf("/worlds-biggest-drag-race")>0){$("body.has-title-panel.path-node.page-node-type-promo-page.indy_promo_2022").find('.hero__content.promo').css('cursor','pointer').click(function(){window.location="/schedule/2022/nhra-camping-world-drag-racing-series/dodge-power-brokers-nhra-us-nationals";});$("body.has-title-panel.path-node.page-node-type-promo-page.indy_promo_2022").find('.image-card.image-card--triple.image-card--standard.promo.top:nth-child(1)').css('cursor','pointer').click(function(){window.location="/schedule/2022/nhra-camping-world-drag-racing-series/dodge-power-brokers-nhra-us-nationals#tab-event-schedule";});$("body.has-title-panel.path-node.page-node-type-promo-page.indy_promo_2022").find('.image-card.image-card--triple.image-card--standard.promo.top:nth-child(2)').css('cursor','pointer').click(function(){window.location="/news/2022/nhra-concert-series-presented-8-track-entertainment-comes-us-nationals";});}},500);;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.