1<!DOCTYPE html> 2�<html lang="en"><head><meta content="The Loop West End" property="og:site_name"/><meta content="http://theloopwestend.com/" property="og:url"/><meta content="website" property="og:type"/><meta content="Visit The Loop West End, a St Louis Park restaurant and bar serving American favorites, pizza, drinks, and more in the West End." property="og:description"/><meta content="The Loop West End - West End, St Louis Park, MN" property="og:title"/><!-- Google tag (gtag.js) -->
vendor: 71 bytes, line 2
2<script async="async" src="https://www.googletagmanager.com/gtag/js?id=
2G-VG24VK2VKT
vendor: 11 bytes, line 2
2"></script>
2<script> 3 window.dataLayer = window.dataLayer || []; 4 function gtag(){dataLayer.push(arguments);} 5 gtag('set', 'linker', {'domains': ['tmt.spotapps.co','spothopperapp.com']}); 6 gtag('js', new Date()); 7 gtag('config', 'G-GRDYRYTEWW'); 8 gtag('config', 'G-VG24VK2VKT'); 9 </script>
9<!-- wcache 2026-10-06 12:14:27.842011Z --><!-- 10smart_footer: true, 11smart_footer_version: 2, 12scripting_active: false 13--><link href="https://theloopwestend.com/" rel="canonical"/><meta charset="utf-8"/><meta content="IE=edge" http-equiv="X-UA-Compatible"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="Visit The Loop West End, a St Louis Park restaurant and bar serving American favorites, pizza, drinks, and more in the West End." name="description"/><meta content="" name="author"/><meta content="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/social_share.jpg" property="og:image"/><meta content="The Loop West End image" property="og:image:alt"/><meta content="image/png" property="og:image:type"/><meta content="734246769988821" property="fb:app_id"/><meta content="summary_large_image" name="twitter:card"/><meta content="The Loop West End - West End, St Louis Park, MN" name="twitter:title"/><meta content="The Loop West End offers a large variety of menu options, from salads and sandwiches to pizza and entrees such as the Salmon Rice Bowl, the Flank Steak Salad and the Mac-n-Cheese Pizza. We ..." name="twitter:description"/><meta content="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/social_share.jpg" name="twitter:image"/><title>St Louis Park Restaurant, Bar & Grill | The Loop West End</title><!-- wbv 1.60.0 --><meta content="1.60.0" name="wbv"/>
13<script>document.cookie='resolution='+Math.max(screen.width,screen.height)+("devicePixelRatio" in window ? ","+devicePixelRatio : ",1")+'; path=/';</script>
13<script type="application/ld+json">{"@context":"https:\/\/schema.org","@id":"https:\/\/theloopwestend.com\/","@type":"Restaurant","address":{"@type":"PostalAddress","addressCountry":"US","addressLocality":"St Louis Park","addressRegion":"MN","postalCode":"55416","streetAddress":"5331 West 16th Street"},"email":"[email protected]","geo":{"@type":"GeoCoordinates","latitude":44.9677932,"longitude":-93.3472604},"hasMenu":"https:\/\/theloopwestend.com\/food-menu","logo":"https:\/\/cdn.spotapps.co\/spothopper\/112064_logo_qruhuo","name":"The Loop West End","sameAs":["https:\/\/www.facebook.com\/734246769988821","https:\/\/www.instagram.com\/theloopwestend"],"telephone":"9526812684"}</script>
13<link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/favicon.svg" rel="icon" type="image/svg+xml"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/favicon.ico" rel="shortcut icon"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><meta content="The Loop West End" name="apple-mobile-web-app-title"/><link href="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/favicons/site.webmanifest" rel="manifest"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/gallery/gallery.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/jquery.fancybox.css" media="screen" rel="stylesheet" type="text/css"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css" rel="stylesheet" type="text/css"/><link href="//static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet-gesture-handling.min.css" rel="stylesheet" type="text/css"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/css/uikit.docs.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/css/slidenav.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/hover_css/css/hover-min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/owlcarousel/owl.carousel.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/owlcarousel/owl.theme.default.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/css/style.css?version2" id="mainCSS" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/css/bottom_navigation_v1.css?v1785489074" rel="stylesheet"/><link href="css/custom.css?v1785489074&domain=theloopwestend.com" rel="stylesheet"/><link href="https://static.spotapps.co/web/theloopwestend--com/lib/icons_font/css/social_icons.css" rel="stylesheet"/><!--[if IE 7]><link rel="stylesheet" href="lib/icons_font/css/social_icons-ie7.css"><![endif]--><link href="https://static.spotapps.co/web/theloopwestend--com/lib/twitter_x_font_icon/css/twitter_x.css" rel="stylesheet"/><!--[if IE 7]><link rel="stylesheet" href="lib/twitter_x_font_icon/css/twitter_x-ie7.css"><![endif]--><!--[if lt IE 9]> 14
14<script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
14 15
15<script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
15 16 <![endif]--><style> 17 18#accessibility-footer { 19 padding: 20px 5px; 20 background-color: #353638; 21 color: #fff; 22 text-align: center; 23} 24#accessibility-footer p { 25 margin: 0; 26 padding: 0; 27 font-family: inherit; 28 font-size: initial; 29 color: #fff; 30} 31#accessibility-footer .accessibility-link { 32 display: inline-block; 33 color: inherit; 34 text-decoration: underline; 35 font-weight: 600; 36} 37 38@media (max-width: 767px) { 39 #accessibility-footer .accessibility-link { 40 display: block; 41 } 42 43 /* additionl css in case that there is a CTA mobile bar (id="bottom-navbar") on the website */ 44 #accessibility-footer { 45 position: relative; 46 top: -60px; 47 padding-bottom: 70px; 48 } 49} 50 51</style>
51<script src="https://static.spotapps.co/websites/lib/lazysizes/lazysizes.min.js" async=""></script>
51<script> 52function ga_check(){ 53 return true; 54} 55</script>
55<script> 56function universal_ga(action, type, category, ev_action, label){ 57 if(typeof ga === 'function') 58 { 59 if(!(action && label)) 60 ga(action, type, category) 61 else 62 ga(action, type, category, ev_action, label) 63 } 64 65 if(typeof gtag === 'function') 66 { 67 if(!(action && label)) 68 { 69 hash = category 70 ev_label = hash["eventLabel"] 71 var splits = ev_label.match(/.{1,100}/g) ?? []; 72 delete(hash["eventLabel"]) 73 74 if(splits.length <= 1) 75 hash["eventLabel"] = ev_label 76 else 77 { 78 for (let i = 0; i < splits.length; i++) { 79 var key = "eventLabel_"+i 80 hash[key] = splits[i] 81 } 82 } 83 console.log(hash) 84 gtag("event", hash["eventCategory"], hash); 85 } 86 else 87 { 88 var hash = { 89 eventCategory: category, 90 eventAction: ev_action 91 } 92 93 var splits = label.match(/.{1,100}/g) ?? []; 94 if(splits.length <= 1) 95 hash["eventLabel"] = label 96 else 97 { 98 for (let i = 0; i < splits.length; i++) { 99 var key = "eventLabel_"+i 100 hash[key] = splits[i] 101 } 102 } 103 gtag("event", hash["eventCategory"], hash); 104 } 105 } 106} 107</script>
107<script> function getPromotionUrlParams(){ 108 var params_str = sessionStorage.getItem('shUrlParams'); 109 if (params_str != null){ 110 return JSON.parse(params_str); 111 }else{ 112 return {}; 113 } 114 } 115 116 function getPromotionSourceDetails(){ 117 var params_str = localStorage.getItem('promotionSourceDetails'); 118 if (params_str != null){ 119 return JSON.parse(params_str); 120 }else{ 121 return {}; 122 } 123 } 124 125 function getLastEmailVisitInDays(){ 126 var promotionSourceDetails = getPromotionSourceDetails(); 127 if (!promotionSourceDetails['last_visit_email'] ){ 128 return null; 129 } 130 return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_email'])) / (1000 * 60 * 60 * 24)); 131 } 132 133 function getLastSocialVisitInDays(){ 134 var promotionSourceDetails = getPromotionSourceDetails(); 135 if (!promotionSourceDetails['last_visit_social'] ){ 136 return null; 137 } 138 return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_social'])) / (1000 * 60 * 60 * 24)); 139 } 140 141 var shUrlParams = getPromotionUrlParams(); 142 var promotionSourceDetails = getPromotionSourceDetails(); 143 144 new URL(document.location).searchParams.forEach(function(value, paramName){ 145 146 shUrlParams[paramName] = value; 147 148 if (paramName == 'source' && value =='social' ){ 149 promotionSourceDetails['last_visit_social'] = new Date(); 150 localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails)); 151 } 152 153 if (paramName == 'source' && value =='email' ){ 154 promotionSourceDetails['last_visit_email'] = new Date(); 155 localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails)); 156 } 157 158 }); 159 160 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)) 161</script>
161<style>.cta-nudge-btn[data-nudge-position="mobile-header"], 162.cta-nudge-btn[data-nudge-position="mobile-footer"] { 163 display: inline-block; 164 font-family: inherit; 165 font-weight: inherit; 166 text-transform: uppercase; 167 text-decoration: none; 168 text-align: center; 169 border-width: 2px; 170 border-style: solid; 171 border-radius: 0; 172} 173 174nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"], 175.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"], 176nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:hover, 177nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:focus, 178.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:hover, 179.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:focus { 180 background-color: #000000; 181 color: #FFFFFF; 182 border-color: #FFFFFF; 183} 184 185nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"] span, 186.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"] span, 187nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:hover span, 188nav.navbar .socialnav .mobile-header-nudge-item .cta-nudge-btn[data-nudge-position="mobile-header"]:focus span, 189.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:hover span, 190.navbar-fixed-bottom .mobile-footer-nudge-item .cta-nudge-btn[data-nudge-position="mobile-footer"]:focus span { 191 color: #FFFFFF; 192} 193 194nav.navbar .socialnav .cta-nudge-btn[data-nudge-position="mobile-header"] { 195 width: auto; 196 padding: 6px 15px; 197 margin: -2px 5px 0 0; 198 font-size: 1.1em; 199} 200 201.navbar-fixed-bottom .mobile-footer-nudge-item { 202 width: 100%; 203 margin: 6px 15px; 204 padding: 0; 205} 206 207.navbar-fixed-bottom .cta-nudge-btn[data-nudge-position="mobile-footer"] { 208 width: 100%; 209 padding: 8px 15px; 210 margin: 0 auto; 211 font-size: 1.3em; 212}</style><style>a:focus:not(:focus-visible){outline:none;box-shadow:none;} 213a.get-directions-footer-link{display:inline-block;transform-origin:left center;transition:transform .2s ease;} 214a.get-directions-footer-link:hover{transform:scale(1.08);} 215@media (prefers-reduced-motion:reduce){a.get-directions-footer-link{transition:none;transform:none;}} 216a.get-directions-footer-link,a.get-directions-footer-link:hover{color:inherit!important;}</style></head><body class="home-page" data-spot-id="112064"><style>.promotion-pop-up .modal-dialog { 217 margin: 0 auto; 218 top: 0; 219 transition: none; 220} 221.promotion-pop-up.fade .modal-dialog { 222 transform: none !important; 223} 224 225.promotion-pop-up .modal-content { 226 display: none; 227 border-radius: 6px; 228 background-color: #fff; 229 background-image: none; 230} 231.promotion-pop-up .modal-header { 232 border: none; 233 margin-bottom: 8px; 234} 235.promotion-pop-up .close { 236 position: absolute; 237 top: 15px; 238 right: 15px; 239 font-size: 3em; 240 font-weight: normal; 241 line-height: 0.8em; 242 color: #000; 243 opacity: 0.8; 244} 245.promotion-pop-up .modal-body { 246 margin: 20px 20px 10px 20px; 247 padding-top: 5px; 248 text-align: center; 249 color: initial; 250} 251.promotion-pop-up .modal-footer { 252 padding-bottom: 40px; 253 border-top: none; 254 text-align: center; 255} 256 257.promotion-pop-up .btn { 258 display: inline-block; 259 max-width: 90%; 260 padding: 10px 50px; 261 font-size: 1.2em; 262 background-color: #000000; 263 color: #fff; 264 transform: scale(1); 265 -webkit-transition: all 0.3s ease; 266 -moz-transition: all 0.3s ease; 267 -o-transition: all 0.3s ease; 268 transition: all 0.3s ease; 269} 270.promotion-pop-up .btn:hover { 271 background-color: #1a1a1a; 272 color: #e0e0e0; 273 box-shadow: 1px 3px 6px rgba(0, 0, 0, 0.3); 274 transform: scale(0.98); 275} 276 277.promotion-pop-up .btn:active { 278 background-color: #0f0f0f; 279 color: #cccccc; 280 box-shadow: 281 inset 0 2px 4px rgba(255, 255, 255, 0.08), 282 inset 0 -2px 2px rgba(0, 0, 0, 0.4); 283 transform: scale(0.94); 284} 285 286.promotion-pop-up h2 { 287 margin: 5px 5px 10px 5px; 288 font-size: 2.1em; 289 line-height: 1.3; 290 color: inherit; 291 /*font-family: unset;*/ 292} 293.promotion-pop-up h3 { 294 font-size: 1.5em; 295 margin: 5px 5px 15px 5px; 296 font-family: unset; 297 text-transform: inherit; 298} 299.promotion-pop-up p { 300 margin-top: 30px; 301} 302.promotion-pop-up .modal-body a { 303 color: initial; 304} 305 306.promotion-pop-up .modal-plain-text h3 { 307 padding-top: 10px; 308} 309 310.promotion-pop-up .modal-body.modal-image-and-button { 311 overflow: auto; 312 margin: 20px; 313 padding-top: 0;
314 padding-bottom: 0; 315} 316.promotion-pop-up .modal-body.modal-image-and-button img { 317 max-height: 60vh; 318 max-width: 100%; 319} 320.promotion-pop-up .modal-body.modal-image-and-button p { 321 margin-top: 15px; 322 margin-bottom: 10px; 323} 324 325@media only screen and (max-width: 1024px) { 326 .promotion-pop-up .modal-body.modal-image-and-button { 327 margin-bottom: 10px; 328 } 329 .promotion-pop-up h2 { 330 font-size: 1.9em; 331 } 332 .promotion-pop-up h3 { 333 font-size: 1.4em; 334 } 335 .promotion-pop-up .modal-body.modal-image-and-button img { 336 max-height: 65vh; 337 } 338} 339 340@media only screen and (max-width: 767px) { 341 .promotion-pop-up .modal-dialog { 342 margin: 0 10px; 343 } 344 .promotion-pop-up .modal-body { 345 margin-top: 18px; 346 } 347 .promotion-pop-up .modal-body.modal-image-and-button img { 348 max-height: 55vh; 349 } 350 .promotion-pop-up h2 { 351 font-size: 1.8em; 352 } 353 .promotion-pop-up h3 { 354 font-size: 1.3em; 355 } 356 .promotion-pop-up .modal-body.modal-image-and-button p { 357 font-size: 1.1em; 358 } 359} 360@media only screen and (max-width: 500px) { 361 .promotion-pop-up .modal-footer { 362 padding-top: 10px; 363 padding-bottom: 35px; 364 } 365 .promotion-pop-up .modal-body { 366 margin: 17px 15px 5px 15px; 367 } 368 .promotion-pop-up .btn { 369 padding: 9px 40px; 370 font-size: 1.1em; 371 } 372 .promotion-pop-up .modal-body.modal-image-and-button img { 373 max-height: 50vh; 374 } 375} 376@media only screen and (max-width: 400px) { 377 .promotion-pop-up h2 { 378 font-size: 1.7em; 379 } 380 .promotion-pop-up h3 { 381 font-size: 1.2em; 382 } 383 .promotion-pop-up .btn { 384 padding: 8px 35px; 385 font-size: 1.1em; 386 } 387}</style><div aria-label="Promotion" class="modal fade promotion-pop-up" id="promotion-pop-up" role="dialog" tabindex="-1"><div class="modal-dialog" role="document"><div class="modal-content promotion_pop_up_content" data-has-image="//static.spotapps.co/spots/ca/efc7b22e1f4c8e8749f7e3a8153885/:original" data-internalname="custom_promotion" data-is-custom-link="false" data-is-template-image-and-button="true" data-link-url="https://www.theloopwestend.com/events?source=pop_up&spot_id=112064&destination=events&promotion=custom_promotion" id="8240746"><!-- Modal Header --><div class="modal-header"><button aria-label="Close" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">Ã</span></button></div><!-- Modal body --><div class="modal-body modal-image-and-button"><h2 class="section-header">Enjoy our GAME DAY SPECIALS during ALL LIVE NFL GAMES this season! Only at The Loop West End</h2><img alt="" src="//static.spotapps.co/spots/ca/efc7b22e1f4c8e8749f7e3a8153885/:original"/><p></p></div><div class="modal-footer"><a class="btn btn-modal" data-href="https://www.theloopwestend.com/events?source=pop_up&spot_id=112064&destination=events&promotion=custom_promotion" href="https://www.theloopwestend.com/events?source=pop_up&spot_id=112064&destination=events&promotion=custom_promotion">Learn more here!</a></div></div></div></div><style> 388 389 .nav-v7 .navbar-logo .container { 390 height: 80px; 391 } 392 .nav-v7 .navbar-logo .header-logo img { 393 max-height: 80px; 394 } 395 396 397.navbar.nav-v6 .navbar-logo .container { 398 height: 100px; 399 padding-top: 10px; 400 padding-bottom: 10px; 401} 402.navbar.nav-v6.nav-scroll .navbar-logo .container { 403 height: 70px; 404 padding-top: 0px; 405 padding-bottom: 0px; 406} 407.navbar.nav-v6 .header-logo img { 408 max-width: 100%; 409} 410.navbar.nav-v6.nav-scroll .header-logo img { 411 max-width: 80%; 412} 413.nav-v7 .navbar-logo .header-logo img { 414 max-height: 100px; 415} 416.nav-v7.nav-scroll .navbar-logo .header-logo img { 417 max-height: 70px; 418} 419 420@media (max-width: 767px) { 421 /* DO NOT change mobile nav height on page scroll */ 422 .navbar.nav-v6 .navbar-header, 423 .navbar.nav-v6.nav-scroll .navbar-header { 424 padding-top: 10px; 425 padding-bottom: 10px; 426 } 427 .navbar.nav-v6 .socialnav, 428 .navbar.nav-v6.nav-scroll .socialnav { 429 margin-top: 10px; 430 } 431 .navbar.nav-v6 .container, 432 .navbar.nav-v6.nav-scroll .container { 433 padding-top: 0; 434 padding-bottom: 0; 435 } 436 .navbar.nav-v6 .header-logo, 437 .navbar.nav-v6.nav-scroll .header-logo { 438 height: 70px; 439 } 440 .navbar.nav-v6 .header-logo img { 441 max-height: 100%; 442 } 443 .navbar.nav-v6.nav-scroll .header-logo img { 444 max-width: 100%; 445 } 446 /* HOME page CHANGE mobile nav height on page scroll */ 447 /* Remove body.home-page from below code if there should be mobile nav height change on ALL pages */ 448 body.home-page .navbar.nav-v6 .navbar-header { 449 padding-top: 10px; 450 padding-bottom: 10px; 451 } 452 body.home-page .navbar.nav-v6.nav-scroll .navbar-header{ 453 padding-top: 0px; 454 padding-bottom: 0px; 455 } 456 body.home-page .navbar.nav-v6 .socialnav { 457 margin-top: 10px; 458 } 459 body.home-page .navbar.nav-v6.nav-scroll .socialnav { 460 margin-top: 0px; 461 } 462 body.home-page .navbar.nav-v6 .container{ 463 padding-top: 0; 464 padding-bottom: 0; 465 } 466 body.home-page .navbar.nav-v6.nav-scroll .container { 467 padding-top: 0; 468 padding-bottom: 0; 469 } 470 body.home-page .navbar.nav-v6 .header-logo { 471 height: 70px; 472 } 473 body.home-page .navbar.nav-v6.nav-scroll .header-logo { 474 height: 50px; 475 } 476 body.home-page .navbar.nav-v6 .header-logo img { 477 max-height: 100%; 478 max-width: 100%; 479 } 480 body.home-page .navbar.nav-v6.nav-scroll .header-logo img { 481 max-width: 80%; 482 } 483} 484 485 486.navbar-regular .navbar-collapse.collapse.in { 487 background-color: transparent; 488 width: 100%; 489} 490.navbar.nav-v6 .navbar-tabs { 491 background-color: #fff; 492 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 493 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 494 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 495} 496.navbar.nav-v6.nav-scroll .navbar-tabs { 497 background-color: #fff; 498 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 499 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 500 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 501} 502.drink-menu .navbar.nav-v6 .navbar-tabs { 503 background-color: #fff; 504 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 505 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 506 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 507} 508.drink-menu .navbar.nav-v6.nav-scroll .navbar-tabs { 509 background-color: #fff; 510 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 511 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 512 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 513} 514li.drop-down-link .sub-menu { 515 background-color: #fff; 516 color: #000; 517 } 518.nav-scroll li.drop-down-link .sub-menu { 519 background-color: #fff; 520 color: #000; 521} 522.drink-menu li.drop-down-link .sub-menu { 523 background-color: #fff; 524 color: #000; 525} 526.drink-menu .nav-scroll li.drop-down-link .sub-menu { 527 background-color: #fff; 528 color: #000; 529} 530li.drop-down-link .sub-menu a, 531li.drop-down-link div.drop-down { 532 color: #000; 533} 534.nav-scroll li.drop-down-link .sub-menu a, 535.nav-scroll li.drop-down-link div.drop-down { 536 color: #000; 537} 538.drink-menu li.drop-down-link .sub-menu a, 539.drink-menu li.drop-down-link div.drop-down { 540 color: #000; 541} 542.drink-menu .nav-scroll li.drop-down-link .sub-menu a, 543.drink-menu .nav-scroll li.drop-down-link div.drop-down { 544 color: #000; 545} 546 547.navbar.nav-v6 .navbar-logo { 548 background-color: #fff; 549} 550.navbar.nav-v6.nav-scroll .navbar-logo { 551 background-color: #fff; 552} 553.drink-menu .navbar.nav-v6 .navbar-logo { 554 background-color: #fff; 555} 556.drink-menu .navbar.nav-v6.nav-scroll .navbar-logo { 557 background-color: #fff; 558} 559 560.navbar-regular.nav-v6 .navbar-nav>li>a, 561.navbar-regular.nav-v6 .navbar-nav>li>a:hover, 562.navbar-regular.nav-v6 .navbar-nav>.active>a, 563.navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 564.navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 565 border: none; 566 border-right: 1px solid #000; 567 background-color: transparent; 568 color: #4C2432; 569} 570.navbar-regular.nav-v6 .navbar-nav>li>a { 571 color: #000; 572} 573.drink-menu .navbar.nav-v6 .navbar-nav>li>a { 574 color: #000; 575 border-right: 1px solid #000; 576} 577.drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 578.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a, 579.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 580.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 581 color: #4C2432; 582} 583 584li.drop-down-link .sub-menu a:hover, 585li.drop-down-link .sub-menu a:focus, 586li.drop-down-link .sub-menu li.active a { 587 color: #4C2432; 588} 589.drink-menu li.drop-down-link .sub-menu a:hover, 590.drink-menu li.drop-down-link .sub-menu a:focus, 591.drink-menu li.drop-down-link .sub-menu li.active a { 592 color: #4C2432; 593} 594 595.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a, 596.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a:hover, 597.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a, 598.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:focus, 599.navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:hover{ 600 color: #4C2432; 601} 602.navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a { 603 color: #000; 604} 605.drink-menu .navbar.nav-v7 .navbar-nav>li>a { 606 color: #000; 607} 608.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a { 609 color: #000; 610} 611.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>li>a:hover, 612.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a, 613.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:focus, 614.drink-menu .navbar-regular.nav-v7 .navbar-contact .navbar-nav>.active>a:hover {
615 color: #4C2432; 616} 617 618.navbar-regular.nav-v6 .navbar-toggle .icon-bar { 619 background-color: #000; 620} 621.drink-menu .navbar-regular.nav-v6 .navbar-toggle .icon-bar { 622 background-color: #000; 623} 624.navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar { 625 background-color: #4C2432; 626} 627.drink-menu .navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar { 628 background-color: #4C2432; 629} 630.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a, 631.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 632.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 633.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 634.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 635 border: none; 636 border-right: 1px solid #000; 637 color: #4C2432; 638} 639.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a { 640 color: #000; 641} 642.drink-menu .navbar.nav-v6.nav-scroll .navbar-nav>li>a { 643 color: #000; 644 border-right: 1px solid #000; 645} 646.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 647.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 648.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 649.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover { 650 color: #4C2432; 651} 652 653.nav-scroll li.drop-down-link .sub-menu a:hover, 654.nav-scroll li.drop-down-link .sub-menu a:focus, 655.nav-scroll li.drop-down-link .sub-menu li.active a { 656 color: #4C2432; 657} 658.drink-menu .nav-scroll li.drop-down-link .sub-menu a:hover, 659.drink-menu .nav-scroll li.drop-down-link .sub-menu a:focus, 660.drink-menu .nav-scroll li.drop-down-link .sub-menu li.active a { 661 color: #4C2432; 662} 663 664.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a, 665.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a:hover, 666.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a, 667.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:focus, 668.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:hover { 669 color: #4C2432; 670} 671.navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a { 672 color: #000; 673} 674.drink-menu .navbar.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a { 675 color: #000; 676} 677.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>li>a:hover, 678.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a, 679.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:focus, 680.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-contact .navbar-nav>.active>a:hover{ 681 color: #4C2432; 682} 683 684.navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar { 685 background-color: #000; 686} 687.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar { 688 background-color: #000; 689} 690.navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar { 691 background-color: #4C2432; 692} 693.drink-menu .navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar{ 694 background-color: #4C2432; 695} 696.navbar.nav-v6 .header-logo-text{ 697 color: #000; 698} 699.navbar.nav-v6.nav-scroll .header-logo-text{ 700 color: #000; 701} 702.navbar.nav-v6 .social-icon{ 703 color: #000; 704} 705.navbar.nav-v6.nav-scroll .social-icon{ 706 color: #000; 707} 708.navbar.nav-v6 .social-square .contact-icon:hover { 709 color: #000; 710 background-color: #4C2432; 711} 712.navbar.nav-v6.nav-scroll .social-square .contact-icon:hover { 713 color: #000; 714 background-color: #4C2432; 715} 716 717.drink-menu .navbar.nav-v6 .header-logo-text{ 718 color: #000; 719} 720.drink-menu .navbar.nav-v6.nav-scroll .header-logo-text{ 721 color: #000; 722} 723.drink-menu .navbar.nav-v6 .social-icon{ 724 color: #000; 725} 726.drink-menu .navbar.nav-v6.nav-scroll .social-icon{ 727 color: #000; 728} 729.drink-menu .navbar.nav-v6 .social-square .contact-icon:hover { 730 color: #000; 731 background-color: #4C2432; 732} 733.drink-menu .navbar.nav-v6.nav-scroll .social-square .contact-icon:hover { 734 color: #000; 735 background-color: #4C2432; 736} 737.navbar.nav-v6 .navbar-logo .container { 738 border-bottom: 1px solid #000; 739} 740.navbar.nav-v6.nav-scroll .navbar-logo .container { 741 border-bottom: 1px solid #000; 742} 743.drink-menu .navbar.nav-v6 .navbar-logo .container { 744 border-bottom: 1px solid #000; 745} 746.drink-menu .navbar.nav-v6.nav-scroll .navbar-logo .container { 747 border-bottom: 1px solid #000; 748} 749@media (max-width: 767px) { 750 .navbar.nav-v6 { 751 background-color: #fff; 752 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 753 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 754 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 755 } 756 .navbar.nav-v6.nav-scroll { 757 background-color: #fff; 758 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 759 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 760 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 761 } 762 .drink-menu .navbar.nav-v6 { 763 background-color: #fff; 764 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 765 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 766 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 767 } 768 .drink-menu .navbar.nav-v6.nav-scroll { 769 background-color: #fff; 770 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 771 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 772 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 773 } 774 .navbar.nav-v6 .container, 775 .navbar.nav-v6.nav-scroll .container, 776 .drink-menu .navbar.nav-v6 .container, 777 .drink-menu .navbar.nav-v6.nav-scroll .container { 778 border-bottom: none; 779 } 780 .navbar.nav-v6 .navbar-header { 781 border-bottom: 2px solid #000; 782 } 783 .navbar.nav-v6.nav-scroll .navbar-header { 784 border-bottom: 2px solid #000; 785 } 786 .drink-menu .navbar.nav-v6 .navbar-header { 787 border-bottom: 2px solid #000; 788 } 789 .drink-menu .navbar.nav-v6.nav-scroll .navbar-header { 790 border-bottom: 2px solid #000; 791 } 792 li.drop-down-link .sub-menu, 793 .drink-menu li.drop-down-link .sub-menu { 794 background-color: transparent; 795 } 796 .nav-scroll li.drop-down-link .sub-menu, 797 .drink-menu .nav-scroll li.drop-down-link .sub-menu { 798 background-color: transparent; 799 } 800 /* Mobile home background */ 801 .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse, 802 .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapsing, 803 .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse.in { 804 background-color: #ffffff; 805 } 806 /* Mobile home background scroll */ 807 .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse, 808 .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapsing, 809 .navbar.nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse.in { 810 background-color: #ffffff; 811 } 812 /* Mobile pages background */ 813 .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse, 814 .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapsing, 815 .drink-menu .navbar.nav-v6.navbar-regular.mobile-full-height .navbar-collapse.collapse.in { 816 background-color: #ffffff; 817 } 818 /* Mobile pages background scroll */ 819 .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse, 820 .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapsing, 821 .drink-menu .nav-v6.navbar-regular.nav-scroll.mobile-full-height .navbar-collapse.collapse.in { 822 background-color: #ffffff; 823 } 824 .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 825 .navbar-regular.nav-v6 .navbar-nav>.active>a, 826 .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 827 .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 828 background-color: #4C2432; 829 color: #000; 830 } 831 .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 832 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 833 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 834 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 835 background-color: #4C2432; 836 color: #000; 837 } 838 .drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 839 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a, 840 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 841 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 842 background-color: #4C2432; 843 color: #000; 844 } 845 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 846 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 847 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 848 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 849 background-color: #4C2432; 850 color: #000; 851 } 852 853 .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up { 854 color: #000; 855 } 856 .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up { 857 color: #000; 858 } 859 .drink-menu .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up { 860 color: #000; 861 } 862 .drink-menu .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up { 863 color: #000; 864 } 865} 866</style><!-- nav --><nav class="navbar nav-v4 nav-v6 nav-v7 navbar-regular navbar-fixed-top " id="navbar" role="navigation"><div id="skip"><a class="visuallyhidden skip-content" href="#content">Skip to main content</a></div><div class="desktop-navigation logo-center"><div class="navbar-top-tabs clearfix"><ul class="custom-btn-list"><li><a class="custom-temp-btn hvr-fade" href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order Online<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li><a class="custom-temp-btn hvr-fade" href="https://www.toasttab.com/the-loop-west-end/giftcards" target="_blank">Gift Cards<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li><a class="custom-temp-btn hvr-fade" href="https://www.toasttab.com/the-loop-west-end/rewardsSignup" target="_blank">Join Our Loyalty Program<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li><a class="custom-temp-btn hvr-fade" href="/reservations" target="_self">Reserve</a></li><li><a class="custom-temp-btn hvr-fade" href="https://go.momos.com/cwgiMl" target="_blank">Parties & Catering<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li></ul></div><div class="navbar-logo"><div class="container"><a aria-current="page" class="header-logo logo-top" href="/#"><img alt="The Loop West End logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><a aria-current="page" class="header-logo header-logo-a logo-scroll" href="/"><img alt="The Loop West End logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><div class="navbar-contact"><ul class="nav navbar-nav navbar-right"><li class="nav-phone"><a href="tel:+19526812684"><i aria-hidden="true" class="fa fa-phone"></i><span>
866(952)-681-2684</span></a></li><li class="nav-email"><a href="mailto:[email protected]"><i aria-hidden="true" class="fa fa-envelope-o"></i><span>[email protected]</span></a></li></ul></div></div></div><div class="navbar-tabs"><div class="container"><div class="navbar-content"><ul class="nav navbar-nav"><li class=" nav-menu-page"><a class="" href="/food-menu" id="nav_tab_1_link" target="_self"> 867 868 Menu 869 870 </a></li><li class=" "><a class="" href="/drink-menu" id="nav_tab_2_link" target="_self"> 871 872 Drinks 873 874 </a></li><li class=" "><a class="" href="/specials" id="nav_tab_3_link" target="_self"> 875 876 Specials 877 878 </a></li><li class=" "><a class="" href="/events" id="nav_tab_4_link" target="_self"> 879 880 Events 881 882 </a></li><li class=" nav-parties-link"><a aria-label="Parties, you are leaving the website, opens in a new tab" class="link-parties-sh" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de#" id="nav_tab_5_link" target="_blank"> 883 884 Parties 885 886 </a></li></ul><ul class="socialnav"><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.facebook.com/734246769988821" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page, you are leaving the website, opens in a new tab</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/theloopwestend" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page, you are leaving the website, opens in a new tab</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.tiktok.com/@theloopwestend" target="_blank"><svg aria-hidden="true" height="32" viewbox="-4 1 42 32" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z"></path></svg><span>TikTok page, you are leaving the website, opens in a new tab</span></a></li></ul></div></div></div></div><div class="mobile-navigation"><div class="container"><a aria-current="page" class="header-logo logo-top" href="/#"><img alt="The Loop West End logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><a aria-current="page" class="header-logo header-logo-a logo-scroll" href="/"><img alt="The Loop West End logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/112064_website_v3/logo.jpg"/></a><ul class="socialnav"><li class="mobile-header-nudge-item"><a href="https://order.toasttab.com/online/the-loop-west-end" target="_blank" class="cta-nudge-btn" data-nudge-type="order" data-nudge-position="mobile-header"><span>Order</span><span class="visuallyhidden">, opens in a new tab</span></a></li></ul><div class="navbar-header"><button aria-expanded="false" class="navbar-toggle" data-target="#navbar-collapse-1" data-toggle="collapse" type="button"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button></div><div class="collapse navbar-collapse" id="navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li class="navbar-top-tab"><a href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order Online<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class="navbar-top-tab"><a href="https://www.toasttab.com/the-loop-west-end/giftcards" target="_blank">Gift Cards<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class="navbar-top-tab"><a href="https://www.toasttab.com/the-loop-west-end/rewardsSignup" target="_blank">Join Our Loyalty Program<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class="navbar-top-tab"><a href="/reservations" target="_self">Reserve</a></li><li class="navbar-top-tab"><a href="https://go.momos.com/cwgiMl" target="_blank">Parties & Catering<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></li><li class=" nav-menu-page"><a class="" href="/food-menu" id="mobile_nav_tab_1_link" target="_self"> 887 Menu 888 </a></li><li class=" "><a class="" href="/drink-menu" id="mobile_nav_tab_2_link" target="_self"> 889 Drinks 890 </a></li><li class=" "><a class="" href="/specials" id="mobile_nav_tab_3_link" target="_self"> 891 Specials 892 </a></li><li class=" "><a class="" href="/events" id="mobile_nav_tab_4_link" target="_self"> 893 Events 894 </a></li><li class=" nav-parties-link"><a aria-label="Parties, you are leaving the website, opens in a new tab" class="link-parties-sh" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de#" id="mobile_nav_tab_5_link" target="_blank"> 895 Parties 896 </a></li></ul></div></div></div></nav><header class="header cover-type-video" style=" 897 background-image: url(https://static.spotapps.co/new_website_videos/112064_videos/112064_video_desktop_v1.jpg); 898 background-repeat: no-repeat; 899 background-position: center center fixed; 900 -webkit-background-size: cover; 901 -moz-background-size: cover; 902 -o-background-size: cover; 903 background-size: cover; 904 z-index: 98; position: relative; overflow: hidden; 905 "><div id="home_page_cover" style="height:100%;"><style> 906 907video#coverVideo { 908 z-index: 99; 909 background: url(https://static.spotapps.co/new_website_videos/112064_videos/112064_video_desktop_v1.jpg) no-repeat; 910 background-size: cover; 911} 912 913@media (min-width: 768px) { 914 915 916 @media (min-width: 1025px) { 917 918 video#coverVideo { 919 position: absolute; 920 top: 50%; 921 left: 50%; 922 min-width: 100%; 923 min-height: 100%; 924 width: auto; 925 height: auto; 926 -ms-transform: translateX(-50%) translateY(-50%); 927 -moz-transform: translateX(-50%) translateY(-50%); 928 -webkit-transform: translateX(-50%) translateY(-50%); 929 transform: translateX(-50%) translateY(-50%); 930 max-width: none; 931 vertical-align: baseline; 932} 933 } 934 935 @media (max-width: 1024px) { 936 937 video#coverVideo { 938 width: 100%; 939} 940.header { 941 max-height: 100vh; 942 background-image: none !important; 943 width: initial; 944 height: initial; 945} 946body.home-page { 947 background-color: transparent; 948} 949 } 950 951 952} 953 954@media (max-width: 767px) { 955 video#coverVideo { 956 width: 100%; 957} 958.header { 959 max-height: 100vh; 960 background-image: none !important; 961 width: initial; 962 height: initial; 963} 964body.home-page { 965 background-color: transparent; 966} } 967 968 .video-volume-btn, .video-controls-btn { 969 color: rgba(255, 255, 255, 0.9); 970 } 971 972</style><p class="sr-only">Video montage featuring the interior of the restaurant and food being prepared</p>
972<video autoplay="autoplay" data-video="dual" id="coverVideo" loop="loop" muted="muted" playsinline="playsinline"><source src="https://static.spotapps.co/web/theloopwestend--com/" type="video/mp4"/></video><button aria-label="The decorative video is currently playing, pause the video" class="video-controls-btn " id="cover_video_controls_btn" type="button"><span class="off-screen">The decorative video is currently playing</span><i aria-hidden="true" class="fa fa-play"></i><i aria-hidden="true" class="fa fa-pause"></i></button>
972<script> 973(function () { 974 const video = document.getElementById("coverVideo"); 975 if (!video) return; 976 977 const variants = { 978 desktop: { 979 src: "https:\/\/static.spotapps.co\/new_website_videos\/112064_videos\/112064_video_desktop_v1.mp4", 980 poster: "https:\/\/static.spotapps.co\/new_website_videos\/112064_videos\/112064_video_desktop_v1.jpg", 981 vtt: "" }, 982 mobile: { 983 src: "", 984 poster: "", 985 vtt: "" } 986 }; 987 const isMobile = window.matchMedia("(max-width: 767px)").matches; 988 const preferred = isMobile ? variants.mobile : variants.desktop; 989 const srcVariant = (preferred.src && preferred.src.trim()) ? preferred : variants.desktop; 990 const chosen = { 991 src: srcVariant.src, 992 poster: srcVariant.poster, 993 vtt: preferred.vtt 994 }; 995 996 if (!chosen.src || !chosen.src.trim()) return; 997 if (chosen.poster && chosen.poster.trim()) { 998 video.poster = chosen.poster; 999 } 1000 1001 video.querySelectorAll("track").forEach(t => t.remove()); 1002 1003 const hasCaptions = !!(chosen.vtt && chosen.vtt.trim()); 1004 if (hasCaptions) { 1005 video.setAttribute("controls", ""); 1006 video.setAttribute("crossorigin", "anonymous"); 1007 const track = document.createElement("track"); 1008 track.label = "English"; 1009 track.kind = "subtitles"; 1010 track.srclang = "en"; 1011 track.src = chosen.vtt; 1012 video.appendChild(track); 1013 document.querySelector(".video-controls-btn")?.remove(); 1014 document.querySelector(".video-volume-btn")?.remove(); 1015 } else { 1016 video.removeAttribute("controls"); 1017 video.removeAttribute("crossorigin"); 1018 } 1019 1020 video.src = chosen.src; 1021 video.addEventListener("canplay", function handler() { 1022 video.removeEventListener("canplay", handler); 1023 video.play().catch(() => {}); 1024 }); 1025 video.load(); 1026})(); 1027</script>
1027</div></header><main id="content" role="main"><h1 class="visuallyhidden">The Loop West End - West End, St Louis Park, MN</h1><article class="hide-show-section" data-hidden="no"><div class="banner-section section-wrapper" id="banner"><div class="container"><p><a class="banner-pin hvr-pop" href="#map-v3-container"><i class="fa fa-map-marker"></i><span class="off-screen">Check our location on map section at the bottom of the page</span></a>5331 West 16th Street, St Louis Park, MN 55416</p></div></div></article><article class="hide-show-section" data-hidden="no"><style></style><div class="custom_html_2-section section-wrapper" id="custom_html_2"><div class="container"><iframe allowfullscreen="allowfullscreen" frameborder="1" height="100%" marginheight="0px" marginwidth="0px" scrolling="yes" src="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de" style="border:0px #ffffff none;" width="90%"></iframe></div></div></article><article class="hide-show-section" data-hidden="no"><div class="order-tmt-section tmt-section section-wrapper" id="order_tmt"><div class="container"><h2 class="section-header">Order online</h2><h3>Fun - Fresh - Local</h3><p>Your favorite food is just a click away. Order online from the comfort of your home.</p><a class="custom-temp-btn hvr-fade" href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></div></div></article><article class="hide-show-section" data-hidden="no"><style> 1028.slideshow-v2-wrapper .slideshow-controls-btn { 1029 color: rgba(255, 255, 255, 0.8); 1030} 1031 1032</style><div class="slideshow-v2-wrapper" id="slideshow_v2"><div aria-label="slideshow carousel" class="uk-slidenav-position" data-uk-slideshow="{animation: 'swipe', autoplay: true, duration: 500, autoplayInterval: 4000, pauseOnHover: false, height: '100%'}" role="region" style="height:650px"><button aria-label="The slideshow is currently playing, pause the slideshow" class="slideshow-controls-btn playing" type="button"><span class="off-screen">slideshow start stop playing</span><i aria-hidden="true" class="fa fa-play"></i><i aria-hidden="true" class="fa fa-pause"></i></button><ul class="uk-dotnav uk-dotnav-contrast uk-position-bottom uk-flex-center"><li data-uk-slideshow-item="0"><a href="" role="button"><span class="off-screen">Slide 1 content</span></a></li><li data-uk-slideshow-item="1"><a href="" role="button"><span class="off-screen">Slide 2 content</span></a></li><li data-uk-slideshow-item="2"><a href="" role="button"><span class="off-screen">Slide 3 content</span></a></li></ul><a class="uk-slidenav uk-slidenav-contrast uk-slidenav-previous" data-uk-slideshow-item="previous" href=""><span class="off-screen">previous slide</span></a><a class="uk-slidenav uk-slidenav-contrast uk-slidenav-next" data-uk-slideshow-item="next" href=""><span class="off-screen">next slide</span></a><ul class="uk-slideshow "><li><img alt="" src="//cdn.spotapps.co/spothopper/image/fetch/f_auto,q_auto:best,c_fit,h_1200/http://static.spotapps.co/spots/e7/6e3f3811f045f19f8a49290b2acc77/:original"/><div class="uk-overlay-panel uk-overlay-background uk-overlay-fade uk-flex uk-flex-center uk-flex-middle uk-text-center"><div class="container"><div class="slide-text">Order Online</div><h2>Something for Everyone</h2><div class="buttons-group-holder"><a class="custom-temp-btn hvr-fade" href="https://order.toasttab.com/online/the-loop-west-end" target="_blank">Order Now<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></div></div></div></li><li><img alt="" src="//cdn.spotapps.co/spothopper/image/fetch/f_auto,q_auto:best,c_fit,h_1200/http://static.spotapps.co/spots/c9/c03aac374f419593fd252c50a7ffa1/:original"/><div class="uk-overlay-panel uk-overlay-background uk-overlay-fade uk-flex uk-flex-center uk-flex-middle uk-text-center"><div class="container"></div></div></li><li><img alt="" src="//cdn.spotapps.co/spothopper/image/fetch/f_auto,q_auto:best,c_fit,h_1200/http://static.spotapps.co/spots/98/d047ff7dc348518eeab5ec0acced0f/:original"/><div class="uk-overlay-panel uk-overlay-background uk-overlay-fade uk-flex uk-flex-center uk-flex-middle uk-text-center"><div class="container"><div class="slide-text">Book a Party</div><h2>we can take great</h2><div class="buttons-group-holder"><a class="custom-temp-btn hvr-fade" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de#" target="_blank">Private Parties<span class="visuallyhidden">, you are leaving the website, opens in a new tab</span></a></div></div></div></li></ul></div></div></article><article class="hide-show-section" data-hidden="no"><style> 1033.about-us-v8-wrapper { 1034 padding: 0; 1035} 1036.about-us-v8-wrapper:before { 1037 background-color: #fff; 1038 background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/about_bg.jpg'); 1039 } 1040 1041 1042.about-us-v8-wrapper .container { 1043 padding: 0; 1044 width: 100%; 1045} 1046 1047 1048 #aboutus_v8 .about-us-v8-item-0 { 1049 background-color: #fff; 1050 } 1051 1052
1053 1054 #aboutus_v8 .about-us-v8-item-0 .text-wrapper { 1055 padding: 80px 8%; 1056 } 1057 1058 1059 1060 #aboutus_v8 .about-us-v8-item-0 .about-us-v8-content .text-content h3, 1061 #aboutus_v8 .about-us-v8-item-0 .about-us-v8-content .text-content h2:not(.about-title) { 1062 color: #990000; 1063 } 1064 1065 1066 @media (max-width: 1024px) { 1067 #aboutus_v8 .about-us-v8-item-0 .text-wrapper { 1068 padding: 80px 8%; 1069 } 1070 } 1071 1072 @media (max-width: 767px) { 1073 #aboutus_v8 .about-us-v8-item-0 .about-us-v8-image { 1074 margin: 0; 1075 height: 300px; 1076 } 1077 } 1078 1079 1080 1081 1082 #aboutus_v8 .about-us-v8-item-1 .text-wrapper { 1083 padding: 80px 8%; 1084 } 1085 1086 1087 1088 #aboutus_v8 .about-us-v8-item-1 .about-us-v8-content .text-content h3, 1089 #aboutus_v8 .about-us-v8-item-1 .about-us-v8-content .text-content h2:not(.about-title) { 1090 color: #990000; 1091 } 1092 1093 1094 @media (max-width: 1024px) { 1095 #aboutus_v8 .about-us-v8-item-1 .text-wrapper { 1096 padding: 80px 8%; 1097 } 1098 } 1099 1100 @media (max-width: 767px) { 1101 #aboutus_v8 .about-us-v8-item-1 .about-us-v8-image { 1102 margin: 0; 1103 height: 300px; 1104 } 1105 } 1106 1107@-webkit-keyframes grow { 1108 from { 1109 opacity: 0; 1110 width: 0px; 1111 } 1112 to { 1113 opacity: 1; 1114 width: 80%; 1115 } 1116} 1117@-moz-keyframes grow { 1118 from { 1119 opacity: 0; 1120 width: 0px; 1121 } 1122 to { 1123 opacity: 1; 1124 width: 80%; 1125 } 1126} 1127@keyframes grow { 1128 from { 1129 opacity: 0; 1130 width: 0px; 1131 } 1132 to { 1133 opacity: 1; 1134 width: 80%; 1135 } 1136} 1137 1138.safari-mac .about-us-v8-item .about-us-v8-image-bar { 1139 width: 80%; 1140} 1141 1142 1143@media (max-width: 767px) { 1144 .about-us-v8-wrapper { 1145 padding: 0; 1146 } 1147 .about-us-v8-wrapper .container { 1148 padding: 0; 1149 width: 100%; 1150 } 1151 .about-us-v8-item { 1152 padding: 0 !important; 1153 } 1154} 1155 1156</style><div class="about-us-v8-wrapper section-wrapper" id="aboutus_v8"><div class="container about-us-v8"><section><div class="about-us-v8-item about-us-v8-item-0 about-us-v8-item-spec-color about-us-v8-item-left" style="padding: 50px 3%; "><!-- start About us item --><div class="about-us-v8-image image-size-cover image-size-mobile-cover" style="background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/parties.jpg'); width: 50%; 1157 "><!-- start Left About us image --></div><!-- end Left About us image --><div class="about-us-v8-content content-left" style="width: 50%; 1158 color: #232323; 1159 background: rgba(250, 250, 250, 0); text-align: left;"><div class="text-wrapper"><div class="text-content "><h2 class="about-title bar-left" style="color: #232323;"><span>Private Parties</span></h2><div class="text-holder"><h3>Want to book a large group, party, or event?</h3><p>The Loop specializes in hosting large groups and events. We offer food/drink packages, which are customized to your needs. You're the boss... Let us know what you'd like, and we'll deliver! Whether your group is 10 people or 100 people, we can take great care of you!</p></div><div class="buttons-holder buttons-row-parent buttons-left"><div class="buttons-row"><a class="custom-temp-btn hvr-fade" href="https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de" target="_blank"> 1160 Book a party <span class="visuallyhidden"> , you are leaving the website, opens in a new tab</span></a></div></div></div></div></div><!-- end Right About us image --></div><!-- end About us item --></section><section><div class="about-us-v8-item about-us-v8-item-1 about-us-v8-item-right" style="padding: 50px 3%; "><!-- start About us item --><div class="about-us-v8-image visible-xs image-size-cover image-size-mobile-cover" style="background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/menu.jpg'); width: 50%; 1161 "><!-- start Left About us image --></div><!-- end Left About us image --><div class="about-us-v8-content " style="width: 50%; 1162 color: #232323; 1163 background: rgba(250, 250, 250, 0); text-align: center;"><div class="text-wrapper"><div class="text-content "><h2 class="about-title" style="color: #232323;"><span>Our Menu</span></h2><div class="text-holder"><h3>Discover our menu to find what appeals to you</h3><p style="text-align: center;"> The Loop West End offers a large variety of menu options, from salads and sandwiches to pizza and entrees such as the Salmon Rice Bowl, the Flank Steak Salad and the Mac-n-Cheese Pizza. We have something for everyone whether youâre a Minnesota native or just visiting the area! </p><p style="text-align: center;"></p><p style="text-align: center;"><i>The Loop Bar + Restaurant charges a surcharge on all Credit Card transactions. This amount is not more than the restaurant pays in processing fees. There is no surcharge for Debit Card or Cash transactions.</i></p></div><div class="buttons-holder buttons-row-parent "><div class="buttons-row"><a class="custom-temp-btn hvr-fade" href="/food-menu" target="_self"> 1164 View Menu </a></div></div></div></div></div><!-- start Right About us image --><div class="about-us-v8-image hidden-xs image-size-cover image-size-mobile-cover" style="background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/menu.jpg'); width: 50%; 1165 "></div><!-- end Right About us image --></div><!-- end About us item --></section></div></div><!-- For mobile devices animate the about_v8 section on page load if the video is on the cover and this section is 1st or 2nd below the cover. --></article><article class="hide-show-section" data-hidden="no"><style></style><div class="reservations-wrapper ot-reservations-wrapper section-wrapper" id="reservations_open_table_v2"><div class="container text-center reservations"><div class="row"><div class="col-md-12 col-xs-12 col-sm-12"><h2 class="section-header">Reservations</h2><p>Call us at <a href="tel:+19526812684">(952)-681-2684</a> or book a table through Open Table:</p></div></div><div class="open-table-holder open-table-desktop open-table-wide">
1165<script src="//www.opentable.com/widget/reservation/loader?rid=213007&domain=com&type=standard&theme=wide&lang=en&overlay=false&iframe=true&color=1&dark=false&ot_source=Restaurant%20website" type="text/javascript"> 1166 </script>
1166</div><div class="open-table-holder open-table-mobile open-table-standard">
1166<script src="//www.opentable.com/widget/reservation/loader?rid=213007&domain=com&type=standard&theme=standard&lang=en&overlay=false&iframe=true&color=1&dark=false&ot_source=Restaurant%20website" type="text/javascript"></script>
1166</div></div></div></article><article class="hide-show-section" data-hidden="no"><style></style><div class="gallery-v4-wrapper section-wrapper" id="gallery_v4"><button class="visuallyhidden skip-content gallery-toggle gt-off">Skip Photo Gallery</button><div class="container"><div class="gallery-v4-grid"><div class="gallery-v4-grid-sizer"></div><div class="gallery-v4-grid-item gallery-v4-grid-item--width2 gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/full"><div class="img"><img alt="Exterior, entrance area, neon lights." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/full" data-srcset="//static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/small 200w, //static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/medium 400w, //static.spotapps.co/spots/50/46939b0c304275a5f2d0354e2e9c23/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/full"><div class="img"><img alt="Two sandwiches and a drink, served." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/full" data-srcset="//static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/small 200w, //static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/medium 400w, //static.spotapps.co/spots/77/8338472a5f48b4a533682c591c0703/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/full"><div class="img"><img alt="Various dishes served." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/full" data-srcset="//static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/small 200w, //static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/medium 400w, //static.spotapps.co/spots/42/87d6024b1a4ba4bec38e03520139dd/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/full"><div class="img"><img alt="Mini Loopy Brownie Sundae dessert, served." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/full" data-srcset="//static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/small 200w, //static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/medium 400w, //static.spotapps.co/spots/ff/ded9cfdeef48b0a5b40d958b053473/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/full"><div class="img"><img alt="Interior, bar area with customers." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/full" data-srcset="//static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/small 200w, //static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/medium 400w, //static.spotapps.co/spots/21/1d0fb4c6c8452a816a9ffc2b78d2d9/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/full"><div class="img"><img alt="Pizza with arugula on top, closeup." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/full" data-srcset="//static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/small 200w, //static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/medium 400w, //static.spotapps.co/spots/1b/27d0e69d564f8e83b56f4683f2c689/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/full"><div class="img"><img alt="Rice with salmon on top." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/full" data-srcset="//static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/small 200w, //static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/medium 400w, //static.spotapps.co/spots/08/50edcc565c410eb1fb950fb6018ac3/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-v4-grid-item--width2 gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/full"><div class="img"><img alt="Salmon rice bowl." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/full" data-srcset="//static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/small 200w, //static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/medium 400w, //static.spotapps.co/spots/a1/18daa954e04795a7358b37a76276a4/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/full"><div class="img"><img alt="Mini donuts." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/full" data-srcset="//static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/small 200w, //static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/medium 400w, //static.spotapps.co/spots/2b/55885dbbcf455f8224ffa591060f3d/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/full"><div class="img"><img alt="Fried chicken sandwich." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/full" data-srcset="//static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/small 200w, //static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/medium 400w, //static.spotapps.co/spots/31/fe418a046c46e7a02dc75f4f3c1cee/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/full"><div class="img"><img alt="Flatbread." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/full" data-srcset="//static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/small 200w, //static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/medium 400w, //static.spotapps.co/spots/46/520c6d39cb4c77be9fcbe4fbd06b9a/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/full"><div class="img"><img alt="Tuna Poke Bowl." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/full" data-srcset="//static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/small 200w, //static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/medium 400w, //static.spotapps.co/spots/e1/a32b7ef89148ab96900c3a91038b37/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/full"><div class="img"><img alt="Buttermilk Fried Chicken Sandwich." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/full" data-srcset="//static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/small 200w, //static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/medium 400w, //static.spotapps.co/spots/a1/b994f8c939407a9de51e4e11348759/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div><div class="gallery-v4-grid-item gallery-hover animation_0"><a class="fancybox fancybox.image" href="//static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/full"><div class="img"><img alt="Seasame Crusted Tuna." class="img-responsive lazyload" data-sizes="auto" data-src="//static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/full" data-srcset="//static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/small 200w, //static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/medium 400w, //static.spotapps.co/spots/73/1f394218ea4af6ab73d3a9b9834c5c/full 800w" src="https://static.spotapps.co/web/placeholder.png"/></div></a></div></div></div></div></article><article class="hide-show-section" data-hidden="no"><style> 1167 1168
1169.reviews-v2-wrapper .carousel-controls .carousel-control-btn { 1170 color: #232323; 1171} 1172</style><div class="carousel-wrapper reviews-v2-wrapper section-wrapper" id="reviews_v2"><h2 class="section-header">Reviews</h2><h3 class="review-by">reviews by - Yelp</h3><div class="container"><div aria-label="reviews carousel" class="row" role="region"><div class="carousel-controls" id="ReviewesCarouselControls"><button aria-label="The Reviews carousel is currently playing, pause the Reviews carousel" class="carousel-control-btn stop-carousel" type="button"><i aria-hidden="true" class="fa fa-pause"></i><i aria-hidden="true" class="fa fa-play"></i><span class="visuallyhidden"> Start stop reviews carousel</span></button></div><ul class="owl-dots"><li class="owl-dot"></li><li class="owl-dot"></li><li class="owl-dot"></li></ul><div class="col-md-12 col-xs-12"><div class="owl-carousel owl-theme"><section><div class="item"><h4 class="reviewer"><span class="visuallyhidden">five star review by</span> 1173 Yvonne G: 1174 <i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i></h4><div class="review-text"><div aria-hidden="true" class="review-quote quote-left"><i class="fa fa-quote-left"></i></div><div aria-hidden="true" class="review-quote quote-right"><i class="fa fa-quote-right"></i></div><blockquote><p>This place was the bomb, the food had great taste with layers and layers of flavor. The bartender even made me a strawberry and pomegranate mules, both not on the menu. We had the Salmon Rice Bowl and a Beef Noodle Stir Fry, both were delicious!!</p></blockquote></div></div></section><section><div class="item"><h4 class="reviewer"><span class="visuallyhidden">five star review by</span> 1175 Stella T: 1176 <i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i></h4><div class="review-text"><div aria-hidden="true" class="review-quote quote-left"><i class="fa fa-quote-left"></i></div><div aria-hidden="true" class="review-quote quote-right"><i class="fa fa-quote-right"></i></div><blockquote><p>Visited at lunchtime a few days ago. I've been here a number of times and always enjoy my experience. I brought a friend with me who had never been before. From Pizza to Jambalaya it's always good food. The staff is great and love the atmosphere. The music can get a bit loud when it's busy but overall, I'll always go again and will recommend to others.</p></blockquote></div></div></section><section><div class="item"><h4 class="reviewer"><span class="visuallyhidden">five star review by</span> 1177 Rick L: 1178 <i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i><i aria-hidden="true" class="fa fa-star"></i></h4><div class="review-text"><div aria-hidden="true" class="review-quote quote-left"><i class="fa fa-quote-left"></i></div><div aria-hidden="true" class="review-quote quote-right"><i class="fa fa-quote-right"></i></div><blockquote><p>I'm from out of town, ordered on a whim and I was not disappointed! I had the jambalaya, it was excellent. Loaded with chicken, shrimp, and sausage. If you haven't been here I would highly recommend this place!</p></blockquote></div></div></section></div></div></div></div></div></article><article class="hide-show-section" data-hidden="no"><style> 1179.map-newsletter .text-wrapper:before { 1180 background-image: url('https://static.spotapps.co/website_images/ab_websites/112064_website_v3/newsletter.jpg'); 1181 } 1182 1183</style><div class="googlemap-v3-wrapper openstreetmap-v3-wrapper maps-wrapper section-wrapper" id="openstreetmap_v3"><div class="row map-holder"><section><div class="col-md-6 col-sm-12 col-xs-12 map-item map-newsletter"><div class="text-wrapper"><div class="text-content"><h2 class="section-header">Newsletter</h2>
1183<script id="sph-widget-112064" type="text/javascript"> 1184 (function() { 1185 function async_load(){ 1186 var s = document.createElement('script'); 1187 s.type = 'text/javascript'; 1188 s.async = true; 1189 s.src = 'https://www.spothopperapp.com/spots/112064/widgets/newsletter.js?template=newsletter_widget1'; 1190 var embedder = document.getElementById('sph-widget-112064'); 1191 embedder.parentNode.insertBefore(s, embedder); 1192 1193 // Modify widget's html 1194 setTimeout(function(){ 1195 $( '<span class="bar"></span>' ).insertAfter( '.sph-email-input' ); 1196 $('.sph-submit-button').addClass('custom-temp-btn hvr-fade'); 1197 1198 // Replace <h2> with <p> 1199 document.querySelectorAll('.section-wrapper .sph-email-subscription h2').forEach(h2 => { 1200 const p = document.createElement('p'); 1201 1202 // Copy all attributes from h2 to p 1203 [...h2.attributes].forEach(attr => { 1204 p.setAttribute(attr.name, attr.value); 1205 }); 1206 1207 // Copy inner HTML content 1208 p.innerHTML = h2.innerHTML; 1209 1210 // Replace h2 with p 1211 h2.parentNode.replaceChild(p, h2); 1212 }); 1213 }, 2000); 1214 1215 } 1216 if (window.attachEvent) 1217 window.attachEvent('onload', async_load); 1218 else 1219 window.addEventListener('load', async_load, false); 1220 })(); 1221 </script>
1221</div></div></div></section><section><div class="col-md-6 col-sm-12 col-xs-12 map-item"><div aria-label="OpenStreet map" id="map-v3-container" role="region"></div></div></section></div><div class="map-footer text-center"><div class="triangle"></div></div></div></article><article class="hide-show-section" data-hidden="no"><style> 1222 1223.contact-v3 .hours-title, .contact-v3 .social-title, .contact-v3 .contact-us-title { 1224 color: #fff; 1225} 1226.contact a:hover, .contact a:active, .contact-us a:hover, .contact-us a:active { 1227 color: #fff; 1228} 1229.contact-v3 .social-circle .contact-icon { 1230 color: rgba(255, 255, 255, 0.8); 1231} 1232 .contact-v3 .social-square .contact-icon { 1233 color: #fff; 1234 } 1235 .contact-v3 .social-square .contact-icon:hover { 1236 color: #4C2432; 1237 background-color: #fff; 1238 } 1239 1240</style><footer class="contact-holder"><div class="contact-v3 contact-v3-center section-wrapper" id="contact_v3"><div class="container"><div class="row"><div class="col-md-4 col-sm-4 col-xs-12"><section><div class="contact-location"><div class="hours-title"><h2>Location</h2></div><div class="address" data-gbp-injected="business-name">The Loop West End</div><div class="address">5331 West 16th Street</div><div class="city-state">St Louis Park, MN</div><div class="zip">55416</div><div class="address" data-gbp-injected="get-directions"><a aria-label="Get directions to The Loop West End, opens in a new tab" class="get-directions-footer-link" href="https://www.google.com/maps/dir/?api=1&destination=The%20Loop%20West%20End&destination_place_id=ChIJaZGkSaI0s1IR4KXuICXDEBw" rel="noopener" style="text-decoration: underline; display: inline-block; padding: 5px 0;" target="_blank"><i aria-hidden="true" class="fa fa-map-marker"></i> Get Directions</a></div></div></section></div><div class="col-md-4 col-sm-4 col-xs-12"><section><div class="hours"><div class="hours-title"><h2>Hours</h2></div><div class="days"> 1241 Monday, Tuesday, Wednesday, Thursday, Friday </div><div class="from-to"> 1242 11:00 AM - 2:00 AM </div><div class="days"> 1243 Saturday </div><div class="from-to"> 1244 10:00 AM - 2:00 AM </div><div class="days"> 1245 Sunday </div><div class="from-to"> 1246 10:00 AM - 12:00 AM </div></div></section></div><div class="col-md-4 col-sm-4 col-xs-12"><div class="find-us"><section><div class="social"><div class="social-title"><h2>Find us on...</h2></div><ul class="social-links social-icons-holder social-square"><li><a class="contact-icon" href="https://www.facebook.com/734246769988821" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page, you are leaving the website, opens in a new tab</span></a></li><li><a class="contact-icon" href="https://www.instagram.com/theloopwestend" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page, you are leaving the website, opens in a new tab</span></a></li><li><a class="contact-icon" href="https://www.tiktok.com/@theloopwestend" target="_blank"><svg aria-hidden="true" height="37" viewbox="-4 5 42 32" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z"></path></svg><span>TikTok page, you are leaving the website, opens in a new tab</span></a></li></ul></div></section><section><div class="contact-us"><div class="contact-us-title"><h2>Contact us</h2></div><p><a href="tel:+19526812684" id="contact_us_v3_section_phone_link"><span class="visuallyhidden">Call us at </span>(952)-681-2684</a></p><p><a href="mailto:[email protected]"><span class="visuallyhidden">Write us at </span>[email protected]</a></p></div></section></div></div></div></div></div></footer></article><article class="hide-show-section" data-hidden="no"><div class="footer-v2-wrapper" id="footer_v2"><div class="container"><div class="row"><div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"><p>Powered by: <a aria-label="SpotHopper homepage, you are leaving the website, opens in a new tab" class="applicationsLink" href="https://www.spothopperapp.com/" target="_blank"><img alt="SpotHopper logo" class="logoimg" src="https://static.spotapps.co/website_images/default_template_images/spothopper_logo.png"/></a></p></div><div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"><a aria-label="Website design, Social Media marketing, and Email marketing provided by SpotHopper. Contact Us, you are leaving the website, opens in a new tab" class="applicationsLink" href="https://www.spothopperapp.com/contact-us?contact_reason=demo" target="_blank">Website design, Social Media marketing and Email marketing provided by SpotHopper.</a></div></div></div></div></article></main><style type="text/css"> 1247 .navbar-fixed-bottom.nav-v1 { 1248 bottom: -100px; 1249 } 1250 .navbar-fixed-bottom.nav-v1 .nav.navbar-nav.navbar-right { 1251 background-color: #4C2432; 1252 } 1253 .navbar-fixed-bottom.nav-v1 .bottom-svg-border path, 1254 .navbar-fixed-bottom.nav-v1 .bottom-svg-border polygon { 1255 fill: #000; 1256 } 1257 .navbar-fixed-bottom.nav-v1 .bottom-list-item a { 1258 color: #fff; 1259 } 1260 .navbar-fixed-bottom.nav-v1 .bottom-list-item a:hover, 1261 .navbar-fixed-bottom.nav-v1 .bottom-list-item a:focus { 1262 color: #fff; 1263 text-decoration: none; 1264 } 1265</style><nav aria-label="mobile footer" class="navbar-fixed-bottom nav-v1" id="bottom-navbar"><div><ul class="nav navbar-nav navbar-right"><li class="mobile-footer-nudge-item"><a href="https://order.toasttab.com/online/the-loop-west-end" target="_blank" class="cta-nudge-btn" data-nudge-type="order" data-nudge-position="mobile-footer"><span>Order</span><span class="visuallyhidden">, opens in a new tab</span></a></li></ul></div></nav><div aria-hidden="true" aria-label="newsletter dialog" class="modal fade custom-modal" id="CustomModal" role="dialog" tabindex="-1"><div class="modal-dialog modal-md" role="document"><div class="modal-content"><div class="custom-modal-close"><button aria-label="Close the Newsletter dialog" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">Ã</span></button></div><div class="modal-body"><div class="row"><div class="col-md-12"><div class="newsletter-popup"><h2 class="section-header">Newsletter</h2>
1265<script id="sph-widget-2ce08bd156a46491d83342eb4a039092" type="text/javascript"> 1266 (function() { 1267 function async_load(){ 1268 var s = document.createElement('script'); 1269 s.type = 'text/javascript'; 1270 s.async = true; 1271 s.src = 'https://www.spothopperapp.com/spots/112064/widgets/newsletter.js?template=newsletter_widget2'; 1272 var embedder = document.getElementById('sph-widget-2ce08bd156a46491d83342eb4a039092'); 1273 embedder.parentNode.insertBefore(s, embedder); 1274 1275 // Modify widget's html 1276 setTimeout(function(){ 1277 document.querySelectorAll('.custom-modal .sph-email-subscription h2').forEach(h2_p => { 1278 const p_p = document.createElement('p'); 1279 1280 // Copy all attributes from h2 to p 1281 [...h2_p.attributes].forEach(attr => { 1282 p_p.setAttribute(attr.name, attr.value); 1283 }); 1284 1285 // Copy inner HTML content 1286 p_p.innerHTML = h2_p.innerHTML; 1287 1288 // Replace h2 with p 1289 h2_p.parentNode.replaceChild(p_p, h2_p); 1290 }); 1291 }, 2000); 1292 } 1293 if (window.attachEvent) 1294 window.attachEvent('onload', async_load); 1295 else 1296 window.addEventListener('load', async_load, false); 1297 })(); 1298 </script>
1298</div></div></div></div></div></div></div>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/jquery/jquery.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/bootstrap/js/bootstrap.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/owlcarousel/owl.carousel.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/masonry/masonry.pkgd.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/js/uikit.min.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/js/slideshow.min.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/uikit/js/slideshow-fx.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/imagesloaded/imagesloaded.pkgd.min.js"></script>
1298<script src="https://static.spotapps.co/iframeResizer.js" type="text/javascript"></script>
1298<script src="//static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet.js"></script>
1298<script src="//static.spotapps.co/web-lib/leaflet/leaflet-providers.js"></script>
1298<script src="//static.spotapps.co/web-lib/leaflet/[email protected]/dist/leaflet-gesture-handling.min.js"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/jquery.fancybox.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/jquery.fancybox.pack.js" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js?v=1.0.7" type="text/javascript"></script>
1298<script src="https://static.spotapps.co/web/theloopwestend--com/lib/fancybox/source/helpers/jquery.fancybox-media.js?v=1.0.6" type="text/javascript"></script>
1298<script type="text/javascript"> 1299 1300 1301 1302 $("#bottom_link_4").on("click", function(){ 1303 if (ga_check()) 1304 universal_ga('send', 'event', 'Button', 'Click', 'Order Online'); 1305 }); 1306 $("#bottom_link_3").on("click", function(){ 1307 if (ga_check()) 1308 universal_ga('send', 'event', 'Button', 'Click', 'Reserve'); 1309 }); 1310 $("#bottom_link_5").on("click", function(){ 1311 if (ga_check()) 1312 universal_ga('send', 'event', 'Button', 'Click', 'Private Party'); 1313 }); 1314 $('.header-logo-a, .header-logo.header-logo-mobile, .nav-v2-home-btn').click(function(event) { 1315 if ( window.location.pathname == '/' || window.location.pathname == '/index.php') { 1316 event.preventDefault(); 1317 var windowScrollTop = $(window).scrollTop(); 1318 if(windowScrollTop > 150) { 1319 $('html, body').animate({scrollTop: 0}, 750); 1320 } 1321 } 1322 }); 1323 1324$(".banner-section a.banner-pin").click(function(e) { 1325 // target element id 1326 var id = $(this).attr('href'); 1327 1328 // target element 1329 var section = $(id); 1330 if (section.length === 0) { 1331 return; 1332 } 1333 1334 // prevent standard hash navigation (avoid blinking in IE) 1335 e.preventDefault(); 1336 1337 // top position relative to the document 1338 var pos = section.offset().top - 100 + 10; 1339 1340 // animated top scrolling 1341 $('body, html').animate({scrollTop: pos}, 750); 1342}); 1343 1344$(document).ready(function() { 1345 var navHeight = $('nav.navbar').height(); 1346 $('html').css("scroll-padding-top", navHeight); 1347}); 1348 1349$(document).on('scroll', function (e) { 1350 if($(document).scrollTop() > 0) { 1351 $('.navbar.nav-v7').addClass('nav-scroll'); 1352 }else { 1353 $('.navbar.nav-v7').removeClass('nav-scroll'); 1354 } 1355}); 1356 1357$(function() { 1358 setDropDownMenuWidth(); 1359 1360 function setDropDownMenuWidth() { 1361 var tabs_list = $('.navbar-tabs .navbar-nav'); 1362 1363 $(tabs_list).find('li.drop-down-link').each(function() { 1364 var sub_menu_width = $(this).outerWidth(true); 1365 if (sub_menu_width < 100) { 1366 sub_menu_width = 100; 1367 } 1368 $(this).find('.sub-menu').css('width', sub_menu_width+'px'); 1369 }); 1370 } 1371 1372 $( window ).resize(function() { 1373 setDropDownMenuWidth(); 1374 }); 1375 1376 $('.nav a:not(.drop-down)').on('click', function () { 1377 $('.navbar-collapse').collapse('hide'); 1378 }); 1379 1380}); 1381 1382 1383 1384$( '.drop-down-link .drop-down' ).click(function(event) { 1385 event.preventDefault(); 1386 event.stopPropagation(); 1387 1388 // Close previously opened dropdown menus 1389 $('.drop-down-link.active .sub-menu').slideUp(); 1390 $('.drop-down-link.active').find('.drop-down').attr('aria-expanded', false); 1391 $('.drop-down-link.active').removeClass('active'); 1392 1393 var drop_down = $(this).closest('.drop-down-link'); 1394 var drop_down_a = $(this); 1395 1396 if($(drop_down_a).attr("aria-expanded") == "true") { 1397 $(drop_down_a).attr("aria-expanded",false) 1398 } else { 1399 $(drop_down_a).attr("aria-expanded",true) 1400 } 1401 1402 var sub_menu = $(this).closest('.drop-down-link').find( '.sub-menu' ); 1403 1404 if ( $(sub_menu).is( ':hidden' ) ) { 1405 $(sub_menu).slideDown(); 1406 $(drop_down).addClass('active'); 1407 } else { 1408 $(sub_menu).slideUp(); 1409 $(drop_down).removeClass('active'); 1410 } 1411}); 1412 1413$(".nav-v7 .navbar-contact .nav-address a").click(function(e) { 1414 1415 if ( window.location.pathname == '/' || window.location.pathname == '/index.php') { 1416 // target element id 1417 var id = $(this).attr('href').substr(1); 1418 1419 // target element 1420 var section = $(id); 1421 if (section.length === 0) { 1422 return; 1423 } 1424 1425 // prevent standard hash navigation (avoid blinking in IE) 1426 e.preventDefault(); 1427 1428 // top position relative to the document 1429 var pos = section.offset().top - 100 + 10; 1430 1431 // animated top scrolling 1432 $('body, html').animate({scrollTop: pos}, 750); 1433 1434 } 1435}); 1436 1437const mobileDrop = document.querySelector('.mobile-full-height #navbar-collapse-1 .navbar-nav'); 1438const mobileDropButton = document.querySelector('.mobile-full-height .navbar-toggle'); 1439const mobileHeader = document.querySelector('.mobile-full-height .navbar-header'); 1440 1441mobileDropButton?.addEventListener('click', () => { 1442 mobileHeaderBottomPos = mobileHeader.getBoundingClientRect().bottom; 1443 mobileDrop.style.paddingTop = mobileHeaderBottomPos + 'px'; 1444}); 1445 1446(function () { 1447 const isSafari = (() => { 1448 const ua = navigator.userAgent; 1449 return ua.includes('Safari') && // Safari must be present
1450 !ua.includes('Chrome') && // Exclude Chrome (has 'Safari' in UA) 1451 !ua.includes('Edg'); // Exclude Edge 1452 })(); 1453 1454 if (!isSafari) return; 1455 const menu = document.getElementById('navbar-collapse-1'); 1456 1457 // When coming back from a _blank tab or bfcache restore, force a repaint. 1458 function nudgeRepaint() { 1459 if (!menu || !menu.classList.contains('in')) return; 1460 // toggle display to flush rendering, then poke will-change for one frame 1461 const prev = menu.style.display; 1462 menu.style.display = 'none'; 1463 // force reflow 1464 void menu.offsetHeight; 1465 menu.style.display = prev || ''; 1466 menu.style.willChange = 'opacity'; 1467 requestAnimationFrame(() => { menu.style.willChange = 'auto'; }); 1468 } 1469 1470 document.addEventListener('visibilitychange', () => { 1471 if (document.visibilityState === 'visible') nudgeRepaint(); 1472 }); 1473 1474 // iOS/macOS Safari often restores pages from bfcache 1475 window.addEventListener('pageshow', (e) => { 1476 if (e.persisted) nudgeRepaint(); 1477 else nudgeRepaint(); 1478 }, { passive: true }); 1479 1480 // Keep menu open when clicking links that open in a new tab 1481 menu?.addEventListener('click', (e) => { 1482 const a = e.target.closest('a'); 1483 if (!a) return; 1484 if (a.target === '_blank') { 1485 // avoid any delegated "close on link click" handlers firing first 1486 e.stopPropagation(); 1487 // allow navigation; after we return, repaint nudge will run 1488 } 1489 }, true); 1490})(); 1491 1492document.querySelectorAll('.navbar .navbar-nav > li.cta-nav-tab').forEach((li) => { 1493 li.addEventListener('click', (e) => { 1494 if (e.defaultPrevented) return; 1495 1496 if (e.target.closest('a')) return; 1497 1498 const link = li.querySelector('a[href]'); 1499 if (!link) return; 1500 1501 if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1 || link.target === '_blank') { 1502 window.open(link.href, link.target || '_blank'); 1503 return; 1504 } 1505 1506 link.click(); 1507 }); 1508 1509 li.addEventListener('keydown', (e) => { 1510 if ((e.key === 'Enter' || e.key === ' ') && !e.target.closest('a')) { 1511 const link = li.querySelector('a[href]'); 1512 if (!link) return; 1513 e.preventDefault(); 1514 link.click(); 1515 } 1516 }); 1517}); 1518 1519 $(document).ready(function() { 1520 var video = $("#coverVideo")[0]; 1521 1522 // Cover video Play/pause 1523 $(".video-controls-btn").click(function () { 1524 if (video.paused) { 1525 video.play(); 1526 $(".video-controls-btn").focus(); 1527 $(".video-controls-btn i.fa-play").hide(); 1528 $(".video-controls-btn i.fa-pause").show(); 1529 $(".video-controls-btn").attr("aria-label", "The decorative video is currently playing, pause the video"); 1530 $(".video-controls-btn .off-screen").text("The decorative video is currently playing"); 1531 } else { 1532 video.pause(); 1533 $(".video-controls-btn").focus(); 1534 $(".video-controls-btn i.fa-play").show(); 1535 $(".video-controls-btn i.fa-pause").hide(); 1536 $(".video-controls-btn").attr("aria-label", "The decorative video is currently paused, play the video"); 1537 $(".video-controls-btn .off-screen").text("The decorative video is currently paused"); 1538 } 1539 }); 1540 // Cover video sound on/off 1541 if (video.muted) { 1542 $(".video-volume-btn").addClass('off'); 1543 } 1544 1545 $(".video-volume-btn").click(function () { 1546 if (video.muted) { 1547 video.muted = false; 1548 $(".video-volume-btn").removeClass('off'); 1549 $(".video-volume-btn").addClass('on'); 1550 $(".video-volume-btn").attr("aria-label", "The decorative video sound is on, turn it off"); 1551 $(".video-volume-btn .off-screen").text("The decorative video sound is on"); 1552 } else { 1553 video.muted = true; 1554 $(".video-volume-btn").removeClass('on'); 1555 $(".video-volume-btn").addClass('off'); 1556 $(".video-volume-btn").attr("aria-label", "The decorative video sound is off, turn it on"); 1557 $(".video-volume-btn .off-screen").text("The decorative video sound is off"); 1558 } 1559 }); 1560 }); 1561 $(document).ready(function() { 1562 1563 var slideshow = $('[data-uk-slideshow]').data('slideshow'); 1564 1565 //play or pause slideshow functions 1566 $('.slideshow-v2-wrapper .slideshow-controls-btn').click(function () { 1567 if($(this).hasClass('playing')){ 1568 slideshow.stop(); 1569 $(this).removeClass('playing'); 1570 $(this).addClass('paused'); 1571 $(this).attr( "aria-label", "The slideshow is currently paused, play the slideshow"); 1572 }else { 1573 slideshow.start(); 1574 $(this).removeClass('paused'); 1575 $(this).addClass('playing'); 1576 $(this).attr( "aria-label", "The slideshow is currently playing, pause the slideshow"); 1577 } 1578 }); 1579 1580 $('.slideshow-v2-wrapper .uk-dotnav a, .slideshow-v2-wrapper a.uk-slidenav').click(function () { 1581 $('.slideshow-v2-wrapper .slideshow-controls-btn').removeClass('playing'); 1582 $('.slideshow-v2-wrapper .slideshow-controls-btn').addClass('paused'); 1583 $('.slideshow-v2-wrapper .slideshow-controls-btn').attr( "aria-label", "The slideshow is currently paused, play the slideshow"); 1584 }); 1585 1586 (function( func ) { 1587 $.fn.addClass = function() { // replace the existing function on $.fn 1588 func.apply( this, arguments ); // invoke the original function 1589 this.trigger('classChanged'); // trigger the custom event 1590 return this; // retain jQuery chainability 1591 } 1592 })($.fn.addClass); // pass the original function as an argument 1593 1594 (function( func ) { 1595 $.fn.removeClass = function() { 1596 func.apply( this, arguments ); 1597 this.trigger('classChanged'); 1598 return this; 1599 } 1600 })($.fn.removeClass); 1601 $('.uk-slideshow li').each(function(index) { 1602 $(this).find('.custom-temp-btn').attr("tabindex", -1); 1603 $(this).on('classChanged', function(){ 1604 if($(this).hasClass('uk-active')){ 1605 $(this).find('.custom-temp-btn').attr("tabindex", 0); 1606 $(slideDot[index]).attr('aria-current', 'true'); 1607 } else { 1608 $(this).find('.custom-temp-btn').attr("tabindex", -1); 1609 $(slideDot[index]).attr('aria-current', 'false'); 1610 } 1611 }); 1612 }); 1613 1614 var slideDot = $('.slideshow-v2-wrapper .uk-dotnav li a'); 1615 1616 slideDot.attr('aria-current', 'false'); 1617 $(slideDot[0]).attr('aria-current', 'true'); 1618 1619 }); 1620 1621$(document).ready(function() { 1622 1623 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Mac') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && $(window).width() > 767) { 1624
1625 // Turn Off animations on Safari browser for Mac desktop 1626 $('html').addClass('safari-mac'); 1627 1628 } 1629 else { 1630 1631 var animation_item_elements = $('.about-us-v8-item'); 1632 var window_var = $(window); 1633 1634 function check_if_item_in_view() { 1635 var window_var_height = window_var.height(); 1636 var window_var_top_position = window_var.scrollTop(); 1637 var window_var_bottom_position = (window_var_top_position + window_var_height/2 + 100); 1638 1639 $.each(animation_item_elements, function() { 1640 var element_var = $(this); 1641 var element_var_height = element_var.outerHeight(); 1642 var element_var_top_position = element_var.offset().top; 1643 var element_var_bottom_position = (element_var_top_position + element_var_height/2 + 100); 1644 1645 //check to see if this current container is within viewport 1646 if ((element_var_bottom_position >= window_var_top_position) && 1647 (element_var_top_position <= window_var_bottom_position)) { 1648 element_var.addClass('animate'); 1649 } else { 1650 // element_var.removeClass('in-view'); 1651 } 1652 }); 1653 } 1654 1655 window_var.on('scroll resize', check_if_item_in_view); 1656 window_var.trigger('scroll'); 1657 1658 } 1659 1660 1661}); 1662 $(document).ready(function() { 1663 1664 if ( $(window).width() < 768 ) { 1665 1666 var home_sections = $('article'); 1667 var home_section_id; 1668 var about_v8_section_position; 1669 1670 for (var i = 0; i < home_sections.length; i++) { 1671 home_section_id = $(home_sections[i]).find(".section-wrapper").attr("id"); 1672 if (home_section_id == "aboutus_v8") { 1673 about_v8_section_position = i; 1674 } 1675 } 1676 1677 if ( (about_v8_section_position == 0) || (about_v8_section_position == 1) ) { 1678 // Turn Off animations 1679 $('html').addClass('safari-mac'); 1680 } 1681 } 1682 1683 }); 1684 // init Masonry 1685 var gridGallery = $('#gallery_v4 .gallery-v4-grid').masonry({ 1686 columnWidth: '.gallery-v4-grid-sizer', 1687 // do not use .grid-sizer in layout 1688 itemSelector: '.gallery-v4-grid-item', 1689 percentPosition: true, 1690 fitWidth: true 1691 }); 1692 1693 gridGallery.imagesLoaded(function() { 1694 gridGallery.masonry('layout'); 1695 }); 1696 1697 // layout Masonry after each image loads 1698 gridGallery.imagesLoaded().progress( function() { 1699 gridGallery.masonry('layout'); 1700 }); 1701 1702 // Re-set gallery layout 1703 $(window).on('load', function() { 1704 // trigger Masonry layout 1705 gridGallery.masonry('layout'); 1706 }); 1707 function discontinuousGG(func){ 1708 var timer; 1709 return function(event){ 1710 if(timer) clearTimeout(timer); 1711 timer = setTimeout(func,200,event); 1712 }; 1713 } 1714 $(window).on("resize", discontinuousGG(function() { 1715 setTimeout(() => gridGallery.masonry('layout'), 300); 1716 })); 1717 1718 $(document).ready(function() { 1719 1720 var fancyboxSlider = $('#gallery_v4 .fancybox'); 1721 1722 fancyboxSlider.attr('rel', 'gallery').fancybox({ 1723 beforeShow : function() { 1724 var alt = this.element.find('img').attr('alt'); 1725 this.inner.find('img').attr('alt', alt); 1726 }, 1727 padding : 15, 1728 margin: 20, 1729 arrows : true, 1730 closeBtn: true, 1731 autoPlay : false, 1732 playSpeed : 3000, 1733 loop : true, 1734 openEffect : 'fade', 1735 closeEffect : 'fade', 1736 nextEffect : 'elastic', 1737 prevEffect : 'elastic', 1738 helpers : { 1739 overlay : { 1740 css : { 1741 'background' : 'rgba(0, 0, 0, 0.5)' 1742 }, 1743 locked: false 1744 } 1745 } 1746 }); 1747 1748 var galleryToggleBtn = $('.gallery-v4-wrapper .gallery-toggle'); 1749 var galleryImages = $('.gallery-v4-grid-item a'); 1750 var galleryToggleTextOff = 'The Photo Gallery of ' + galleryImages.length + ' images can be accessed, hide the Photo Gallery from the Screen Reader'; 1751 var galleryToggleTextOn = 'The Photo Gallery of ' + galleryImages.length + ' images is hidden from the Screen Reader, access the Photo Gallery'; 1752 galleryToggleBtn.attr('aria-label', galleryToggleTextOff); 1753 1754 galleryToggleBtn.on('click',function(){ 1755 $(this).toggleClass('gt-off'); 1756 1757 const parentElement = $(this).closest('article'); 1758 const nextElement = $(parentElement).next(); 1759 1760 if ($(this).hasClass('gt-off')) { 1761 $(this).attr('aria-label', galleryToggleTextOff); 1762 $(this).text('Skip Photo Gallery'); 1763 galleryImages.each(function() { 1764 $(this).attr('aria-hidden', 'false').attr('tabindex', '0'); 1765 }); 1766 } else { 1767 $(this).attr('aria-label', galleryToggleTextOn);
1768 $(this).text('Access Photo Gallery'); 1769 galleryImages.each(function() { 1770 $(this).attr('aria-hidden', 'true').attr('tabindex', '-1'); 1771 }); 1772 1773 if (nextElement.length !== 0) { 1774 const scrollTo = $(nextElement).offset().top - 100; 1775 $('html, body').animate({ scrollTop: scrollTo }, 1000); 1776 } 1777 } 1778 }); 1779 1780 }); 1781 $(document).ready(function() { 1782 1783 var owlReviews = $('#reviews_v2 .owl-carousel'); 1784 owlReviews.owlCarousel({ 1785 onInitialized: function (property) { 1786 //check if show dots is true in config 1787 if(true){ 1788 $('.reviews-v2-wrapper .owl-dot').each(function( index ) { 1789 var i = index + 1; 1790 $(this).html('<button aria-label="Review '+i+'"><span class="visuallyhidden">Review '+i+'</span></button>'); 1791 }); 1792 } 1793 //check if show arrows is true in config 1794 if(true && !true){ 1795 reviewsHandleArrowTabbing(owlReviews); 1796 } 1797 //prevent voiceover from reading hidden content 1798 $('.reviews-v2-wrapper').find('.owl-item').attr('aria-hidden','true'); 1799 $(property.target).find(".owl-item").eq(property.item.index).attr('aria-hidden','false'); 1800 }, 1801 margin: 0, 1802 nav: true, 1803 dots: true, 1804 dotsContainer: '#reviews_v2 .owl-dots', 1805 autoplay: true, 1806 autoplayTimeout: 6000, 1807 autoplayHoverPause: false, 1808 loop: true, 1809 navText: [ '<button aria-label="previous review">‹</button>', '<button aria-label="next review">›</button>' ], 1810 responsive: { 1811 0: { 1812 items: 1 1813 }, 1814 600: { 1815 items: 1 1816 }, 1817 1000: { 1818 items: 1 1819 } 1820 } 1821 }); 1822 1823 function discontinuousReviews(func){ 1824 var timer; 1825 return function(event){ 1826 if(timer) clearTimeout(timer); 1827 timer = setTimeout(func,200,event); 1828 }; 1829 } 1830 1831 $('#reviews_v2 .owl-dot button').attr('aria-current', 'false'); 1832 $('#reviews_v2 .owl-dot:first button').attr('aria-current', 'true'); 1833 1834 function reviewsCarouselStop() { 1835 owlReviews.trigger('stop.owl.autoplay'); 1836 owlReviews.data('owl.carousel').settings.autoplay = false; 1837 $('#reviews_v2 .carousel-control-btn').removeClass('stop-carousel'); 1838 $('#reviews_v2 .carousel-control-btn').addClass('play-carousel'); 1839 $('#reviews_v2 .carousel-control-btn').attr('aria-label', 'The Reviews carousel is currently paused, play the Reviews carousel'); 1840 } 1841 1842 function reviewsCarouselPlay() { 1843 owlReviews.trigger('play.owl.autoplay',[1000]); 1844 owlReviews.data('owl.carousel').settings.autoplay = true; 1845 $('#reviews_v2 .carousel-control-btn').removeClass('play-carousel'); 1846 $('#reviews_v2 .carousel-control-btn').addClass('stop-carousel'); 1847 $('#reviews_v2 .carousel-control-btn').attr('aria-label', 'The Reviews carousel is currently playing, pause the Reviews carousel'); 1848 } 1849 1850 $('#reviews_v2 .carousel-control-btn').on('click',function(){ 1851 if ($(this).hasClass('stop-carousel')) { 1852 reviewsCarouselStop(); 1853 } else if ($(this).hasClass('play-carousel')) { 1854 reviewsCarouselPlay(); 1855 } 1856 }); 1857 1858 $('#reviews_v2 .owl-dot').click(function () { 1859 owlReviews.trigger('to.owl.carousel', [$(this).index(), 300]); 1860 reviewsCarouselStop(); 1861 }); 1862 1863 $('#reviews_v2 .owl-nav').click(function () { 1864 reviewsCarouselStop(); 1865 }); 1866 1867 $(window).on("resize", discontinuousReviews(function() { 1868 if ($('#reviews_v2 .carousel-control-btn').hasClass('play-carousel')) { 1869 setTimeout(() => reviewsCarouselStop(), 500); 1870 } 1871 })); 1872 1873 $(window).on('focus', function() { 1874 if ($('#reviews_v2 .carousel-control-btn').hasClass('stop-carousel')) { 1875 owlReviews.trigger('next.owl.carousel'); 1876 } 1877 }); 1878 1879 //prevent voiceover from reading hidden content 1880 owlReviews.on('changed.owl.carousel',function(property){ 1881 $('.reviews-v2-wrapper').find('.owl-item').attr('aria-hidden','true'); 1882 $(property.target).find(".owl-item").eq(property.item.index).attr('aria-hidden','false'); 1883 $(property.target).find(".owl-dot").find('button').attr('aria-current', 'false'); 1884 $(property.target).find(".owl-dot").filter('.active').find('button').attr('aria-current', 'true'); 1885 }); 1886 1887 //check if show arrows is true in config 1888 if(true && !true){ 1889 reviewsHandleArrowTabbing(owlReviews); 1890 } 1891 1892 function reviewsHandleArrowTabbing(widget){ 1893 widget.on('changed.owl.carousel',function(property){ 1894 //handle tabbing when previous slider button is hidden 1895 if($(property.target).find(".owl-prev").hasClass('disabled')){ 1896 $(property.target).find(".owl-prev").children().attr('tabindex', -1); 1897 $(property.target).find(".owl-prev").attr('aria-hidden','true'); 1898 } 1899 else { 1900 $(property.target).find(".owl-prev").children().attr('tabindex', 0); 1901 $(property.target).find(".owl-prev").attr('aria-hidden','false'); 1902 } 1903 //handle tabbing when next slider button is hidden 1904 if($(property.target).find(".owl-next").hasClass('disabled')){
1905 $(property.target).find(".owl-next").children().attr('tabindex', -1); 1906 $(property.target).find(".owl-next").attr('aria-hidden','true'); 1907 } 1908 else { 1909 $(property.target).find(".owl-next").children().attr('tabindex', 0); 1910 $(property.target).find(".owl-next").attr('aria-hidden','false'); 1911 } 1912 }); 1913 } 1914 1915 $('.reviews-v2-wrapper .owl-nav').insertBefore($('.reviews-v2-wrapper .owl-stage-outer')); 1916 $('.reviews-v2-wrapper .owl-dots').insertBefore($('.reviews-v2-wrapper .owl-nav')); 1917 1918 });iFrameResize({ 1919 enablePublicMethods: true, 1920 enableInPageLinks: true 1921}); 1922 1923var marker_icon = ""; 1924var additionalPins = ''; 1925if (additionalPins) { 1926 var locationsArray = JSON.parse(''); 1927} 1928 1929var google_map_url = 'https://www.google.com/maps/place/' + ",5331 West 16th Street,St Louis Park,MN,55416".split(' ').join('+'); 1930function open_google_map() { 1931 window.open(google_map_url, '_blank') 1932} 1933 1934function discontinuous(func){ 1935 var timer; 1936 return function(event){ 1937 if(timer) clearTimeout(timer); 1938 timer = setTimeout(func,200,event); 1939 }; 1940} 1941 1942function init_open_street_map() { 1943 if (additionalPins) { 1944 var map = L.map('map-v3-container', { 1945 minZoom: 3, 1946 zoomControl: false, 1947 zoomSnap: 1, 1948 gestureHandling: true 1949 }); 1950 1951 var allMarkers = []; 1952 1953 var marker = L.marker([44.9677932, -93.3472604], {title: '5331 West 16th Street, St Louis Park', alt: 'View 5331 West 16th Street, St Louis Park on Google maps, opens in a new tab'}).addTo(map); 1954 allMarkers.push(marker); 1955 1956 marker.on('click keypress', open_google_map); 1957 1958 locationsArray.forEach(function(element, index) { 1959 var additionalMarker = L.marker([element.lat_coords, element.lng_coords], {title: element.pin_title, alt: 'View ' + element.pin_title + ' on Google maps, opens in a new tab'}).addTo(map); 1960 1961 additionalMarker.on('click keypress', function() { 1962 window.open(element.pin_link, '_blank'); 1963 }); 1964 1965 allMarkers.push(additionalMarker); 1966 1967 }); 1968 1969 function fitBoundsToMarkers(osmap, markers) { 1970 osmap.invalidateSize(); 1971 var group = new L.featureGroup(markers); 1972 osmap.fitBounds(group.getBounds(), {padding: [50, 50]}); 1973 } 1974 1975 fitBoundsToMarkers(map, allMarkers); 1976 1977 document.querySelector('.reset-zoom-btn').addEventListener('click', function () { 1978 fitBoundsToMarkers(map, allMarkers); 1979 }); 1980 1981 window.addEventListener("resize", discontinuous(function(e) { 1982 fitBoundsToMarkers(map, allMarkers); 1983 })); 1984 } else { 1985 var map = L.map('map-v3-container', { 1986 center: [ 44.9677932, -93.3472604], 1987 zoom: 16, 1988 dragging: false, 1989 minZoom: 3, 1990 zoomControl: false, 1991 }); 1992 1993 var marker = L.marker([44.9677932, -93.3472604], {title: '5331 West 16th Street, St Louis Park', alt: 'View 5331 West 16th Street, St Louis Park on Google maps, opens in a new tab'}).addTo(map); 1994 1995 marker.on('click keypress', open_google_map); 1996 1997 map.scrollWheelZoom.disable(); 1998 } 1999 2000 if (marker_icon.length>0){ 2001 var myIcon = L.icon({ 2002 iconUrl: marker_icon, 2003 iconSize: [35,35] 2004 }); 2005 2006 if(allMarkers) { 2007 allMarkers.forEach(marker => { 2008 marker.setIcon(myIcon); 2009 marker.update(); 2010 }); 2011 } else { 2012 marker.setIcon(myIcon); 2013 marker.update(); 2014 } 2015 } 2016 2017 L.tileLayer.provider('OpenStreetMap.Mapnik').addTo(map); 2018 L.control.zoom({ 2019 position:'bottomleft' 2020 }).addTo(map); 2021 2022 $('.openstreetmap-v3-wrapper #map-v3-container').removeAttr('tabindex'); 2023 $('.leaflet-container .leaflet-marker-pane img').attr('role', 'link'); 2024 2025 $('.leaflet-container .leaflet-marker-pane img').each(function(index) { 2026 var imageTitle = $(this).attr('title'); 2027 var uniqueId = 'map_pin_' + index; 2028 $(this).attr('id', uniqueId); 2029 $('.banner-section .banner-pin').each(function() { 2030 var pin = $(this); 2031 var parentText = pin.parent().text(); 2032 if (parentText.includes(imageTitle)) { 2033 pin.attr('href', '#' + uniqueId); 2034 } 2035 }); 2036 }); 2037 $('.banner-pin').on('click', function(e) { 2038 e.preventDefault(); 2039 var href = $(this).attr('href'); 2040 $(href).focus(); 2041 }); 2042} 2043 2044$(document).ready(function() { 2045 init_open_street_map(); 2046}); 2047$("#contact_us_v3_section_phone_link").on("click", function(){ 2048 if (ga_check()) 2049 universal_ga('send', 'event', 'Button', 'Click', 'Phone'); 2050}); 2051 setTimeout(function(){ 2052 $('.navbar-fixed-bottom.nav-v1').addClass('show-bottom-nav'); triggerShowFooterEvents(); 2053 }, 4000); 2054 2055 var navigation_alpha_starts_from = 0; 2056 var navigation_background_color = "rgba(0, 0, 0,";
2057 var navigation_darkens_on_scroll = "1"; 2058 var top_nav_new_style = !navigation_darkens_on_scroll && ($(window).width() > 767); 2059 var custom_nav_style = "1"; 2060 if(!custom_nav_style){ 2061 $('.navbar-regular').css('background-color', 'rgba(255, 255, 255,' + navigation_alpha_starts_from + ')'); 2062 $('.navbar-inverse').css('background-color', navigation_background_color + (top_nav_new_style ? 0 : navigation_alpha_starts_from) + ')'); 2063 } 2064 2065 if (navigation_darkens_on_scroll && !custom_nav_style) { 2066 $(document).on('scroll', function (e) { 2067 var alpha = navigation_alpha_starts_from + $(document).scrollTop() / 1950; 2068 $('.navbar-inverse').css('background-color', navigation_background_color + alpha + ')'); 2069 $('.navbar-regular').css('background-color', 'rgba(255, 255, 255,' + alpha + ')'); 2070 }); 2071 } 2072 2073 if (!navigation_darkens_on_scroll && !custom_nav_style) { 2074 $(window).resize(function() { 2075 if ($(window).width() > 767) 2076 $('.navbar-inverse').css('background-color', navigation_background_color + 0 + ')'); 2077 else 2078 $('.navbar-inverse').css('background-color', navigation_background_color + navigation_alpha_starts_from + ')'); 2079 }); 2080 } 2081 2082 $(document).on('shown.bs.modal', '.modal', function () { 2083 $(this).attr('aria-hidden', 'false'); 2084 }); 2085 $(document).on('hidden.bs.modal', '.modal', function () { 2086 $(this).attr('aria-hidden', 'true'); 2087 }); 2088 2089</script>
2089<script type="text/javascript"> 2090 function openPopUp() { 2091 2092 document.touchmove = function (e) { 2093 e.preventDefault(); 2094 }; 2095 $(function () { 2096 $('body').css('overflow', 'hidden'); 2097 2098 $('#CustomModal').modal({ 2099 show: true 2100 }); 2101 2102 $(document).on('shown.bs.modal', '.modal', function () { 2103 //handle reader focus 2104 focusModal(); 2105 }); 2106 $(document).on("hidden.bs.modal", ".modal", function (event, ui) { 2107 //handle reader focus 2108 focusNavbar(); 2109 $('body').css('overflow', ''); 2110 document.touchmove = function () {}; 2111 }); 2112 }); 2113 } 2114 2115 function focusModal() { 2116 $('.modal-dialog') 2117 .css('outline', 'none') 2118 .attr('tabindex', '-1') 2119 .focus(); 2120 } 2121 2122 function focusNavbar(){ 2123 //handle which header exists 2124 if($(".navbar")){ 2125 var element = $(".navbar"); 2126 }else{ 2127 var element = $(".navbar-normal"); 2128 } 2129 element.css('outline', 'none') 2130 .attr('tabindex', '-1') 2131 .focus(); 2132 } 2133 2134 var showPopupPerSession = false; 2135 // Check if popup is set to show once per session 2136 if (!showPopupPerSession || (showPopupPerSession && !sessionStorage.getItem("newsletter_popup_shown"))) { 2137 var t = setTimeout(openPopUp, 10000); 2138 sessionStorage.setItem("newsletter_popup_shown", "yes"); 2139 } 2140 2141 </script>
2141<script> 2142 var animate_sections = ["aboutus_v2","gallery_v3","aboutus_v7"]; 2143 2144 for (var i = 0; i < animate_sections.length; i++) { 2145 $('#'+animate_sections[i]).addClass('animation-element'); 2146 } 2147 2148 var $animation_elements = $('.animation-element'); 2149 var $window = $(window); 2150 2151 function check_if_in_view() { 2152 var window_height = $window.height(); 2153 var window_top_position = $window.scrollTop(); 2154 var window_bottom_position = (window_top_position + window_height/2); 2155 2156 $.each($animation_elements, function() { 2157 var $element = $(this); 2158 var element_height = $element.outerHeight(); 2159 var element_top_position = $element.offset().top; 2160 var element_bottom_position = (element_top_position + element_height/2); 2161 2162 //check to see if this current container is within viewport 2163 if ((element_bottom_position >= window_top_position) && 2164 (element_top_position <= window_bottom_position)) { 2165 $element.addClass('animate'); 2166 } else { 2167 // $element.removeClass('in-view'); 2168 } 2169 }); 2170 } 2171 2172 $window.on('scroll resize', check_if_in_view); 2173 $window.trigger('scroll'); 2174 </script>
2174<script> 2175 2176function accessibilityAriaLabel() { 2177 $('#accessibility-footer .accessibility-link').attr('aria-label', 'Learn More About our website accessibility'); 2178} 2179setTimeout(accessibilityAriaLabel, 500); 2180 2181function getDirectionsAriaLabel() { 2182 $('.get-directions-footer-link').attr('aria-label', 'Get directions to The Loop West End, you are leaving the website, opens in a new tab'); 2183} 2184setTimeout(getDirectionsAriaLabel, 500); 2185 2186$(function () { 2187 //If Newsletter widget (popup or section) is on 2188 if ($('.newsletter-popup').length || $('.map-newsletter').length || $('.newsletter-section').length) { 2189 //Inject html needed for ADA 2190 var waitSPHWidget = setInterval(function(){ 2191 if ($('.sph-email-input').length) { 2192 // 2193 $('.sph-loading-img img').attr('alt', 'Newsletter Loader icon'); 2194 clearInterval(waitSPHWidget) 2195 } 2196 }, 300); 2197 } 2198 2199 var allSvgs = $('.top-svg-border svg, .bottom-svg-border svg'); 2200 allSvgs.each(function(index){ 2201 $(this).attr('role', 'img'); 2202 $(this).attr('aria-hidden', 'true'); 2203 $(this).attr('alt', 'Border ' + (index + 1)); 2204 }); 2205 2206 const intervalNewsletterAutocomplete = setInterval(() => { 2207 const newsletterFormDiv = $('.sph-email-subscription'); 2208 if (newsletterFormDiv.length > 0) { 2209 newsletterFormDiv.find('input.sph-email-input[type=email]').attr('autocomplete', 'email'); 2210 newsletterFormDiv.find('input.sph-email-input[type=tel]').attr('autocomplete', 'tel'); 2211 clearInterval(intervalNewsletterAutocomplete); 2212 } 2213 }, 200) 2214 2215 const promotionPopupEditInterval = setInterval(() => { 2216 var promotionalPopup = $('.promotion-pop-up'); 2217 if (promotionalPopup.length > 0) { 2218 clearInterval(promotionPopupEditInterval); 2219 // promotionalPopup.addClass('custom-styled'); 2220 promotionalPopup.attr('aria-label', 'Promotional dialog'); 2221 promotionalPopup.find('.close').attr('aria-label', 'close the promotional dialog'); 2222 } 2223 }, 200); 2224 2225 setTimeout(() => { 2226 clearInterval(intervalNewsletterAutocomplete); 2227 clearInterval(promotionPopupEditInterval); 2228 }, 5000); 2229}); 2230</script>
2230<script> 2231// Functions needed for Newsletter (sh widget) subscription submit (case when texting is Off in SH) 2232function isEmail(email) { 2233 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 2234 return regex.test(email); 2235} 2236function submitEmail(input_id) { 2237 var shp_email_to_subscribe = $("#sph-newsletter-input-" + input_id); 2238 if (!isEmail(shp_email_to_subscribe.val())) { 2239 alert('Please enter a valid email address (e.g. [email protected]).'); 2240 setTimeout(function(){ 2241 shp_email_to_subscribe.focus(); 2242 }, 300); 2243 return; 2244 } 2245 var sph_email_form_div = $(".sph-email-form"); 2246 var sph_loading_img = $(".sph-loading-img"); 2247 var sph_response_message_div = $(".sph-response-message"); 2248 var sph_submit_label = $(".sph-submit-label"); 2249 sph_submit_label.hide(); 2250 sph_loading_img.show(); 2251 var request = $.ajax({ 2252 method: "POST", 2253 url: "https://www.spothopperapp.com/api/spots/112064/contacts/add", 2254 crossDomain: true, 2255 dataType: 'json', 2256 data: { email: shp_email_to_subscribe.val() }, 2257 success: function (data) { 2258 sph_response_message_div.html(data); 2259 sph_email_form_div.hide(); 2260 sph_response_message_div.show(); 2261 sph_response_message_div.attr( "tabindex", "-1" ); 2262 sph_response_message_div.focus(); 2263 }, 2264 error: function (data) { 2265 sph_response_message_div.html("Something went wrong. Please try again later."); 2266 sph_email_form_div.hide(); 2267 sph_response_message_div.show(); 2268 sph_response_message_div.attr( "tabindex", "-1" ); 2269 sph_response_message_div.focus(); 2270 } 2271 }); 2272} 2273 2274function checkForPopup() { 2275 const popup = document.getElementById('promotion-pop-up'); 2276 if (popup) { 2277 popup.setAttribute('aria-label', 'Promotional dialog'); 2278 clearInterval(interval); 2279 } 2280} 2281 2282function checkForClosePopup() { 2283 const closeButtons = document.querySelectorAll('#promotion-pop-up .modal-header button.close'); 2284 2285 if (closeButtons.length > 0) { 2286 setTimeout(() => { 2287 closeButtons.forEach((button) => { 2288 button.setAttribute('aria-label', 'Close the promotional dialog'); 2289 }); 2290 2291 clearInterval(interval_2); 2292 }, 1000); 2293 } 2294} 2295 2296function checkForPolicyLinks() { 2297 const groups = document.querySelectorAll('.sh-form-group.is-inline'); 2298 let updated = false; 2299 2300 groups.forEach(group => { 2301 const links = group.querySelectorAll('a'); 2302 links.forEach(link => { 2303 const linkText = link.textContent.trim(); 2304 2305 if (linkText === 'Privacy Policy') { 2306 link.setAttribute('aria-label', 'Privacy Policy, you are leaving the website, opens in a new tab'); 2307 updated = true; 2308 } 2309 2310 if (linkText === 'Terms and Conditions') { 2311 link.setAttribute('aria-label', 'Terms and Conditions, you are leaving the website, opens in a new tab'); 2312 updated = true; 2313 } 2314 }); 2315 }); 2316 2317 if (updated) { 2318 clearInterval(interval_3); 2319 } 2320} 2321 2322let interval = setInterval(checkForPopup, 500); 2323let interval_2 = setInterval(checkForClosePopup, 500); 2324let interval_3 = setInterval(checkForPolicyLinks, 500); 2325 2326setTimeout(() => { 2327 clearInterval(interval); 2328 clearInterval(interval_2); 2329 clearInterval(interval_3); 2330}, 15000); 2331 2332var formIframe = document.querySelector(".custom_html_2-section iframe"); 2333 formIframe.setAttribute("scrolling","yes"); 2334 2335(function ($) { 2336 if (!$.fancybox) return; 2337 2338 var lastFocused = null; 2339 var lastControl = null; 2340 2341 $(document).on('click', 'a.fancybox, [rel="fancybox"], [data-fancybox]', function () { 2342 lastFocused = this; 2343 }); 2344 2345 $.extend(true, $.fancybox.defaults, { 2346 2347 beforeShow: function () { 2348 var $wrap = this.wrap; 2349 if (!$wrap || !$wrap.length) return; 2350 2351 $wrap.attr({ 2352 tabindex: '-1', 2353 role: 'dialog',
2354 'aria-modal': 'true', 2355 'aria-label': 'Image gallery dialog' 2356 }); 2357 2358 $('body > *').not('.fancybox-overlay').attr('aria-hidden', 'true'); 2359 }, 2360 2361 afterShow: function () { 2362 var self = this; 2363 var $wrap = self.wrap; 2364 if (!$wrap || !$wrap.length) return; 2365 2366 $wrap.find('a, button, input, select, textarea, [tabindex]') 2367 .attr('tabindex', '-1'); 2368 2369 var $controls = $wrap.find('.fancybox-prev, .fancybox-next, .fancybox-close'); 2370 2371 $controls.attr({ 2372 tabindex: '0', 2373 role: 'button' 2374 }); 2375 2376 $wrap.find('.fancybox-prev') 2377 .attr('aria-label', 'View previous image'); 2378 2379 $wrap.find('.fancybox-next') 2380 .attr('aria-label', 'View next image'); 2381 2382 $wrap.find('.fancybox-close') 2383 .attr('aria-label', 'Close image gallery dialog'); 2384 2385 setTimeout(function () { 2386 2387 $controls.removeAttr('title'); 2388 2389 if (lastControl === 'prev') { 2390 $wrap.find('.fancybox-prev').focus(); 2391 } else if (lastControl === 'next') { 2392 $wrap.find('.fancybox-next').focus(); 2393 } else { 2394 $wrap.focus(); 2395 } 2396 2397 lastControl = null; 2398 2399 }, 10); 2400 }, 2401 2402 afterClose: function () { 2403 $('body > *').removeAttr('aria-hidden'); 2404 2405 if (lastFocused) { 2406 $(lastFocused).focus(); 2407 lastFocused = null; 2408 } 2409 } 2410 }); 2411 2412 $(document).on('keydown.fancyboxAccessibility', function (e) { 2413 var $wrap = $('.fancybox-wrap:visible'); 2414 if (!$wrap.length) return; 2415 2416 var key = e.keyCode; 2417 var $active = $(document.activeElement); 2418 2419 if (key === 13 || key === 32) { 2420 2421 if ($active.hasClass('fancybox-prev')) { 2422 e.preventDefault(); 2423 e.stopImmediatePropagation(); 2424 lastControl = 'prev'; 2425 $.fancybox.prev(); 2426 } 2427 2428 if ($active.hasClass('fancybox-next')) { 2429 e.preventDefault(); 2430 e.stopImmediatePropagation(); 2431 lastControl = 'next'; 2432 $.fancybox.next(); 2433 } 2434 2435 if ($active.hasClass('fancybox-close')) { 2436 e.preventDefault(); 2437 e.stopImmediatePropagation(); 2438 $.fancybox.close(); 2439 } 2440 } 2441 2442 if (key === 9) { 2443 var $focusable = $wrap.find('[tabindex="0"]').filter(':visible'); 2444 if (!$focusable.length) return; 2445 2446 var first = $focusable[0]; 2447 var last = $focusable[$focusable.length - 1]; 2448 2449 if (e.shiftKey && document.activeElement === first) { 2450 e.preventDefault(); 2451 last.focus(); 2452 } else if (!e.shiftKey && document.activeElement === last) { 2453 e.preventDefault(); 2454 first.focus(); 2455 } 2456 } 2457 }); 2458 2459})(jQuery); 2460</script>
2460<script>(function() { 2461 const MODAL_ID = 'promotion-pop-up'; 2462 const SESSION_KEY = 'promotion-pop-up-container-ids'; 2463 const PADDING = 70; 2464 const RESIZE_DEBOUNCE_MS = 150; 2465 const INITIAL_DELAY = typeof promotion_pop_up_initial_delay === 'undefined' ? 2466 2000 : 2467 promotion_pop_up_initial_delay; 2468 2469 const POP_UP_PRIORITY = ["holiday_party"]; 2470 const _norm = s => (s || "").toString().trim().toLowerCase(); 2471 const PRIORITY_RANK = new Map(POP_UP_PRIORITY.map((n, i) => [_norm(n), i])); 2472 2473 function displayPromotionPopUp() { 2474 const items = document.getElementsByClassName('promotion_pop_up_content'); 2475 2476 // Track shown IDs as a Set (no dups, fast lookups) 2477 const shownIds = new Set( 2478 (sessionStorage.getItem(SESSION_KEY) || '') 2479 .split(',') 2480 .map(s => s.trim()) 2481 .filter(Boolean) 2482 ); 2483 2484 // Hide all; collect items not shown this session 2485 const availableItems = []; 2486 Array.prototype.forEach.call(items, item => { 2487 item.style.display = 'none'; 2488 2489 // --- Exclusion logic --- 2490 // Block popups whose non-custom CTA link is a phone number (tel:) 2491 const isCustomLink = item.getAttribute("data-is-custom-link") ?? "false"; 2492 const linkUrl = item.getAttribute("data-link-url") || ""; 2493 2494 const excludeItem = 2495 isCustomLink === "false" && 2496 linkUrl.trim().toLowerCase().startsWith("tel"); 2497 2498 if (excludeItem) { 2499 return; // Skip this popup entirely 2500 } 2501 2502 if (!shownIds.has(item.id)) { 2503 availableItems.push(item); 2504 } 2505 }); 2506 2507 if (availableItems.length === 0) return false; 2508 2509 // --- Priority logic --- 2510 const norm = s => (s || '').toString().trim().toLowerCase(); 2511 const prioritySource = Array.isArray(POP_UP_PRIORITY) 2512 ? POP_UP_PRIORITY 2513 : Array.isArray(window.pop_up_priority) 2514 ? window.pop_up_priority 2515 : []; 2516 const rank = new Map(prioritySource.map((name, i) => [norm(name), i])); 2517 2518 const records = availableItems.map(el => { 2519 const internal = norm(el.getAttribute('data-internalname')); 2520 const priority = rank.has(internal) ? rank.get(internal) : Infinity; 2521 return { el, priority }; 2522 }); 2523 2524 let selectedItem; 2525 const minPriority = Math.min(...records.map(r => r.priority)); 2526 2527 if (isFinite(minPriority)) { 2528 // Randomize within the highest-priority bucket only 2529 const topBucket = records.filter(r => r.priority === minPriority); 2530 const pick = topBucket[Math.floor(Math.random() * topBucket.length)]; 2531 selectedItem = pick.el; 2532 } else { 2533 // Pure random among all available when no priorities match 2534 selectedItem = availableItems[Math.floor(Math.random() * availableItems.length)]; 2535 } 2536 2537 // Show popup 2538 selectedItem.style.display = 'block'; 2539 2540 // Analytics + persist shown id (unless preview param present) 2541 if (window.location.search.indexOf('spot_promotion_channel_id=') === -1) { 2542 shownIds.add(selectedItem.id); 2543 do_promotion_analytics( 2544 selectedItem.getAttribute('data-internalname'), 2545 selectedItem.id, 2546 selectedItem.getAttribute('data-link-url'), 2547 selectedItem.getAttribute('data-has-image'), 2548 selectedItem.getAttribute('data-is-template-image-and-button') 2549 ); 2550 } 2551 2552 sessionStorage.setItem(SESSION_KEY, Array.from(shownIds).join(',')); 2553 return true; 2554 } 2555 2556 function preloadImages(container, callback) { 2557 const images = container.querySelectorAll('img'); 2558 if (images.length === 0) return callback(); 2559 2560 let loaded = 0; 2561 Array.prototype.forEach.call(images, function(img) { 2562 if (img.complete) { 2563 if (++loaded === images.length) callback(); 2564 } else { 2565 img.addEventListener('load', check); 2566 img.addEventListener('error', check); 2567 } 2568 2569 function check() { 2570 if (++loaded === images.length) callback(); 2571 } 2572 }); 2573 } 2574 2575 function centerModal() { 2576 const modal = document.getElementById(MODAL_ID); 2577 const dialog = modal.querySelector('.promotion-pop-up .modal-dialog'); 2578 if (!dialog) return; 2579 2580 modal.style.display = 'block'; 2581 modal.style.visibility = 'hidden'; 2582 2583 const height = dialog.offsetHeight; 2584 const winHeight = window.innerHeight; 2585 const top = Math.max(0, (winHeight - height) / 2); 2586 dialog.style.top = `${top}px`; 2587 2588 modal.style.visibility = ''; 2589 } 2590 2591 function centerModalVisible() { 2592 const modal = document.getElementById(MODAL_ID); 2593 const dialog = modal.querySelector('.promotion-pop-up .modal-dialog'); 2594 if (!dialog) return; 2595 2596 const height = dialog.offsetHeight; 2597 const winHeight = window.innerHeight; 2598 const top = Math.max(0, (winHeight - height) / 2); 2599 dialog.style.top = `${top}px`; 2600 } 2601 2602 function lockScroll() { 2603 document.body.style.overflow = 'hidden'; 2604 document.ontouchmove = function(e) { 2605 e.preventDefault(); 2606 }; 2607 } 2608 2609 function unlockScroll() { 2610 document.body.style.overflow = ''; 2611 document.ontouchmove = null; 2612 } 2613 2614 function setupModalLayout(modalId) { 2615 const modal = document.getElementById(modalId); 2616 const content = modal?.querySelector('.promotion_pop_up_content[style*="display: block"]'); 2617 if (!content) return; 2618 2619 const header = content.querySelector('.modal-header'); 2620 const footer = content.querySelector('.modal-footer'); 2621 const body = content.querySelector('.modal-body'); 2622 if (!body) return; 2623 2624 const windowHeight = window.innerHeight; 2625 const headerHeight = header?.offsetHeight || 0; 2626 const footerHeight = footer?.offsetHeight || 0;
2627 const maxBodyHeight = windowHeight - headerHeight - footerHeight - PADDING; 2628 2629 body.style.maxHeight = `${maxBodyHeight}px`; 2630 body.style.overflowY = 'auto'; 2631 2632 centerModalVisible(); 2633 } 2634 2635 function prepareModalForDisplay(modalId) { 2636 const modal = document.getElementById(modalId); 2637 const visibleContent = modal?.querySelector('.promotion_pop_up_content[style*="display: block"]'); 2638 if (!visibleContent) return; 2639 2640 modal.style.display = 'block'; 2641 modal.style.visibility = 'hidden'; 2642 2643 preloadImages(visibleContent, function() { 2644 const header = visibleContent.querySelector('.modal-header'); 2645 const footer = visibleContent.querySelector('.modal-footer'); 2646 const body = visibleContent.querySelector('.modal-body'); 2647 2648 if (body) { 2649 const windowHeight = window.innerHeight; 2650 const headerHeight = header?.offsetHeight || 0; 2651 const footerHeight = footer?.offsetHeight || 0;
2652 const maxBodyHeight = windowHeight - headerHeight - footerHeight - PADDING; 2653 2654 body.style.maxHeight = `${maxBodyHeight}px`; 2655 body.style.overflowY = 'auto'; 2656 } 2657 2658 centerModal(); 2659 modal.style.visibility = ''; 2660 lockScroll(); 2661 2662 $('#' + modalId).modal({ 2663 show: true, 2664 focus: true, 2665 backdrop: true 2666 }); 2667 }); 2668 } 2669 2670 // === Main Timer Logic === 2671 setTimeout(function() { 2672 if (displayPromotionPopUp()) { 2673 if (typeof t !== 'undefined') { 2674 clearTimeout(t); 2675 } 2676 2677 const timeoutDuration = INITIAL_DELAY > 500 ? INITIAL_DELAY - 500 : 0; 2678 2679 setTimeout(function() { 2680 prepareModalForDisplay(MODAL_ID); 2681 }, timeoutDuration); 2682 } 2683 }, 500); 2684 2685 // === Cleanup on modal close === 2686 $(document).on('hidden.bs.modal', `#${MODAL_ID}`, function() { 2687 unlockScroll(); 2688 }); 2689 2690 // === Responsive layout recalculation === 2691 let resizeTimeout; 2692 window.addEventListener('resize', function() { 2693 clearTimeout(resizeTimeout); 2694 resizeTimeout = setTimeout(function() { 2695 const modal = document.getElementById(MODAL_ID); 2696 if (modal && $(modal).hasClass('in')) { 2697 void modal.offsetHeight; 2698 setupModalLayout(MODAL_ID); 2699 } 2700 }, RESIZE_DEBOUNCE_MS); 2701 }); 2702 2703 // === Embedded analytics helpers === 2704 function obtain_analytics_function() { 2705 if (typeof sph_widgets_ga === 'function') return sph_widgets_ga; 2706 if (typeof ga === 'function') return ga; 2707 if (typeof gtag === 'function') return gtag; 2708 return null; 2709 } 2710 2711 function do_promotion_analytics(eventLabel, spot_promotion_channel_id, data_link_url, hasImage, is_template_image_and_button) { 2712 analytics = obtain_analytics_function(); 2713 if (!analytics) return null; 2714 2715 var pop_up_template = (is_template_image_and_button == 'true' ? 'text,image&button' : 'text&button'); 2716 var image_enabled_disabled = (hasImage ? 'image_enabled' : 'image_disabled'); 2717 var additional_info = (is_template_image_and_button == 'true' ? '|' + image_enabled_disabled : ''); 2718 2719 universal_ga('send', 'event', 'Pop Up Promotion', 'View', eventLabel + '|||' + data_link_url + '|' + pop_up_template + additional_info); 2720 2721 // universal_ga('send', 'event', 'Pop Up Promotion', 'View', eventLabel); 2722 if (typeof $ === 'function') { 2723 $(".promotion_pop_up_content a").on("click", function(event) { 2724 universal_ga('send', 'event', { 2725 eventCategory: 'Pop Up Promotion Button', 2726 eventAction: 'Click', 2727 eventLabel: eventLabel + '|||' + event.target.href + '|' + pop_up_template + additional_info, 2728 transport: 'beacon' 2729 }); 2730 $("#promotion-pop-up").modal('hide'); 2731 return true; 2732 }); 2733 } 2734 } 2735 2736})();</script>
2736<script>// ALL_PAGES_COMPONENT 2737var smart_footer_active = 'true' == 'true'; 2738var smart_footer_version = '2'; 2739 2740</script>
2740<footer id="accessibility-footer"><p>We strive to make our website accessible to everybody. <a aria-label="Learn More About our website accessibility" class="accessibility-link" href="/accessibility-page-01" target="_self">Learn More.</a></p></footer>
2740<script> 2741(function() { 2742 var name = "The Loop West End"; 2743 var pid = "ChIJaZGkSaI0s1IR4KXuICXDEBw"; 2744 function build_url() { 2745 var q = encodeURIComponent(name).replace(/'/g, "%27"); 2746 return "https://www.google.com/maps/search/?api=1" 2747 + "&query=" + q 2748 + "&query_place_id=" + encodeURIComponent(pid); 2749 } 2750 window.google_map_url = build_url(); 2751 window.open_google_map = function() { 2752 window.open(build_url(), "_blank"); 2753 }; 2754})(); 2755</script>
2755<script> 2756 2757 var spot_id = 112064; 2758 var sh_generic_form_params=JSON.parse('{"generic_contact_form_active":false,"texting_permissions_active":true,"title":"Contact us","instructions":"Please fill out the form and we will be in touch.","reasons":[],"custom_hours":"","hours":"","active_tmt_cta_links":{"cta_private_party":null,"cta_catering":null,"cta_reservations":null,"cta_jobs":null},"spot_name":"The Loop West End","label_for_texting_permission":"Iâd like to get texts about specials, events, and other exclusive offers and announcements not available to general public"}'); 2759 2760 if (false){ 2761 console.log("Check SpotHopper configuration. Probably there is no 'WEBSITE::DOMAIN_NAME' key for your website"); 2762 } 2763 2764 if (navigator.userAgent.match(/iPhone/i) 2765 || navigator.userAgent.match(/iPad/i) 2766 || navigator.userAgent.match(/iPod/i)){ 2767 $(document).ready(function(){ 2768 document.body.className += " " + "webkit-mobile-body"; 2769 }); 2770 } 2771 2772 var promotion_url_param_domain = getPromotionUrlParams()['domain']; 2773 if ( promotion_url_param_domain && ( new URL(document.location).host == 'localhost:4000' || new URL(document.location).host == 'wcache.spotapps.co' || new URL(document.location).host == 'website-editor.spotapps.co' || new URL(document.location).host == 'website-editor-staging.spotapps.co' || new URL(document.location).host == 'wcache-staging.spotapps.co')){ 2774 $("a[href^='/']").each(function(){ 2775 if (this.href.indexOf('domain=') == -1){ 2776 var sh_internal_url = new URL(this.href); 2777 sh_internal_url.searchParams.set("domain", promotion_url_param_domain); 2778 this.href = sh_internal_url.toString(); 2779 } 2780 }) 2781 } 2782 2783 2784 function cta_link_matches_href(href, url){ 2785 var domain = 'theloopwestend.com'; 2786 if(typeof url === 'undefined'){ 2787 return false; 2788 } 2789 var partsOfURL = url.split(domain); 2790 if (partsOfURL.length != 2){ 2791 return href == url; 2792 }else{ 2793 var urlPath = partsOfURL[1]; 2794 if (urlPath.substring(0,1) == "/"){ 2795 urlPath = urlPath.substring(1,urlPath.length); 2796 } 2797 return href.indexOf(urlPath, domain.length + href.indexOf(domain)-1) !== -1; 2798 } 2799 } 2800 2801 var all_cta_links = [{"id":746506,"spot_id":112064,"url":"https://www.theloopwestend.com/drink-menu","cta_link_type":"drink_menu","created_at":"2023-05-02T11:59:58.630+00:00","updated_at":"2026-07-30T10:10:09.193+00:00","made_of_food":false,"link_name":""},{"id":746505,"spot_id":112064,"url":"https://www.theloopwestend.com/events","cta_link_type":"events","created_at":"2023-05-02T11:59:58.611+00:00","updated_at":"2026-07-30T10:10:09.140+00:00","made_of_food":false,"link_name":"","position":null},{"id":746504,"spot_id":112064,"url":"https://www.theloopwestend.com/specials","cta_link_type":"specials","created_at":"2023-05-02T11:59:58.540+00:00","updated_at":"2026-07-30T10:10:08.988+00:00","made_of_food":false,"link_name":"","position":null},{"id":746507,"spot_id":112064,"url":"https://www.theloopwestend.com/food-menu","cta_link_type":"food_menu","created_at":"2023-05-02T11:59:58.649+00:00","updated_at":"2026-07-30T10:10:09.248+00:00","made_of_food":false,"link_name":"","position":null},{"id":916189,"spot_id":112064,"url":"https://www.toasttab.com/the-loop-west-end/giftcards","cta_link_type":"gift_cards","created_at":"2024-04-02T09:11:26.385+00:00","updated_at":"2026-07-30T10:10:09.385+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Gift Cards","position":5},{"id":726443,"spot_id":112064,"url":"https://order.toasttab.com/online/the-loop-west-end","cta_link_type":"order","created_at":"2023-01-10T13:30:44.525+00:00","updated_at":"2026-07-30T10:10:09.439+00:00","made_of_food":false,"link_name":"toasttab","target":null,"website_footer_label":"Order","position":0},{"id":1115136,"spot_id":112064,"url":"https://us-restaurant.momos.io/forms/52924e62-11fd-46e7-ba80-6c982b4be377?id=417c27de-1884-4917-abdf-eb69278834de","cta_link_type":"private_parties","created_at":"2024-10-22T13:44:31.529+00:00","updated_at":"2026-07-30T10:10:09.085+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Parties","position":3},{"id":2051416,"spot_id":112064,"url":"https://www.opentable.com/restref/client/?restref=213007\u0026lang=en-US\u0026ot_source=Restaurant%20website\u0026corrid=ddfe51ba-cadb-42e5-9528-ac6a168c07e6","cta_link_type":"reservations","created_at":"2026-07-30T10:03:59.293+00:00","updated_at":"2026-07-30T10:10:09.300+00:00","made_of_food":false,"link_name":"","target":null,"website_footer_label":"Reserve","position":1}]; 2802 2803 function find_cta_link(href) { 2804 for (var i=0; i< all_cta_links.length; i++){ 2805 var cta_link = all_cta_links[i]; 2806 if ( cta_link_matches_href(href, cta_link.url)){ 2807 return cta_link; 2808 } 2809 } 2810 } 2811 2812 function find_cta_links(href) { 2813 var cta_links = [] 2814 for (var i=0; i< all_cta_links.length; i++){ 2815 var cta_link = all_cta_links[i]; 2816 if ( cta_link_matches_href(href, cta_link.url)){ 2817 cta_links.push(cta_link); 2818 } 2819 } 2820 return cta_links; 2821 } 2822 2823 2824 function get_current_page_cta_link_types(){ 2825 var types = []; 2826 var cta_links = find_cta_links(document.location.href); 2827 for (var i=0; i<cta_links.length; i++){ 2828 types.push(cta_links[i].cta_link_type); 2829 } 2830 return types; 2831 } 2832 2833 2834 function is_food_menu_page(){ 2835 var cta_link_types = get_current_page_cta_link_types(); 2836 for (var i=0; i<cta_link_types.length; i++){ 2837 if ('food_menu' == cta_link_types[i]) 2838 return true; 2839 } 2840 return false;
2841 } 2842 2843 2844 function get_form_cat_from_cta(){ 2845 var cta_link = find_cta_link(document.location.href); 2846 if (cta_link == null) { 2847 return null; 2848 } 2849 if (cta_link.cta_link_type == 'private_parties'){ 2850 return 'private_party'; 2851 }else if (cta_link.cta_link_type == 'reservations'){ 2852 return 'reservation'; 2853 }else if (cta_link.cta_link_type == 'catering'){ 2854 return 'catering'; 2855 }else if (cta_link.cta_link_type == 'job_listing'){ 2856 return 'job_listings'; 2857 }else if (cta_link.cta_link_type == 'gift_cards'){ 2858 return 'gift_cards'; 2859 } 2860 return null; 2861 } 2862 2863 function element_has_events_defined(elem){ 2864 if ($._data(elem, "events") === undefined){ 2865 return false; 2866 } 2867 return true; 2868 } 2869 2870 function create_ga_events_for_cta_clicks(){ 2871 if (typeof $ === 'function'){ 2872 2873 var cta_link_of_the_page = find_cta_link(location.href); 2874 2875 2876 $("a").each(function(index, elem){ 2877 var href = $(elem).attr('href'); 2878 2879 if (href === undefined ){ 2880 return; 2881 } 2882 2883 if (href.substring(0,4) == 'tel:'){ 2884 if (!element_has_events_defined(elem)){ // not footer links 2885 $(elem).on("click", function(){ 2886 universal_ga('send', 'event', { 2887 eventCategory: 'Button', 2888 eventAction: 'Click', 2889 eventLabel: 'Phone', 2890 transport: 'beacon' 2891 }); 2892 }); 2893 2894 if (cta_link_of_the_page){ 2895 $(elem).on("click", function(){ 2896 universal_ga('send', 'event', { 2897 eventCategory: 'Button', 2898 eventAction: 'Click', 2899 eventLabel: cta_link_of_the_page.cta_link_type + ' page phone', 2900 transport: 'beacon' 2901 }); 2902 }); 2903 } 2904 } else { 2905 if (cta_link_of_the_page){ 2906 $(elem).on("click", function(){ 2907 universal_ga('send', 'event', { 2908 eventCategory: 'Button', 2909 eventAction: 'Click', 2910 eventLabel: cta_link_of_the_page.cta_link_type + ' page phone footer', 2911 transport: 'beacon' 2912 }); 2913 }); 2914 } 2915 } 2916 2917 2918 }else{ 2919 var cta_link = find_cta_link(href); 2920 if (elem.className != null && elem.className.indexOf("bottom-link") > -1){ 2921 // console.log("bottom link detected"); 2922 }else{ 2923 if (cta_link != null){ 2924 $(elem).on("click", function(){ 2925 universal_ga('send', 'event', { 2926 eventCategory: 'Website Link', 2927 eventAction: 'Click', 2928 eventLabel: cta_link.cta_link_type, 2929 transport: 'beacon' 2930 }); 2931 }); 2932 } 2933 } 2934 } 2935 2936 2937 }); 2938 } 2939 } 2940 2941 if (typeof angular === "undefined") { 2942 create_ga_events_for_cta_clicks(); 2943 } else { 2944 angular.element(document).ready(function () { 2945 create_ga_events_for_cta_clicks(); 2946 }); 2947 } 2948 2949 2950 function triggerShowFooterEvents(){ 2951 if (window.screen.availWidth < 768){ 2952 universal_ga('send', 'event', { 2953 eventCategory: 'Mobile Footer', 2954 eventAction: 'View', 2955 eventLabel: '', 2956 transport: 'beacon' 2957 }); 2958 } 2959 } 2960 2961 2962 2963 2964 //////////// 2965 function smartFooterV2() 2966 { 2967 var list= document.getElementsByClassName("bottom-list-item"); 2968 if (!list) return; 2969 2970 if (document.getElementById("bottom-navbar") == null){ 2971 return; 2972 } 2973 2974 var bottomNav = document.querySelector('#bottom-navbar .navbar-nav'); 2975 var footerLinkPaddingLeft = $('#bottom-navbar .navbar-nav li a').css('padding-left'); 2976 var footerLinkPaddingRight = $('#bottom-navbar .navbar-nav li a').css('padding-right'); 2977 2978 bottomNav.innerHTML = ''; 2979 var linksWithPosition = all_cta_links.filter(e => e.position != null && e.position >= 0); 2980 linksWithPosition.sort(function(a,b) { 2981 return a.position - b.position; 2982 }); 2983 2984 var footerLinkStyle = (footerLinkPaddingLeft == '0px' || footerLinkPaddingRight == '0px' ? 'style="padding-left: 8px; padding-right: 8px;"' : ''); 2985 2986 linksWithPosition.forEach((e, i) => { 2987 var target = e.target || getUrlTarget(e.url); 2988 bottomNav.insertAdjacentHTML('beforeend', 2989 `<li class="bottom-list-item" style="white-space: nowrap;width: auto;"><a ${footerLinkStyle} class="bottom-link smart-footer-link" data-type="${e.cta_link_type}" data-position="${i}" target="${target}" href="${e.url}">${e.website_footer_label}</a></li>`); 2990 }) 2991 2992 var intervalCount = 0 2993 var interval = setInterval(() => { 2994 if(intervalCount == 50){ 2995 clearInterval(interval); 2996 } 2997 removeOverflowingFooterLinks(); 2998 intervalCount ++; 2999 }, 200); 3000 3001 $('.smart-footer-link').on("click", function(){ 3002 if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){ 3003 shUrlParams['source'] = 'footer'; 3004 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)); 3005 } 3006 3007 var visibleLinks = $('.smart-footer-link').map(function (e) { 3008 return $(this).data('type'); 3009 }).toArray().join(','); 3010 3011 universal_ga('send', 'event', { 3012 eventCategory: 'Button', 3013 eventAction: 'Click_footer_2', 3014 eventLabel: "type:" + $(this).data('type') + "|position:" + $(this).data('position') + "|visible:" + visibleLinks, 3015 transport: 'beacon' 3016 }); 3017 }); 3018 } 3019 3020 function removeOverflowingFooterLinks(){ 3021 var bottomNavLinks = document.querySelectorAll('#bottom-navbar .navbar-nav li'); 3022 var width_sum = 0; 3023 3024 bottomNavLinks.forEach(e => { 3025 width_sum += e.getBoundingClientRect().width; 3026 if ((width_sum) > window.innerWidth) { 3027 console.log(`%cLink %c${e.textContent} %cdeleted couldn't fit screen`,"color: #fff;background: #202124;", "background: red;color: #fff", "color: #fff;background: #202124;"); 3028 e.remove(); 3029 } 3030 }); 3031 } 3032 3033 function getUrlTarget(url){ 3034 if(url.startsWith('tel')){ 3035 return '_self'; 3036 } 3037 if(url.startsWith('/') || url.includes('tmt.spotapps.co') || url.includes(window.location.host)){ 3038 return '_self'; 3039 } 3040 return '_blank'; 3041 } 3042 3043 function npb() 3044 { 3045 var list= document.getElementsByClassName("bottom-list-item"); 3046 if (!list) return; 3047 3048 if (document.getElementById("bottom-navbar") == null){ 3049 return; 3050 } 3051 3052 var url = "" 3053 for (var i=0; i < all_cta_links.length; i++) 3054 { 3055 if (all_cta_links[i].cta_link_type == "order"){ 3056 url = all_cta_links[i].url; 3057 } 3058 } 3059 3060 if ( url == ""){ 3061 return; 3062 } 3063 3064 for (i=0; i < list.length; i++) 3065 { 3066 console.log(cta_link_matches_href(list[i].firstChild.href, url)); 3067 if (cta_link_matches_href(list[i].firstChild.href,url)) return; 3068 3069 }; 3070 3071 var item = list[list.length-1] 3072 document.getElementById("bottom-navbar").getElementsByClassName("nav navbar-nav")[0].appendChild(item.cloneNode(true)); 3073 var width_sum = 0; 3074 for (i=0; i < list.length; i++) { 3075 width_sum += list[i].getBoundingClientRect().width; 3076 } 3077 3078 var item = list[list.length-1] 3079 if ((width_sum - 10) > window.innerWidth) { item.parentNode.removeChild(item); console.log("link deleted couldn't fit screen"); return; } 3080 3081 item.firstChild.text = "Order"; 3082 item.firstChild.href = url; 3083 item.firstChild.id = "bottom_link_" + list.length; 3084 3085 $(item.firstChild).on("click", function(){ 3086 3087 if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){ 3088 shUrlParams['source'] = 'footer'; 3089 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)); 3090 } 3091 3092 universal_ga('send', 'event', { 3093 eventCategory: 'Button', 3094 eventAction: 'Click', 3095 eventLabel: 'Plan B-2 Order', 3096 transport: 'beacon' 3097 }); 3098 }); 3099 3100 3101 } 3102 3103function activateSmartFooter(){ 3104 var smart_footer_active = true; 3105 var smart_footer_version = 2; 3106 var man_bottom_active = true; 3107 if(window.location.hash == '#smartFooterV2=enabled'){ 3108 smartFooterV2(); 3109 return; 3110 } 3111 if (smart_footer_active && !man_bottom_active){ 3112 if(smart_footer_version == 2 ){ 3113 smartFooterV2(); 3114 }else { 3115 npb(); 3116 } 3117 } 3118 } 3119 3120 activateSmartFooter(); 3121 3122 var corona_config_str = ''; 3123 var corona_config = corona_config_str != '' ? JSON.parse('') : null; 3124 3125 3126 //corona instuctions 3127 function show_corona_instructions(text, phone, btnText){ 3128 //format to US number 3129 var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/); 3130 3131 if(corona_config.shopping_cart_type == "TMT" && corona_config.shopping_cart_active == true) { 3132 var linkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true"; 3133 var btnLinkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true"; 3134 }else { 3135 var linkLocation = 'tel:+1'+phone+''; 3136 var btnLinkLocation = 'tel:+1'+ match[1] + '-' + match[2] + '-' + match[3] +'' 3137 } 3138 var appendPhone = 'tel:+1'+phone+''; 3139 //inject html content 3140 if ($('.food-menu-nav').length) { 3141 //new template 3142 var pageEl = $('.food-menu-nav').css('margin','20px auto 10px auto'); 3143 var textColor = rgb2hex($('.section-header').css('color')); 3144 var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color')); 3145 var fontSize = parseInt($('.food-menu-nav-item').css('font-size')); 3146 fontSize = fontSize + Math.round(fontSize * 0.25); 3147
3148 // var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="color:'+linkColor+';"href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="font-size:'+fontSize+'px" class="food-menu-nav-item custom-temp-btn hvr-fade active" href="tel:+1'+phone+'">'+btnText+'</a></div>'; 3149 var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="text-decoration: underline;color:'+textColor+';" href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="display: inline-block !important;font-size:'+fontSize+'px" class="food-menu-nav-item custom-temp-btn hvr-fade active" href="'+btnLinkLocation +'">'+btnText+'</a></div>'; 3150 3151 }else { 3152 //old template 3153 var pageEl = $('.tabnav'); 3154 var textColor = rgb2hex($('.menu-item-name-traditional').css('color')); 3155 var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color')); 3156 3157 var linkTextColor = getContrast50(linkColor); 3158 var fontSize = parseInt($('.menu-item-name-traditional').css('font-size')); 3159 fontSize = fontSize + Math.round(fontSize * 0.25); 3160 var textTransform = $('.style-traditional .tabnav .nav>li>a').css('text-transform'); 3161 3162 // var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';margin-bottom:20px;">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="color:'+linkColor+';"href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="margin: 20px auto; padding: 10px 50px 10px 30px; cursor: pointer; background-color: '+linkColor+'; background: '+linkColor+'; text-decoration: none; color: '+textColor+'; border: 2px solid '+linkColor+';font-size:'+fontSize+'px;text-transform: '+textTransform+'" href="tel:+1'+phone+'">'+btnText+'</a></div>'; 3163 var html = '<div id="show-corona-instructions" style="padding:20px;flex: 0 1 100%;" class="text-center"><p style="color:'+textColor+';margin-bottom:20px;">'+text+' <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="text-decoration: underline;color:'+textColor+';"href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></p><a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Corona Instructions Phone\');" style="margin: 20px auto; padding: 10px 30px 10px 30px; cursor: pointer; background-color: '+linkColor+'; background: '+linkColor+'; text-decoration: none; color: '+linkTextColor+'; border: 2px solid '+linkColor+';font-size:'+fontSize+'px;text-transform: '+textTransform+'" href="'+btnLinkLocation+'">'+btnText+'</a></div>'; 3164 3165 } 3166 //html content 3167 pageEl.prepend(html); 3168 } 3169 3170 function rgb2hex(rgb) { 3171 if(typeof rgb !== "undefined"){ 3172 rgbColor = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 3173 if (!rgbColor) { 3174 rgba = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+\.*\d+)?\)$/); 3175 return "#" + hex(rgba[1]) + hex(rgba[2]) + hex(rgba[3]); 3176 } 3177 function hex(x) { 3178 return ("0" + parseInt(x).toString(16)).slice(-2); 3179 } 3180 return "#" + hex(rgbColor[1]) + hex(rgbColor[2]) + hex(rgbColor[3]); 3181 } 3182 return rgb; 3183 } 3184 3185 function getContrast50(hexcolor){ 3186 return (parseInt(hexcolor, 16) > 0xffffff/2) ? '#000':'#fff'; 3187 } 3188 3189 function show_corona_sidebar_instructions(text, phone){ 3190 //format to US number 3191 var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/); 3192 var divWidth = 230; 3193 var top = 50; 3194 var linkSize = '1.6em'; 3195 var pSize = $('p').css('font-size'); 3196 var appendPhone = 'tel:+1'+phone+''; 3197 3198 if ($(window).width() < 1600) 3199 var top = 30; 3200 if ($(window).width() < 1200){ 3201 var divWidth = 180; 3202 var linkSize = '1.4em'; 3203 var pSize ='1.1em'; 3204 } 3205 3206 if($('.food-menu-nav').length){ //new template 3207 var textColor = $('.food-menu-nav-item.active').css('color'); 3208 var linkColor = $('.food-menu-nav-item.active').css('background-color'); 3209 3210 var linkTextColor = $('.food-menu-nav-item.active').css('color'); 3211 var parent = $('.food-menu-page'); 3212 } 3213 else { //old template 3214 var textColor = $('.menu-item-name-traditional').css('color'); 3215 var linkColor = $('.style-traditional .tabnav .nav>
3215li.active>a').css('color'); 3216 var parent = $('.food-menu').length ? $('.food-menu') : $('.drink-menu'); 3217 var linkTextColor = getContrast50(linkColor); 3218 } 3219 3220 // $(parent).append('<div id="corona-instructions-sidebar" style="display:none;position:fixed;width:'+divWidth+'px;top:'+top+'vh;right:0;background-color:'+linkColor+';padding:15px;text-align:center;color:'+textColor+';text-transform:uppercase;"><p style="margin:0 0 5px;font-size:'+pSize+';">'+text+'</p><i class="fa fa-phone" aria-hidden="true"></i> <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Food Page Side Element Phone\');" style="font-size:'+linkSize+';color:'+textColor+';" href="tel:+1'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></div>'); 3221 $(parent).append('<div id="corona-instructions-sidebar" style="display:none;position:fixed;width:'+divWidth+'px;top:'+top+'vh;right:0;background-color:'+linkColor+';padding:15px;text-align:center;color:'+linkTextColor+';text-transform:uppercase;"><p style="margin:0 0 5px;font-size:'+pSize+';">'+text+'</p><i class="fa fa-phone" aria-hidden="true"></i> <a onclick="ga(\'send\', \'event\', \'Button\', \'Click\', \'Food Page Side Element Phone\');this.href=\'' + appendPhone + '\';" style="font-size:'+linkSize+';color:'+linkTextColor+';" href="/call-us/'+phone+'">'+ match[1] + '-' + match[2] + '-' + match[3] +'</a></div>'); 3222 3223 //check if resolution is bigger than tablet resolution 3224/* if ($(window).width() > 991) { 3225 //detect scroll 3226 window.onscroll = function (e) { 3227 if ($(window).scrollTop() == 0) { 3228 $('#corona-instructions-sidebar').hide(); 3229 }else { 3230 $('#corona-instructions-sidebar').show(); 3231 } 3232 } 3233 } */ 3234 } 3235 3236 function check_corona_config(config){ 3237 console.log(config) 3238 if (config) { 3239 if (config.instructions_on_food_page && config.food_page_instruction_text && config.food_page_instruction_phone) { 3240 if (!config.promote_deliveries && config.promote_pick_up) { 3241 var btnText = 'Call For Pick Up'; 3242 } 3243 if (config.promote_deliveries && !config.promote_pick_up) { 3244 var btnText = 'Call For Delivery'; 3245 } 3246 if (config.promote_deliveries && config.promote_pick_up) { 3247 var btnText = 'Call For Pick Up Or Delivery'; 3248 } 3249 3250 if(typeof btnText !== "undefined"){ // check if pick up or delivery are true 3251 if(config.shopping_cart_type == "TMT" && config.shopping_cart_active == true) { 3252 var btnText = 'ORDER NOW'; 3253 if($('.food-menu-nav').length){ //new template 3254 var textColor = rgb2hex($('.section-header').css('color')); 3255 var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color')); 3256 var fontSize = parseInt($('.food-menu-nav-item').css('font-size')); 3257 fontSize = fontSize + Math.round(fontSize * 0.25); 3258 } 3259 else { //old template 3260 var textColor = rgb2hex($('.menu-item-name-traditional').css('color')); 3261 var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color')); 3262 3263 var linkTextColor = getContrast50(linkColor); 3264 var fontSize = parseInt($('.menu-item-name-traditional').css('font-size')); 3265 fontSize = fontSize + Math.round(fontSize * 0.25); 3266 } 3267 show_corona_instructions('For online orders, use our own <a style="text-decoration:underline;color: '+textColor+';" href="https://tmt.spotapps.co/ordering-menu/?spot_id='+config.spot_id+'&images=yes&accordion=true#"> commission free ordering platform! </a> or call:', config.food_page_instruction_phone, btnText); 3268 show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone); 3269 } else { 3270 show_corona_instructions(config.food_page_instruction_text, config.food_page_instruction_phone, btnText); 3271 show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone); 3272 } 3273 3274 } 3275 } 3276 } 3277 } 3278 3279 3280 if (is_food_menu_page() && !window.location.search.includes("contactless=true")){ 3281 $( document ).ready(function() { 3282 setTimeout(function(){ 3283 check_corona_config(corona_config); 3284 }, 300); 3285 }); 3286 } 3287 3288 3289 3290 function isPhone(phone){ 3291 var regex = /^(\+\d{1,2}\s?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/; 3292 return regex.test(phone); 3293 } 3294 3295 function sendEmail_MT (input_id) { 3296 const $loader = $("[data-id=newsletter-widget-2] .sph-loading-img"); 3297 3298 const $step = { 3299 form: $("[data-id=newsletter-widget-2] .sph-email-form"), 3300 message: $("[data-id=newsletter-widget-2] .sph-response-message"), 3301 } 3302 3303 const $field = { 3304 email: $("[data-id=newsletter-widget-2] #sph-newsletter-input-" + input_id), 3305 phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-" + input_id), 3306 consent: $("[data-id=newsletter-widget-2] #sph-newsletter-checkbox-phone-" + input_id), 3307 }; 3308 3309 const $error = { 3310 email: $("[data-id=newsletter-widget-2] #sph-newsletter-email-error-" + input_id), 3311 phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-error-" + input_id), 3312 }; 3313 3314 if ($field.email.val().trim() === "") { 3315 $error.email 3316 .html("This field is required") 3317 .show(); 3318 } 3319 else if (!isEmail($field.email.val().trim())) { 3320 $error.email 3321 .html("Please use the format â[email protected]â") 3322 .show(); 3323 } else { 3324 $error.email 3325 .html("") 3326 .hide(); 3327 } 3328 3329 if ($field.consent.is(':checked') && $field.phone.val().trim() === "") { 3330 $error.phone 3331 .html("This field is required") 3332 .show(); 3333 } else if ($field.phone.val().trim().length > 0 && !isPhone($field.phone.val().trim())) { 3334 $error.phone 3335 .html("The phone number must contain 10 digits") 3336 .show(); 3337 } else { 3338 $error.phone 3339 .html("") 3340 .hide(); 3341 } 3342 3343 const errorField = $step.form.find('.sh-form-error:visible'); 3344 3345 if (errorField.length > 0) { 3346 const input = errorField.first().next(); 3347 3348 document.activeElement.blur(); 3349 3350 setTimeout(() => { 3351 input.focus(); 3352 }, 160) 3353 3354 return; 3355 } 3356 3357 $loader 3358 .show() 3359 .prev() 3360 .hide(); 3361 3362 $.ajax({ 3363 method: "POST", 3364 url: "https://www.spothopperapp.com/api/spots/112064/contacts/add_with_texting_permission", 3365 crossDomain: true, 3366 dataType: 'json', 3367 data: { 3368 email: $field.email.val().trim(), 3369 phone: $field.phone.val().trim(), 3370 texting_permission: $field.consent.is(':checked'), 3371 }, 3372 success: function (data) { 3373 afterRequestSubmission(data); 3374 }, 3375 error: function () { 3376 afterRequestSubmission("Something went wrong. Please try again later."); 3377 } 3378 }); 3379 3380 function afterRequestSubmission (data) { 3381 $step.form.hide(); 3382 3383 $step.message 3384 .html(data) 3385 .show() 3386 .trigger('focus'); 3387 } 3388 } 3389</script>
3389<script>function addPromotionParamsToTMTLinks() 3390{ 3391 if (sessionStorage.getItem('shUrlParams')) { 3392 let shParams = JSON.parse(sessionStorage.getItem('shUrlParams')); 3393 if (!Object.keys(shParams).length) 3394 return; 3395 if(!shParams.source) 3396 return; 3397 $('a').each(function () { 3398 if (this.href.includes('tmt.spotapps.co')) { 3399 if(this.href.includes('&source=') || this.href.includes('&destination=') || this.href.includes('&promotion=')) 3400 return; 3401 3402 this.href = this.href + '&source=' + shParams.source; 3403 if(shParams.destination) 3404 this.href = this.href + '&destination=' + shParams.destination; 3405 if(shParams.promotion) 3406 this.href = this.href + '&promotion=' + shParams.promotion; 3407 if(shParams.fb_post_id) 3408 this.href = this.href + '&fb_post_id=' + shParams.fb_post_id; 3409 if(shParams.email_post_id) 3410 this.href = this.href + '&email_post_id=' + shParams.email_post_id; 3411 } 3412 }) 3413 } 3414} 3415setTimeout(function() { 3416 addPromotionParamsToTMTLinks(); 3417 addFooterToSourceParam(); 3418},600) 3419 3420function addFooterToSourceParam() 3421{ 3422 $('.bottom-link').each(function (){ 3423 if(shouldAddSourceParam(this.href)) 3424 this.href = this.href + '&source=footer'; 3425 }) 3426 $('#sh-multiple-links-content-holder a').each(function (){ 3427 if(shouldAddSourceParam(this.href)) 3428 this.href = this.href + '&source=footer'; 3429 }) 3430} 3431function shouldAddSourceParam(link){ 3432 if (link.includes('tmt.spotapps.co') && !link.includes('&source=')){ 3433 return true; 3434 } 3435 return false; 3436} 3437</script>
3437<script> 3438;(async () => { 3439if (typeof window.focusTrap === 'undefined') { 3440 await getScript('https://unpkg.com/tabbable/dist/index.umd.js'); 3441 await getScript('https://unpkg.com/focus-trap/dist/focus-trap.umd.js'); 3442} 3443 3444document.querySelectorAll('.modal').forEach((element) => { 3445 const trap = window.focusTrap?.createFocusTrap(element, { 3446 allowOutsideClick: true, 3447 }); 3448 3449 $(element).on('shown.bs.modal', () => { 3450 trap?.activate(); 3451 }); 3452 3453 $(element).on('hidden.bs.modal', () => { 3454 trap?.deactivate(); 3455 }); 3456}); 3457 3458async function getScript (source) { 3459 return new Promise((resolve, reject) => { 3460 const script = document.createElement('script'); 3461 script.src = source; 3462 script.async = true; 3463 3464 script.onload = resolve; 3465 script.onerror = reject; 3466 3467 document.head.appendChild(script); 3468 }); 3469} 3470})(); 3471</script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_bootstrap_ada_fix/wcpl_bootstrap_ada_fix.js"></script>
3471<link href="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.css" rel="stylesheet" media="screen"/>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.js"></script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_ga_tracking/wcpl_ga_tracking.js"></script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_media_controls/script.js"></script>
3471<link href="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter_helper_style.css" rel="stylesheet" media="screen"/>
3471<script>var changes_log_array = {};</script>
3471<script src="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter.js"></script>
3471<script>document.addEventListener("DOMContentLoaded", () => { 3472 setNudgeBtnStyling(); 3473 }) 3474 3475function setNudgeBtnStyling(){ 3476 const headerNudgeBtn = document.querySelector(".cta-nudge-btn[data-nudge-position=mobile-header]"); 3477 const footerNudgeBtn = document.querySelector(".cta-nudge-btn[data-nudge-position=mobile-footer]"); 3478 3479 const useWebsiteButtonStyle = true; 3480 3481 if (!headerNudgeBtn && !footerNudgeBtn) return; 3482 3483 if(useWebsiteButtonStyle) applyCustomTempBtnStyles(headerNudgeBtn, footerNudgeBtn); 3484} 3485 3486function getCustomTempBtnStyles() { 3487 let tempBtn = document.querySelector("a.custom-temp-btn"); 3488 3489 // If not present, create a temporary one 3490 let created = false; 3491 if (!tempBtn) { 3492 tempBtn = document.createElement("a"); 3493 tempBtn.className = "custom-temp-btn"; 3494 tempBtn.style.visibility = "hidden"; 3495 tempBtn.style.position = "absolute"; 3496 tempBtn.style.pointerEvents = "none"; 3497 document.body.appendChild(tempBtn); 3498 created = true; 3499 } 3500 3501 const styles = window.getComputedStyle(tempBtn); 3502 3503 // Border radius logic - only determine it once on first visit 3504 let borderRadius; 3505 const storedBorderRadius = sessionStorage.getItem("nudgeBtnBorderRadius"); 3506 3507 if (storedBorderRadius !== null) { 3508 borderRadius = storedBorderRadius; // already determined, use it 3509 } else if (document.body.classList.contains("home-page") && !created) { 3510 borderRadius = styles.borderRadius; // homepage with real button, store it 3511 sessionStorage.setItem("nudgeBtnBorderRadius", borderRadius); 3512 } else { 3513 borderRadius = "0px"; // first visit is not homepage, lock to 0 forever 3514 sessionStorage.setItem("nudgeBtnBorderRadius", borderRadius); 3515 } 3516 3517 const stylePatch = { 3518 fontFamily: styles.fontFamily, 3519 fontWeight: styles.fontWeight, 3520 borderRadius: borderRadius, 3521 textTransform: styles.textTransform 3522 }; 3523 3524 // Cleanup if we created it 3525 if (created) { 3526 document.body.removeChild(tempBtn); 3527 } 3528 3529 return stylePatch; 3530} 3531 3532function applyCustomTempBtnStyles(headerNudgeBtn, footerNudgeBtn) { 3533 const stylePatch = getCustomTempBtnStyles(); 3534 if (!stylePatch) return; 3535 3536 [headerNudgeBtn, footerNudgeBtn].filter(Boolean).forEach((btn) => { 3537 Object.assign(btn.style, stylePatch); 3538 }); 3539}</script>
3539</body></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.