1<!DOCTYPE html> 2�<html lang="en"><head><meta content="null" property="og:site_name"/><meta content="http://villadolcecafe.com/middleton-middleton-villa-dolce-catering" property="og:url"/><meta content="website" property="og:type"/><meta content="After 16 years in the restaurant business, Faton and Jerry Lumani wanted to open a modern Italian cafe like those they grew up with in Europe. Places where guests spent evenings lounging and..." property="og:description"/><meta content="Villa Dolce - Catering" property="og:title"/><!-- wcache 2026-09-25 11:57:52.060246Z --><!-- 3smart_footer: true, 4smart_footer_version: 2, 5scripting_active: false 6--><link href="https://villadolcecafe.com/middleton-middleton-villa-dolce-catering" 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="" name="description"/><meta content="" name="author"/><meta content="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/events_back.jpg" property="og:image"/><meta content="Villa Dolce image" property="og:image:alt"/><meta content="image/png" property="og:image:type"/><meta content="139026719469036" property="fb:app_id"/><meta content="summary_large_image" name="twitter:card"/><meta content="Villa Dolce - Catering" name="twitter:title"/><meta content="After 16 years in the restaurant business, Faton and Jerry Lumani wanted to open a modern Italian cafe like those they grew up with in Europe. Places where guests spent evenings lounging and..." name="twitter:description"/><meta content="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/events_back.jpg" name="twitter:image"/><title>Villa Dolce - Catering</title>
6<script>document.cookie='resolution='+Math.max(screen.width,screen.height)+("devicePixelRatio" in window ? ","+devicePixelRatio : ",1")+'; path=/';</script>
6<link href="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/favicons/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/favicons/favicon.svg" rel="icon" type="image/svg+xml"/><link href="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/favicons/favicon.ico" rel="shortcut icon"/><link href="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/favicons/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"/><meta content="Villa Dolce" name="apple-mobile-web-app-title"/><link href="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/favicons/site.webmanifest" rel="manifest"/><link href="https://static.spotapps.co/web/villadolcecafe--com/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--com/lib/custom-scrollbar/jquery.mCustomScrollbar.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--com/lib/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--com/lib/hover_css/css/hover-min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--com/lib/owlcarousel/owl.carousel.min.css" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--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/villadolcecafe--com/css/style.css?version2" id="mainCSS" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--com/css/bottom_navigation_v1.css?v1768895959" rel="stylesheet"/><link href="css/custom.css?v1768895959&domain=villadolcecafe.com" rel="stylesheet"/><link href="https://static.spotapps.co/web/villadolcecafe--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/villadolcecafe--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]--><!-- Google tag (gtag.js) -->
vendor: 71 bytes, line 6
6<script async="async" src="https://www.googletagmanager.com/gtag/js?id=
6G-ZDK1ELTWZ6
vendor: 11 bytes, line 6
6"></script>
6<script>
vendor: 127 bytes, line 6
6window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '
6G-ZDK1ELTWZ6
vendor: 7 bytes, lines 6-7
6'); 7
7gtag('set', 'linker', {'domains': ['tmt.spotapps.co','spothopperapp.com']}); 8 gtag('config', 'G-ZG3PMRMSQD'); 9 gtag('config', 'G-VG24VK2VKT'); </script>
9<style> 10 11 html { 12 height: auto; 13 min-height: 100%; 14 } 15 .tmt-page.party-background.drink-menu { 16 background-color: #ebebeb; 17 background-color: #1a1a1a; 18 } 19 .tmt-page.party-background.drink-menu { 20 background-image: url('//static.spotapps.co/spots/2b/ffea3428d242669642ebaf9839d09e/wide_medium'); 21 } 22 .tmt-page.party-background.drink-menu:before { 23 display: block; 24 -webkit-backdrop-filter: blur(5px); 25 backdrop-filter: blur(5px); 26 background-color: rgba(255,255,255,0.8); 27 background-color: rgba(0,0,0,0.8); 28 29 } 30 .tmt-page.party-background.drink-menu>div:first-child:before { 31 display: none; 32 } 33 34 </style>
34<script src="https://static.spotapps.co/websites/lib/lazysizes/lazysizes.min.js" async=""></script>
34<script> var ga4_tracking_code='G-ZG3PMRMSQD';</script>
34<script> 35function ga_check(){ 36 return true; 37} 38</script>
38<script> 39function universal_ga(action, type, category, ev_action, label){ 40 if(typeof ga === 'function') 41 { 42 if(!(action && label)) 43 ga(action, type, category) 44 else 45 ga(action, type, category, ev_action, label) 46 } 47 48 if(typeof gtag === 'function') 49 { 50 if(!(action && label)) 51 { 52 hash = category 53 ev_label = hash["eventLabel"] 54 var splits = ev_label.match(/.{1,100}/g) ?? []; 55 delete(hash["eventLabel"]) 56 57 if(splits.length <= 1) 58 hash["eventLabel"] = ev_label 59 else 60 { 61 for (let i = 0; i < splits.length; i++) { 62 var key = "eventLabel_"+i 63 hash[key] = splits[i] 64 } 65 } 66 console.log(hash) 67 gtag("event", hash["eventCategory"], hash); 68 } 69 else 70 { 71 var hash = { 72 eventCategory: category, 73 eventAction: ev_action 74 } 75 76 var splits = label.match(/.{1,100}/g) ?? []; 77 if(splits.length <= 1) 78 hash["eventLabel"] = label 79 else 80 { 81 for (let i = 0; i < splits.length; i++) { 82 var key = "eventLabel_"+i 83 hash[key] = splits[i] 84 } 85 } 86 gtag("event", hash["eventCategory"], hash); 87 } 88 } 89} 90</script>
90<script> function getPromotionUrlParams(){ 91 var params_str = sessionStorage.getItem('shUrlParams'); 92 if (params_str != null){ 93 return JSON.parse(params_str); 94 }else{ 95 return {}; 96 } 97 } 98 99 function getPromotionSourceDetails(){ 100 var params_str = localStorage.getItem('promotionSourceDetails'); 101 if (params_str != null){ 102 return JSON.parse(params_str); 103 }else{ 104 return {}; 105 } 106 } 107 108 function getLastEmailVisitInDays(){ 109 var promotionSourceDetails = getPromotionSourceDetails(); 110 if (!promotionSourceDetails['last_visit_email'] ){ 111 return null; 112 } 113 return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_email'])) / (1000 * 60 * 60 * 24)); 114 } 115 116 function getLastSocialVisitInDays(){ 117 var promotionSourceDetails = getPromotionSourceDetails(); 118 if (!promotionSourceDetails['last_visit_social'] ){ 119 return null; 120 } 121 return Math.floor((new Date() - new Date(promotionSourceDetails['last_visit_social'])) / (1000 * 60 * 60 * 24)); 122 } 123 124 var shUrlParams = getPromotionUrlParams(); 125 var promotionSourceDetails = getPromotionSourceDetails(); 126 127 new URL(document.location).searchParams.forEach(function(value, paramName){ 128 129 shUrlParams[paramName] = value; 130 131 if (paramName == 'source' && value =='social' ){ 132 promotionSourceDetails['last_visit_social'] = new Date(); 133 localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails)); 134 } 135 136 if (paramName == 'source' && value =='email' ){ 137 promotionSourceDetails['last_visit_email'] = new Date(); 138 localStorage.setItem('promotionSourceDetails', JSON.stringify(promotionSourceDetails)); 139 } 140 141 }); 142 143 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)) 144</script>
144<style>a:focus:not(:focus-visible){outline:none;box-shadow:none;} 145a.get-directions-footer-link{display:inline-block;transform-origin:left center;transition:transform .2s ease;} 146a.get-directions-footer-link:hover{transform:scale(1.08);} 147@media (prefers-reduced-motion:reduce){a.get-directions-footer-link{transition:none;transform:none;}} 148a.get-directions-footer-link,a.get-directions-footer-link:hover{color:inherit!important;}</style></head><body class="drink-menu party party-background catering catering-tmt-page tmt-page" id="tmtPage"><div><header style="background-color:#000000;"><style> 149 150.nav-v8 .nav-tab:nth-child(n+7) { 151 -webkit-box-ordinal-group: 3; 152 order: 3; 153} 154 155.navbar.nav-v6.nav-v8 .desktop-navigation .header-logo { 156 top: 0px; 157} 158 159 160.navbar.nav-v6.nav-v8.nav-scroll .desktop-navigation .header-logo { 161 top: 0px; 162} 163 164.navbar.nav-v6 .container { 165 padding-top: 10px; 166 padding-bottom: 10px; 167} 168.navbar.nav-v6.nav-scroll .container { 169 padding-top: 0px; 170 padding-bottom: 0px; 171} 172.navbar.nav-v6 .header-logo img { 173 max-width: 100%; 174} 175 176@media (max-width: 767px) { 177 /* DO NOT change mobile nav height on page scroll */ 178 .navbar.nav-v6 .navbar-header, 179 .navbar.nav-v6.nav-scroll .navbar-header { 180 padding-top: 10px; 181 padding-bottom: 10px; 182 } 183 .navbar.nav-v6.nav-v8 .socialnav, 184 .navbar.nav-v6.nav-v8.nav-scroll .socialnav { 185 margin-top: 10px; 186 } 187 .navbar.nav-v6 .container, 188 .navbar.nav-v6.nav-scroll .container { 189 padding-top: 0; 190 padding-bottom: 0; 191 } 192 .navbar.nav-v6 .header-logo, 193 .navbar.nav-v6.nav-scroll .header-logo { 194 height: 70px; 195 } 196 .navbar.nav-v6 .header-logo img { 197 max-height: 100%; 198 } 199 .navbar.nav-v6.nav-scroll .header-logo img { 200 max-width: 100%; 201 } 202 /* HOME page CHANGE mobile nav height on page scroll */ 203 /* Remove body.home-page from below code if there should be mobile nav height change on ALL pages */ 204 body.home-page .navbar.nav-v6 .navbar-header { 205 padding-top: 10px; 206 padding-bottom: 10px; 207 } 208 body.home-page .navbar.nav-v6.nav-scroll .navbar-header{ 209 padding-top: 0px; 210 padding-bottom: 0px; 211 } 212 body.home-page .navbar.nav-v6.nav-v8 .socialnav { 213 margin-top: 10px; 214 } 215 body.home-page .navbar.nav-v6.nav-v8.nav-scroll .socialnav { 216 margin-top: 0px; 217 } 218 body.home-page .navbar.nav-v6 .container{ 219 padding-top: 0; 220 padding-bottom: 0; 221 } 222 body.home-page .navbar.nav-v6.nav-scroll .container { 223 padding-top: 0; 224 padding-bottom: 0; 225 } 226 body.home-page .navbar.nav-v6 .header-logo { 227 height: 70px; 228 } 229 body.home-page .navbar.nav-v6.nav-scroll .header-logo { 230 height: 50px; 231 } 232 body.home-page .navbar.nav-v6 .header-logo img { 233 max-height: 100%; 234 max-width: 100%; 235 } 236 body.home-page .navbar.nav-v6.nav-scroll .header-logo img { 237 max-width: 80%; 238 } 239} 240 241 242.navbar-regular .navbar-collapse.collapse.in { 243 background-color: transparent; 244 width: 100%; 245} 246.navbar.nav-v6 .navbar-tabs { 247 background-color: #fff; 248 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 249 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 250 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 251} 252.navbar.nav-v6.nav-scroll .navbar-tabs { 253 background-color: #fff; 254 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 255 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 256 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 257} 258.drink-menu .navbar.nav-v6 .navbar-tabs { 259 background-color: #fff; 260 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 261 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 262 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 263} 264.drink-menu .navbar.nav-v6.nav-scroll .navbar-tabs { 265 background-color: #fff; 266 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 267 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 268 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 269} 270li.drop-down-link .sub-menu { 271 background-color: #fff; 272 color: #000; 273 } 274.nav-scroll li.drop-down-link .sub-menu { 275 background-color: #fff; 276 color: #000; 277} 278.drink-menu li.drop-down-link .sub-menu { 279 background-color: #fff; 280 color: #000; 281} 282.drink-menu .nav-scroll li.drop-down-link .sub-menu { 283 background-color: #fff; 284 color: #000; 285} 286li.drop-down-link .sub-menu a, 287li.drop-down-link div.drop-down { 288 color: #000; 289} 290.nav-scroll li.drop-down-link .sub-menu a, 291.nav-scroll li.drop-down-link div.drop-down { 292 color: #000; 293} 294.drink-menu li.drop-down-link .sub-menu a, 295.drink-menu li.drop-down-link div.drop-down { 296 color: #000; 297} 298.drink-menu .nav-scroll li.drop-down-link .sub-menu a, 299.drink-menu .nav-scroll li.drop-down-link div.drop-down { 300 color: #000; 301} 302 303.navbar-regular.nav-v6 .navbar-nav>li>a, 304.navbar-regular.nav-v6 .navbar-nav>li>a:hover, 305.navbar-regular.nav-v6 .navbar-nav>.active>a, 306.navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 307.navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 308 border: none; 309 background-color: transparent; 310 color: #B95737; 311} 312.navbar-regular.nav-v6 .navbar-nav>li>a { 313 color: #000; 314} 315.drink-menu .navbar.nav-v6 .navbar-nav>li>a { 316 color: #000; 317} 318.drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 319.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a, 320.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 321.drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover {
322 color: #B95737; 323} 324 325li.drop-down-link .sub-menu a:hover, 326li.drop-down-link .sub-menu a:focus { 327 color: #B95737; 328} 329.drink-menu li.drop-down-link .sub-menu a:hover, 330.drink-menu li.drop-down-link .sub-menu a:focus { 331 color: #B95737; 332} 333 334.drink-menu .navbar.nav-v7 .navbar-nav>li>a { 335 color: #000; 336} 337 338.navbar-regular.nav-v6 .navbar-toggle .icon-bar { 339 background-color: #000; 340} 341.drink-menu .navbar-regular.nav-v6 .navbar-toggle .icon-bar { 342 background-color: #000; 343} 344.navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar { 345 background-color: #B95737; 346} 347.drink-menu .navbar-regular.nav-v6 [aria-expanded="true"].navbar-toggle .icon-bar { 348 background-color: #B95737; 349} 350.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a, 351.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 352.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 353.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 354.navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover { 355 border: none; 356 color: #B95737; 357} 358.navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a { 359 color: #000; 360} 361.drink-menu .navbar.nav-v6.nav-scroll .navbar-nav>li>a { 362 border: none; 363 color: #000; 364} 365.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 366.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 367.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 368.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover { 369 color: #B95737; 370} 371 372.nav-scroll li.drop-down-link .sub-menu a:hover, 373.nav-scroll li.drop-down-link .sub-menu a:focus { 374 color: #B95737; 375} 376.drink-menu .nav-scroll li.drop-down-link .sub-menu a:hover, 377.drink-menu .nav-scroll li.drop-down-link .sub-menu a:focus { 378 color: #B95737; 379} 380 381.navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar { 382 background-color: #000; 383} 384.drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-toggle .icon-bar { 385 background-color: #000; 386} 387.navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar { 388 background-color: #B95737; 389} 390.drink-menu .navbar-regular.nav-v6.nav-scroll [aria-expanded="true"].navbar-toggle .icon-bar { 391 background-color: #B95737; 392} 393.navbar.nav-v6 .header-logo-text{ 394 color: #000; 395} 396.navbar.nav-v6.nav-scroll .header-logo-text{ 397 color: #000; 398} 399.navbar.nav-v6 .social-icon{ 400 color: #000; 401} 402.navbar.nav-v6.nav-scroll .social-icon{ 403 color: #000; 404} 405.navbar.nav-v6 .social-square .contact-icon:hover { 406 color: #000; 407 background-color: #B95737; 408} 409.navbar.nav-v6.nav-scroll .social-square .contact-icon:hover { 410 color: #000; 411 background-color: #B95737; 412} 413 414.drink-menu .navbar.nav-v6 .header-logo-text{ 415 color: #000; 416} 417.drink-menu .navbar.nav-v6.nav-scroll .header-logo-text{ 418 color: #000; 419} 420.drink-menu .navbar.nav-v6 .social-icon{ 421 color: #000; 422} 423.drink-menu .navbar.nav-v6.nav-scroll .social-icon{ 424 color: #000; 425} 426.drink-menu .navbar.nav-v6 .social-square .contact-icon:hover { 427 color: #000; 428 background-color: #B95737; 429} 430.drink-menu .navbar.nav-v6.nav-scroll .social-square .contact-icon:hover { 431 color: #000; 432 background-color: #B95737; 433} 434.navbar.nav-v6 .navbar-tabs { 435 border-bottom: 1px solid transparent; 436} 437.navbar.nav-v6.nav-scroll .navbar-tabs { 438 border-bottom: 1px solid transparent; 439} 440.drink-menu .navbar.nav-v6 .navbar-tabs { 441 border-bottom: 1px solid transparent; 442} 443.drink-menu .navbar.nav-v6.nav-scroll .navbar-tabs { 444 border-bottom: 1px solid transparent; 445} 446@media (max-width: 767px) { 447 .navbar.nav-v6 { 448 background-color: #fff; 449 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 450 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 451 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 452 } 453 .navbar.nav-v6.nav-scroll { 454 background-color: #fff; 455 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 456 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 457 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 458 } 459 .drink-menu .navbar.nav-v6 { 460 background-color: #fff; 461 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 462 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 463 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0); 464 } 465 .drink-menu .navbar.nav-v6.nav-scroll { 466 background-color: #fff; 467 -webkit-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 468 -moz-box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 469 box-shadow: 0px 4px 4px 0px rgba(0,0,0,0.2); 470 } 471 .navbar.nav-v6 .container, 472 .navbar.nav-v6.nav-scroll .container, 473 .drink-menu .navbar.nav-v6 .container, 474 .drink-menu .navbar.nav-v6.nav-scroll .container { 475 border-bottom: none; 476 } 477 .navbar.nav-v6 .navbar-header { 478 border-bottom: 1px solid transparent; 479 } 480 .navbar.nav-v6.nav-scroll .navbar-header { 481 border-bottom: 1px solid transparent; 482 } 483 .drink-menu .navbar.nav-v6 .navbar-header { 484 border-bottom: 1px solid transparent; 485 } 486 .drink-menu .navbar.nav-v6.nav-scroll .navbar-header { 487 border-bottom: 1spx solid transparent; 488 } 489 li.drop-down-link .sub-menu, 490 .drink-menu li.drop-down-link .sub-menu { 491 background-color: transparent; 492 } 493 .nav-scroll li.drop-down-link .sub-menu, 494 .drink-menu .nav-scroll li.drop-down-link .sub-menu { 495 background-color: transparent; 496 } 497 .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 498 .navbar-regular.nav-v6 .navbar-nav>.active>a, 499 .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 500 .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 501 background-color: #B95737; 502 color: #000; 503 } 504 .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 505 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 506 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 507 .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 508 background-color: #B95737; 509 color: #000; 510 } 511 .drink-menu .navbar-regular.nav-v6 .navbar-nav>li>a:hover, 512 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a, 513 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:focus, 514 .drink-menu .navbar-regular.nav-v6 .navbar-nav>.active>a:hover{ 515 background-color: #B95737; 516 color: #000; 517 } 518 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>li>a:hover, 519 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a, 520 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:focus, 521 .drink-menu .navbar-regular.nav-v6.nav-scroll .navbar-nav>.active>a:hover{ 522 background-color: #B95737; 523 color: #000; 524 } 525 526 .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up { 527 color: #000; 528 } 529 .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up { 530 color: #000; 531 } 532 .drink-menu .navbar-regular.nav-v6 li.drop-down-link.active .drop-down .fa.fa-angle-up { 533 color: #000; 534 } 535 .drink-menu .navbar-regular.nav-v6.nav-scroll li.drop-down-link.active .drop-down .fa.fa-angle-up { 536 color: #000; 537 } 538} 539</style><!-- nav --><nav class="navbar nav-v4 nav-v6 nav-v7 nav-v8 nav-top 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"><div class="navbar-tabs"><div class="container"><div class="navbar-content"><ul class="nav navbar-nav"><li class="logo-holder"><div class="header-logo logo-top"><img alt="Villa Dolce logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top logo-image" role="link" src="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/logo.png" tabindex="0"/></div><div class="header-logo logo-scroll"><img alt="Villa Dolce logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll logo-image" role="link" src="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/logo.png" tabindex="0"/></div></li><li class="nav-tab nav-menu-page"><a class="" href="/middleton-middleton-villa-dolce-food-menu" id="/Middleton-Middleton-Villa-Dolce-food-menu_link" target="_self"> 540 541 Menu 542 </a></li><li class="nav-tab"><a class="" href="/middleton-middleton-villa-dolce-drink-menu" id="/Middleton-Middleton-Villa-Dolce-drink-menu_link" target="_self"> 543 544 Drinks 545 </a></li><li class="nav-tab"><a class="" href="/middleton-middleton-villa-dolce-happy-hours-specials" id="/Middleton-Middleton-Villa-Dolce-happy-hours-specials_link" target="_self"> 546 547 Specials 548 </a></li><li class="nav-tab"><a class="" href="/middleton-middleton-villa-dolce-events" id="/Middleton-Middleton-Villa-Dolce-events_link" target="_self"> 549 550 Events 551 </a></li><li class="nav-tab nav-reservations-link"><a class="link-reservations-sh" href="/middleton-middleton-villa-dolce-reservations#" id="/Middleton-Middleton-Villa-Dolce-reservations#_link" target="_self"> 552 553 Reserve 554 </a></li><li class="nav-tab nav-parties-link"><a class="link-parties-sh" href="/middleton-middleton-villa-dolce-party#" id="/Middleton-Middleton-Villa-Dolce-party#_link" target="_self"> 555 556 Parties 557 </a></li><li class="nav-tab active nav-catering-link"><a class="link-catering-sh" href="/middleton-middleton-villa-dolce-catering#" id="/Middleton-Middleton-Villa-Dolce-catering#_link" target="_self"> 558 559 Catering 560 </a></li><li class="nav-tab gift-cards-nav"><a class="gift-cards-link" href="https://www.toasttab.com/villa-dolce/giftcards" id="gift-cards-link_link" target="_blank"> 561 562 Gift Cards 563 </a></li><li class="nav-tab drop-down-link"><a aria-expanded="false" class="drop-down" href="#" id="#_link1" role="button" target=""> 564 565 Order 566 <i aria-hidden="true" class="fa fa-angle-down"></i><i aria-hidden="true" class="fa fa-angle-up"></i></a><ul class="sub-menu"><li>
566<a class="sub-menu-link" href="https://slicelife.com/restaurants/wi/middleton/53562/villa-dolce/menu?utm_campaign=google-order-action-link&rwg_token=AFd1xnH8PPL7bYoR7G4wniMZWM030W-zT2f0mG5kqGG4Nj_Z3nLDh6AY5XZqv5d1iwIlx8rUfBObcYtvJhva0Yc9VS0uQs4OqQ%3D%3D" id="#_link1_option1" target="_self"> 567 Slice </a></li><li><a class="sub-menu-link" href="https://eatstreet.com/madison-wi/restaurants/villa-dolce-middleton?order-source=OWG_REDIRECT&rwg=1&rwg_token=AFd1xnEcAazYfNVx7SoM5q9EpX4IeVSJ7xxe06FTqtZuwZaidyyD5nS0FuD9rGJOKpr4f3uXl-IStnvgemanz9RYTcJbjfy8Bw%3D%3D" id="#_link1_option2" target="_blank"> 568 Eatstreet </a></li><li><a class="sub-menu-link" href="https://direct.restaurant/43699" id="#_link1_option3" target="_blank"> 569 Direct restaurant </a></li><li><a class="sub-menu-link" href="https://www.toasttab.com/local/order/villa-dolce/r-65ec5d48-6284-4b3a-9136-432f1da7d87c?diningOption=takeout&rwg_token=AFd1xnFfdsnlqGkUY_Tzry3mV87mMAVUJK_hYeK4_Ln-5d2YVqf8xNayowgmBsXjwdnHw1bVYwAgZByAF3hHJPSue4CfCOzcpA%3D%3D" id="#_link1_option4" target="_blank"> 570 Toast </a></li></ul></li><li class="nav-tab helper-tab"><a href="#" id="hidden_tab_r" target="_self"><span class="visuallyhidden">Go to top</span></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/139026719469036" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/villadolcecafe" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.google.com/search?q=Villa+Dolce+1828+Parmenter+Street&oq=Villa+Dolce+1828+Parmenter+Street&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIHCAEQIRigATIHCAIQIRigAdIBCDE1NjlqMGo3qAIAsAIA&sourceid=chrome&ie=UTF-8#lrd=0x8807aed55416ecab:0xaca58778c8b83372,1,,,," target="_blank"><i aria-hidden="true" class="social-icon fa fa-google"></i><span>Google page</span></a></li></ul></div></div></div></div><div class="mobile-navigation"><div class="container"><a class="header-logo logo-top" href="/#"><img alt="Villa Dolce logo top - Homepage" aria-label="Homepage" class="img-responsive logo-top" src="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/logo.png"/></a><a class="header-logo logo-scroll" href="/"><img alt="Villa Dolce logo scroll - Homepage" aria-label="Homepage" class="img-responsive logo-scroll" src="https://static.spotapps.co/website_images/ab_websites/267357_website_v1/logo.png"/></a><ul class="socialnav"><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.facebook.com/139026719469036" target="_blank"><i class="social-icon fa fa-facebook"></i><span>Facebook page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.instagram.com/villadolcecafe" target="_blank"><i class="social-icon fa fa-instagram"></i><span>Instagram page</span></a></li><li class="social-links social-icons-holder social-square"><a class="pull-left contact-icon" href="https://www.google.com/search?q=Villa+Dolce+1828+Parmenter+Street&oq=Villa+Dolce+1828+Parmenter+Street&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIHCAEQIRigATIHCAIQIRigAdIBCDE1NjlqMGo3qAIAsAIA&sourceid=chrome&ie=UTF-8#lrd=0x8807aed55416ecab:0xaca58778c8b83372,1,,,," target="_blank"><i aria-hidden="true" class="social-icon fa fa-google"></i><span>Google page</span></a></li></ul><div class="navbar-header"><button 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=" nav-menu-page"><a class="" href="/middleton-middleton-villa-dolce-food-menu" id="mobile_/Middleton-Middleton-Villa-Dolce-food-menu_link" target="_self"> 571 Menu 572 573 </a></li><li class=" "><a class="" href="/middleton-middleton-villa-dolce-drink-menu" id="mobile_/Middleton-Middleton-Villa-Dolce-drink-menu_link" target="_self"> 574 Drinks 575 576 </a></li><li class=" "><a class="" href="/middleton-middleton-villa-dolce-happy-hours-specials" id="mobile_/Middleton-Middleton-Villa-Dolce-happy-hours-specials_link" target="_self"> 577 Specials 578 579 </a></li><li class=" "><a class="" href="/middleton-middleton-villa-dolce-events" id="mobile_/Middleton-Middleton-Villa-Dolce-events_link" target="_self"> 580 Events 581 582 </a></li><li class=" nav-reservations-link"><a class="link-reservations-sh" href="/middleton-middleton-villa-dolce-reservations#" id="mobile_/Middleton-Middleton-Villa-Dolce-reservations#_link" target="_self"> 583 Reserve 584 585 </a></li><li class=" nav-parties-link"><a class="link-parties-sh" href="/middleton-middleton-villa-dolce-party#" id="mobile_/Middleton-Middleton-Villa-Dolce-party#_link" target="_self"> 586 Parties 587 588 </a></li><li class="active nav-catering-link"><a class="link-catering-sh" href="/middleton-middleton-villa-dolce-catering#" id="mobile_/Middleton-Middleton-Villa-Dolce-catering#_link" target="_self"> 589 Catering 590 591 </a></li><li class=" gift-cards-nav"><a class="gift-cards-link" href="https://www.toasttab.com/villa-dolce/giftcards" id="mobile_gift-cards-link_link" target="_blank"> 592 Gift Cards 593 594 </a></li><li class=" drop-down-link"><a aria-expanded="false" class="drop-down" href="#" id="mobile_#_link1" role="button" target=""> 595 Order 596 <i aria-hidden="true" class="fa fa-angle-down"></i><i aria-hidden="true" class="fa fa-angle-up"></i></a><ul class="sub-menu"><li>
596<a class="sub-menu-link" href="https://slicelife.com/restaurants/wi/middleton/53562/villa-dolce/menu?utm_campaign=google-order-action-link&rwg_token=AFd1xnH8PPL7bYoR7G4wniMZWM030W-zT2f0mG5kqGG4Nj_Z3nLDh6AY5XZqv5d1iwIlx8rUfBObcYtvJhva0Yc9VS0uQs4OqQ%3D%3D" id="mobile_#_link1_option1" target="_self"> 597 Slice </a></li><li><a class="sub-menu-link" href="https://eatstreet.com/madison-wi/restaurants/villa-dolce-middleton?order-source=OWG_REDIRECT&rwg=1&rwg_token=AFd1xnEcAazYfNVx7SoM5q9EpX4IeVSJ7xxe06FTqtZuwZaidyyD5nS0FuD9rGJOKpr4f3uXl-IStnvgemanz9RYTcJbjfy8Bw%3D%3D" id="mobile_#_link1_option2" target="_blank"> 598 Eatstreet </a></li><li><a class="sub-menu-link" href="https://direct.restaurant/43699" id="mobile_#_link1_option3" target="_blank"> 599 Direct restaurant </a></li><li><a class="sub-menu-link" href="https://www.toasttab.com/local/order/villa-dolce/r-65ec5d48-6284-4b3a-9136-432f1da7d87c?diningOption=takeout&rwg_token=AFd1xnFfdsnlqGkUY_Tzry3mV87mMAVUJK_hYeK4_Ln-5d2YVqf8xNayowgmBsXjwdnHw1bVYwAgZByAF3hHJPSue4CfCOzcpA%3D%3D" id="mobile_#_link1_option4" target="_blank"> 600 Toast </a></li></ul></li></ul></div></div></div></nav></header><main id="content" role="main"><article><div class="pagecontent"><div class="tabs-container"><div class="scrolling"><h1 style="display: none;">Catering</h1><div class="tmt-iframe-holder"><div class="custom-loader loader-1" id="loader"></div><iframe allowfullscreen="allowfullscreen" class="tmt-iframe hide-iframe" frameborder="0" height="100%" id="pageIframe" onload="iframeTMTpageInit()" scrolling="no" src="//tmt.spotapps.co/catering?spot_id=267357&source=pop_up&destination=catering&promotion=catering" title="Catering" width="100%"></iframe></div></div></div></div></article></main></div><style type="text/css"> 601 .navbar-fixed-bottom.nav-v1 { 602 bottom: -100px; 603 } 604 .navbar-fixed-bottom.nav-v1 .nav.navbar-nav.navbar-right { 605 background-color: #fff; 606 } 607 .navbar-fixed-bottom.nav-v1 .bottom-svg-border path, 608 .navbar-fixed-bottom.nav-v1 .bottom-svg-border polygon { 609 fill: #000; 610 } 611 .navbar-fixed-bottom.nav-v1 .bottom-list-item a { 612 color: #000; 613 } 614 .navbar-fixed-bottom.nav-v1 .bottom-list-item a:hover, 615 .navbar-fixed-bottom.nav-v1 .bottom-list-item a:focus { 616 color: #B95737; 617 } 618</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="bottom-list-item "><a class="bottom-link " href="https://slicelife.com/restaurants/wi/middleton/53562/villa-dolce/menu?utm_campaign=google-order-action-link&rwg_token=AFd1xnH8PPL7bYoR7G4wniMZWM030W-zT2f0mG5kqGG4Nj_Z3nLDh6AY5XZqv5d1iwIlx8rUfBObcYtvJhva0Yc9VS0uQs4OqQ%3D%3D" id="bottom_link_4" target="_self"> 619 Order </a></li><li class="bottom-list-item "><a class="bottom-link " href="/middleton-middleton-villa-dolce-reservations" id="bottom_link_3" target="_self"> 620 Reserve </a></li><li class="bottom-list-item "><a class="bottom-link " href="/middleton-middleton-villa-dolce-party" id="bottom_link_5" target="_self"> 621 Parties </a></li><li class="bottom-list-item "><a class="bottom-link " href="/middleton-middleton-villa-dolce-catering" id="bottom_link_6" target="_self"> 622 Catering </a></li></ul></div></nav>
622<script src="https://static.spotapps.co/web/villadolcecafe--com/lib/jquery/jquery.min.js"></script>
622<script src="https://static.spotapps.co/web/villadolcecafe--com/lib/bootstrap/js/bootstrap.min.js"></script>
622<script src="https://static.spotapps.co/web/villadolcecafe--com/js/tmt_script.js"></script>
622<script> 623 624 $("#bottom_link_4").on("click", function(){ 625 if (ga_check()) 626 universal_ga('send', 'event', 'Button', 'Click', 'Order Online'); 627 }); 628 $("#bottom_link_3").on("click", function(){ 629 if (ga_check()) 630 universal_ga('send', 'event', 'Button', 'Click', 'Reserve'); 631 }); 632 $("#bottom_link_5").on("click", function(){ 633 if (ga_check()) 634 universal_ga('send', 'event', 'Button', 'Click', 'Private Party'); 635 }); 636 $("#bottom_link_6").on("click", function(){ 637 if (ga_check()) 638 universal_ga('send', 'event', 'Button', 'Click', 'Catering'); 639 }); 640 $('.header-logo, .nav-v2-home-btn').click(function(event) { 641 if ( window.location.pathname == '/' || window.location.pathname == '/index.php') { 642 event.preventDefault(); 643 var windowScrollTop = $(window).scrollTop(); 644 if(windowScrollTop > 150) { 645 $('html, body').animate({scrollTop: 0}, 750); 646 } 647 } 648 }); 649 650$(".banner-section a.banner-pin").click(function(e) { 651 // target element id 652 var id = $(this).attr('href'); 653 654 // target element 655 var section = $(id); 656 if (section.length === 0) { 657 return; 658 } 659 660 // prevent standard hash navigation (avoid blinking in IE) 661 e.preventDefault(); 662 663 // top position relative to the document 664 var pos = section.offset().top - 100 + 10; 665 666 // animated top scrolling 667 $('body, html').animate({scrollTop: pos}, 750); 668}); 669 670$(document).ready(function() { 671 var navHeight = $('nav.navbar').height(); 672 $('html').css("scroll-padding-top", navHeight); 673}); 674 675var called_v8_scroll = false; 676 677$(document).on('scroll', function (e) { 678 if($(document).scrollTop() > 0) { 679 $('.navbar.nav-v7').addClass('nav-scroll'); 680 $('.navbar.nav-v7').removeClass('nav-top'); 681 if (2 !=2 && 2 == 2) { 682 if(!called_v8_scroll) { 683 setTimeout(function(){ 684 setHelperTabWidth(); 685 called_v8_scroll = true; 686 }, 300); 687 } 688 } 689 }else { 690 $('.navbar.nav-v7').removeClass('nav-scroll'); 691 $('.navbar.nav-v7').addClass('nav-top'); 692 if (2 != 2 && 2 == 2) { 693 $('#hidden_tab_r').width(0); 694 $('#hidden_tab_l').width(0); 695 $('.navbar-nav li.nav-tab').first().css('margin-left', '0px'); 696 $('.navbar-nav li.nav-tab').last().css('margin-right', '0px'); 697 called_v8_scroll = false; 698 } 699 } 700}); 701 702$(function() { 703 setDropDownMenuWidth(); 704 705 function setDropDownMenuWidth() { 706 var tabs_list = $('.navbar-tabs .navbar-nav'); 707 708 $(tabs_list).find('li.drop-down-link').each(function() { 709 var sub_menu_width = $(this).outerWidth(true); 710 if (sub_menu_width < 100) { 711 sub_menu_width = 100; 712 } 713 $(this).find('.sub-menu').css('width', sub_menu_width+'px'); 714 }); 715 } 716 717 $( window ).resize(function() { 718 setDropDownMenuWidth(); 719 }); 720 $( window ).load(function() { 721 setDropDownMenuWidth(); 722 }); 723 724}); 725 726 727 728$( '.drop-down-link .drop-down' ).click(function(event) { 729 event.preventDefault(); 730 event.stopPropagation(); 731 732 var drop_down = $(this).closest('.drop-down-link'); 733 var drop_down_a = $(this); 734 735 if($(drop_down_a).attr("aria-expanded") == "true") { 736 $(drop_down_a).attr("aria-expanded",false) 737 } else { 738 $(drop_down_a).attr("aria-expanded",true) 739 } 740 741 742 var sub_menu = $(this).closest('.drop-down-link').find( '.sub-menu' ); 743 744 if ( $(sub_menu).is( ':hidden' ) ) { 745 $(sub_menu).slideDown(); 746 $(drop_down).addClass('active'); 747 } else { 748 $(sub_menu).slideUp(); 749 $(drop_down).removeClass('active'); 750 } 751}); 752 753//// Set width for corresponding helper tab or margin for first or last nav tab depending on calculeted width sum of left and right tabs 754function setHelperTabWidth() { 755 var nav_tab_width; 756 var tabs_left_width = 0; 757 var tabs_right_width = 0; 758 759 var full_nav_tab_width; 760 var full_tabs_left_width = 0; 761 var full_tabs_right_width = 0; 762 763 $('li.nav-tab').each(function( index, element ) { 764 765 nav_tab_width = $(element).find('a').width(); 766 full_nav_tab_width = $(element).outerWidth(true); 767 768 if (!($(element).hasClass('helper-tab'))) { 769 if (index<5) { 770 tabs_left_width += nav_tab_width; 771 full_tabs_left_width += full_nav_tab_width; 772 } else { 773 tabs_right_width += nav_tab_width; 774 full_tabs_right_width += full_nav_tab_width; 775 } 776 } else { 777 if(index == 0) { 778 full_tabs_left_width += full_nav_tab_width; 779 } else { 780 full_tabs_right_width += full_nav_tab_width; 781 } 782 } 783 784 }); 785 786 var tabs_width_differance = tabs_left_width - tabs_right_width; 787 var helper_value = Math.abs(tabs_width_differance); 788 var full_tabs_width_differance = full_tabs_left_width - full_tabs_right_width; 789 790 // if sum of left tabs width is smaller than rigth tabs width tabs_width_differance is negative set margin left for first tab 791 if (full_tabs_width_differance != 0) { 792 if (tabs_width_differance < 0) { 793 $('.navbar-nav li.nav-tab').first().css('margin-left', helper_value+'px'); 794 } else { 795 $('.navbar-nav li.nav-tab').last().css('margin-right', helper_value+'px'); 796 } 797 } 798 799} 800 801$(function() { 802 setNavTabsWidth(); 803 804 function setNavTabsWidth() { 805 var container_width = $('.navbar-tabs .container').outerWidth(); 806 var social_icons_width = $('.navbar-tabs .socialnav').outerWidth(true); 807 var reduced_tabs_width = container_width - (2 * social_icons_width) -10; 808 809 $('.navbar-tabs .navbar-content').width(reduced_tabs_width); 810 811 // helper value set in case logo is centered and tabs width sum on the left and on the right are not the same 812 if (2 == 2) { 813 setTimeout(function(){ 814 setHelperTabWidth(); 815 $('.navbar.nav-v8 .desktop-navigation .navbar-nav').css('opacity', '1'); 816 }, 300); 817 818 } 819 } 820 821 $( window ).resize(function() { 822 setNavTabsWidth(); 823 }); 824 825 $('.nav a:not(.drop-down)').on('click', function () { 826 $('.navbar-collapse').collapse('hide'); 827 }); 828 829}); 830 831$('.logo-holder .logo-image').click(function(event) { 832 if ( window.location.pathname == '/' || window.location.pathname == '/index.php') { 833 var windowScrollToTop = $(window).scrollTop(); 834 if(windowScrollToTop > 150) { 835 $('html, body').animate({scrollTop: 0}, 750); 836 } 837 } else { 838 window.location = "/"; 839 } 840}); 841 setTimeout(function(){ 842 $('.navbar-fixed-bottom.nav-v1').addClass('show-bottom-nav'); triggerShowFooterEvents(); 843 }, 4000); 844</script>
844<script> 845(function() { 846 var name = "Villa Dolce"; 847 var pid = "ChIJq-wWVNWuB4gRcjO4yHiHpaw"; 848 function build_url() { 849 var q = encodeURIComponent(name).replace(/'/g, "%27"); 850 return "https://www.google.com/maps/search/?api=1" 851 + "&query=" + q 852 + "&query_place_id=" + encodeURIComponent(pid); 853 } 854 window.google_map_url = build_url(); 855 window.open_google_map = function() { 856 window.open(build_url(), "_blank"); 857 }; 858})(); 859</script>
859<script> 860 861 var spot_id = 267357; 862 var sh_generic_form_params=JSON.parse('{"generic_contact_form_active":true,"texting_permissions_active":true,"title":"Contact us","instructions":"Please fill out the form and we will be in touch.","reasons":["To host a special event","To get a special event catered","To reserve a table","To apply for a job","Other Questions"],"custom_hours":"","hours":"","active_tmt_cta_links":{"cta_private_party":"https://villadolcecafe.com/-party","cta_catering":"https://villadolcecafe.com/-catering","cta_reservations":"https://villadolcecafe.com/-reservations","cta_jobs":null},"spot_name":"Villa Dolce","label_for_texting_permission":"Iâd like to get texts about specials, events, and other exclusive offers and announcements not available to general public"}'); 863 864 if (false){ 865 console.log("Check SpotHopper configuration. Probably there is no 'WEBSITE::DOMAIN_NAME' key for your website"); 866 } 867 868 if (navigator.userAgent.match(/iPhone/i) 869 || navigator.userAgent.match(/iPad/i) 870 || navigator.userAgent.match(/iPod/i)){ 871 $(document).ready(function(){ 872 document.body.className += " " + "webkit-mobile-body"; 873 }); 874 } 875 876 var promotion_url_param_domain = getPromotionUrlParams()['domain']; 877 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')){ 878 $("a[href^='/']").each(function(){ 879 if (this.href.indexOf('domain=') == -1){ 880 var sh_internal_url = new URL(this.href); 881 sh_internal_url.searchParams.set("domain", promotion_url_param_domain); 882 this.href = sh_internal_url.toString(); 883 } 884 }) 885 } 886 887 888 function cta_link_matches_href(href, url){ 889 var domain = 'villadolcecafe.com'; 890 if(typeof url === 'undefined'){ 891 return false; 892 } 893 var partsOfURL = url.split(domain); 894 if (partsOfURL.length != 2){ 895 return href == url; 896 }else{ 897 var urlPath = partsOfURL[1]; 898 if (urlPath.substring(0,1) == "/"){ 899 urlPath = urlPath.substring(1,urlPath.length); 900 } 901 return href.indexOf(urlPath, domain.length + href.indexOf(domain)-1) !== -1; 902 } 903 } 904 905 var all_cta_links = [{"id":1661683,"spot_id":267357,"url":"https://villadolcecafe.com/-reservations","cta_link_type":"reservations","created_at":"2025-11-13T17:34:14+00:00","updated_at":null,"made_of_food":false,"link_name":"Reservations","target":null,"website_footer_label":"Reserve","position":1},{"id":1343201,"spot_id":267357,"url":"https://villadolcecafe.com/-specials","cta_link_type":"specials","created_at":"2025-03-26T10:08:00+00:00","updated_at":"2025-04-08T09:26:58+00:00","made_of_food":false,"link_name":"","position":null},{"id":1120910,"spot_id":267357,"url":"https://villadolcecafe.com/-party","cta_link_type":"private_parties","created_at":"2024-10-25T21:21:44+00:00","updated_at":"2025-04-08T09:26:58+00:00","made_of_food":false,"link_name":"Private Parties","target":null,"website_footer_label":"Parties","position":3},{"id":1343202,"spot_id":267357,"url":"https://villadolcecafe.com/-events","cta_link_type":"events","created_at":"2025-03-26T10:08:00+00:00","updated_at":"2025-04-08T09:26:58+00:00","made_of_food":false,"link_name":"","position":null},{"id":1343203,"spot_id":267357,"url":"https://villadolcecafe.com/-drink-menu","cta_link_type":"drink_menu","created_at":"2025-03-26T10:08:00+00:00","updated_at":"2025-04-08T09:26:58+00:00","made_of_food":false,"link_name":"","position":null},{"id":1343204,"spot_id":267357,"url":"https://villadolcecafe.com/-food-menu","cta_link_type":"food_menu","created_at":"2025-03-26T10:08:01+00:00","updated_at":"2025-04-08T09:26:58+00:00","made_of_food":false,"link_name":"","position":null},{"id":1120909,"spot_id":267357,"url":"https://villadolcecafe.com/-catering","cta_link_type":"catering","created_at":"2024-10-25T21:21:44+00:00","updated_at":"2025-04-08T09:26:58+00:00","made_of_food":false,"link_name":"Catering","target":null,"website_footer_label":"Catering","position":4},{"id":1362107,"spot_id":267357,"url":"https://www.toasttab.com/villa-dolce/giftcards","cta_link_type":"gift_cards","created_at":"2025-04-08T09:26:58+00:00","updated_at":null,"made_of_food":false,"link_name":"","target":null,"website_footer_label":"Gift Cards","position":5},{"id":1758833,"spot_id":267357,"url":"https://slicelife.com/restaurants/wi/middleton/53562/villa-dolce/menu?utm_campaign=google-order-action-link&rwg_token=AFd1xnH8PPL7bYoR7G4wniMZWM030W-zT2f0mG5kqGG4Nj_Z3nLDh6AY5XZqv5d1iwIlx8rUfBObcYtvJhva0Yc9VS0uQs4OqQ%3D%3D","cta_link_type":"order","created_at":"2026-01-20T07:29:07+00:00","updated_at":null,"made_of_food":false,"link_name":"Slice","target":null,"website_footer_label":"Order","position":0},{"id":1758835,"spot_id":267357,"url":"https://direct.restaurant/43699","cta_link_type":"order3","created_at":"2026-01-20T07:29:07+00:00","updated_at":null,"made_of_food":false,"link_name":"Direct restaurant","target":null,"website_footer_label":"Order","position":null},{"id":1758834,"spot_id":267357,"url":"https://eatstreet.com/madison-wi/restaurants/villa-dolce-middleton?order-source=OWG_REDIRECT&rwg=1&rwg_token=AFd1xnEcAazYfNVx7SoM5q9EpX4IeVSJ7xxe06FTqtZuwZaidyyD5nS0FuD9rGJOKpr4f3uXl-IStnvgemanz9RYTcJbjfy8Bw%3D%3D","cta_link_type":"order2","created_at":"2026-01-20T07:29:07+00:00","updated_at":null,"made_of_food":false,"link_name":"Eatstreet","target":null,"website_footer_label":"Order","position":null},{"id":1758836,"spot_id":267357,"url":"https://www.toasttab.com/local/order/villa-dolce/r-65ec5d48-6284-4b3a-9136-432f1da7d87c?diningOption=takeout&rwg_token=AFd1xnFfdsnlqGkUY_Tzry3mV87mMAVUJK_hYeK4_Ln-5d2YVqf8xNayowgmBsXjwdnHw1bVYwAgZByAF3hHJPSue4CfCOzcpA%3D%3D","cta_link_type":"order4","created_at":"2026-01-20T07:29:08+00:00","updated_at":null,"made_of_food":false,"link_name":"Toast","target":null,"website_footer_label":"Order","position":null}]; 906 907 function find_cta_link(href) { 908 for (var i=0; i< all_cta_links.length; i++){ 909 var cta_link = all_cta_links[i]; 910 if ( cta_link_matches_href(href, cta_link.url)){ 911 return cta_link; 912 } 913 } 914 } 915 916 function find_cta_links(href) { 917 var cta_links = [] 918 for (var i=0; i< all_cta_links.length; i++){ 919 var cta_link = all_cta_links[i]; 920 if ( cta_link_matches_href(href, cta_link.url)){ 921 cta_links.push(cta_link); 922 } 923 } 924 return cta_links; 925 } 926 927 928 function get_current_page_cta_link_types(){ 929 var types = []; 930 var cta_links = find_cta_links(document.location.href); 931 for (var i=0; i<cta_links.length; i++){ 932 types.push(cta_links[i].cta_link_type); 933 } 934 return types; 935 } 936 937 938 function is_food_menu_page(){ 939 var cta_link_types = get_current_page_cta_link_types(); 940 for (var i=0; i<cta_link_types.length; i++){ 941 if ('food_menu' == cta_link_types[i]) 942 return true; 943 } 944 return false;
945 } 946 947 948 function get_form_cat_from_cta(){ 949 var cta_link = find_cta_link(document.location.href); 950 if (cta_link == null) { 951 return null; 952 } 953 if (cta_link.cta_link_type == 'private_parties'){ 954 return 'private_party'; 955 }else if (cta_link.cta_link_type == 'reservations'){ 956 return 'reservation'; 957 }else if (cta_link.cta_link_type == 'catering'){ 958 return 'catering'; 959 }else if (cta_link.cta_link_type == 'job_listing'){ 960 return 'job_listings'; 961 }else if (cta_link.cta_link_type == 'gift_cards'){ 962 return 'gift_cards'; 963 } 964 return null; 965 } 966 967 function element_has_events_defined(elem){ 968 if ($._data(elem, "events") === undefined){ 969 return false; 970 } 971 return true; 972 } 973 974 function create_ga_events_for_cta_clicks(){ 975 if (typeof $ === 'function'){ 976 977 var cta_link_of_the_page = find_cta_link(location.href); 978 979 980 $("a").each(function(index, elem){ 981 var href = $(elem).attr('href'); 982 983 if (href === undefined ){ 984 return; 985 } 986 987 if (href.substring(0,4) == 'tel:'){ 988 if (!element_has_events_defined(elem)){ // not footer links 989 $(elem).on("click", function(){ 990 universal_ga('send', 'event', { 991 eventCategory: 'Button', 992 eventAction: 'Click', 993 eventLabel: 'Phone', 994 transport: 'beacon' 995 }); 996 }); 997 998 if (cta_link_of_the_page){ 999 $(elem).on("click", function(){ 1000 universal_ga('send', 'event', { 1001 eventCategory: 'Button', 1002 eventAction: 'Click', 1003 eventLabel: cta_link_of_the_page.cta_link_type + ' page phone', 1004 transport: 'beacon' 1005 }); 1006 }); 1007 } 1008 } else { 1009 if (cta_link_of_the_page){ 1010 $(elem).on("click", function(){ 1011 universal_ga('send', 'event', { 1012 eventCategory: 'Button', 1013 eventAction: 'Click', 1014 eventLabel: cta_link_of_the_page.cta_link_type + ' page phone footer', 1015 transport: 'beacon' 1016 }); 1017 }); 1018 } 1019 } 1020 1021 1022 }else{ 1023 var cta_link = find_cta_link(href); 1024 if (elem.className != null && elem.className.indexOf("bottom-link") > -1){ 1025 // console.log("bottom link detected"); 1026 }else{ 1027 if (cta_link != null){ 1028 $(elem).on("click", function(){ 1029 universal_ga('send', 'event', { 1030 eventCategory: 'Website Link', 1031 eventAction: 'Click', 1032 eventLabel: cta_link.cta_link_type, 1033 transport: 'beacon' 1034 }); 1035 }); 1036 } 1037 } 1038 } 1039 1040 1041 }); 1042 } 1043 } 1044 1045 if (typeof angular === "undefined") { 1046 create_ga_events_for_cta_clicks(); 1047 } else { 1048 angular.element(document).ready(function () { 1049 create_ga_events_for_cta_clicks(); 1050 }); 1051 } 1052 1053 1054 function triggerShowFooterEvents(){ 1055 if (window.screen.availWidth < 768){ 1056 universal_ga('send', 'event', { 1057 eventCategory: 'Mobile Footer', 1058 eventAction: 'View', 1059 eventLabel: '', 1060 transport: 'beacon' 1061 }); 1062 } 1063 } 1064 1065 1066 1067 1068 //////////// 1069 function smartFooterV2() 1070 { 1071 var list= document.getElementsByClassName("bottom-list-item"); 1072 if (!list) return; 1073 1074 if (document.getElementById("bottom-navbar") == null){ 1075 return; 1076 } 1077 1078 var bottomNav = document.querySelector('#bottom-navbar .navbar-nav'); 1079 var footerLinkPaddingLeft = $('#bottom-navbar .navbar-nav li a').css('padding-left'); 1080 var footerLinkPaddingRight = $('#bottom-navbar .navbar-nav li a').css('padding-right'); 1081 1082 bottomNav.innerHTML = ''; 1083 var linksWithPosition = all_cta_links.filter(e => e.position != null && e.position >= 0); 1084 linksWithPosition.sort(function(a,b) { 1085 return a.position - b.position; 1086 }); 1087 1088 var footerLinkStyle = (footerLinkPaddingLeft == '0px' || footerLinkPaddingRight == '0px' ? 'style="padding-left: 8px; padding-right: 8px;"' : ''); 1089 1090 linksWithPosition.forEach((e, i) => { 1091 var target = e.target || getUrlTarget(e.url); 1092 bottomNav.insertAdjacentHTML('beforeend', 1093 `<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>`); 1094 }) 1095 1096 var intervalCount = 0 1097 var interval = setInterval(() => { 1098 if(intervalCount == 50){ 1099 clearInterval(interval); 1100 } 1101 removeOverflowingFooterLinks(); 1102 intervalCount ++; 1103 }, 200); 1104 1105 $('.smart-footer-link').on("click", function(){ 1106 if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){ 1107 shUrlParams['source'] = 'footer'; 1108 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)); 1109 } 1110 1111 var visibleLinks = $('.smart-footer-link').map(function (e) { 1112 return $(this).data('type'); 1113 }).toArray().join(','); 1114 1115 universal_ga('send', 'event', { 1116 eventCategory: 'Button', 1117 eventAction: 'Click_footer_2', 1118 eventLabel: "type:" + $(this).data('type') + "|position:" + $(this).data('position') + "|visible:" + visibleLinks, 1119 transport: 'beacon' 1120 }); 1121 }); 1122 } 1123 1124 function removeOverflowingFooterLinks(){ 1125 var bottomNavLinks = document.querySelectorAll('#bottom-navbar .navbar-nav li'); 1126 var width_sum = 0; 1127 1128 bottomNavLinks.forEach(e => { 1129 width_sum += e.getBoundingClientRect().width; 1130 if ((width_sum) > window.innerWidth) { 1131 console.log(`%cLink %c${e.textContent} %cdeleted couldn't fit screen`,"color: #fff;background: #202124;", "background: red;color: #fff", "color: #fff;background: #202124;"); 1132 e.remove(); 1133 } 1134 }); 1135 } 1136 1137 function getUrlTarget(url){ 1138 if(url.startsWith('tel')){ 1139 return '_self'; 1140 } 1141 if(url.startsWith('/') || url.includes('tmt.spotapps.co') || url.includes(window.location.host)){ 1142 return '_self'; 1143 } 1144 return '_blank'; 1145 } 1146 1147 function npb() 1148 { 1149 var list= document.getElementsByClassName("bottom-list-item"); 1150 if (!list) return; 1151 1152 if (document.getElementById("bottom-navbar") == null){ 1153 return; 1154 } 1155 1156 var url = "" 1157 for (var i=0; i < all_cta_links.length; i++) 1158 { 1159 if (all_cta_links[i].cta_link_type == "order"){ 1160 url = all_cta_links[i].url; 1161 } 1162 } 1163 1164 if ( url == ""){ 1165 return; 1166 } 1167 1168 for (i=0; i < list.length; i++) 1169 { 1170 console.log(cta_link_matches_href(list[i].firstChild.href, url)); 1171 if (cta_link_matches_href(list[i].firstChild.href,url)) return; 1172 1173 }; 1174 1175 var item = list[list.length-1] 1176 document.getElementById("bottom-navbar").getElementsByClassName("nav navbar-nav")[0].appendChild(item.cloneNode(true)); 1177 var width_sum = 0; 1178 for (i=0; i < list.length; i++) { 1179 width_sum += list[i].getBoundingClientRect().width; 1180 } 1181 1182 var item = list[list.length-1] 1183 if ((width_sum - 10) > window.innerWidth) { item.parentNode.removeChild(item); console.log("link deleted couldn't fit screen"); return; } 1184 1185 item.firstChild.text = "Order"; 1186 item.firstChild.href = url; 1187 item.firstChild.id = "bottom_link_" + list.length; 1188 1189 $(item.firstChild).on("click", function(){ 1190 1191 if (typeof shUrlParams !== "undefined" && shUrlParams['source'] === undefined){ 1192 shUrlParams['source'] = 'footer'; 1193 sessionStorage.setItem('shUrlParams', JSON.stringify(shUrlParams)); 1194 } 1195 1196 universal_ga('send', 'event', { 1197 eventCategory: 'Button', 1198 eventAction: 'Click', 1199 eventLabel: 'Plan B-2 Order', 1200 transport: 'beacon' 1201 }); 1202 }); 1203 1204 1205 } 1206 1207function activateSmartFooter(){ 1208 var smart_footer_active = true; 1209 var smart_footer_version = 2; 1210 var man_bottom_active = false;
1211 if(window.location.hash == '#smartFooterV2=enabled'){ 1212 smartFooterV2(); 1213 return; 1214 } 1215 if (smart_footer_active && !man_bottom_active){ 1216 if(smart_footer_version == 2 ){ 1217 smartFooterV2(); 1218 }else { 1219 npb(); 1220 } 1221 } 1222 } 1223 1224 activateSmartFooter(); 1225 1226 var corona_config_str = '{"id":319803,"spot_id":267357,"promote_pick_up":true,"promote_gift_cards":true,"promote_happy_hour":true,"promote_events":true,"instructions_on_food_page":false,"food_page_instruction_text":null,"food_page_instruction_phone":"6088330033","created_at":"2024-10-25T21:19:35+00:00","updated_at":"2024-10-30T17:47:41+00:00","food_page_button_color":null,"food_page_button_text_color":null,"food_page_link_color":null,"food_page_text_color":null,"wine_and_beer_to_go_license":false,"all_alcoholic_to_go_lincense":false,"current_operating_status":"Offering To Go and Dine-in with Full Capacity","contact_tracing_active":false,"contact_tracing_text":"In cooperation with health guidelines for contact tracing, please fill out the form below.","contact_tracing_address_required":false,"collapse_all":false,"deliveries_priority_value":3,"pick_ups_priority_value":3,"reservations_priority_value":3,"private_parties_priority_value":3,"catering_priority_value":5,"gift_cards_priority_value":3,"jobs_priority_value":0,"food_and_drinks_priority_value":3,"specials_priority_value":3,"national_days_priority_value":3,"holidays_priority_value":3,"sports_priority_value":3,"walk_ins_priority_value":3,"collecting_emails_priority_value":3,"collecting_phone_numbers_priority_value":3,"growing_social_media_followers_priority_value":3,"increasing_revenue_vs_saving_time_priority_value":3,"events_priority_value":3,"shopping_cart_type":"TMT","shopping_cart_active":false}'; 1227 var corona_config = corona_config_str != '' ? JSON.parse('{"id":319803,"spot_id":267357,"promote_pick_up":true,"promote_gift_cards":true,"promote_happy_hour":true,"promote_events":true,"instructions_on_food_page":false,"food_page_instruction_text":null,"food_page_instruction_phone":"6088330033","created_at":"2024-10-25T21:19:35+00:00","updated_at":"2024-10-30T17:47:41+00:00","food_page_button_color":null,"food_page_button_text_color":null,"food_page_link_color":null,"food_page_text_color":null,"wine_and_beer_to_go_license":false,"all_alcoholic_to_go_lincense":false,"current_operating_status":"Offering To Go and Dine-in with Full Capacity","contact_tracing_active":false,"contact_tracing_text":"In cooperation with health guidelines for contact tracing, please fill out the form below.","contact_tracing_address_required":false,"collapse_all":false,"deliveries_priority_value":3,"pick_ups_priority_value":3,"reservations_priority_value":3,"private_parties_priority_value":3,"catering_priority_value":5,"gift_cards_priority_value":3,"jobs_priority_value":0,"food_and_drinks_priority_value":3,"specials_priority_value":3,"national_days_priority_value":3,"holidays_priority_value":3,"sports_priority_value":3,"walk_ins_priority_value":3,"collecting_emails_priority_value":3,"collecting_phone_numbers_priority_value":3,"growing_social_media_followers_priority_value":3,"increasing_revenue_vs_saving_time_priority_value":3,"events_priority_value":3,"shopping_cart_type":"TMT","shopping_cart_active":false}') : null; 1228 1229 1230 //corona instuctions 1231 function show_corona_instructions(text, phone, btnText){ 1232 //format to US number 1233 var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/); 1234 1235 if(corona_config.shopping_cart_type == "TMT" && corona_config.shopping_cart_active == true) { 1236 var linkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true"; 1237 var btnLinkLocation = "https://tmt.spotapps.co/ordering-menu/?spot_id="+corona_config.spot_id+"&images=yes&accordion=true"; 1238 }else { 1239 var linkLocation = 'tel:+1'+phone+''; 1240 var btnLinkLocation = 'tel:+1'+ match[1] + '-' + match[2] + '-' + match[3] +'' 1241 } 1242 var appendPhone = 'tel:+1'+phone+''; 1243 //inject html content 1244 if ($('.food-menu-nav').length) { 1245 //new template 1246 var pageEl = $('.food-menu-nav').css('margin','20px auto 10px auto'); 1247 var textColor = rgb2hex($('.section-header').css('color')); 1248 var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color')); 1249 var fontSize = parseInt($('.food-menu-nav-item').css('font-size')); 1250 fontSize = fontSize + Math.round(fontSize * 0.25); 1251
1252 // 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>'; 1253 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>'; 1254 1255 }else { 1256 //old template 1257 var pageEl = $('.tabnav'); 1258 var textColor = rgb2hex($('.menu-item-name-traditional').css('color')); 1259 var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color')); 1260 1261 var linkTextColor = getContrast50(linkColor); 1262 var fontSize = parseInt($('.menu-item-name-traditional').css('font-size')); 1263 fontSize = fontSize + Math.round(fontSize * 0.25); 1264 var textTransform = $('.style-traditional .tabnav .nav>li>a').css('text-transform'); 1265 1266 // 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>'; 1267 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>'; 1268 1269 } 1270 //html content 1271 pageEl.prepend(html); 1272 } 1273 1274 function rgb2hex(rgb) { 1275 if(typeof rgb !== "undefined"){ 1276 rgbColor = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 1277 if (!rgbColor) { 1278 rgba = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+\.*\d+)?\)$/); 1279 return "#" + hex(rgba[1]) + hex(rgba[2]) + hex(rgba[3]); 1280 } 1281 function hex(x) { 1282 return ("0" + parseInt(x).toString(16)).slice(-2); 1283 } 1284 return "#" + hex(rgbColor[1]) + hex(rgbColor[2]) + hex(rgbColor[3]); 1285 } 1286 return rgb; 1287 } 1288 1289 function getContrast50(hexcolor){ 1290 return (parseInt(hexcolor, 16) > 0xffffff/2) ? '#000':'#fff'; 1291 } 1292 1293 function show_corona_sidebar_instructions(text, phone){ 1294 //format to US number 1295 var match = phone.match(/^(\d{3})(\d{3})(\d{4})$/); 1296 var divWidth = 230; 1297 var top = 50; 1298 var linkSize = '1.6em'; 1299 var pSize = $('p').css('font-size'); 1300 var appendPhone = 'tel:+1'+phone+''; 1301 1302 if ($(window).width() < 1600) 1303 var top = 30; 1304 if ($(window).width() < 1200){ 1305 var divWidth = 180; 1306 var linkSize = '1.4em'; 1307 var pSize ='1.1em'; 1308 } 1309 1310 if($('.food-menu-nav').length){ //new template 1311 var textColor = $('.food-menu-nav-item.active').css('color'); 1312 var linkColor = $('.food-menu-nav-item.active').css('background-color'); 1313 1314 var linkTextColor = $('.food-menu-nav-item.active').css('color'); 1315 var parent = $('.food-menu-page'); 1316 } 1317 else { //old template 1318 var textColor = $('.menu-item-name-traditional').css('color'); 1319 var linkColor = $('.style-traditional .tabnav .nav>
1319li.active>a').css('color'); 1320 var parent = $('.food-menu').length ? $('.food-menu') : $('.drink-menu'); 1321 var linkTextColor = getContrast50(linkColor); 1322 } 1323 1324 // $(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>'); 1325 $(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>'); 1326 1327 //check if resolution is bigger than tablet resolution 1328/* if ($(window).width() > 991) { 1329 //detect scroll 1330 window.onscroll = function (e) { 1331 if ($(window).scrollTop() == 0) { 1332 $('#corona-instructions-sidebar').hide(); 1333 }else { 1334 $('#corona-instructions-sidebar').show(); 1335 } 1336 } 1337 } */ 1338 } 1339 1340 function check_corona_config(config){ 1341 console.log(config) 1342 if (config) { 1343 if (config.instructions_on_food_page && config.food_page_instruction_text && config.food_page_instruction_phone) { 1344 if (!config.promote_deliveries && config.promote_pick_up) { 1345 var btnText = 'Call For Pick Up'; 1346 } 1347 if (config.promote_deliveries && !config.promote_pick_up) { 1348 var btnText = 'Call For Delivery'; 1349 } 1350 if (config.promote_deliveries && config.promote_pick_up) { 1351 var btnText = 'Call For Pick Up Or Delivery'; 1352 } 1353 1354 if(typeof btnText !== "undefined"){ // check if pick up or delivery are true 1355 if(config.shopping_cart_type == "TMT" && config.shopping_cart_active == true) { 1356 var btnText = 'ORDER NOW'; 1357 if($('.food-menu-nav').length){ //new template 1358 var textColor = rgb2hex($('.section-header').css('color')); 1359 var linkColor = rgb2hex($('.food-menu-nav-item.active').css('background-color')); 1360 var fontSize = parseInt($('.food-menu-nav-item').css('font-size')); 1361 fontSize = fontSize + Math.round(fontSize * 0.25); 1362 } 1363 else { //old template 1364 var textColor = rgb2hex($('.menu-item-name-traditional').css('color')); 1365 var linkColor = rgb2hex($('.style-traditional .tabnav .nav>li.active>a').css('color')); 1366 1367 var linkTextColor = getContrast50(linkColor); 1368 var fontSize = parseInt($('.menu-item-name-traditional').css('font-size')); 1369 fontSize = fontSize + Math.round(fontSize * 0.25); 1370 } 1371 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); 1372 show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone); 1373 } else { 1374 show_corona_instructions(config.food_page_instruction_text, config.food_page_instruction_phone, btnText); 1375 show_corona_sidebar_instructions(btnText, config.food_page_instruction_phone); 1376 } 1377 1378 } 1379 } 1380 } 1381 } 1382 1383 1384 if (is_food_menu_page() && !window.location.search.includes("contactless=true")){ 1385 $( document ).ready(function() { 1386 setTimeout(function(){ 1387 check_corona_config(corona_config); 1388 }, 300); 1389 }); 1390 } 1391 1392 1393 1394 function isPhone(phone){ 1395 var regex = /^(\+\d{1,2}\s?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/; 1396 return regex.test(phone); 1397 } 1398 1399 function sendEmail_MT (input_id) { 1400 const $loader = $("[data-id=newsletter-widget-2] .sph-loading-img"); 1401 1402 const $step = { 1403 form: $("[data-id=newsletter-widget-2] .sph-email-form"), 1404 message: $("[data-id=newsletter-widget-2] .sph-response-message"), 1405 } 1406 1407 const $field = { 1408 email: $("[data-id=newsletter-widget-2] #sph-newsletter-input-" + input_id), 1409 phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-" + input_id), 1410 consent: $("[data-id=newsletter-widget-2] #sph-newsletter-checkbox-phone-" + input_id), 1411 }; 1412 1413 const $error = { 1414 email: $("[data-id=newsletter-widget-2] #sph-newsletter-email-error-" + input_id), 1415 phone: $("[data-id=newsletter-widget-2] #sph-newsletter-phone-error-" + input_id), 1416 }; 1417 1418 if ($field.email.val().trim() === "") { 1419 $error.email 1420 .html("This field is required") 1421 .show(); 1422 } 1423 else if (!isEmail($field.email.val().trim())) { 1424 $error.email 1425 .html("Please use the format â[email protected]â") 1426 .show(); 1427 } else { 1428 $error.email 1429 .html("") 1430 .hide(); 1431 } 1432 1433 if ($field.consent.is(':checked') && $field.phone.val().trim() === "") { 1434 $error.phone 1435 .html("This field is required") 1436 .show(); 1437 } else if ($field.phone.val().trim().length > 0 && !isPhone($field.phone.val().trim())) { 1438 $error.phone 1439 .html("The phone number must contain 10 digits") 1440 .show(); 1441 } else { 1442 $error.phone 1443 .html("") 1444 .hide(); 1445 } 1446 1447 const errorField = $step.form.find('.sh-form-error:visible'); 1448 1449 if (errorField.length > 0) { 1450 const input = errorField.first().next(); 1451 1452 document.activeElement.blur(); 1453 1454 setTimeout(() => { 1455 input.focus(); 1456 }, 160) 1457 1458 return; 1459 } 1460 1461 $loader 1462 .show() 1463 .prev() 1464 .hide(); 1465 1466 $.ajax({ 1467 method: "POST", 1468 url: "https://www.spothopperapp.com/api/spots/267357/contacts/add_with_texting_permission", 1469 crossDomain: true, 1470 dataType: 'json', 1471 data: { 1472 email: $field.email.val().trim(), 1473 phone: $field.phone.val().trim(), 1474 texting_permission: $field.consent.is(':checked'), 1475 }, 1476 success: function (data) { 1477 afterRequestSubmission(data); 1478 }, 1479 error: function () { 1480 afterRequestSubmission("Something went wrong. Please try again later."); 1481 } 1482 }); 1483 1484 function afterRequestSubmission (data) { 1485 $step.form.hide(); 1486 1487 $step.message 1488 .html(data) 1489 .show() 1490 .trigger('focus'); 1491 } 1492 } 1493</script>
1493<script>function addPromotionParamsToTMTLinks() 1494{ 1495 if (sessionStorage.getItem('shUrlParams')) { 1496 let shParams = JSON.parse(sessionStorage.getItem('shUrlParams')); 1497 if (!Object.keys(shParams).length) 1498 return; 1499 if(!shParams.source) 1500 return; 1501 $('a').each(function () { 1502 if (this.href.includes('tmt.spotapps.co')) { 1503 if(this.href.includes('&source=') || this.href.includes('&destination=') || this.href.includes('&promotion=')) 1504 return; 1505 1506 this.href = this.href + '&source=' + shParams.source; 1507 if(shParams.destination) 1508 this.href = this.href + '&destination=' + shParams.destination; 1509 if(shParams.promotion) 1510 this.href = this.href + '&promotion=' + shParams.promotion; 1511 if(shParams.fb_post_id) 1512 this.href = this.href + '&fb_post_id=' + shParams.fb_post_id; 1513 if(shParams.email_post_id) 1514 this.href = this.href + '&email_post_id=' + shParams.email_post_id; 1515 } 1516 }) 1517 } 1518} 1519setTimeout(function() { 1520 addPromotionParamsToTMTLinks(); 1521 addFooterToSourceParam(); 1522},600) 1523 1524function addFooterToSourceParam() 1525{ 1526 $('.bottom-link').each(function (){ 1527 if(shouldAddSourceParam(this.href)) 1528 this.href = this.href + '&source=footer'; 1529 }) 1530 $('#sh-multiple-links-content-holder a').each(function (){ 1531 if(shouldAddSourceParam(this.href)) 1532 this.href = this.href + '&source=footer'; 1533 }) 1534} 1535function shouldAddSourceParam(link){ 1536 if (link.includes('tmt.spotapps.co') && !link.includes('&source=')){ 1537 return true; 1538 } 1539 return false; 1540} 1541</script>
1541<script> 1542;(async () => { 1543if (typeof window.focusTrap === 'undefined') { 1544 await getScript('https://unpkg.com/tabbable/dist/index.umd.js'); 1545 await getScript('https://unpkg.com/focus-trap/dist/focus-trap.umd.js'); 1546} 1547 1548document.querySelectorAll('.modal').forEach((element) => { 1549 const trap = window.focusTrap?.createFocusTrap(element, { 1550 allowOutsideClick: true, 1551 }); 1552 1553 $(element).on('shown.bs.modal', () => { 1554 trap?.activate(); 1555 }); 1556 1557 $(element).on('hidden.bs.modal', () => { 1558 trap?.deactivate(); 1559 }); 1560}); 1561 1562async function getScript (source) { 1563 return new Promise((resolve, reject) => { 1564 const script = document.createElement('script'); 1565 script.src = source; 1566 script.async = true; 1567 1568 script.onload = resolve; 1569 script.onerror = reject; 1570 1571 document.head.appendChild(script); 1572 }); 1573} 1574})(); 1575</script>
1575<script src="https://wcache-plugins.spotapps.co/production/wcpl_bootstrap_ada_fix/wcpl_bootstrap_ada_fix.js"></script>
1575<link href="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.css" rel="stylesheet" media="screen"/>
1575<script src="https://wcache-plugins.spotapps.co/production/wcpl_bday_club/wcpl_bday_club.js"></script>
1575<script src="https://wcache-plugins.spotapps.co/production/wcpl_ga_tracking/wcpl_ga_tracking.js"></script>
1575<script src="https://wcache-plugins.spotapps.co/production/wcpl_media_controls/script.js"></script>
1575<link href="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter_helper_style.css" rel="stylesheet" media="screen"/>
1575<script>var changes_log_array = {};</script>
1575<script src="https://wcache-plugins.spotapps.co/production/wcpl_website_editor_interpreter/website_interpreter.js"></script>
1575</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.