1<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 2 3<head> 4 <title>Free Crossword Puzzles - Play Online Daily | BestCrosswords</title> 5 <base href=""></base> 6 7 <link href="https://www.bestcrosswords.com/" rel="canonical"/> 8 9 10 11<!-- Favicon begins --> 12<link href="/apple-touch-icon.png" sizes="180x180" rel="apple-touch-icon"/> 13<link href="/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed"/> 14<link href="/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed"/> 15<link href="/apple-touch-icon-72x72.png" sizes="72x72" rel="apple-touch-icon-precomposed"/> 16<link href="/apple-touch-icon-144x144.png" sizes="144x144" rel="apple-touch-icon-precomposed"/> 17<link href="/apple-touch-icon-60x60.png" sizes="60x60" rel="apple-touch-icon-precomposed"/> 18<link href="/apple-touch-icon-120x120.png" sizes="120x120" rel="apple-touch-icon-precomposed"/> 19<link href="/apple-touch-icon-76x76.png" sizes="76x76" rel="apple-touch-icon-precomposed"/> 20<link href="/apple-touch-icon-152x152.png" sizes="152x152" rel="apple-touch-icon-precomposed"/> 21<link sizes="196x196" href="/favicon-196x196.png" type="image/png" rel="icon"/> 22<link sizes="96x96" href="/favicon-96x96.png" type="image/png" rel="icon"/> 23<link sizes="32x32" href="/favicon-32x32.png" type="image/png" rel="icon"/> 24<link sizes="16x16" href="/favicon-16x16.png" type="image/png" rel="icon"/> 25<link sizes="128x128" href="/favicon-128.png" type="image/png" rel="icon"/> 26<link href="/site.webmanifest" rel="manifest"/> 27<link color="#5bbad5" href="/safari-pinned-tab.svg" rel="mask-icon"/> 28<meta content="#FFFFFF" name="msapplication-TileColor"/> 29<meta content="/mstile-144x144.png" name="msapplication-TileImage"/> 30<meta content="/mstile-70x70.png" name="msapplication-square70x70logo"/> 31<meta content="/mstile-150x150.png" name="msapplication-square150x150logo"/> 32<meta content="/mstile-310x150.png" name="msapplication-wide310x150logo"/> 33<meta content="/mstile-310x310.png" name="msapplication-square310x310logo"/> 34<meta content="BestCrosswords" name="apple-mobile-web-app-title"/> 35<meta content="BestCrosswords" name="application-name"/> 36<!-- Favicon ends --> 37 38 39 <meta content="Play free crossword puzzles online - 8 new every day plus an archive of 100,000+ grids. No sign-up needed. Solve on any device or print them at home." name="description"/> 40 41 <meta content="width=device-width, initial-scale=1" name="viewport"/> 42 43 <meta content="https://www.bestcrosswords.com/images/facebook/sharing-1200x630.png" property="og:image"/> 44 <meta content="website" property="og:type"/> 45 <meta content="BestCrosswords.com" property="og:site_name"/> 46 <meta content="134872327288621" property="fb:app_id"/> 47 <meta content="Free Crossword Puzzles - Play Online Daily | BestCrosswords" property="og:title"/> 48 <meta content="/bestcrosswords" property="bc:context"/> 49 <meta content="https://www.bestcrosswords.com/" property="og:url"/> 50 <meta content="/" property="bc:url"/> 51 52 <meta content="Play free crossword puzzles online - 8 new every day plus an archive of 100,000+ grids. No sign-up needed. Solve on any device or print them at home." property="og:description"/> 53 54 55 <meta content="summary_large_image" name="twitter:card"/> 56 <meta content="Free Crossword Puzzles - Play Online Daily | BestCrosswords" name="twitter:title"/> 57 58 <meta content="Play free crossword puzzles online - 8 new every day plus an archive of 100,000+ grids. No sign-up needed. Solve on any device or print them at home." name="twitter:description"/> 59 60 <meta content="https://www.bestcrosswords.com/images/facebook/sharing-1200x630.png" name="twitter:image"/> 61 62 63 <link title="BestCrosswords.com recent puzzles" type="application/rss+xml" href="https://www.bestcrosswords.com/syndication/feed/constructorgrid/rss/v1" rel="alternate"/> 64 65 66 67
67<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"BestCrosswords","url":"https://www.bestcrosswords.com/"}</script>
67 68 69 70 71<!-- Google reCAPTCHA: begin --> 72<link type="text/css" rel="stylesheet" href="/bestcrosswords/assets/meta/d9f50f75/pages/Home-latestpuzzles.css"/><link type="text/css" rel="stylesheet" href="/bestcrosswords/assets/meta/bf52fa3b/components/usertools/RecentPuzzles-style.css"/><style> 73 .grecaptcha-badge { 74 visibility: collapse !important; 75 } 76</style> 77<!-- Google reCAPTCHA: end --> 78 79<!-- https://getbootstrap.com/: begin --> 80<link href="/bestcrosswords/css/third-party/bootstrap-5.3.8.min.css?cbid=fdc2140963ddb7b9c63dfe7a22af255d" rel="stylesheet"/> 81<!-- https://getbootstrap.com/: end --> 82 83 <link href="/bestcrosswords/css/stylesheet.min.css?cbid=fb8fcabdaac37607a977503d517b7ed8" rel="stylesheet"/> 84 85 <!-- Insert blocks: start --> 86 87 88 89 90 91 92 93 <!-- Insert blocks: end --> 94 95<meta content="gwtPropError" name="gwt:onPropertyErrorFn"/><meta content="gwtLoadError" name="gwt:onLoadErrorFn"/></head> 96 97 98<body data-page-initialized="true" class="mainBody" style="background-image: url(/bestcrosswords/images/body-background.png?cbid=b6ca5634f1d7d6c5e45d7f25576f0cac);"> 99 100 101 102 103<!-- See main.js/AdapexExpandableAdDetector --> 104<div id="adapex-expandable-ad-detector-container"> 105<div class="ng-rounded-area" id="container"> 106 107 <div class="bc-banner center" id="bc-banner-page_top"> 108 109 </div> 110 111 <div id="header"> 112 113 114 115<!-- md-end: only the expanded navbar closes on the header rule (see #navbar in stylesheet.css). --> 116<div class="d-flex align-items-center align-items-md-end" id="navbar"> 117 118 <nav class="navbar navbar-expand-md navbar-light bg-light justify-content-start me-2"> 119 <div class="navbar-brand"> 120 <a href="/"><img height="57" class="logolarge d-none d-md-inline-block" title="Daily Crossword Puzzles" style="background: white;" alt="Daily Crossword Puzzles" width="168" src="/bestcrosswords/images/logo.svg?cbid=ee4e6cc6cb99fab32fbd87183a1e01aa"/><img height="40" class="logosmall d-inline-block d-md-none" title="Daily Crossword Puzzles" style="background: white;" width="40" alt="Daily Crossword Puzzles" src="/bestcrosswords/images/favicon.svg?cbid=fab9535bcdfa938c74c506bc2a3840f3"/></a> 121 <label class="d-none d-md-block">Free Crossword Puzzles</label> 122 </div> 123 <button aria-label="Toggle navigation" aria-expanded="false" aria-controls="bcnavbar" data-bs-target="#bcnavbar" data-bs-toggle="collapse" type="button" class="navbar-toggler"> 124 <span class="navbar-toggler-icon">Â </span> 125 </button> 126 <div id="bcnavbar" class="collapse navbar-collapse"> 127 <div> 128 <ul class="navbar-nav me-auto"> 129 130 <li class="nav-item tab-blue dropdown active"> 131 132 <a class="nav-link dropdown-toggle" id="pageHome" aria-haspopup="true" aria-expanded="false" data-bs-toggle="dropdown" role="button" href="/">Play Puzzles</a> 133 <div class="dropdown-menu" aria-labelledby="pageHome"> 134 135 <a class="dropdown-item" href="/themed-crossword-puzzles">Themed Crossword Puzzles</a> 136 137 <a class="dropdown-item" href="/daily-crossword-puzzles">Daily Crossword Puzzles</a> 138 139 <a class="dropdown-item" href="/crossword-puzzles-tournament">Crossword Tournament</a> 140 141 <div class="dropdown-divider"></div> 142 143 <a class="dropdown-item" href="/about-our-puzzles">About Our Puzzles</a> 144 145 <a class="dropdown-item" href="/help">Help</a> 146 147 </div> 148 149 150 </li> 151 152 <li class="nav-item tab-green"> 153 154 <a class="nav-link" id="pageprintableHome" href="/printable-crossword-puzzles">Print</a> 155 156 </li> 157 158 <li class="nav-item tab-orange dropdown"> 159 160 <a class="nav-link" id="pagesyndicationIntro" href="/crossword-puzzles-for-publishing">Publishing</a> 161 162 </li> 163 164 <li class="nav-item tab-pink dropdown"> 165 166 <a class="nav-link" id="pagescoresScores" href="/crossword-puzzles-tournament/scores">Scores</a> 167 168 </li> 169 170 <li class="nav-item tab-black"> 171 172 <a class="nav-link" id="pageblogBlog" href="/blog">Blog</a> 173 174 </li> 175 176 </ul> 177 </div> 178 </div> 179 </nav> 180 181 <div class="ms-auto"> 182 <div class="btn-group" id="logindiv"> 183 184 185 186 187<div id="recentpuzzles" class="btn-group"> 188 <button disabled="disabled" title="Puzzles in progress" aria-expanded="false" aria-haspopup="true" data-bs-display="static" data-bs-toggle="dropdown" type="button" class="btn btn-outline-secondary dropdown-toggle"> 189 <span class="badge rounded-pill bg-danger text-white">0</span> 190 </button> 191 <div aria-labelledby="recentpuzzles" class="dropdown-menu dropdown-menu-end shadow"> 192 </div> 193</div> 194 195 <div class="btn-group"> 196 <button aria-expanded="false" aria-haspopup="true" data-bs-display="static" data-bs-toggle="dropdown" class="btn btn-secondary dropdown-toggle" type="button"> 197 198 Login 199 </button> 200 201 <!-- Login form / personal area drop down --> 202 <div class="dropdown-menu dropdown-menu-end shadow p-3"> 203 204 205 <form style="margin: 0;" id="login" name="login" action="/bestcrosswords/api/login" method="post"> 206<input value="/" name="srcUrl" type="hidden"></input> 207 208 <div class="mb-3"> 209 <label for="login-username" class="form-label">Username</label> 210 <input autocapitalize="off" class="form-control" autofocus="autofocus" autocomplete="username" autocorrect="off" id="login-username" value="" name="username" type="text"></input> 211 </div> 212 <div class="mb-3"> 213 <label for="login-password" class="form-label">Password</label> 214 <input autocapitalize="off" class="form-control" autocomplete="current-password" autocorrect="off" id="login-password" value="" name="password" type="password"></input> 215 <div class="mt-1"> 216 <a tabindex="-1" class="bc-link" href="/password-reminder">Forgot password?</a> 217 </div> 218 </div> 219 <div class="mb-3"> 220 <button class="btn btn-bcgrey" type="submit">Login</button> 221 </div> 222 <div class="mb-0"> 223 Don't have an account? 224 <a tabindex="-1" class="bc-link" href="/signup">Sign up here!</a> 225 </div> 226 </form> 227 <table style="width: 100%;"> 228 <tr style="vertical-align: middle;"> 229 <td style="width: 50%;"><hr/></td> 230 <td style="padding: 0 1em;">Or</td> 231 <td style="width: 50%;"><hr/></td> 232 </tr> 233</table> 234 235 <div class="center"> 236 <a class="bc-link" href="https://www.facebook.com/v25.0/dialog/oauth?client_id=134872327288621&redirect_uri=https%3A%2F%2Fwww.bestcrosswords.com%2Fbestcrosswords%2Fapi%2Ffacebook%2Flogin&scope=email"> 237 238 <img alt="login button" src="/bestcrosswords/images/facebook/login_large.png?cbid=6cb43faa7174fd4e650413ea250149f4"/> 239 240 241</a> 242
243 </div> 244 245 246 </div> 247 </div> 248 249</div> 250 251 252</div> 253</div> 254 255 256 257 </div> 258 259 <table class="layout" id="maintable"> 260 <tr style="vertical-align: top;"> 261 262 263 264 <td> 265 <div id="maincontent"> 266 267 268 269 270 271 272 273 <h1 class="blue" id="page-heading"> 274 Free Crossword Puzzles to Play Online 275 </h1> 276 277 278<p style="margin-top: 0; padding-top: 0; margin-bottom: 0;"> 279Welcome to BestCrosswords - one of the web's largest free crossword 280collections. Play up to 15 fresh puzzles every day, or dig into an archive 281of over 100,000 grids. Solve right in your browser on any device, or print 282them for later. No account required to start. 283</p> 284 285<div class="mb-4 d-flex justify-content-center"> 286 <div id="latestpuzzles"> 287 288 <div> 289 <h2>Themed crosswords from contributors</h2> 290 <ul class="list-group list-group-flush"> 291 292 293 294 <li class="list-group-item list-group-item-action"> 295 <img alt="Recent puzzle" src="/bestcrosswords/images/schedule_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/> 296 <a href="/themed-crossword-puzzles/313020-what-a-turn-on" class="bc-link">What a Turn-on!</a> 297 <span class="latestpuzzlesallkind-author">by Barb Olson</span><span class="latestpuzzlesallkind-published-on">, 298 published 2 hours ago</span> 299 </li> 300 301 302 303 304 <li class="list-group-item list-group-item-action"> 305 <img alt="Featured puzzle" src="/bestcrosswords/images/recycling_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/> 306 <a href="/themed-crossword-puzzles/3924-days-of-yore" class="bc-link">Days Of Yore</a> 307 <span class="latestpuzzlesallkind-author">by William Gee</span><span class="latestpuzzlesallkind-published-on">, 308 <em>featured today</em></span> 309 </li> 310 311 312 313 314 315 316 <li class="list-group-item list-group-item-action"> 317 <img alt="Older puzzle" src="/bestcrosswords/images/history_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/> 318 <a href="/themed-crossword-puzzles/313019-yuck" class="bc-link">Yuck</a> 319 <span class="latestpuzzlesallkind-author">by Mark McClain</span><span class="latestpuzzlesallkind-published-on">, 320 published yesterday</span> 321 </li> 322 323 324 325 326 327 <li class="list-group-item list-group-item-action"> 328 <img alt="Older puzzle" src="/bestcrosswords/images/history_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/> 329 <a href="/themed-crossword-puzzles/313018-the-body-of-the-beast" class="bc-link">The Body Of The Beast</a> 330 <span class="latestpuzzlesallkind-author">by Stu Mlot</span><span class="latestpuzzlesallkind-published-on">, 331 published on 9/30/2026</span> 332 </li> 333 334 335 336 337 338 339 <li class="list-group-item list-group-item-action"> 340 <img alt="Favorite puzzle" src="/bestcrosswords/images/favorite_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/> 341 <a href="/themed-crossword-puzzles/313012-coast-to-coast" class="bc-link">Coast To Coast</a> 342 <span class="latestpuzzlesallkind-author">by Stu Mlot</span><span class="latestpuzzlesallkind-published-on">, 343 <em>most popular last week</em></span> 344 </li> 345 346 347 <li class="list-group-item list-group-item-action"> 348 <a title="Display more puzzles" href="/themed-crossword-puzzles/archive" class="bc-link">Play more themed crosswords</a> 349 from our archive 350 </li> 351 <li class="list-group-item list-group-item-action"> 352 <a title="Meet our constructors" href="/constructors" class="bc-link">Meet our contributors</a> 353 </li> 354 </ul> 355 </div> 356 357 <div> 358 <h2>American puzzles from BestCrosswords</h2> 359 <ul class="list-group list-group-flush"> 360 <li class="list-group-item list-group-item-action"> 361 <a href="/daily-crossword-puzzles" class="bc-link">7 362 free daily crossword puzzles</a><span class="latestpuzzlesallkind-published-on">, published 363 7 hours ago</span> 364 </li> 365 <li class="list-group-item list-group-item-action"> 366 <a href="/crossword-puzzles-tournament" class="bc-link">7 367 tournament puzzles</a><span class="latestpuzzlesallkind-published-on">, published 368 7 hours ago</span> 369 </li> 370 <li class="list-group-item list-group-item-action"> 371 <a href="/printable-crossword-puzzles" class="bc-link">7 372 printable puzzles</a><span class="latestpuzzlesallkind-published-on">, published 373 7 hours ago</span> 374 </li> 375 </ul> 376 377 <h2>Grids for publishing</h2> 378 <ul class="list-group list-group-flush"> 379 <li class="list-group-item list-group-item-action"> 380 <a title="Buy puzzles for print publishing" href="/crossword-puzzles-for-publishing/print" class="bc-link">Buy puzzles</a> 381 for print publishing 382 </li> 383 <li class="list-group-item list-group-item-action"> 384 <a title="Embed our interactive crossword in your website" href="/crossword-puzzles-for-publishing" class="bc-link">Embed 385 our interactive crossword</a> 386 in your website 387 </li> 388 </ul> 389 </div> 390 391</div> 392</div> 393 394<h2 class="mb-3">
394Having a hard time deciding which puzzles to play? Let us help you.</h2> 395 396<p> 397 <strong>Themed crosswords</strong> 398 are published daily by a group of skilled contributors. 399 The puzzles are smart, sophisticated, funny and yet relatively easy to 400 solve. The crosswords are available for free to all users. 401 <a href="/themed-crossword-puzzles" class="bc-link">Start playing today's theme</a> 402</p> 403 404<p> 405 <strong>Daily crossword puzzles</strong> 406 are fun, light and great for those who want to 407 train their memory, enrich their vocabulary and maintain cognitive skills. 408 The section features seven daily crossword puzzles of increasing difficulty. 409 <a href="/daily-crossword-puzzles" class="bc-link">Play today's free daily crossword puzzles</a> 410</p> 411 412<p> 413 <strong>Crossword tournament</strong> 414 are for those addicted players who want to put their solving skills to test. 415 The tournament starts on the first of every month and the winner is 416 announced at the end of the month. 417 The tournament is open to 418 <span class="bc-account-type">registered</span> members only. 419 Participants are scored on speed and accuracy. 420 Seven new puzzles are published daily, available to play on that day only. 421 It's not too late to 422 <a href="/crossword-puzzles-tournament" class="bc-link">enroll in this month's tournament</a> 423</p> 424 425<p> 426 <strong>Printable crosswords</strong> 427 are for those who prefer solving using 428 a pen and paper. Both daily and themed 429 crossword puzzles are featured in this section and 430 solutions are available the next day. 431 <a href="/printable-crossword-puzzles" class="bc-link">Print today's batch</a> 432 433</p> 434 435 436 437 438 </div> 439 </td> 440 </tr> 441 </table> 442 443 <div class="bc-banner center" id="bc-banner-below_content"> 444 445 </div> 446 447 <div id="footer"> 448 449 450 <div class="footerlinks"> 451 <a class="bc-link" href="/help">Help</a> 452 <div>|</div> 453 <a class="bc-link" href="/contact">Contact Us</a> 454 <div>|</div> 455 <a class="bc-link" href="/terms-of-service">Terms of 456 Service</a> 457 <div>|</div> 458 <a class="bc-link" href="/privacy-policy">Privacy Policy</a> 459 <div>|</div> 460 <a class="bc-link" href="/sitemap">Sitemap</a> 461 <div>|</div> 462 <a class="bc-link feedLink" style="background-image: url(/bestcrosswords/images/feed-icon-14x14.png?cbid=2168a573d0d45bd2f9a89b8236453d61);" href="https://www.bestcrosswords.com/syndication/feed/constructorgrid/rss/v1">RSS 463 feed</a> 464 </div> 465 <div class="copyright"> 466 Copyright © 2000-2026 <a href="http://www.pyromod.com" class="bc-link">Pyromod Software Inc</a>. All Rights Reserved. 467 </div> 468 <div data-href="https://www.facebook.com/BestCrosswords/" data-share="false" class="fb-like" data-action="like" data-layout="button_count" style="min-height: 28px;" data-size="large" data-show-faces="false"> 469 </div> 470 471 472 </div> 473 474 475</div> 476</div> 477 478 479 480 481 482 483 484 485 486 487 488 489 490<!-- Disable Facebook SDK needed by the like button to improve Lighthouse score --> 491<!-- <span jwcid="@facebook/FacebookJavascriptSDK"/> --> 492 493 494<!-- Google Analytics: begin -->
495<script> 496 // @formatter:off 497 498 /** 499 * Setup 500 */ 501 // G4A - See https://www.googletagmanager.com/gtag/js?id=G-92YWLZ7L86 loaded below. 502 window.dataLayer= window.dataLayer || []; 503 function gtag(){dataLayer.push(arguments);} 504 gtag('js', new Date()); // Do we really need this? 505 let gtag_config = { 506 'transport_type': 'beacon', 507 }; 508 509 gtag_config['page_path'] = '/bestcrosswords/Home/'; 510 511 gtag('config', 'G-92YWLZ7L86', gtag_config); 512 513 /** 514 * Send page view 515 */ 516 // GA4 - not needed, gtag config call will send the page view in non debug mode. 517 //gtag('event', 'page_view'); 518 // @formatter:on 519</script>
vendor: 1 bytes, line 519
519
520<script src="/bestcrosswords/js/analytics.min.js?cbid=2fba22b63279375329a739542878534b"></script>
vendor: 58 bytes, lines 520-521
520 521<script src="https://www.googletagmanager.com/gtag/js?id=
521G-92YWLZ7L86
vendor: 26 bytes, line 521
521" async="async"></script>
522<!-- Google Analytics: end --> 523 524 525 526<!-- jquery: begin -->
527<script src="/bestcrosswords/js/third-party/jquery-3.7.1.min.js"></script>
527 528<!-- jquery: end --> 529 530<!-- fontmetrics: begin -->
531<script src="/bestcrosswords/js/third-party/FontMetrics.2017.11.26.min.js"></script>
531 532<!-- fontmetrics: end --> 533 534<!-- https://github.com/sdecima/javascript-detect-element-resize/: begin -->
535<script src="/bestcrosswords/js/third-party/javascript-detect-element-resize-jquery-0.5.3.min.js"></script>
535 536<!-- https://github.com/sdecima/javascript-detect-element-resize/: end --> 537 538<!-- https://github.com/jeanphil77/current-device: begin -->
539<script src="/bestcrosswords/js/third-party/current-device-2.0.2.1.min.js"></script>
539 540<!-- https://github.com/jeanphil77/current-device: end --> 541 542<!-- https://modernizr.com: begin -->
543<script src="/bestcrosswords/js/third-party/modernizr-custom-3.6.0.1.min.js"></script>
543 544<!-- https://modernizr.com: end --> 545 546<!-- https://getbootstrap.com/: begin -->
547<script src="/bestcrosswords/js/third-party/bootstrap.bundle-5.3.8.min.js?cbid=5cc1b73e70520fa84b1846afe0ec8fb6"></script>
547 548<!-- https://getbootstrap.com/: end --> 549 550<!-- In-house JS library: begin -->
551<script src="/bestcrosswords/js/main.min.js?cbid=55ae124dfc557d570e953d89b703daba"></script>
551 552<!-- In-house JS library: end --> 553 554 555 556<!-- Push notifications: begin --> 557 558
558<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-app.js"></script>
558 559 560
560<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-messaging.js"></script>
560 561 562
562<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-analytics.js"></script>
562 563
564<script src="/bestcrosswords/js/notifications.js"></script>
vendor: 1 bytes, line 564
564
565<script> 566 notif_InitBrowser(function () { 567 notif_Messaging.onMessage(function (payload) { 568 notif_Log("Notification received while in foreground: ", payload); 569 notif_SendGAEvent("Received (foreground)", payload.data.title); 570 notif_sendDesktopNotification(payload.data.title, payload.data.body, payload.data.url, payload.data.image); 571 }); 572 notif_InstallServiceWorker(); 573 }); 574</script>
574 575<!-- Push notifications: end --> 576 577 578<!-- Insert blocks: start --> 579 580 581 582 583 584 585
585<script> $(function () { 586 let idleMinutes = 0; 587 $(this).mousemove(function () { 588 idleMinutes = 0; 589 }); 590 $(this).keypress(function () { 591 idleMinutes = 0; 592 }); 593 setInterval(function () { 594 idleMinutes++; 595 }, 60000) 596 597 function userIsActive() { 598 return idleMinutes <= 3; 599 } 600 601 function reloadRecentPuzzles() { 602 // Refresh only if user is active to reduce load on the site. 603 if (userIsActive()) { 604 $.ajax({ 605 url: getWebContext() + "/api/prefs/puzzlesinprogress", 606 }).done(function (data) { 607 let html = ''; 608 let itemCount = isMobile() ? Math.min(data.length, 5) : data.length; 609 for (let i = 0; i < itemCount; i++) { 610 let item = data[i]; 611 html += "<a class='dropdown-item' href='" + 612 item['url'] + "'>" + item['title'] + "<\/a>"; 613 } 614 $('#recentpuzzles .badge').html(itemCount); 615 if (itemCount > 0) { 616 $('#recentpuzzles .btn').removeAttr('disabled'); 617 } else { 618 $('#recentpuzzles .btn').attr('disabled', 'disabled'); 619 } 620 $('#recentpuzzles .dropdown-menu').html(html); 621 }); 622 } 623 // Schedule next run 624 setTimeout(reloadRecentPuzzles, 60000); 625 } 626 627 reloadRecentPuzzles(); 628 }); 629</script>
629 630
630<script>$(function () { 631 // Position left bar ad in the ideal position. 632 const adjustLeftBarAdPosition = function () { 633 const banner = $('#leftbar-ads'); 634 if (banner.length === 0) { 635 return; 636 } 637 const leftbar = $('#leftbar'); 638 if (leftbar.length === 0) { 639 return; 640 } 641 const padding = 10; 642 const viewportHeight = window.innerHeight; 643 const bannerRect = banner.get(0).getBoundingClientRect(); 644 const leftbarRect = leftbar.get(0).getBoundingClientRect(); 645 const bannerHeight = bannerRect.bottom - bannerRect.top; 646 // Margins are relative to the content box, so the cell's top padding has to come off every 647 // position computed from the viewport or the engine below. 648 const leftbarTop = leftbarRect.top + parseFloat(window.getComputedStyle(leftbar.get(0)).paddingTop); 649 const minTopMargin = 0; 650 const maxTopMargin = leftbarRect.bottom - leftbarTop - bannerHeight; 651 652 // Keeping the banner at the top of the viewport by default, tracking user scrolling. 653 let topMargin = padding - leftbarTop; 654 let position = 'viewport'; 655 // However, if we can find the engine on the page, we attempt to align the ad 656 // with the top of the engine, but only if it doesn't cause the ad to be clipped. 657 // This is to handle the large screens with the engine at the bottom of the viewport, 658 // causing the ad to be away from the user main focus area. 659 const engine = $('.bc-gwt-app-load'); 660 if (engine.length > 0) { 661 if (engine.height() < 300) { 662 // Engine not loaded yet, schedule a retry... 663 setTimeout(adjustLeftBarAdPosition, 250); 664 } else { 665 // Engine is loaded. 666 const engineRect = engine.get(0).getBoundingClientRect(); 667 if (engineRect.top > 0) { 668 const bannerWouldBeClipped = engineRect.top + bannerHeight > viewportHeight; 669 if (!bannerWouldBeClipped) { 670 topMargin = engineRect.top - leftbarTop; 671 position = 'engine'; 672 } 673 } 674 } 675 } 676 topMargin = Math.min(topMargin, maxTopMargin); 677 topMargin = Math.max(topMargin, minTopMargin); 678 banner.css("margin-top", topMargin + "px"); 679 }; 680 681 // Constantly update ad visibility as the user scrolls / resizes the window. 682 window.addEventListener('scroll', adjustLeftBarAdPosition); 683 window.addEventListener('resize', adjustLeftBarAdPosition); 684 685 // Set baseline position, in case the page is reloaded while scrolled. 686 adjustLeftBarAdPosition(); 687}); 688 689$(function () { 690 const banner = $('#leftbar-ads'); 691 if (banner.length === 0) { 692 return; 693 } 694 if (banner.height() > 0) { 695 $('#removeAds').show(); 696 } 697}); 698</script>
698 699 700
700<script> 701 $(function () { 702 $('#latestpuzzles').find('.list-group-item-action').on('click', function () { 703 var href = $(this).find('a').attr('href'); 704 if (href) { 705 window.location.href = href; 706 } 707 }); 708 }) 709 </script>
709 710 711 712<!-- Insert blocks: end --> 713 714<!-- Google Analytics old cookies cleanup: BEGIN -->
715<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script>
vendor: 1 bytes, line 715
715
716<script> 717 function deleteCookie(name) { 718 ['', 'www.bestcrosswords.com', '.bestcrosswords.com', 'bestcrosswords.com'].forEach(function (domain) { 719 ['', '/', '/bestcrosswords'].forEach(function (path) { 720 let options = {}; 721 if (domain) { 722 options['domain'] = domain; 723 } 724 if (path) { 725 options['path'] = path; 726 } 727 console.log("Removing cookie", name, options); 728 Cookies.remove(name, options); 729 }); 730 }); 731 } 732 733 for (let name in Cookies.get()) { 734 if (name.startsWith('_gd')) { 735 deleteCookie(name); 736 } 737 } 738</script>
738 739<!-- Google Analytics old cookies cleanup: END --> 740 741</body> 742 743</html>
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.