CINXE.COM
Restaurants in Manchester | Visit Manchester
<!doctype html> <html> <head> <!-- meta --> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta charset="utf-8" /> <title>Restaurants in Manchester | Visit Manchester</title> <link rel="canonical" href="https://www.visitmanchester.com/food-and-drink/restaurants/" /> <meta name="description" content="Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene." /> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1" /> <meta name="sv-nav-properties" content="{"title":"Restaurants","id":"6525e39d58d8a262bf5e85d3","parents_ids":["6525e38c58d8a262bf5e73b7"],"site_name":"primary","section":"main","folderHref":"/food-and-drink/restaurants/"}" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="referrer" content="always" /> <meta property="og:title" content="Restaurants in Manchester | Visit Manchester" /> <meta property="og:url" content="https://www.visitmanchester.com/food-and-drink/restaurants/" /> <meta property="og:description" content="Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene." /> <meta property="og:image" content="https://assets.simpleviewinc.com/simpleview/image/upload/c_limit,h_1200,q_75,w_1200/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="823" /> <meta property="og:type" content="website" /> <!-- head css bundles --> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/tripbuilder/virtuals/css/shared.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_pagetitle.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_embed.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_call_to_action.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_sponsor_logos.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_footer_links.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/nav/virtuals/css/shared.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/nav/virtuals/css/widget_main_dropdown.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/nav/virtuals/css/widget_footer.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/widget_template_custom_social_links.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/search/virtuals/css/custom_headerbox.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_layoutjs.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_vue_airbnb_style_datepicker.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_pe_booking.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_site_links.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/nav/virtuals/css/widget_breadcrumb.css"/> <link rel="stylesheet" href="https://unpkg.com/@glidejs/glide@3.4.1/dist/css/glide.core.min.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/shared.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/slider_preview/shared_structure.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/slider_preview/shared_theme.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/slider_preview/variants/4_across_fullwidth.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/slider/shared_structure.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/slider/shared_theme.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/slider/variants/4_across_fullwidth.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/list/shared_structure.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/list/shared_theme.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/widget_template_custom_navigation_list.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/hero_slideshow/shared_structure.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/hero_slideshow/shared_theme.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/cards/shared_structure.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/ccl/cards/shared_theme.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/collections/virtuals/css/widget_template_custom_navigation_card.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_product_search.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/panel_snapwidget.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_quickview.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="https://unpkg.com/plyr@^3/dist/plyr.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_lightbox.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/reboot.css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/variables.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/swatches.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/shared.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_header.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_header_hamburger.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/shared_print.css" media="print" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_footer.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_core_styles.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/custom_forms.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/css/widget_social_share.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <link rel="stylesheet" href="https://use.typekit.net/vrp2tco.css" media="print" onload="this.onload=null;this.media='all'" class="preloaded-css"/> <!-- head js bundles --> <script src="https://unpkg.com/plyr@^3/dist/plyr.polyfilled.min.js"></script> <script src="https://player.vimeo.com/api/player.js"></script> <script src="/includes/public/managed/v_df9c14a4_1499fc8c/core/libs/sv/requirejs/public/require.js" data-ot-ignore></script> <script src="/requirejs_config_df9c14a4_1499fc8c.js" data-ot-ignore></script> <script src="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/js/shared_header.js" defer></script> <!-- bottomHead --> <script data-id="site_gtm"> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','gtmDataLayer','GTM-NLJPDSK'); </script> <script data-id="site_gtm"> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','gtmDataLayer','GTM-NFBVG93'); </script> <!-- Use this template to add items to the <head> --> <link rel="preconnect" href="https://assets.simpleviewinc.com"> <link rel="preconnect" href="https://use.fontawesome.com"> <link rel="preconnect" href="https://securepubads.g.doubleclick.net"> <link rel="preconnect" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://ws.audioeye.com"> <link rel="preconnect" href="https://wsv3cdn.audioeye.com"> <link rel="preconnect" href="https://www.googletagmanager.com"> <link rel="preconnect" href="https://securepubads.g.doubleclick.net"> <link rel="preconnect" href="https://connect.facebook.net"> <link rel="preconnect" href="https://analytics.tiktok.com"> <link rel="preconnect" href="https://unpkg.com"> <link rel="preconnect" href="https://script.hotjar.com"> <link rel="preconnect" href="https://cmp.quantcast.com"> <link rel="preconnect" href="https://fonts.googleapis.com" /> <!-- Most common Font URLs. (Only uncomment the ones being used) <link rel="preconnect" href="https://fast.fonts.net/"> <link rel="preconnect" href="https://use.typekit.net/"> "> --> <style data-critical-styles> @import url("https://p.typekit.net/p.css?s=1&k=vrp2tco&ht=tk&f=139.140.169.173.175.176.143.144.147.148.156.157.161.162&a=531942&app=typekit&e=css"); .core-link-list { --color-title: var(--gray-700); --color-link: var(--primary-color-700); --text-size: var(--text-base); position: relative; margin: 0 auto; max-width: var(--width-base); padding: 0 var(--space-5); padding-top: var(--space-8) } .sv-col>.contentRender .core-link-list { padding-left: 0; padding-right: 0 } .core-link-list .link-list-title { color: var(--color-title); font-size: var(--text-size); font-weight: 700; margin-bottom: var(--space-3) } .core-link-list>ul { padding-left: var(--space-4) } .core-link-list .link-list-link { color: var(--color-link); font-size: var(--text-size) } html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100% } body { margin: 0 } aside { display: block } a { background-color: transparent } h1 { font-size: 2em; margin: .67em 0 } img { border: 0 } html, body { height: 100% } *, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box } html, body { font-size: 100% } body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: 400; font-style: normal; line-height: 1.5; position: relative } img { max-width: 100%; height: auto } img { -ms-interpolation-mode: bicubic } img { display: inline-block; vertical-align: middle } div, ul, li, h1, h2, h3, p { margin: 0; padding: 0 } a { color: #282828; text-decoration: none; line-height: inherit } p { font-family: inherit; font-weight: 400; font-size: 1rem; line-height: 1.6; margin-bottom: 1.25rem; text-rendering: optimizeLegibility } h1, h2, h3 { font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: 400; font-style: normal; color: #222; text-rendering: optimizeLegibility; margin-top: .2rem; margin-bottom: .5rem; line-height: 1.4 } h1 { font-size: 2.125rem } h2 { font-size: 1.6875rem } h3 { font-size: 1.375rem } ul { font-size: 1rem; line-height: 1.6; margin-bottom: 1.25rem; list-style-position: outside; font-family: inherit } ul { margin-left: 1.1rem } :root { --font-body: "ObjektivMk1", sans-serif; --font-display: var(--font-body); --width-compact: calc(var(--width-comfortable) * (2/3)); --width-comfortable: 72ch; --width-double: calc(var(--width-comfortable) * 2); --width-base: 1244px; --width-smallscreen: 90%; --width-feature: 1440px; --width-fullscreen: 100vw; --space-px: 1px; --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px; --space-12: 48px; --space-16: 64px; --space-20: 80px; --space-24: 96px; --space-32: 128px; --space-40: 160px; --space-48: 192px; --space-56: 224px; --space-64: 256px; --container-single: calc(var(--width-comfortable) + var(--space-10)); --container-double: calc(var(--width-double) + var(--space-24)); --text-xs: .75rem; --text-sm: .875rem; --text-base: 1rem; --text-lg: 1.125rem; --text-xl: 1.25rem; --text-2xl: 1.5rem; --text-3xl: 1.875rem; --text-4xl: 2.25rem; --text-5xl: 3rem; --text-6xl: 4rem; --tracking-tighter: -.05em; --tracking-tight: -.025em; --tracking-normal: 0em; --tracking-wide: .025em; --tracking-wider: .05em; --tracking-widest: .1em; --leading-none: 1; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; --black: #000; --white: #fff; --gray-hue: 215; --gray-100: hsl(var(--gray-hue), 45%, 98%); --gray-200: hsl(var(--gray-hue), 38%, 95%); --gray-300: hsl(var(--gray-hue), 32%, 91%); --gray-400: hsl(var(--gray-hue), 25%, 84%); --gray-500: hsl(var(--gray-hue), 20%, 69%); --gray-600: hsl(var(--gray-hue), 15%, 52%); --gray-700: hsl(var(--gray-hue), 17%, 35%); --gray-800: hsl(var(--gray-hue), 23%, 23%); --gray-900: hsl(var(--gray-hue), 26%, 14%); --primary-color-hue: 0; --primary-color-100: hsl(var(--primary-color-hue), 0%, 66%); --primary-color-200: hsl(var(--primary-color-hue), 0%, 58%); --primary-color-300: hsl(var(--primary-color-hue), 0%, 49%); --primary-color-400: hsl(var(--primary-color-hue), 0%, 41%); --primary-color-500: hsl(var(--primary-color-hue), 0%, 33%); --primary-color-600: hsl(var(--primary-color-hue), 0%, 24%); --primary-color-700: hsl(var(--primary-color-hue), 0%, 16%); --primary-color-800: hsl(var(--primary-color-hue), 0%, 14%); --primary-color-900: hsl(var(--primary-color-hue), 0%, 13%); --secondary-color-hue: 4; --secondary-color-100: hsl(var(--secondary-color-hue), 74%, 80%); --secondary-color-200: hsl(var(--secondary-color-hue), 74%, 76%); --secondary-color-300: hsl(var(--secondary-color-hue), 74%, 71%); --secondary-color-400: hsl(var(--secondary-color-hue), 74%, 66%); --secondary-color-500: hsl(var(--secondary-color-hue), 74%, 61%); --secondary-color-600: hsl(var(--secondary-color-hue), 74%, 56%); --secondary-color-700: hsl(var(--secondary-color-hue), 74%, 51%); --secondary-color-800: hsl(var(--secondary-color-hue), 74%, 46%); --secondary-color-900: hsl(var(--secondary-color-hue), 74%, 41%); --tertiary-color-hue: 49; --tertiary-color-100: hsl(var(--tertiary-color-hue), 100%, 80%); --tertiary-color-200: hsl(var(--tertiary-color-hue), 100%, 75%); --tertiary-color-300: hsl(var(--tertiary-color-hue), 100%, 70%); --tertiary-color-400: hsl(var(--tertiary-color-hue), 100%, 65%); --tertiary-color-500: hsl(var(--tertiary-color-hue), 100%, 60%); --tertiary-color-600: hsl(var(--tertiary-color-hue), 100%, 55%); --tertiary-color-700: hsl(var(--tertiary-color-hue), 100%, 50%); --tertiary-color-800: hsl(var(--tertiary-color-hue), 100%, 45%); --tertiary-color-900: hsl(var(--tertiary-color-hue), 100%, 80%); --shadow-xs: 0 0 0 1px rgba(0, 0, 0, .05); --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05); --shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04); --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25); --shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .06); --shadow-outline: 0 0 0 3px rgba(66, 153, 225, .5); --rounded-none: 0; --rounded-sm: .125rem; --rounded: 1.25rem; --rounded-md: .375rem; --rounded-lg: .5rem; --rounded-xl: .75rem; --rounded-2xl: 1rem; --rounded-3xl: 1.5rem; --rounded-full: 9999px } html { overflow-y: scroll } body>.contentRender { min-height: 100%; height: 100% } html, body { height: 100%; font-family: var(--font-body); color: var(--gray-900) } .sr-only { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px } .skip-link[href] { z-index: 5000000; display: block; margin: 0; padding: var(--space-8) var(--space-12); width: auto; height: auto; font-size: var(--text-3xl); line-height: var(--leading-tight); color: var(--gray-100); text-align: center; border: 4px dashed var(--gray-100); background: var(--gray-900); opacity: 0; clip: auto } .contentRender_name_plugins_core_textbox { width: 100%; padding: 0 var(--space-5); margin: 0 auto } .contentRender_name_plugins_core_textbox { padding: var(--space-8) var(--space-5) } .panel-page { position: relative; display: grid; grid-template-columns: 100%; grid-template-rows: auto auto 1fr auto; min-height: 100% } .panel-two-column { max-width: var(--width-base); padding: 0; margin: 0 auto; margin-bottom: var(--space-8) } .sv-col>.contentRender>.sv-panel { margin-left: calc(-1 * var(--space-5)); margin-right: calc(-1 * var(--space-5)) } body, h1, h2, h3, p { font-family: var(--font-body) } h1, h2, h3 { font-family: var(--font-display) } h1, h2, h3, p { margin: 0 } ul { margin-bottom: 0 } a { color: var(--primary-color-700) } .contentRender_name_plugins_nav_breadcrumb { max-width: 1290px; margin: 0 auto; } .navigation.desktop.secondary { margin-bottom: 0 0 20px 0; } .main-desktop-nav-container { display: none; } .header-container { z-index: 15; position: static; width: 100%; } .core-hero-slideshow.hero-slideshow-portrait img { height: auto; width: 100%; } .panel-header .primary-content-container { display: flex; align-items: center; justify-content: space-between; padding: 0 var(--space-1) 0 var(--space-4); /* margin-bottom: var(--space-3); */ background: #292929; position: relative; z-index: 200; height: 48px; } .panel-header.hamburger .nav-container .hamburger-dropdown-toggle img.hamburger-icon { width: 27px; height: 19px; } @media (max-width: 40em) { .panel-header .primary-content-container .contentRender_name_plugins_common_logo { padding: var(--space-4) 0; max-width: 138px; } .panel-header .main-nav-widgets-container { display: grid; align-items: center; grid-template-columns: min-content; gap: var(--space-5); } .panel-header.hamburger .nav-container { gap: var(--space-2); } .panel-header .main-nav-widgets-container > *:not(.widgets) { display: flex; align-items: center; } .panel-header.hamburger .nav-container .hamburger-dropdown-toggle img.close-icon { display: none; } .panel-header.hamburger .nav-container .hamburger-dropdown-toggle img.search-icon { width: 25px; height: 25px; } .panel-header.hamburger .nav-container .hamburger-dropdown-toggle img.hamburger-icon { width: 27px; height: 19px; } } .panel-header .main-nav-widgets-container { display: grid; align-items: center; grid-template-columns: min-content; gap: var(--space-5); } .core-hero-slideshow { opacity:1 !important; } .core-hero-image { opacity:1 !important; } @media (max-width: 40em) { header .main-nav-widgets-container { display: none; } .panel-header .primary-content-container::after { content: ''; width: 100%; /* max-width: calc(100% - var(--space-10)); */ height: 2px; background: #000; position: absolute; bottom: 0; left: var(--space-5); right: var(--space-5); } } @media (min-width: 64em) { .header-container { margin: 0 auto; } .panel-header.hamburger .nav-container .hamburger-dropdown-toggle { padding: var(--space-4) var(--space-4); width: 96px; } .panel-header.hamburger .primary-content-container { height: var(--top-bar-height); } .nav-container .menu-toggle-container { position: relative; background: transparent; } .panel-header .primary-content-container { margin-bottom: 0; padding: var(--space-5) 0; z-index: 1000; } .panel-header .main-nav-widgets-container { grid-template-columns: 55px 1fr; } } @media (min-width: 1286px) { .panel-header .primary-content-container { align-items: center; padding: 0 var(--space-5); height: 120px; box-sizing: border-box; margin: 0 auto; position: relative; z-index: 1000; } } @media (min-width: 1440px) { .panel-header { margin: 0 auto; } } </style> </head> <body> <!-- topBody --> <noscript> <iframe src="//www.googletagmanager.com/ns.html?id=GTM-NLJPDSK" title="Google Tag Manager" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <noscript> <iframe src="//www.googletagmanager.com/ns.html?id=GTM-NFBVG93" title="Google Tag Manager" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <!-- content --> <div data-civid="659fe5085863e2659ef63665" class="contentRender contentRender_0 contentRender_type_panel contentRender_name_plugins_common_page" data-sv-time="8" data-sv-index="0" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <style>.skip-link { display: none; }</style> <script> // CRM FORM STYLING HELPER JS // Adds the body class as quickly as possible to hide all the items on the page so we don't // have the site flash before the calendar shows up if (location.search.indexOf('action=popupCal') > -1 && document.body.querySelectorAll('.lookup-calHolder')) { document.body.classList.add('crm-calendar-popup'); }; </script> <!-- Adds a check for IE, if we're in IE we block the entire page --> <div id="ie-warning" style="position: fixed; z-index: 999999999999; top: 0; left: 0; display: none; align-items: center; justify-content: center; width: 100%; height: 100%; text-align: center; background-color: #fff;" aria-hidden="true" > <div> <img src="/includes/public/assets/shared/logo.svg" alt="Marketing Manchester" width="80" height="80" style="margin-bottom: 16px;" /> <p style="font-size: 22px; font-weight: 700; line-height: 1.3; text-align: center;">Your browser is not supported for this experience.<br />We recommend using Chrome, Firefox, Edge, or Safari.</p> </div> <script> var ieWarning = document.querySelector('#ie-warning'); if (document.body.style.msTouchAction !== undefined) { ieWarning.style.display = 'flex'; ieWarning.setAttribute('aria-hidden', 'false'); } </script> </div> <a class="skip-link sr-only" href="#slideshow-container">Skip navigation</a> <a class="skip-link sr-only" href="#main-content">Skip to main content</a> <div class="root-panel panel-page"> <div class="header-container"> <div data-civid="64c7adda7bb02a0e877d05bf" class="contentRender contentRender_1 contentRender_type_panel contentRender_name_plugins_common_header_hamburger" data-sv-time="0" data-sv-index="1" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <header class="panel-header hamburger theme_1 main" data-guid="aff64d93-a4c0-4367-92f7-086ad38cc00b" > <div class="primary-content-container"> <div data-civid="66e1621861c952fb532c625d" class="contentRender contentRender_2 contentRender_type_widget contentRender_name_plugins_common_logo" data-sv-time="17" data-sv-index="2" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="logo" data-guid="d18e5627-04c6-4807-bde2-ba80676d4882" > <a href="/" target="" aria-label="Visit Manchester Logo" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "eventName": "widget_interaction", "widgetName": "Logo", "interactionSource": "widget", "linkObject": "Visit%20Manchester%20Logo", "interactionUrl": "%2F" } }'> <img srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_limit,h_32,q_75,w_247/v1/clients/manchester/logo_c3fd195c-4f61-4268-98f6-2de196faa506.png 1x, https://assets.simpleviewinc.com/simpleview/image/upload/c_limit,h_64,q_75,w_494/v1/clients/manchester/logo_c3fd195c-4f61-4268-98f6-2de196faa506.png 2x" alt="Visit Manchester Logo" loading="eager" /> </a> </div> </div> <div class="main-nav-widgets-container"> <div class="widgets"> <div data-civid="66e1621861c952fb532c625f" class="contentRender contentRender_3 contentRender_type_widget contentRender_name_plugins_tripbuilder_counter" data-sv-time="18" data-sv-index="3" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div data-guid="5d909bbf-226e-4fda-8443-f221a481cb97"></div> <script> require(['site_tripbuilder'], function(tripbuilder) { if (!tripbuilder.enabled) return; const root = document.querySelector('[data-guid="5d909bbf-226e-4fda-8443-f221a481cb97"]'); const tripbuilderMobile = document.querySelector('[data-mobile-nav] [data-tripbuilder-cont]'); tbCounterChangeHandler(); tripbuilder.events.on('change', tbCounterChangeHandler); function tbCounterChangeHandler() { const html = ` <a class="tripbuilder-counter" href="${tripbuilder.path}"> <i class="far fa-heart" aria-hidden="true"></i> <span>(${tripbuilder.getTotalCount()})</span> </a> `; root.innerHTML = html; if (tripbuilderMobile) { tripbuilderMobile.innerHTML = html; } } }); </script></div> </div> <div class="nav-container"> <button id="menu-toggle" class="menu-toggle hamburger-dropdown-toggle" aria-label="toggle menu" aria-haspopup="true" aria-expanded="false" aria-controls="primary-site-menu" data-hamburger-dropdown-toggle > <img class="search-icon" src="/includes/public/assets/shared/icons/icon_magnifyglass.svg"></i> <span class="hamburger-inner"> <img class="hamburger-icon" src="/includes/public/assets/shared/icons/icon_hamburger.svg"></i> <img class="close-icon" src="/includes/public/assets/shared/icons/icon_close_white.svg"></i> </span> </button> </div> </div> </div> </header> <div id="primary-site-menu" class="dropdown-nav-container theme_1 main" data-site-nav-cont style="display: none;"> <div class="nav"> <header class="widgets" data-mobile-nav> <!-- <div data-weather-cont></div> --> <div data-search-cont> <div data-civid="66e1621861c952fb532c6263" class="contentRender contentRender_5 contentRender_type_widget contentRender_name_plugins_search_headerbox" data-sv-time="58" data-sv-index="5" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="search-cont" data-guid="ac3a2bc5-357e-417b-aaee-b043f64b1eef"> <form class="headerbox-search-form" data-sv-searchForm action="/search/" method="GET"> <input data-sv-search-input name="q" class="searchInput" autocomplete="off" autocorrect="off" autocapitalize="off" placeholder="Search" value="" /> <button type="submit" data-sv-search-button> <i class ="fa fa-search fa-inverse" aria-hidden="true"></i> </button> </form> <button class="search-button" data-toggle-search aria-expanded="false" aria-label="toggle search dropdown" aria-controls="headerbox-search-form"> <i class="fas fa-search open" aria-hidden="true"></i> <i class="fas fa-times close" aria-hidden="true"></i> </button> </div> <script> require(["plugins_common_custom_utils", "domReady!"], function(utils) { let root = document.querySelector('[data-guid="ac3a2bc5-357e-417b-aaee-b043f64b1eef"]'); let searchCont = document.querySelector('[data-search-cont]'); let searchButtonsToHide = root.querySelectorAll('[data-sv-search-button], [data-sv-search-input]'); let isActive = false; const breakpoint = 1024; // clone to mobile nav searchCont?.replaceWith(root.cloneNode(true)); function ariaHideEl(el) { el.setAttribute('aria-hidden', true); el.setAttribute('tabindex', -1); } function ariaShowEl(el) { el.removeAttribute('aria-hidden'); el.removeAttribute('tabindex'); } function toggleSearchElVisibility() { if (window.innerWidth < breakpoint || isActive) { searchButtonsToHide.forEach(ariaShowEl); return; } searchButtonsToHide.forEach(ariaHideEl); } document.querySelectorAll('[data-toggle-search]').forEach( elem => { elem.addEventListener("click", function(e) { e.stopImmediatePropagation(); let searchCont = this.parentNode; searchCont.classList.toggle('active'); this.classList.toggle('active'); isActive = searchCont.classList.contains('active'); this.getAttribute('aria-expanded', isActive); toggleSearchElVisibility(); if (isActive) { searchCont.querySelector('[data-sv-search-input]').focus(); } }); }); document.querySelectorAll('[data-sv-searchForm]').forEach( elem => { let input = elem.querySelector('[data-sv-search-input]'); elem.addEventListener('submit', function(e) { if (input.value.length === 0) { e.preventDefault(); this.querySelector('[data-sv-search-input]').focus(); } }); }); ['resize', 'orientationchange'].forEach(ev => window.addEventListener(ev, utils.debounce(toggleSearchElVisibility, 200))); toggleSearchElVisibility(); }); </script> </div> </div> <div data-tripbuilder-cont></div> </header> <div class="social-nav-cont"> <div class="navigation-list"> <!-- --> <div data-civid="66e1621861c952fb532c6265" class="contentRender contentRender_6 contentRender_type_widget contentRender_name_plugins_collections_type_custom_slides contentRender_name_plugins_collections_template_custom_navigation_list" data-sv-time="79" data-sv-index="6" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'> <style>.list navigation-list .img-cont { aspect-ratio: 185 / 135; }@media (min-width: 640px) { .list navigation-list .img-cont { aspect-ratio: 185 / 135; } }</style> <section class="ccl-widget core-list list navigation-list" data-guid="a7bef138-fdc8-4e27-b19c-eea3cdba0f16" data-js="plugins_collections_custom_collection_default_package" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "widget_interaction", "widgetName" : "Navigation List", "interactionSource" : "widget" } }' style="opacity: 0;" > <div class="slides" data-slides> <article class="slide"> <div class="inner" data-gtm-vars='{ "tClient_ga4" : { "interactionSource" : "widget", "itemName" : "Family%20Friendly" } }'> <div class="slide-top"> <div class="img-cont"> <a data-asset href="https://www.visitmanchester.com/things-to-see-and-do/attractions/family-friendly/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Image", "interactionUrl": "https://www.visitmanchester.com/things-to-see-and-do/attractions/family-friendly/" } }'> <picture> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_135,q_65,w_185,x_1318,y_710/v1/clients/manchester/Family_with_Baby_replica_in_Revolution_Manchester_Science_Museum_Group_The_Board_of_Trustees_of_the_Science_Museum_large_ae744877-39e3-46db-9d66-ef4f1343e827.jpg" media="screen and (min-width: 640px)" type="image/avif" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_135,q_65,w_185,x_1318,y_710/v1/clients/manchester/Family_with_Baby_replica_in_Revolution_Manchester_Science_Museum_Group_The_Board_of_Trustees_of_the_Science_Museum_large_ae744877-39e3-46db-9d66-ef4f1343e827.jpg" media="screen and (min-width: 640px)" type="image/webp" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_135,q_65,w_185,x_1318,y_710/v1/clients/manchester/Family_with_Baby_replica_in_Revolution_Manchester_Science_Museum_Group_The_Board_of_Trustees_of_the_Science_Museum_large_ae744877-39e3-46db-9d66-ef4f1343e827.jpg" media="screen and (min-width: 640px)" type="image/jpeg" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_135,q_65,w_185,x_1318,y_710/v1/clients/manchester/Family_with_Baby_replica_in_Revolution_Manchester_Science_Museum_Group_The_Board_of_Trustees_of_the_Science_Museum_large_ae744877-39e3-46db-9d66-ef4f1343e827.jpg" type="image/avif" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_135,q_65,w_185,x_1318,y_710/v1/clients/manchester/Family_with_Baby_replica_in_Revolution_Manchester_Science_Museum_Group_The_Board_of_Trustees_of_the_Science_Museum_large_ae744877-39e3-46db-9d66-ef4f1343e827.jpg" type="image/webp" width="185" height="135" /> <img class="slide-img" src="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_135,q_65,w_185,x_1318,y_710/v1/clients/manchester/Family_with_Baby_replica_in_Revolution_Manchester_Science_Museum_Group_The_Board_of_Trustees_of_the_Science_Museum_large_ae744877-39e3-46db-9d66-ef4f1343e827.jpg" alt="A family at the Manchester Science and Industry Museum" loading="lazy" fetchpriority="low" width="185" height="135" onload="this.classList.add('loaded')" /> </picture> </a> </div> </div> <div class="content-section"> <div class="inner"> <div class="heading-container"> <h2 class="slide-title"> <a href="https://www.visitmanchester.com/things-to-see-and-do/attractions/family-friendly/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Title", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fthings-to-see-and-do%2Fattractions%2Ffamily-friendly%2F", "interactionText" : "Family%20Friendly" } }'>Family Friendly</a> </h2> </div> <p>Create lasting memories with our guide to family-friendly attractions in Manchester. From… </div> <footer class="slide-footer"> <a class="read-more" href="https://www.visitmanchester.com/things-to-see-and-do/attractions/family-friendly/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Read%20More", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fthings-to-see-and-do%2Fattractions%2Ffamily-friendly%2F", "interactionText" : "Read%20More" } }'> Read More </a> </footer> </div> </div> </article> <article class="slide"> <div class="inner" data-gtm-vars='{ "tClient_ga4" : { "interactionSource" : "widget", "itemName" : "Restaurants" } }'> <div class="slide-top"> <div class="img-cont"> <a data-asset href="https://www.visitmanchester.com/food-and-drink/restaurants/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Image", "interactionUrl": "https://www.visitmanchester.com/food-and-drink/restaurants/" } }'> <picture> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_135,q_65,w_185,x_1222,y_696/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" media="screen and (min-width: 640px)" type="image/avif" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_135,q_65,w_185,x_1222,y_696/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" media="screen and (min-width: 640px)" type="image/webp" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_135,q_65,w_185,x_1222,y_696/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" media="screen and (min-width: 640px)" type="image/jpeg" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_135,q_65,w_185,x_1222,y_696/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" type="image/avif" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_135,q_65,w_185,x_1222,y_696/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" type="image/webp" width="185" height="135" /> <img class="slide-img" src="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_135,q_65,w_185,x_1222,y_696/v1/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg" alt="Couple eating in the Edwardian Manchester restaurant" loading="lazy" fetchpriority="low" width="185" height="135" onload="this.classList.add('loaded')" /> </picture> </a> </div> </div> <div class="content-section"> <div class="inner"> <div class="heading-container"> <h2 class="slide-title"> <a href="https://www.visitmanchester.com/food-and-drink/restaurants/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Title", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Ffood-and-drink%2Frestaurants%2F", "interactionText" : "Restaurants" } }'>Restaurants</a> </h2> </div> <p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood… </div> <footer class="slide-footer"> <a class="read-more" href="https://www.visitmanchester.com/food-and-drink/restaurants/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Read%20More", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Ffood-and-drink%2Frestaurants%2F", "interactionText" : "Read%20More" } }'> Read More </a> </footer> </div> </div> </article> <article class="slide"> <div class="inner" data-gtm-vars='{ "tClient_ga4" : { "interactionSource" : "widget", "itemName" : "What%27s%20on%20at%20Manchester%20Opera%20House%20%26%20Palace%20Theatre" } }'> <div class="slide-top"> <div class="img-cont"> <a data-asset href="https://www.visitmanchester.com/whats-on/events/whats-on-opera-house-palace-theatre/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Image", "interactionUrl": "https://www.visitmanchester.com/whats-on/events/whats-on-opera-house-palace-theatre/" } }'> <picture> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_135,q_65,w_185,x_1030,y_858/v1/clients/manchester/opera_house_exterior_large_45b126aa-73bb-47c7-9f4d-79c91b395ecc.jpg" media="screen and (min-width: 640px)" type="image/avif" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_135,q_65,w_185,x_1030,y_858/v1/clients/manchester/opera_house_exterior_large_45b126aa-73bb-47c7-9f4d-79c91b395ecc.jpg" media="screen and (min-width: 640px)" type="image/webp" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_135,q_65,w_185,x_1030,y_858/v1/clients/manchester/opera_house_exterior_large_45b126aa-73bb-47c7-9f4d-79c91b395ecc.jpg" media="screen and (min-width: 640px)" type="image/jpeg" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_135,q_65,w_185,x_1030,y_858/v1/clients/manchester/opera_house_exterior_large_45b126aa-73bb-47c7-9f4d-79c91b395ecc.jpg" type="image/avif" width="185" height="135" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_135,q_65,w_185,x_1030,y_858/v1/clients/manchester/opera_house_exterior_large_45b126aa-73bb-47c7-9f4d-79c91b395ecc.jpg" type="image/webp" width="185" height="135" /> <img class="slide-img" src="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_135,q_65,w_185,x_1030,y_858/v1/clients/manchester/opera_house_exterior_large_45b126aa-73bb-47c7-9f4d-79c91b395ecc.jpg" alt="Exterior of Manchester Opera House at night with pink lighting" loading="lazy" fetchpriority="low" width="185" height="135" onload="this.classList.add('loaded')" /> </picture> </a> </div> </div> <div class="content-section"> <div class="inner"> <div class="heading-container"> <h2 class="slide-title"> <a href="https://www.visitmanchester.com/whats-on/events/whats-on-opera-house-palace-theatre/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Title", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fwhats-on%2Fevents%2Fwhats-on-opera-house-palace-theatre%2F", "interactionText" : "What%27s%20on%20at%20Manchester%20Opera%20House%20%26%20Palace%20Theatre" } }'>What's on at Manchester Opera House & Palace Theatre</a> </h2> </div> <p>Indulge in the grandeur of theatrical splendor at Manchester Opera House and Palace Theatre, two… </div> <footer class="slide-footer"> <a class="read-more" href="https://www.visitmanchester.com/whats-on/events/whats-on-opera-house-palace-theatre/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Read%20More", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fwhats-on%2Fevents%2Fwhats-on-opera-house-palace-theatre%2F", "interactionText" : "Read%20More" } }'> Read More </a> </footer> </div> </div> </article> </div> </section></div> <!-- --> </div> <div class="social-list"> <p>Follow us</p> <div data-civid="66e1621861c952fb532c6267" class="contentRender contentRender_7 contentRender_type_widget contentRender_name_plugins_collections_type_custom_social_slides contentRender_name_plugins_collections_template_custom_social_links" data-sv-time="38" data-sv-index="7" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <ul class="social-links"> <li class="social-network"> <a class="social-link" href="https://www.tiktok.com/@visitmanchester" target="_blank" rel="noopener" title="Visit our tiktok page" aria-label="Visit our tiktok page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Tiktok", "interactionUrl" : "https%3A%2F%2Fwww.tiktok.com%2F%40visitmanchester", "interactionSource": "widget" } }' > <i class="social-icon fab fa-tiktok" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.youtube.com/user/visitmanchester" target="_blank" rel="noopener" title="Visit our youtube page" aria-label="Visit our youtube page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Youtube", "interactionUrl" : "https%3A%2F%2Fwww.youtube.com%2Fuser%2Fvisitmanchester", "interactionSource": "widget" } }' > <i class="social-icon fab fa-youtube" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://twitter.com/visit_mcr" target="_blank" rel="noopener" title="Visit our twitter page" aria-label="Visit our twitter page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Twitter", "interactionUrl" : "https%3A%2F%2Ftwitter.com%2Fvisit_mcr", "interactionSource": "widget" } }' > <i class="social-icon fab fa-twitter" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.instagram.com/visitmanchester/" target="_blank" rel="noopener" title="Visit our instagram page" aria-label="Visit our instagram page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Instagram", "interactionUrl" : "https%3A%2F%2Fwww.instagram.com%2Fvisitmanchester%2F", "interactionSource": "widget" } }' > <i class="social-icon fab fa-instagram" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.facebook.com/visitmanchester/" target="_blank" rel="noopener" title="Visit our facebook page" aria-label="Visit our facebook page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Facebook", "interactionUrl" : "https%3A%2F%2Fwww.facebook.com%2Fvisitmanchester%2F", "interactionSource": "widget" } }' > <i class="social-icon fab fa-facebook" aria-hidden="true" ></i> </a> </li> </ul></div> </div> </div> <div class="main-nav" data-main-nav-cont> <div data-civid="66e1621861c952fb532c6269" class="contentRender contentRender_8 contentRender_type_widget contentRender_name_plugins_nav_main_dropdown" data-sv-time="27" data-sv-index="8" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="nav-container" data-guid="3aed4825-9a7c-4a30-bbfb-4a25f6104fd5" data-gtm-vars='{ "tClient_ga4": { "eventName": "navigation_click", "navType": "Main", "interactionSource": "navigation" } }' > <noscript class="permanently-hidden"> <nav> <a href="/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Home", "interactionUrl": "%2F", "interactionText": "Home" } }' >Home</a> <a href="/things-to-see-and-do/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Things%20To%20Do", "interactionUrl": "%2Fthings-to-see-and-do%2F", "interactionText": "Things%20To%20Do" } }' >Things To Do</a> <a href="/things-to-see-and-do/attractions/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Attractions", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2F", "interactionText": "Attractions" } }' >Attractions</a> <a href="/things-to-see-and-do/attractions/family-friendly/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Family%20Friendly", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Ffamily-friendly%2F", "interactionText": "Family%20Friendly" } }' >Family Friendly</a> <a href="/things-to-see-and-do/attractions/free-things-to-do-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Free%20Things%20To%20Do%20in%20Manchester", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Ffree-things-to-do-manchester%2F", "interactionText": "Free%20Things%20To%20Do%20in%20Manchester" } }' >Free Things To Do in Manchester</a> <a href="/things-to-see-and-do/attractions/museums-and-galleries/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Museums%20%26%20Galleries", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Fmuseums-and-galleries%2F", "interactionText": "Museums%20%26%20Galleries" } }' >Museums & Galleries</a> <a href="/things-to-see-and-do/attractions/heritage-and-history/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Heritage%20%26%20History", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Fheritage-and-history%2F", "interactionText": "Heritage%20%26%20History" } }' >Heritage & History</a> <a href="/things-to-see-and-do/attractions/animal-attractions-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Animal%20Attractions", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Fanimal-attractions-in-manchester%2F", "interactionText": "Animal%20Attractions" } }' >Animal Attractions</a> <a href="/things-to-see-and-do/attractions/parks-and-gardens/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Parks%20%26%20Gardens", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Fparks-and-gardens%2F", "interactionText": "Parks%20%26%20Gardens" } }' >Parks & Gardens</a> <a href="/things-to-see-and-do/attractions/sports/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Sporting%20Attractions", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Fsports%2F", "interactionText": "Sporting%20Attractions" } }' >Sporting Attractions</a> <a href="/things-to-see-and-do/attractions/stately-homes-and-manors/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Stately%20Homes%20%26%20Manors", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Fstately-homes-and-manors%2F", "interactionText": "Stately%20Homes%20%26%20Manors" } }' >Stately Homes & Manors</a> <a href="/things-to-see-and-do/attractions/transport-heritage/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Transport%20Heritage", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Ftransport-heritage%2F", "interactionText": "Transport%20Heritage" } }' >Transport Heritage</a> <a href="/things-to-see-and-do/attractions/unique-experiences/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Unique%20Experiences", "interactionUrl": "%2Fthings-to-see-and-do%2Fattractions%2Funique-experiences%2F", "interactionText": "Unique%20Experiences" } }' >Unique Experiences</a> <a href="/things-to-see-and-do/tours-sightseeing/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Tours%20%26%20Sightseeing", "interactionUrl": "%2Fthings-to-see-and-do%2Ftours-sightseeing%2F", "interactionText": "Tours%20%26%20Sightseeing" } }' >Tours & Sightseeing</a> <a href="/things-to-see-and-do/tours-sightseeing/boat-tours/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Boat%20Tours", "interactionUrl": "%2Fthings-to-see-and-do%2Ftours-sightseeing%2Fboat-tours%2F", "interactionText": "Boat%20Tours" } }' >Boat Tours</a> <a href="/things-to-see-and-do/tours-sightseeing/bus-and-taxi-tours/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Bus%20%26%20Taxi%20Tours", "interactionUrl": "%2Fthings-to-see-and-do%2Ftours-sightseeing%2Fbus-and-taxi-tours%2F", "interactionText": "Bus%20%26%20Taxi%20Tours" } }' >Bus & Taxi Tours</a> <a href="/things-to-see-and-do/tours-sightseeing/train-tours/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Train%20Tours", "interactionUrl": "%2Fthings-to-see-and-do%2Ftours-sightseeing%2Ftrain-tours%2F", "interactionText": "Train%20Tours" } }' >Train Tours</a> <a href="/things-to-see-and-do/tours-sightseeing/walking-tours/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Walking%20Tours", "interactionUrl": "%2Fthings-to-see-and-do%2Ftours-sightseeing%2Fwalking-tours%2F", "interactionText": "Walking%20Tours" } }' >Walking Tours</a> <a href="/things-to-see-and-do/activities/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Activities", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2F", "interactionText": "Activities" } }' >Activities</a> <a href="/things-to-see-and-do/activities/adventure-and-outdoor/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Adventure%20%26%20Outdoor", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2Fadventure-and-outdoor%2F", "interactionText": "Adventure%20%26%20Outdoor" } }' >Adventure & Outdoor</a> <a href="/things-to-see-and-do/activities/cycling-routes/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Cycling%20Routes", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2Fcycling-routes%2F", "interactionText": "Cycling%20Routes" } }' >Cycling Routes</a> <a href="/things-to-see-and-do/activities/food-and-drink-experiences/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Food%20%26%20Drink%20Experiences", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2Ffood-and-drink-experiences%2F", "interactionText": "Food%20%26%20Drink%20Experiences" } }' >Food & Drink Experiences</a> <a href="/things-to-see-and-do/activities/health-and-spa/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Health%20%26%20Spa", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2Fhealth-and-spa%2F", "interactionText": "Health%20%26%20Spa" } }' >Health & Spa</a> <a href="/things-to-see-and-do/activities/sport/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Sport", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2Fsport%2F", "interactionText": "Sport" } }' >Sport</a> <a href="/things-to-see-and-do/activities/walking/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Walking%20Trails", "interactionUrl": "%2Fthings-to-see-and-do%2Factivities%2Fwalking%2F", "interactionText": "Walking%20Trails" } }' >Walking Trails</a> <a href="/things-to-see-and-do/entertainment/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Entertainment", "interactionUrl": "%2Fthings-to-see-and-do%2Fentertainment%2F", "interactionText": "Entertainment" } }' >Entertainment</a> <a href="/things-to-see-and-do/entertainment/cinemas/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Cinemas", "interactionUrl": "%2Fthings-to-see-and-do%2Fentertainment%2Fcinemas%2F", "interactionText": "Cinemas" } }' >Cinemas</a> <a href="/things-to-see-and-do/entertainment/comedy-and-cabaret/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Comedy%20%26%20Cabaret", "interactionUrl": "%2Fthings-to-see-and-do%2Fentertainment%2Fcomedy-and-cabaret%2F", "interactionText": "Comedy%20%26%20Cabaret" } }' >Comedy & Cabaret</a> <a href="/things-to-see-and-do/entertainment/music-venues/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Music%20Venues", "interactionUrl": "%2Fthings-to-see-and-do%2Fentertainment%2Fmusic-venues%2F", "interactionText": "Music%20Venues" } }' >Music Venues</a> <a href="/things-to-see-and-do/entertainment/night-clubs/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Night%20Clubs%20%26%20Nightlife", "interactionUrl": "%2Fthings-to-see-and-do%2Fentertainment%2Fnight-clubs%2F", "interactionText": "Night%20Clubs%20%26%20Nightlife" } }' >Night Clubs & Nightlife</a> <a href="/things-to-see-and-do/entertainment/performing-arts/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Performing%20Arts", "interactionUrl": "%2Fthings-to-see-and-do%2Fentertainment%2Fperforming-arts%2F", "interactionText": "Performing%20Arts" } }' >Performing Arts</a> <a href="/things-to-see-and-do/explore/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Explore%20Greater%20Manchester", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2F", "interactionText": "Explore%20Greater%20Manchester" } }' >Explore Greater Manchester</a> <a href="/things-to-see-and-do/explore/bolton/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Bolton", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fbolton%2F", "interactionText": "Bolton" } }' >Bolton</a> <a href="/things-to-see-and-do/explore/bury/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Bury", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fbury%2F", "interactionText": "Bury" } }' >Bury</a> <a href="/things-to-see-and-do/explore/oldham/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Oldham", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Foldham%2F", "interactionText": "Oldham" } }' >Oldham</a> <a href="/things-to-see-and-do/explore/rochdale/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Rochdale", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Frochdale%2F", "interactionText": "Rochdale" } }' >Rochdale</a> <a href="/things-to-see-and-do/explore/salford/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Salford", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fsalford%2F", "interactionText": "Salford" } }' >Salford</a> <a href="/things-to-see-and-do/explore/stockport/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Stockport", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fstockport%2F", "interactionText": "Stockport" } }' >Stockport</a> <a href="/things-to-see-and-do/explore/tameside/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Tameside", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Ftameside%2F", "interactionText": "Tameside" } }' >Tameside</a> <a href="/things-to-see-and-do/explore/trafford/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Trafford", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Ftrafford%2F", "interactionText": "Trafford" } }' >Trafford</a> <a href="/things-to-see-and-do/explore/wigan/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Wigan", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fwigan%2F", "interactionText": "Wigan" } }' >Wigan</a> <a href="/things-to-see-and-do/explore/the-quays/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "MediaCity%20and%20The%20Quays", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fthe-quays%2F", "interactionText": "MediaCity%20and%20The%20Quays" } }' >MediaCity and The Quays</a> <a href="/things-to-see-and-do/explore/neighbourhoods/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Neighbourhoods", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore%2Fneighbourhoods%2F", "interactionText": "Neighbourhoods" } }' >Neighbourhoods</a> <a href="/things-to-see-and-do/explore-the-north/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Manchester%20-%20Gateway%20To%20The%20North", "interactionUrl": "%2Fthings-to-see-and-do%2Fexplore-the-north%2F", "interactionText": "Manchester%20-%20Gateway%20To%20The%20North" } }' >Manchester - Gateway To The North</a> <a href="/things-to-see-and-do/sustainable-things-to-do/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Sustainable%20things%20to%20do", "interactionUrl": "%2Fthings-to-see-and-do%2Fsustainable-things-to-do%2F", "interactionText": "Sustainable%20things%20to%20do" } }' >Sustainable things to do</a> <a href="/whats-on/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20On", "interactionUrl": "%2Fwhats-on%2F", "interactionText": "What%27s%20On" } }' >What's On</a> <a href="/whats-on/events/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Events", "interactionUrl": "%2Fwhats-on%2Fevents%2F", "interactionText": "Events" } }' >Events</a> <a href="/whats-on/events/entertainment-events/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Entertainment%20Events", "interactionUrl": "%2Fwhats-on%2Fevents%2Fentertainment-events%2F", "interactionText": "Entertainment%20Events" } }' >Entertainment Events</a> <a href="/whats-on/events/family-events/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Family%20Events", "interactionUrl": "%2Fwhats-on%2Fevents%2Ffamily-events%2F", "interactionText": "Family%20Events" } }' >Family Events</a> <a href="/whats-on/events/music-events/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Gigs%20%26%20Concerts", "interactionUrl": "%2Fwhats-on%2Fevents%2Fmusic-events%2F", "interactionText": "Gigs%20%26%20Concerts" } }' >Gigs & Concerts</a> <a href="/whats-on/events/whats-on-at-home/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20HOME", "interactionUrl": "%2Fwhats-on%2Fevents%2Fwhats-on-at-home%2F", "interactionText": "What%27s%20on%20at%20HOME" } }' >What's on at HOME</a> <a href="/whats-on/events/events-at-manchester-arena/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20AO%20Arena", "interactionUrl": "%2Fwhats-on%2Fevents%2Fevents-at-manchester-arena%2F", "interactionText": "What%27s%20on%20at%20AO%20Arena" } }' >What's on at AO Arena</a> <a href="/whats-on/events/events-at-co-op-live/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20Co-op%20Live", "interactionUrl": "%2Fwhats-on%2Fevents%2Fevents-at-co-op-live%2F", "interactionText": "What%27s%20on%20at%20Co-op%20Live" } }' >What's on at Co-op Live</a> <a href="/whats-on/events/whats-on-at-aviva-studios/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20Aviva%20Studios", "interactionUrl": "%2Fwhats-on%2Fevents%2Fwhats-on-at-aviva-studios%2F", "interactionText": "What%27s%20on%20at%20Aviva%20Studios" } }' >What's on at Aviva Studios</a> <a href="/whats-on/events/whats-on-at-the-bridgewater-hall/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20Bridgewater%20Hall", "interactionUrl": "%2Fwhats-on%2Fevents%2Fwhats-on-at-the-bridgewater-hall%2F", "interactionText": "What%27s%20on%20at%20Bridgewater%20Hall" } }' >What's on at Bridgewater Hall</a> <a href="/whats-on/events/whats-on-at-the-contact-theatre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20Contact%20Theatre", "interactionUrl": "%2Fwhats-on%2Fevents%2Fwhats-on-at-the-contact-theatre%2F", "interactionText": "What%27s%20on%20at%20Contact%20Theatre" } }' >What's on at Contact Theatre</a> <a href="/whats-on/events/events-at-the-lowry/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20The%20Lowry", "interactionUrl": "%2Fwhats-on%2Fevents%2Fevents-at-the-lowry%2F", "interactionText": "What%27s%20on%20at%20The%20Lowry" } }' >What's on at The Lowry</a> <a href="/whats-on/events/whats-on-opera-house-palace-theatre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20Manchester%20Opera%20House%20%26%20Palace%20Theatre", "interactionUrl": "%2Fwhats-on%2Fevents%2Fwhats-on-opera-house-palace-theatre%2F", "interactionText": "What%27s%20on%20at%20Manchester%20Opera%20House%20%26%20Palace%20Theatre" } }' >What's on at Manchester Opera House & Palace Theatre</a> <a href="/whats-on/events/whats-on-at-the-royal-exchange-theatre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20at%20Royal%20Exchange%20Theatre", "interactionUrl": "%2Fwhats-on%2Fevents%2Fwhats-on-at-the-royal-exchange-theatre%2F", "interactionText": "What%27s%20on%20at%20Royal%20Exchange%20Theatre" } }' >What's on at Royal Exchange Theatre</a> <a href="/whats-on/exhibitions/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Exhibitions", "interactionUrl": "%2Fwhats-on%2Fexhibitions%2F", "interactionText": "Exhibitions" } }' >Exhibitions</a> <a href="/whats-on/festivals/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Festivals", "interactionUrl": "%2Fwhats-on%2Ffestivals%2F", "interactionText": "Festivals" } }' >Festivals</a> <a href="/whats-on/sporting-events/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Sporting%20Events", "interactionUrl": "%2Fwhats-on%2Fsporting-events%2F", "interactionText": "Sporting%20Events" } }' >Sporting Events</a> <a href="/whats-on/theatre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Theatre", "interactionUrl": "%2Fwhats-on%2Ftheatre%2F", "interactionText": "Theatre" } }' >Theatre</a> <a href="/whats-on/whats-on-this-weekend/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20On%20This%20Weekend", "interactionUrl": "%2Fwhats-on%2Fwhats-on-this-weekend%2F", "interactionText": "What%27s%20On%20This%20Weekend" } }' >What's On This Weekend</a> <a href="/whats-on/whats-on-this-week/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20On%20This%20Week", "interactionUrl": "%2Fwhats-on%2Fwhats-on-this-week%2F", "interactionText": "What%27s%20On%20This%20Week" } }' >What's On This Week</a> <a href="/whats-on/half-term/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20On%20This%20Half%20Term", "interactionUrl": "%2Fwhats-on%2Fhalf-term%2F", "interactionText": "What%27s%20On%20This%20Half%20Term" } }' >What's On This Half Term</a> <a href="/whats-on/whats-on-this-halloween-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20On%20this%20Halloween%20in%20Manchester", "interactionUrl": "%2Fwhats-on%2Fwhats-on-this-halloween-in-manchester%2F", "interactionText": "What%27s%20On%20this%20Halloween%20in%20Manchester" } }' >What's On this Halloween in Manchester</a> <a href="/whats-on/whats-on-this-christmas-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "What%27s%20on%20This%20Christmas%20in%20Manchester", "interactionUrl": "%2Fwhats-on%2Fwhats-on-this-christmas-in-manchester%2F", "interactionText": "What%27s%20on%20This%20Christmas%20in%20Manchester" } }' >What's on This Christmas in Manchester</a> <a href="/whats-on/submit-event/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Submit%20an%20Event", "interactionUrl": "%2Fwhats-on%2Fsubmit-event%2F", "interactionText": "Submit%20an%20Event" } }' >Submit an Event</a> <a href="/shopping/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Shopping", "interactionUrl": "%2Fshopping%2F", "interactionText": "Shopping" } }' >Shopping</a> <a href="/shopping/areas-to-go-shopping-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Areas%20to%20go%20shopping%20in%20Manchester", "interactionUrl": "%2Fshopping%2Fareas-to-go-shopping-in-manchester%2F", "interactionText": "Areas%20to%20go%20shopping%20in%20Manchester" } }' >Areas to go shopping in Manchester</a> <a href="/shopping/areas-to-go-shopping-in-manchester/altrincham/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Altrincham", "interactionUrl": "%2Fshopping%2Fareas-to-go-shopping-in-manchester%2Faltrincham%2F", "interactionText": "Altrincham" } }' >Altrincham</a> <a href="https://www.visitmanchester.com/things-to-see-and-do/explore/neighbourhoods/king-street/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "King%20Street", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fthings-to-see-and-do%2Fexplore%2Fneighbourhoods%2Fking-street%2F", "interactionText": "King%20Street" } }' >King Street</a> <a href="/shopping/areas-to-go-shopping-in-manchester/manchester-arndale/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Manchester%20Arndale", "interactionUrl": "%2Fshopping%2Fareas-to-go-shopping-in-manchester%2Fmanchester-arndale%2F", "interactionText": "Manchester%20Arndale" } }' >Manchester Arndale</a> <a href="/shopping/areas-to-go-shopping-in-manchester/the-northern-quarter/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "The%20Northern%20Quarter", "interactionUrl": "%2Fshopping%2Fareas-to-go-shopping-in-manchester%2Fthe-northern-quarter%2F", "interactionText": "The%20Northern%20Quarter" } }' >The Northern Quarter</a> <a href="/shopping/areas-to-go-shopping-in-manchester/the-trafford-centre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "The%20Trafford%20Centre", "interactionUrl": "%2Fshopping%2Fareas-to-go-shopping-in-manchester%2Fthe-trafford-centre%2F", "interactionText": "The%20Trafford%20Centre" } }' >The Trafford Centre</a> <a href="/shopping/department-stores/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Department%20Stores", "interactionUrl": "%2Fshopping%2Fdepartment-stores%2F", "interactionText": "Department%20Stores" } }' >Department Stores</a> <a href="/shopping/designer-shops/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Designer%20Shops", "interactionUrl": "%2Fshopping%2Fdesigner-shops%2F", "interactionText": "Designer%20Shops" } }' >Designer Shops</a> <a href="/shopping/high-streets/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "High%20Street", "interactionUrl": "%2Fshopping%2Fhigh-streets%2F", "interactionText": "High%20Street" } }' >High Street</a> <a href="/shopping/independent/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Independent", "interactionUrl": "%2Fshopping%2Findependent%2F", "interactionText": "Independent" } }' >Independent</a> <a href="https://www.visitmanchester.com/things-to-see-and-do/explore/neighbourhoods/king-street/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "King%20Street", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fthings-to-see-and-do%2Fexplore%2Fneighbourhoods%2Fking-street%2F", "interactionText": "King%20Street" } }' >King Street</a> <a href="/shopping/manchesters-jewellery-quarter/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Manchester%27s%20Jewellery%20Quarter", "interactionUrl": "%2Fshopping%2Fmanchesters-jewellery-quarter%2F", "interactionText": "Manchester%27s%20Jewellery%20Quarter" } }' >Manchester's Jewellery Quarter</a> <a href="/shopping/outlet-centres/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Outlet%20Centres", "interactionUrl": "%2Fshopping%2Foutlet-centres%2F", "interactionText": "Outlet%20Centres" } }' >Outlet Centres</a> <a href="/shopping/shopping-centres/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Shopping%20Centres", "interactionUrl": "%2Fshopping%2Fshopping-centres%2F", "interactionText": "Shopping%20Centres" } }' >Shopping Centres</a> <a href="/shopping/shopping-in-manchester-city-centre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Shopping%20in%20Manchester%20City%20Centre", "interactionUrl": "%2Fshopping%2Fshopping-in-manchester-city-centre%2F", "interactionText": "Shopping%20in%20Manchester%20City%20Centre" } }' >Shopping in Manchester City Centre</a> <a href="/where-to-stay/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Where%20to%20Stay", "interactionUrl": "%2Fwhere-to-stay%2F", "interactionText": "Where%20to%20Stay" } }' >Where to Stay</a> <a href="/where-to-stay/hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2F", "interactionText": "Hotels" } }' >Hotels</a> <a href="/where-to-stay/hotels/manchester-city-centre-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Hotels%20in%20Manchester%20City%20Centre", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fmanchester-city-centre-hotels%2F", "interactionText": "Hotels%20in%20Manchester%20City%20Centre" } }' >Hotels in Manchester City Centre</a> <a href="/where-to-stay/hotels/manchester-airport-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Manchester%20Airport%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fmanchester-airport-hotels%2F", "interactionText": "Manchester%20Airport%20Hotels" } }' >Manchester Airport Hotels</a> <a href="/where-to-stay/hotels/luxury-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Luxury%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fluxury-hotels%2F", "interactionText": "Luxury%20Hotels" } }' >Luxury Hotels</a> <a href="/where-to-stay/hotels/family-friendly/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Family-Friendly%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Ffamily-friendly%2F", "interactionText": "Family-Friendly%20Hotels" } }' >Family-Friendly Hotels</a> <a href="/where-to-stay/hotels/manchester-hotels-with-swimming-pools/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Hotels%20With%20Swimming%20Pools", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fmanchester-hotels-with-swimming-pools%2F", "interactionText": "Hotels%20With%20Swimming%20Pools" } }' >Hotels With Swimming Pools</a> <a href="/where-to-stay/hotels/spa-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Spa%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fspa-hotels%2F", "interactionText": "Spa%20Hotels" } }' >Spa Hotels</a> <a href="/where-to-stay/hotels/budget-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Budget%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fbudget-hotels%2F", "interactionText": "Budget%20Hotels" } }' >Budget Hotels</a> <a href="/where-to-stay/hotels/countryside-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Countryside%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fcountryside-hotels%2F", "interactionText": "Countryside%20Hotels" } }' >Countryside Hotels</a> <a href="/where-to-stay/hotels/pet-friendly-hotels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Pet-Friendly%20Hotels", "interactionUrl": "%2Fwhere-to-stay%2Fhotels%2Fpet-friendly-hotels%2F", "interactionText": "Pet-Friendly%20Hotels" } }' >Pet-Friendly Hotels</a> <a href="/where-to-stay/serviced-apartments/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Serviced%20Apartments", "interactionUrl": "%2Fwhere-to-stay%2Fserviced-apartments%2F", "interactionText": "Serviced%20Apartments" } }' >Serviced Apartments</a> <a href="/where-to-stay/bed-and-breakfasts/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Bed%20%26%20Breakfasts", "interactionUrl": "%2Fwhere-to-stay%2Fbed-and-breakfasts%2F", "interactionText": "Bed%20%26%20Breakfasts" } }' >Bed & Breakfasts</a> <a href="/where-to-stay/self-catering/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Self%20Catering", "interactionUrl": "%2Fwhere-to-stay%2Fself-catering%2F", "interactionText": "Self%20Catering" } }' >Self Catering</a> <a href="/where-to-stay/camping-and-caravanning/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Camping%20%26%20Caravanning", "interactionUrl": "%2Fwhere-to-stay%2Fcamping-and-caravanning%2F", "interactionText": "Camping%20%26%20Caravanning" } }' >Camping & Caravanning</a> <a href="/where-to-stay/eco-friendly-accommodation/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Eco-friendly%20Accommodation", "interactionUrl": "%2Fwhere-to-stay%2Feco-friendly-accommodation%2F", "interactionText": "Eco-friendly%20Accommodation" } }' >Eco-friendly Accommodation</a> <a href="/where-to-stay/group-friendly-accommodation/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Group%20friendly%20Accommodation", "interactionUrl": "%2Fwhere-to-stay%2Fgroup-friendly-accommodation%2F", "interactionText": "Group%20friendly%20Accommodation" } }' >Group friendly Accommodation</a> <a href="/where-to-stay/hostels/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Hostels", "interactionUrl": "%2Fwhere-to-stay%2Fhostels%2F", "interactionText": "Hostels" } }' >Hostels</a> <a href="/food-and-drink/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Food%20%26%20Drink", "interactionUrl": "%2Ffood-and-drink%2F", "interactionText": "Food%20%26%20Drink" } }' >Food & Drink</a> <a href="/food-and-drink/restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2F", "interactionText": "Restaurants" } }' >Restaurants</a> <a href="/food-and-drink/restaurants/american-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "American%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Famerican-restaurants%2F", "interactionText": "American%20Restaurants" } }' >American Restaurants</a> <a href="/food-and-drink/restaurants/caribbean-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Caribbean%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fcaribbean-restaurants%2F", "interactionText": "Caribbean%20Restaurants" } }' >Caribbean Restaurants</a> <a href="/food-and-drink/restaurants/chinese-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Chinese%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fchinese-restaurants%2F", "interactionText": "Chinese%20Restaurants" } }' >Chinese Restaurants</a> <a href="/food-and-drink/restaurants/health-food-restaurants-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Health%20Food%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fhealth-food-restaurants-in-manchester%2F", "interactionText": "Health%20Food%20Restaurants" } }' >Health Food Restaurants</a> <a href="/food-and-drink/restaurants/indian-restaurant-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Indian%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Findian-restaurant-in-manchester%2F", "interactionText": "Indian%20Restaurants" } }' >Indian Restaurants</a> <a href="/food-and-drink/restaurants/italian-restaurants-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Italian%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fitalian-restaurants-in-manchester%2F", "interactionText": "Italian%20Restaurants" } }' >Italian Restaurants</a> <a href="/food-and-drink/restaurants/spanish-restaurants-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Spanish%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fspanish-restaurants-in-manchester%2F", "interactionText": "Spanish%20Restaurants" } }' >Spanish Restaurants</a> <a href="/food-and-drink/restaurants/japanese-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Japanese%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fjapanese-restaurants%2F", "interactionText": "Japanese%20Restaurants" } }' >Japanese Restaurants</a> <a href="/food-and-drink/restaurants/thai-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Thai%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fthai-restaurants%2F", "interactionText": "Thai%20Restaurants" } }' >Thai Restaurants</a> <a href="/food-and-drink/restaurants/vietnamese-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Vietnamese%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fvietnamese-restaurants%2F", "interactionText": "Vietnamese%20Restaurants" } }' >Vietnamese Restaurants</a> <a href="/food-and-drink/restaurants/mexican-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Mexican%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fmexican-restaurants%2F", "interactionText": "Mexican%20Restaurants" } }' >Mexican Restaurants</a> <a href="/food-and-drink/restaurants/greek-restaurants/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Greek%20Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2Fgreek-restaurants%2F", "interactionText": "Greek%20Restaurants" } }' >Greek Restaurants</a> <a href="/food-and-drink/pubs-and-bars/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Pubs%20%26%20Bars", "interactionUrl": "%2Ffood-and-drink%2Fpubs-and-bars%2F", "interactionText": "Pubs%20%26%20Bars" } }' >Pubs & Bars</a> <a href="/food-and-drink/pubs-and-bars/country-pubs/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Country%20Pubs", "interactionUrl": "%2Ffood-and-drink%2Fpubs-and-bars%2Fcountry-pubs%2F", "interactionText": "Country%20Pubs" } }' >Country Pubs</a> <a href="/food-and-drink/pubs-and-bars/independent-bars/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Independent%20Bars", "interactionUrl": "%2Ffood-and-drink%2Fpubs-and-bars%2Findependent-bars%2F", "interactionText": "Independent%20Bars" } }' >Independent Bars</a> <a href="/food-and-drink/afternoon-tea/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Afternoon%20Tea", "interactionUrl": "%2Ffood-and-drink%2Fafternoon-tea%2F", "interactionText": "Afternoon%20Tea" } }' >Afternoon Tea</a> <a href="/food-and-drink/cafes-and-delis/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Cafes%20%26%20Delis", "interactionUrl": "%2Ffood-and-drink%2Fcafes-and-delis%2F", "interactionText": "Cafes%20%26%20Delis" } }' >Cafes & Delis</a> <a href="/food-and-drink/coffee-shops/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Coffee%20Shops", "interactionUrl": "%2Ffood-and-drink%2Fcoffee-shops%2F", "interactionText": "Coffee%20Shops" } }' >Coffee Shops</a> <a href="/food-and-drink/family-friendly/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Family%20Friendly", "interactionUrl": "%2Ffood-and-drink%2Ffamily-friendly%2F", "interactionText": "Family%20Friendly" } }' >Family Friendly</a> <a href="/food-and-drink/halal/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Halal", "interactionUrl": "%2Ffood-and-drink%2Fhalal%2F", "interactionText": "Halal" } }' >Halal</a> <a href="/food-and-drink/vegetarian/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Vegetarian", "interactionUrl": "%2Ffood-and-drink%2Fvegetarian%2F", "interactionText": "Vegetarian" } }' >Vegetarian</a> <a href="/food-and-drink/local-produce/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Local%20Produce", "interactionUrl": "%2Ffood-and-drink%2Flocal-produce%2F", "interactionText": "Local%20Produce" } }' >Local Produce</a> <a href="/food-and-drink/micro-breweries/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Micro%20Breweries", "interactionUrl": "%2Ffood-and-drink%2Fmicro-breweries%2F", "interactionText": "Micro%20Breweries" } }' >Micro Breweries</a> <a href="/food-and-drink/food-halls/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Food%20Halls", "interactionUrl": "%2Ffood-and-drink%2Ffood-halls%2F", "interactionText": "Food%20Halls" } }' >Food Halls</a> <a href="/food-and-drink/new-food-drink-openings-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "New%20Food%20%26%20Drink%20Openings%20in%20Manchester", "interactionUrl": "%2Ffood-and-drink%2Fnew-food-drink-openings-in-manchester%2F", "interactionText": "New%20Food%20%26%20Drink%20Openings%20in%20Manchester" } }' >New Food & Drink Openings in Manchester</a> <a href="/ideas-and-inspiration/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Ideas%20%26%20Inspiration", "interactionUrl": "%2Fideas-and-inspiration%2F", "interactionText": "Ideas%20%26%20Inspiration" } }' >Ideas & Inspiration</a> <a href="/ideas-and-inspiration/blog/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Blog", "interactionUrl": "%2Fideas-and-inspiration%2Fblog%2F", "interactionText": "Blog" } }' >Blog</a> <a href="/ideas-and-inspiration/guides-to-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Guides%20to%20Manchester", "interactionUrl": "%2Fideas-and-inspiration%2Fguides-to-manchester%2F", "interactionText": "Guides%20to%20Manchester" } }' >Guides to Manchester</a> <a href="/ideas-and-inspiration/special-offers/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Special%20Offers", "interactionUrl": "%2Fideas-and-inspiration%2Fspecial-offers%2F", "interactionText": "Special%20Offers" } }' >Special Offers</a> <a href="/ideas-and-inspiration/itineraries/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Itineraries", "interactionUrl": "%2Fideas-and-inspiration%2Fitineraries%2F", "interactionText": "Itineraries" } }' >Itineraries</a> <a href="/ideas-and-inspiration/competitions/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Competitions", "interactionUrl": "%2Fideas-and-inspiration%2Fcompetitions%2F", "interactionText": "Competitions" } }' >Competitions</a> <a href="/ideas-and-inspiration/unmissable-music-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Unmissable%20Music%20in%20Manchester", "interactionUrl": "%2Fideas-and-inspiration%2Funmissable-music-in-manchester%2F", "interactionText": "Unmissable%20Music%20in%20Manchester" } }' >Unmissable Music in Manchester</a> <a href="/ideas-and-inspiration/arts-and-culture/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Arts%20and%20Culture", "interactionUrl": "%2Fideas-and-inspiration%2Farts-and-culture%2F", "interactionText": "Arts%20and%20Culture" } }' >Arts and Culture</a> <a href="/ideas-and-inspiration/countryside/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Countryside", "interactionUrl": "%2Fideas-and-inspiration%2Fcountryside%2F", "interactionText": "Countryside" } }' >Countryside</a> <a href="/ideas-and-inspiration/haunt-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Haunt%20Manchester", "interactionUrl": "%2Fideas-and-inspiration%2Fhaunt-manchester%2F", "interactionText": "Haunt%20Manchester" } }' >Haunt Manchester</a> <a href="/ideas-and-inspiration/lgbt/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "LGBTQ%2B", "interactionUrl": "%2Fideas-and-inspiration%2Flgbt%2F", "interactionText": "LGBTQ%2B" } }' >LGBTQ+</a> <a href="/ideas-and-inspiration/literature/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Literature", "interactionUrl": "%2Fideas-and-inspiration%2Fliterature%2F", "interactionText": "Literature" } }' >Literature</a> <a href="/ideas-and-inspiration/christmas/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Christmas%20in%20Manchester", "interactionUrl": "%2Fideas-and-inspiration%2Fchristmas%2F", "interactionText": "Christmas%20in%20Manchester" } }' >Christmas in Manchester</a> <a href="/ideas-and-inspiration/proud/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Proud", "interactionUrl": "%2Fideas-and-inspiration%2Fproud%2F", "interactionText": "Proud" } }' >Proud</a> <a href="/ideas-and-inspiration/sport/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Sport", "interactionUrl": "%2Fideas-and-inspiration%2Fsport%2F", "interactionText": "Sport" } }' >Sport</a> <a href="/visitor-information/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Visitor%20Information", "interactionUrl": "%2Fvisitor-information%2F", "interactionText": "Visitor%20Information" } }' >Visitor Information</a> <a href="/visitor-information/travel-information/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Travel%20Information", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2F", "interactionText": "Travel%20Information" } }' >Travel Information</a> <a href="/visitor-information/travel-information/getting-here/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Getting%20Here", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2Fgetting-here%2F", "interactionText": "Getting%20Here" } }' >Getting Here</a> <a href="/visitor-information/travel-information/getting-around/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Getting%20Around", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2Fgetting-around%2F", "interactionText": "Getting%20Around" } }' >Getting Around</a> <a href="/visitor-information/travel-information/travelling-around-northern-england/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Travelling%20Around%20Northern%20England", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2Ftravelling-around-northern-england%2F", "interactionText": "Travelling%20Around%20Northern%20England" } }' >Travelling Around Northern England</a> <a href="/visitor-information/travel-information/manchester-airport/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Manchester%20Airport", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2Fmanchester-airport%2F", "interactionText": "Manchester%20Airport" } }' >Manchester Airport</a> <a href="/visitor-information/travel-information/manchester-airport/direct-flights-to-and-from-manchester-airport/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Direct%20Flights%20to%20and%20from%20Manchester%20Airport", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2Fmanchester-airport%2Fdirect-flights-to-and-from-manchester-airport%2F", "interactionText": "Direct%20Flights%20to%20and%20from%20Manchester%20Airport" } }' >Direct Flights to and from Manchester Airport</a> <a href="/visitor-information/travel-information/bike-hire-in-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Bike%20hire%20in%20Manchester", "interactionUrl": "%2Fvisitor-information%2Ftravel-information%2Fbike-hire-in-manchester%2F", "interactionText": "Bike%20hire%20in%20Manchester" } }' >Bike hire in Manchester</a> <a href="/visitor-information/visitor-information-centre/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Visitor%20Information%20Centres", "interactionUrl": "%2Fvisitor-information%2Fvisitor-information-centre%2F", "interactionText": "Visitor%20Information%20Centres" } }' >Visitor Information Centres</a> <a href="/visitor-information/maps/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Maps", "interactionUrl": "%2Fvisitor-information%2Fmaps%2F", "interactionText": "Maps" } }' >Maps</a> <a href="/visitor-information/accessible-manchester/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Accessible%20Manchester", "interactionUrl": "%2Fvisitor-information%2Faccessible-manchester%2F", "interactionText": "Accessible%20Manchester" } }' >Accessible Manchester</a> <a href="/visitor-information/left-luggage/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Luggage%20Storage", "interactionUrl": "%2Fvisitor-information%2Fleft-luggage%2F", "interactionText": "Luggage%20Storage" } }' >Luggage Storage</a> <a href="/visitor-information/bureau-de-change/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Bureau%20de%20Change", "interactionUrl": "%2Fvisitor-information%2Fbureau-de-change%2F", "interactionText": "Bureau%20de%20Change" } }' >Bureau de Change</a> <a href="/visitor-information/wi-fi/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Free%20Wi-Fi", "interactionUrl": "%2Fvisitor-information%2Fwi-fi%2F", "interactionText": "Free%20Wi-Fi" } }' >Free Wi-Fi</a> <a href="/visitor-information/weather/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Weather", "interactionUrl": "%2Fvisitor-information%2Fweather%2F", "interactionText": "Weather" } }' >Weather</a> <a href="/visitor-information/manchester-accommodation-business-improvement-district/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Accommodation%20Business%20Improvement%20District", "interactionUrl": "%2Fvisitor-information%2Fmanchester-accommodation-business-improvement-district%2F", "interactionText": "Accommodation%20Business%20Improvement%20District" } }' >Accommodation Business Improvement District</a> <a href="/visitor-information/travel-trade/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Travel%20Trade%20and%20Groups", "interactionUrl": "%2Fvisitor-information%2Ftravel-trade%2F", "interactionText": "Travel%20Trade%20and%20Groups" } }' >Travel Trade and Groups</a> <a href="/visitor-information/visit-manchester-well/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Visit%20Manchester%20Well", "interactionUrl": "%2Fvisitor-information%2Fvisit-manchester-well%2F", "interactionText": "Visit%20Manchester%20Well" } }' >Visit Manchester Well</a> <a href="/articles/post/" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Post", "interactionUrl": "%2Farticles%2Fpost%2F", "interactionText": "Post" } }' >Post</a> </nav> </noscript> <button class="menu-toggle" type="button" aria-label="toggle menu" aria-haspopup="true" aria-expanded="false" aria-controls="primary-site-menu" data-action="toggle-menu" > <span class="hamburger-inner"></span> </button> <nav class="navigation navigation-dropdown primary desktop" role="navigation" data-primary-nav-desktop data-gtm-vars='{ "tClient_ga4": { "eventName": "navigation_click", "navType": "Main", "interactionSource": "navigation" } }' > <script type="text/template" data-nav-item-template>{{+linkTracking}} data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "{{%%data.title}}", "interactionSource": "navigation", "interactionUrl": "{{%%href}}", "interactionText": "{{%%data.title}}" } }' {{/}} {{+nav_items}} {{+nav_items_helper}} {{!-- This nested partial is necessary to make this partial recursive because helpers.partial only outputs the inner text of the partial, not the partial name. Please do not remove! --}} {{#shownchildren}} {{~exec(function() { if (!data.isLazyLoaded) { helpers.var.depth = 1; } else { helpers.var.depth = data.depth; } })}} <div class="nav-item level-{{~var.depth}} {{data.section}}" data-id="{{data.id}}" data-nav-item> <div class="nav-item-control level-{{~var.depth}}"> <a class="nav-link" href="{{href}}" target="{{target}}" {{>linkTracking}} > {{data.title}} </a> {{:shownchildren}} <button id="{{data.id}}" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> {{/}} </div> {{:shownchildren}} <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-{{~var.depth}} {{:isLazyLoaded}} {{:shownChildren.0}}rendered{{/}} {{/}}" aria-labelledby="{{data.id}}" data-parent-id="{{data.id}}" data-start="{{data.folderHref}}" data-section="{{data.section}}" data-dropdown-menu style="display: none" > {{:isLazyLoaded}} {{>nav_items_helper}} {{/}} </div> {{/}} </div> {{/}} {{/}} {{>nav_items_helper}} {{/}} {{>nav_items}}</script> <div class="nav-item level-1 main" data-id="64c8e6f25508b33f5c9f7d68" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Home", "interactionSource": "navigation", "interactionUrl": "%2F", "interactionText": "Home" } }' > Home </a> </div> </div> <div class="nav-item level-1 main" data-id="6525e38b58d8a262bf5e7287" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/things-to-see-and-do/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Things%20To%20Do", "interactionSource": "navigation", "interactionUrl": "%2Fthings-to-see-and-do%2F", "interactionText": "Things%20To%20Do" } }' > Things To Do </a> <button id="6525e38b58d8a262bf5e7287" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38b58d8a262bf5e7287" data-parent-id="6525e38b58d8a262bf5e7287" data-start="/things-to-see-and-do/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38b58d8a262bf5e72d3" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/whats-on/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "What%27s%20On", "interactionSource": "navigation", "interactionUrl": "%2Fwhats-on%2F", "interactionText": "What%27s%20On" } }' > What's On </a> <button id="6525e38b58d8a262bf5e72d3" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38b58d8a262bf5e72d3" data-parent-id="6525e38b58d8a262bf5e72d3" data-start="/whats-on/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38b58d8a262bf5e731f" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/shopping/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Shopping", "interactionSource": "navigation", "interactionUrl": "%2Fshopping%2F", "interactionText": "Shopping" } }' > Shopping </a> <button id="6525e38b58d8a262bf5e731f" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38b58d8a262bf5e731f" data-parent-id="6525e38b58d8a262bf5e731f" data-start="/shopping/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38c58d8a262bf5e736b" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/where-to-stay/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Where%20to%20Stay", "interactionSource": "navigation", "interactionUrl": "%2Fwhere-to-stay%2F", "interactionText": "Where%20to%20Stay" } }' > Where to Stay </a> <button id="6525e38c58d8a262bf5e736b" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38c58d8a262bf5e736b" data-parent-id="6525e38c58d8a262bf5e736b" data-start="/where-to-stay/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38c58d8a262bf5e73b7" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/food-and-drink/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Food%20%26%20Drink", "interactionSource": "navigation", "interactionUrl": "%2Ffood-and-drink%2F", "interactionText": "Food%20%26%20Drink" } }' > Food & Drink </a> <button id="6525e38c58d8a262bf5e73b7" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38c58d8a262bf5e73b7" data-parent-id="6525e38c58d8a262bf5e73b7" data-start="/food-and-drink/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38d58d8a262bf5e7403" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/ideas-and-inspiration/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Ideas%20%26%20Inspiration", "interactionSource": "navigation", "interactionUrl": "%2Fideas-and-inspiration%2F", "interactionText": "Ideas%20%26%20Inspiration" } }' > Ideas & Inspiration </a> <button id="6525e38d58d8a262bf5e7403" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38d58d8a262bf5e7403" data-parent-id="6525e38d58d8a262bf5e7403" data-start="/ideas-and-inspiration/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38d58d8a262bf5e744f" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/visitor-information/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Visitor%20Information", "interactionSource": "navigation", "interactionUrl": "%2Fvisitor-information%2F", "interactionText": "Visitor%20Information" } }' > Visitor Information </a> <button id="6525e38d58d8a262bf5e744f" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38d58d8a262bf5e744f" data-parent-id="6525e38d58d8a262bf5e744f" data-start="/visitor-information/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> </nav> <nav class="navigation primary mobile hide" role="navigation" data-primary-nav-mobile data-gtm-vars='{ "tClient_ga4": { "eventName": "navigation_click", "navType": "Main", "interactionSource": "navigation" } }' > <script type="text/template" data-nav-item-template>{{+linkTracking}} data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "{{%%data.title}}", "interactionSource": "navigation", "interactionUrl": "{{%%href}}", "interactionText": "{{%%data.title}}" } }' {{/}} {{+nav_items}} {{+nav_items_helper}} {{!-- This nested partial is necessary to make this partial recursive because helpers.partial only outputs the inner text of the partial, not the partial name. Please do not remove! --}} {{#shownchildren}} {{~exec(function() { if (!data.isLazyLoaded) { helpers.var.depth = 1; } else { helpers.var.depth = data.depth; } })}} <div class="nav-item level-{{~var.depth}} {{data.section}}" data-id="{{data.id}}" data-nav-item> <div class="nav-item-control level-{{~var.depth}}"> <a class="nav-link" href="{{href}}" target="{{target}}" {{>linkTracking}} > {{data.title}} </a> {{:shownchildren}} <button id="{{data.id}}" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> {{/}} </div> {{:shownchildren}} <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-{{~var.depth}} {{:isLazyLoaded}} {{:shownChildren.0}}rendered{{/}} {{/}}" aria-labelledby="{{data.id}}" data-parent-id="{{data.id}}" data-start="{{data.folderHref}}" data-section="{{data.section}}" data-dropdown-menu style="display: none" > {{:isLazyLoaded}} {{>nav_items_helper}} {{/}} </div> {{/}} </div> {{/}} {{/}} {{>nav_items_helper}} {{/}} {{>nav_items}}</script> <div class="nav-item level-1 main" data-id="64c8e6f25508b33f5c9f7d68" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Home", "interactionSource": "navigation", "interactionUrl": "%2F", "interactionText": "Home" } }' > Home </a> </div> </div> <div class="nav-item level-1 main" data-id="6525e38b58d8a262bf5e7287" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/things-to-see-and-do/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Things%20To%20Do", "interactionSource": "navigation", "interactionUrl": "%2Fthings-to-see-and-do%2F", "interactionText": "Things%20To%20Do" } }' > Things To Do </a> <button id="6525e38b58d8a262bf5e7287" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38b58d8a262bf5e7287" data-parent-id="6525e38b58d8a262bf5e7287" data-start="/things-to-see-and-do/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38b58d8a262bf5e72d3" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/whats-on/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "What%27s%20On", "interactionSource": "navigation", "interactionUrl": "%2Fwhats-on%2F", "interactionText": "What%27s%20On" } }' > What's On </a> <button id="6525e38b58d8a262bf5e72d3" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38b58d8a262bf5e72d3" data-parent-id="6525e38b58d8a262bf5e72d3" data-start="/whats-on/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38b58d8a262bf5e731f" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/shopping/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Shopping", "interactionSource": "navigation", "interactionUrl": "%2Fshopping%2F", "interactionText": "Shopping" } }' > Shopping </a> <button id="6525e38b58d8a262bf5e731f" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38b58d8a262bf5e731f" data-parent-id="6525e38b58d8a262bf5e731f" data-start="/shopping/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38c58d8a262bf5e736b" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/where-to-stay/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Where%20to%20Stay", "interactionSource": "navigation", "interactionUrl": "%2Fwhere-to-stay%2F", "interactionText": "Where%20to%20Stay" } }' > Where to Stay </a> <button id="6525e38c58d8a262bf5e736b" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38c58d8a262bf5e736b" data-parent-id="6525e38c58d8a262bf5e736b" data-start="/where-to-stay/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38c58d8a262bf5e73b7" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/food-and-drink/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Food%20%26%20Drink", "interactionSource": "navigation", "interactionUrl": "%2Ffood-and-drink%2F", "interactionText": "Food%20%26%20Drink" } }' > Food & Drink </a> <button id="6525e38c58d8a262bf5e73b7" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38c58d8a262bf5e73b7" data-parent-id="6525e38c58d8a262bf5e73b7" data-start="/food-and-drink/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38d58d8a262bf5e7403" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/ideas-and-inspiration/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Ideas%20%26%20Inspiration", "interactionSource": "navigation", "interactionUrl": "%2Fideas-and-inspiration%2F", "interactionText": "Ideas%20%26%20Inspiration" } }' > Ideas & Inspiration </a> <button id="6525e38d58d8a262bf5e7403" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38d58d8a262bf5e7403" data-parent-id="6525e38d58d8a262bf5e7403" data-start="/ideas-and-inspiration/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> <div class="nav-item level-1 main" data-id="6525e38d58d8a262bf5e744f" data-nav-item> <div class="nav-item-control level-1"> <a class="nav-link" href="/visitor-information/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "linkObject": "Visitor%20Information", "interactionSource": "navigation", "interactionUrl": "%2Fvisitor-information%2F", "interactionText": "Visitor%20Information" } }' > Visitor Information </a> <button id="6525e38d58d8a262bf5e744f" class="dropdown-toggle" aria-label="open submenu" aria-haspopup="true" aria-expanded="false" data-dropdown-toggle > <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"> </button> </div> <div class="dropdown-helper" data-dropdown-helper></div> <div class="dropdown-menu level-1 " aria-labelledby="6525e38d58d8a262bf5e744f" data-parent-id="6525e38d58d8a262bf5e744f" data-start="/visitor-information/" data-section="main" data-dropdown-menu style="display: none" > </div> </div> </nav> </div> <script> require([ 'jquery', 'plugins_nav_custom_nav_desktop_dropdown', 'plugins_nav_custom_nav_mobile', ], function($, navDesktop, navMobile) { var root = $('[data-guid="3aed4825-9a7c-4a30-bbfb-4a25f6104fd5"]'); var menuToggle = root.find('[data-action="toggle-menu"]'); var bodyOverlay = $('[data-body-overlay]'); var navTreeDepth = 3; navDesktop.init(root, '[data-primary-nav-desktop]', navTreeDepth); navMobile.init(root, '[data-primary-nav-mobile]', '[data-main-nav-cont]', navTreeDepth); function toggleMenu() { document.body.classList.toggle('hamburger-open'); menuToggle.toggleClass('active'); menuToggle.attr('aria-expanded', menuToggle.hasClass('active')); document.querySelector('#primary-site-menu').classList.toggle('active'); } [bodyOverlay, menuToggle].forEach(toggle => toggle.on('click', () => toggleMenu())); }); </script></div> </div> <div class="secondary-nav" data-secondary-nav-cont> <!-- --> <div data-civid="66e1621861c952fb532c6261" class="contentRender contentRender_4 contentRender_type_widget contentRender_name_plugins_collections_type_custom_slides contentRender_name_plugins_collections_template_custom_navigation_card" data-sv-time="90" data-sv-index="4" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <style>.navigation-cards-2-across .img-cont { aspect-ratio: 394 / 547; }@media (min-width: 640px) { .navigation-cards-2-across .img-cont { aspect-ratio: 394 / 547; } }</style> <section class="ccl-widget core-cards navigation-cards-2-across" data-slides-across="1" data-guid="a43e9c3d-a4ad-43a0-9a71-60c77a60ce99" data-js="plugins_collections_custom_collection_default_package" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "widget_interaction", "widgetName" : "Navigation Card", "itemType" : "slides", "interactionSource" : "widget" } }' style="opacity: 0;" > <div class="slides" data-slides> <article class="slide"> <div class="inner" data-gtm-vars='{ "tClient_ga4" : { "interactionSource" : "widget", "itemName" : "Buy%20the%20Visit%20Manchester%20Pass" } }'> <div class="slide-top"> <div class="img-cont"> <a data-asset href="https://manchester-pass.com/" target="_blank" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Image", "interactionUrl": "https://manchester-pass.com/" } }'> <picture> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_547,q_65,w_394,x_2170,y_2304/v1/clients/manchester/VM_Pass_Social_Ads_8cf7ca9a-db66-4ec9-95f1-00b5ac4b59a3.jpg" media="screen and (min-width: 640px)" type="image/avif" width="394" height="547" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_547,q_65,w_394,x_2170,y_2304/v1/clients/manchester/VM_Pass_Social_Ads_8cf7ca9a-db66-4ec9-95f1-00b5ac4b59a3.jpg" media="screen and (min-width: 640px)" type="image/webp" width="394" height="547" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_547,q_65,w_394,x_2170,y_2304/v1/clients/manchester/VM_Pass_Social_Ads_8cf7ca9a-db66-4ec9-95f1-00b5ac4b59a3.jpg" media="screen and (min-width: 640px)" type="image/jpeg" width="394" height="547" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,g_xy_center,h_547,q_65,w_394,x_2170,y_2304/v1/clients/manchester/VM_Pass_Social_Ads_8cf7ca9a-db66-4ec9-95f1-00b5ac4b59a3.jpg" type="image/avif" width="394" height="547" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,g_xy_center,h_547,q_65,w_394,x_2170,y_2304/v1/clients/manchester/VM_Pass_Social_Ads_8cf7ca9a-db66-4ec9-95f1-00b5ac4b59a3.jpg" type="image/webp" width="394" height="547" /> <img class="slide-img" src="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,g_xy_center,h_547,q_65,w_394,x_2170,y_2304/v1/clients/manchester/VM_Pass_Social_Ads_8cf7ca9a-db66-4ec9-95f1-00b5ac4b59a3.jpg" alt="Visit Manchester Pass" loading="lazy" fetchpriority="low" width="394" height="547" onload="this.classList.add('loaded')" /> </picture> </a> </div> </div> <div class="content-section"> <div class="inner"> <h2 class="slide-title"> <a href="https://manchester-pass.com/" target="_blank" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Title", "interactionUrl": "https%3A%2F%2Fmanchester-pass.com%2F", "interactionText" : "Buy%20the%20Visit%20Manchester%20Pass" } }'>Buy the Visit Manchester Pass</a> </h2> <p>Discover Manchester with the Visit Manchester Pass - Entry into 13 of Manchester's top attractions plus over 30 discounts and offers.</p> </div> <footer class="slide-footer"> <a class="read-more" href="https://manchester-pass.com/" target="_blank" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Read%20More", "interactionUrl": "https%3A%2F%2Fmanchester-pass.com%2F", "interactionText" : "Read%20More" } }'>Read More</a> </footer> </div> </div> </article> </div> </section></div> <!-- --> </div> <div class="mobile-footer-nav" data-footer-nav-cont> </div> <div class="enews-cont" data-enews-cont> </div> </div> </div> <div class="body-overlay" data-body-overlay></div> <script> require(['plugins_common_custom_utils', 'domReady!'], function(utils) { /* Constants */ const els = { header: document.querySelector(`[data-guid="aff64d93-a4c0-4367-92f7-086ad38cc00b"]`), body: document.body, toggleBtn: document.querySelector('[data-guid="aff64d93-a4c0-4367-92f7-086ad38cc00b"] [data-hamburger-dropdown-toggle]'), siteMenu: document.querySelector('[data-site-nav-cont]'), overlay: document.querySelector('[data-body-overlay]'), heroContainer: document.querySelector('#slideshow-container'), } const focusableQuery = 'a, area, button, input, object, select, textarea, [tabindex]'; /* Utility Functions */ function hasHero() { return els.heroContainer?.children.length > 0; } function isMenuOpen() { return els.siteMenu.classList.contains('active'); } function enableElement(el) { if (el.getAttribute('data-sv-disabled-tabindex')) { el.setAttribute('tabindex', el.getAttribute('data-sv-disabled-tabindex')); el.removeAttribute('data-sv-disabled-tabindex'); } el.removeAttribute('disabled'); el.removeAttribute('data-sv-disabled-menu-open'); } function disableElement(el) { if (el.getAttribute('tabindex') >= 0) { el.setAttribute('data-sv-disabled-tabindex', el.getAttribute('tabindex') || 0); el.setAttribute('tabindex', -1); } el.setAttribute('disabled', true); el.setAttribute('data-sv-disabled-menu-open', true); } function enablePageElements() { document.querySelectorAll('[data-sv-hidden-menu-open]').forEach((el) => { el.removeAttribute('aria-hidden'); el.removeAttribute('data-sv-hidden-menu-open'); }) document.querySelectorAll('[data-sv-disabled-menu-open]').forEach(enableElement); els.siteMenu.querySelectorAll(focusableQuery).forEach(disableElement); } function enableMenuElements() { document.querySelectorAll('.root-panel > *:not(.header-container):not([aria-hidden="true"])').forEach((el) => { el.setAttribute('aria-hidden', true); el.setAttribute('data-sv-hidden-menu-open', true); }); document.querySelectorAll(focusableQuery).forEach((el) => { if (!els.header.contains(el)) { disableElement(el); } }); els.siteMenu.querySelectorAll(focusableQuery).forEach(enableElement); } function fixBodyScroll() { document.documentElement.style.overflowY = 'hidden'; } function unfixBodyScroll() { document.documentElement.style.overflowY = 'auto'; } function openMenu() { enableMenuElements(); els.toggleBtn.setAttribute('aria-expanded', true); els.toggleBtn.classList.add('active'); els.siteMenu.classList.add('active'); els.body.classList.add('hamburger-open'); setTimeout(() => { els.siteMenu.classList.add('transitioned'); }, 1) function handleEscape(event) { if (event.key === 'Escape') { event.preventDefault(); closeMenu(); window.removeEventListener('keydown', handleEscape); } } window.addEventListener('keydown', handleEscape); if (window.innerWidth > 1024) { fixBodyScroll(); } } function closeMenu() { enablePageElements(); els.toggleBtn.focus(); els.toggleBtn.classList.remove('active'); els.toggleBtn.setAttribute('aria-expanded', false); els.body.classList.remove('hamburger-open'); els.siteMenu.addEventListener('transitionend', () => { els.siteMenu.classList.remove('active'); }, { once: true }); els.siteMenu.classList.remove('transitioned'); unfixBodyScroll(); } /* Init */ if (hasHero()) { els.header.classList.add('with-hero'); } // Menu button click els.toggleBtn.addEventListener('click', () => { isMenuOpen() ? closeMenu() : openMenu(); }); // Menu button keyboard events els.toggleBtn.addEventListener('keydown', (event) => { if (event.key === 'ArrowDown') { event.preventDefault(); openMenu(); } if (event.key === 'ArrowUp') { event.preventDefault(); closeMenu(); } }); // Close menu if overlay clicked els.overlay.addEventListener('click', closeMenu); // Prevent scroll trapping on orientation change function resizeHandler() { if (window.innerWidth > 1024) { if ( isMenuOpen() && document.documentElement.style.overflowY !== 'hidden' ) { window.scrollTo({ top: 0 }); fixBodyScroll(); } } else if (document.documentElement.style.overflowY === 'hidden') { unfixBodyScroll(); } } ['resize', 'orientationchange'].forEach((eventName) => { window.addEventListener(eventName, utils.debounce(resizeHandler, 200)); }); // unhide siteMenu display override els.siteMenu.removeAttribute('style'); }); </script></div> </div> <div id="slideshow-container" class="slideshow-container"> <div data-civid="659fe5085863e2659ef63675" class="contentRender contentRender_9 contentRender_type_widget contentRender_name_plugins_collections_type_custom_header_slides contentRender_name_plugins_collections_template_custom_core_hero_slideshow" data-sv-time="80" data-sv-index="9" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <style>.hero-slideshow .img-cont { aspect-ratio: 640 / 412; }@media (min-width: 375px) { .hero-slideshow .img-cont { aspect-ratio: 640 / 412; } }@media (min-width: 412px) { .hero-slideshow .img-cont { aspect-ratio: 640 / 412; } }@media (min-width: 425px) { .hero-slideshow .img-cont { aspect-ratio: 640 / 412; } }@media (min-width: 640px) { .hero-slideshow .img-cont { aspect-ratio: 768 / 375; } }@media (min-width: 768px) { .hero-slideshow .img-cont { aspect-ratio: 1024 / 500; } }@media (min-width: 1024px) { .hero-slideshow .img-cont { aspect-ratio: 1440 / 702; } }@media (min-width: 1440px) { .hero-slideshow .img-cont { aspect-ratio: 1920 / 936; } }</style> <section class="ccl-widget core-hero-slideshow hero-slideshow " data-guid="fa688b80-3e26-46ea-90a1-5b1c95b16dd9" data-js="plugins_collections_custom_collection_default_slider_package" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "widget_interaction", "widgetName" : "Hero Slideshow", "itemType" : "slides", "interactionSource" : "widget" } }' style="opacity: 0;" data-slides-to-show="1" > <script type="text/template" data-slider-options>{"perView":1,"gap":0,"transition":"fade"}</script> <div class="slider-cont glide fade" data-glide-slider> <div class="glide__track" data-glide-el="track"> <div class="glide__slides" data-slides> <article class="slide overlap-image glide__slide "> <div class="inner" data-gtm-vars='{ "tClient_ga4" : { "interactionSource" : "widget", "itemName" : "The%20Refuge%2C%20Kimpton%20Clocktower" } }'> <div class="img-cont" data-img-cont> <a href="" target="" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Image", "interactionUrl" : "" } }' > <picture> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_936,q_65,w_1920/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 1440px)" type="image/avif" width="1920" height="936" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_936,q_65,w_1920/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 1440px)" type="image/webp" width="1920" height="936" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_936,q_65,w_1920/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 1440px)" type="image/jpeg" width="1920" height="936" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_702,q_65,w_1440/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 1024px)" type="image/avif" width="1440" height="702" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_702,q_65,w_1440/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 1024px)" type="image/webp" width="1440" height="702" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_702,q_65,w_1440/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 1024px)" type="image/jpeg" width="1440" height="702" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_500,q_65,w_1024/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 768px)" type="image/avif" width="1024" height="500" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_500,q_65,w_1024/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 768px)" type="image/webp" width="1024" height="500" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_500,q_65,w_1024/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 768px)" type="image/jpeg" width="1024" height="500" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_375,q_65,w_768/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 640px)" type="image/avif" width="768" height="375" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_375,q_65,w_768/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 640px)" type="image/webp" width="768" height="375" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_375,q_65,w_768/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 640px)" type="image/jpeg" width="768" height="375" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 425px)" type="image/avif" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 425px)" type="image/webp" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 425px)" type="image/jpeg" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 412px)" type="image/avif" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 412px)" type="image/webp" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 412px)" type="image/jpeg" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 375px)" type="image/avif" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 375px)" type="image/webp" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" media="screen and (min-width: 375px)" type="image/jpeg" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_avif,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" type="image/avif" width="640" height="412" /> <source srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_webp,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" type="image/webp" width="640" height="412" /> <img class="slide-img" src="https://assets.simpleviewinc.com/simpleview/image/upload/c_fill,f_jpg,h_412,q_65,w_640/v1/clients/manchester/restaurants_93390871-43f5-48b6-a546-b03741d5618e.jpg" alt="The Refuge, Kimpton Clocktower" loading="eager" fetchpriority="high" width="640" height="412" onload="this.classList.add('loaded')" /> </picture> </a> </div> <div class="content-section"> <h2 class="slide-title"> <a href="" target="" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Title", "interactionUrl" : "", "interactionText" : "The%20Refuge%2C%20Kimpton%20Clocktower" } }'>The Refuge, Kimpton Clocktower</a> </h2> </div> </div> </article> </div> </div> <div class="arrows-cont"> <div class="glide__arrows" data-glide-el="controls"> <button class="glide__arrow glide__arrow--left" aria-label="previous slide" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Slider | Previous Slide", "interactionText" : "<" } }' data-glide-dir="<" > <i class="fas fa-angle-left" aria-hidden="true"></i> </button> <button class="glide__arrow glide__arrow--right" aria-label="next slide" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Slider | Next Slide", "interactionText" : ">" } }' data-glide-dir=">" > <i class="fas fa-angle-right" aria-hidden="true"></i> </button> </div> </div> </div> </section> </div> </div> <div id="main-content" class="content"> <div data-civid="65270885dc7bbd20d1e35d00" class="contentRender contentRender_10 contentRender_type_widget contentRender_name_plugins_nav_breadcrumb" data-sv-time="69" data-sv-index="10" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <nav class="nav-list" role="navigation" aria-label="Breadcrumb" data-guid="813cb744-1fdc-4bef-ac31-eb809299fd9d" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType": "Breadcrumb", "interactionSource": "navigation" } }' > <ul class="interior-nav"> <li class="item" data-id=""> <a href="/" target="" title="" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Home", "interactionUrl": "/", "interactionText": "Home" } }' > Home </a> </li> <li class="item" data-id="6525e38c58d8a262bf5e73b7"> <a href="/food-and-drink/" target="_self" title="" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Food%20%26%20Drink", "interactionUrl": "%2Ffood-and-drink%2F", "interactionText": "Food%20%26%20Drink" } }' > Food & Drink </a> </li> <li class="item current" data-id="6525e39d58d8a262bf5e85d3"> <a href="/food-and-drink/restaurants/" target="_self" aria-current="page" title="" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Restaurants", "interactionUrl": "%2Ffood-and-drink%2Frestaurants%2F", "interactionText": "Restaurants" } }' > Restaurants </a> </li> </ul> </nav></div><div data-civid="659fe5085863e2659ef63677" class="contentRender contentRender_11 contentRender_type_widget contentRender_name_plugins_common_pagetitle" data-sv-time="16" data-sv-index="11" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="page-title" data-guid="85c5cda8-afc8-4969-a3b3-c2ca15436551"> <h1> Restaurants in Manchester </h1> </div></div><div data-civid="659fe5085863e2659ef63679" class="contentRender contentRender_12 contentRender_type_widget contentRender_name_plugins_core_textbox" data-sv-time="29" data-sv-index="12" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'><section data-sv-core-textbox data-guid="6a20be39-07d6-4e25-9d9c-47fedbaa0e40"> <p>Manchester has a great reputation for food and drink. Ever more restaurants, delis and shops are sourcing their produce locally. The Edwardian Manchester is home to the fantastic <a href="https://www.visitmanchester.com/food-and-drink/peter-street-kitchen-p26951">Peter Street Kitchen</a>, showcasing the very best flavours and ingredients of contemporary Japanese and Mexican cuisines. Also, why not try the fantastic <a href="https://www.visitmanchester.com/food-and-drink/corn-exchange-manchester-p348591">Corn Exchange</a>, home to a mouthwatering mix of new restaurants in a gorgeous Edwardian building.</p> <p>Also, for something different, try <a href="https://www.visitmanchester.com/food-and-drink/fazenda-rodizio-bar-and-grill-p294001">Fazenda Rodizio Bar & Grill</a>, inspired by the stylish high-end restaurants found in the dynamic, cosmopolitan cities of São Paulo, Rio de Janeiro and across South America.</p> </section></div><div data-civid="659fe5085863e2659ef6367b" class="contentRender contentRender_13 contentRender_type_widget contentRender_name_plugins_collections_type_custom_slides contentRender_name_plugins_collections_template_custom_core_slider_preview_4_across_fullwidth_black" data-sv-time="69" data-sv-index="13" data-gtm-vars='{ "tCore" : { "contentNum" : "3" } }'> <style>.preview-slider-4-across-fullwidth blackbg .img-cont { aspect-ratio: 390 / 555; }@media (min-width: 640px) { .preview-slider-4-across-fullwidth blackbg .img-cont { aspect-ratio: 394 / 561; } }@media (min-width: 1024px) { .preview-slider-4-across-fullwidth blackbg .img-cont { aspect-ratio: 394 / 561; } }@media (min-width: 1440px) { .preview-slider-4-across-fullwidth blackbg .img-cont { aspect-ratio: 394 / 561; } }</style> <!-- no slides selected --> </div><div data-civid="64d4b19e938c6344c3e839fe" class="contentRender contentRender_14 contentRender_type_widget contentRender_name_plugins_common_embed" data-sv-time="14" data-sv-index="14" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="custom-embed full" data-sv-embed-widget="true" data-guid="e3764c2b-b410-441f-8667-e593318ecf0f"> <div class="embed-container"> </div> </div> </div><div data-civid="659fe5085863e2659ef6367d" class="contentRender contentRender_15 contentRender_type_widget contentRender_name_plugins_common_listings_index" data-sv-time="56" data-sv-index="15" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div id="layoutjs_0fff43c3-6b81-4808-88bf-6704fdca044d" class="layoutjsContainer" data-gtm-vars='{ "tCore" : { "category" : "layoutjs_plugins_common_listings_index" } }'> <script id="ljs_data_0fff43c3-6b81-4808-88bf-6704fdca044d" type="text/template"> {"sections":{},"data":{"show_search_box":"true","show_availability":"false","show_region":"true","use_cat_groups":"off","cat_groups":["155341"],"cats":["12"],"subcats":["115","123","8889","209","120","124","112","118","116","249","269","9299","162","259","130","119","103"],"regions":["411","81","101","131","111","161","151","181","141","191","51","61"],"amenities_search":"none","default_view":"grid"},"guid":"0fff43c3-6b81-4808-88bf-6704fdca044d","customSettings":{},"widgetArgs":{"nav":{"_id":"6525e39d58d8a262bf5e85d3","sortorder":0,"title":"Restaurants","folder":"restaurants","section":"main","type":"page","active":true,"show_on_nav":true,"publish_start":"2023-10-10T23:00:00.000Z","searchable":"yes","new_window":false,"image_id":"6597dd7e02e07159334f718b","description":"<p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.</p>","meta_title":"Restaurants in Manchester | Visit Manchester","meta_description":"Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.","tags_ids":["65280bf2bd338238afbc223c"],"parent_id":"6525e38c58d8a262bf5e73b7","parents_ids":["6525e38c58d8a262bf5e73b7"],"version_id":"659fe5c55863e2659ef6393e","created":"2023-10-10T23:51:57.575Z","content_owner":"default","site_name":"primary","updated":"2024-01-11T12:57:41.493Z","title_sort":"restaurants","site_section":"primary.main","published":true,"amp":false,"cms_title":"Restaurants - /food-and-drink/restaurants/","cms_title_sort":"restaurants - /food-and-drink/restaurants/","folderHref":"/food-and-drink/restaurants/","image":{"_id":"6597dd7e02e07159334f718b","original_public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","title":"Couple eating in the Edwardian Manchester restaurant","resource_raw":{"asset_id":"c9dbeebf9cfe686fc1b344707de6fe87","public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","version":1704451414,"version_id":"7a10f4e1a1bcaaa1c76d5f2bfa7c5a4c","signature":"510871297937606aadd2373fda0919789421829e","width":1920,"height":1317,"format":"jpg","resource_type":"image","created_at":"2024-01-05T10:43:34.000Z","pages":1,"bytes":242467,"type":"upload","etag":"7d3c03ce65a4397955f9ac2b39d15ae5","placeholder":false,"url":"http://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","secure_url":"https://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","folder":"clients/manchester","access_mode":"public","original_filename":"file","api_key":"756897581616859"},"tags_ids":["65280bf2bd338238afbc223c","6597dc6002e07159334f7185"],"alt_text_raw":"Couple eating in the Edwardian Manchester restaurant","focal_point":{"x":1222,"y":696},"content_owner":"default","title_sort":"couple eating in the edwardian manchester restaurant","updated":"2024-01-05T10:44:14.456Z","private":false,"deleted":false,"created":"2024-01-05T10:44:14.456Z","resource":{"raw":{"resource_type":"image","format":"jpg","pages":1,"public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38"},"focalPoint":{"x":1222,"y":696}},"id":"6597dd7e02e07159334f718b","type":"image","inAssetRequest":false,"alt_text":"Couple eating in the Edwardian Manchester restaurant","expired":false},"locale_count":0,"tags":[{"_id":"65280bf2bd338238afbc223c","tag":"Food & drink","created":"2023-10-12T15:08:34.285Z","sort_tag":"food & drink","updated":"2023-11-21T11:59:30.571Z","id":"65280bf2bd338238afbc223c"}],"id":"6525e39d58d8a262bf5e85d3","parent_id_string":"6525e38c58d8a262bf5e73b7","version_id_string":"659fe5c55863e2659ef6393e","href":"/food-and-drink/restaurants/","absoluteHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","absoluteFolderHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","metaTitle":"Restaurants in Manchester | Visit Manchester","rootCmsUrl":"/nav/sitemap/site_primary/section_main/"},"num":15,"guid":"0fff43c3-6b81-4808-88bf-6704fdca044d","data":{"show_search_box":"true","show_availability":"false","show_region":"true","use_cat_groups":"off","cat_groups":["155341"],"cats":["12"],"subcats":["115","123","8889","209","120","124","112","118","116","249","269","9299","162","259","130","119","103"],"regions":["411","81","101","131","111","161","151","181","141","191","51","61"],"amenities_search":"none","default_view":"grid"},"civ":{"instance":{"type":"widget","name":"plugins_common_listings_index","site_name":"primary","saved":false,"created":"2024-01-11T12:57:41.475Z","updated":"2024-01-11T12:57:41.475Z","deleted":false,"id":"659fe5085863e2659ef6367d","version_id_string":"659fe5085863e2659ef6367e"},"version":{"data":{"show_search_box":"true","show_availability":"false","show_region":"true","use_cat_groups":"off","cat_groups":["155341"],"cats":["12"],"subcats":["115","123","8889","209","120","124","112","118","116","249","269","9299","162","259","130","119","103"],"regions":["411","81","101","131","111","161","151","181","141","191","51","61"],"amenities_search":"none","default_view":"grid"},"created":"2024-01-11T12:57:41.477Z","id":"659fe5085863e2659ef6367e","instance_id_string":"659fe5085863e2659ef6367d"},"onTrunk":true,"civid":"659fe5085863e2659ef6367d"},"name":"plugins_common_listings_index"},"translations":{"translations.static.events":{"presented_by":"Presented By","dates":"Dates","recurrence":"Recurrence","time":"Time","price":"Price","venue":"Venue","attendees":"Attendees","err_expired":"This event has passed. Please visit our main <a href=\"/events/\">Events</a> page for upcoming events.","err_past":"Sorry, this event has already taken place. Please visit our <a href=\"/whats-on/\">'What's on in Manchester guide'</a> for upcoming events."},"translations.static.leo":{"apply":"Apply","clear_filters":"Clear Filters","reset":"Reset","filter":"Filter","sort":"Sort","view":"View","keyword":"Keyword","search_placeholder":"Search","select":"Select","regions":"Regions","categories":"Categories","grid":"Grid","list":"List","map":"Map","show_map":"Show Map","hide_map":"Hide Map","recommended":"Recommended","near_me":"Near Me","read_more":"Read More","quick_view":"Quick View","featured_title":"Partner","visit_website":"Visit Website","email":"E-mail","tollfree":"Toll Free","tab_about":"About","tab_map":"Map","tab_openings":"Dates and Times","tab_guide_prices":"Prices","tab_offers":"Special Offers","tab_faq":"FAQs","tab_gradings":"Gradings","tab_awards":"Awards","tab_also_like":"You might also be interested in...","tab_downloads":"Downloads","tab_routes":"Routes","tab_facilities":"Facilities","tab_virtual_tours":"Virtual Tours","show_more":"Show $1 more","show_less":"Show Less","results":"$1 results","no_results":"There are no results that match your filter.","miles_from_you":"Miles from You","meeting_rooms":"Meeting Rooms","square_feet":"Total Sq. Ft.","largest_room":"Largest Room","sleeping_rooms":"Sleeping Rooms","banquet":"Banquet Capacity","reception":"Reception Capacity","theatre":"Theater Capacity","classroom":"Classroom Capacity","compare":"Compare","close_compare_dropdown":"Close compare dropdown","compare_add":"Add to compare","compare_remove":"Remove from compare","compare_clear_all":"Clear All","compare_limit_message":"You can only compare four (4) items at a time","location":"Location","locations":"Locations","details":"Details","address":"Address","err_loc_timeout":"We're unable to determine your location at this time.","err_loc_blocked":"You must allow location access for distance sorting.","err_loc_radius":"You must be within $1 miles to sort by distance.","date_range_title":"Show Events For","date_range_day":"Day","date_range_week":"Week","date_range_weekend":"Weekend","date_range_month":"Month","date_range_year":"Year","date_range_selected_dates":"Selected Dates","per_page_label":"Items Per Page","tb_add":"Add to Trip","tb_remove":"Remove from Trip","tb_view":"View Trip","facilities":"Facilities","download":"Download Events as CSV","convention":"Convention","venues":"Venues","dates":"Dates","attendance":"Attendance","whats_nearby":"What's Nearby","attractions":"Attractions","dining":"Dining","accommodations":"Accommodations","events":"Events","things_to_do":"Things To Do","get_directions":"Get Directions","redo_search_in_map":"Redo Search in Map","add_to_calendar":"Add to Calendar","add_to_google_calendar":"Add to Google Calendar","add_to_microsoft_calendar":"Add to Microsoft Live Calendar","add_to_outlook_calendar":"Add to Office365 Outlook Calendar","add_to_iCloud_calendar":"Add to iCloud Calendar","add_to_windows_calendar":"Add to Windows Calendar","start_date":"Start Date","end_date":"End Date","learn_more":"Learn more about"},"translations.static.listings":{"clear_filters":"Clear Filters","amenities":"Amenities","tab_amenities":"Amenities","tab_meeting_facilities":"Meeting Facilities","tab_offers":"Offers","tab_events":"Events","tab_hours":"Hours","tab_tripadvisor":"TripAdvisor","tab_yelp":"Yelp","yelp_closed":"Closed","external_link_halloween":"Part of Halloween in The City","external_link_pass":"We're on the Visit Manchester Pass >>","tab_social_feeds":"Social Feeds","facility_info":"Facility Info","meeting_rooms":"Meeting Rooms","m_exhibits_space":"Exhibits Space","m_description":"Description","m_exhibits":"Exhibits","m_floorplan_file":"Floorplan File","m_largest_room":"Largest Room","m_toll_free":"Toll Free","m_total_sq_ft":"Total Sq. Ft.","m_reception_capacity":"Reception Capacity","m_space_notes":"Space Notes","m_theater_capacity":"Theater Capacity","m_link":"Link","m_villas":"Villas","m_banquet_capacity":"Banquet Capacity","m_number_of_rooms":"Number of Rooms","m_booths":"Booths","m_large_floor_plan_pdf":"Large floor Plan PDF","m_suites":"Suites","m_classroom_capacity":"Classroom Capacity","m_sleeping_rooms":"Sleeping Rooms","m_width":"Width","m_length":"Length","m_height":"Height","m_booth_capacity":"Booth Capacity","m_amphitheater_present":"Amphitheater Present","m_listening_devices_present":"Listening Devices Present"}}} </script> </div> <script type="text/template" data-sv-tripadvisorTemplate> {{#data}} <div class="tripadvisor-snippet"> <div class="reviews-rating-line"> <h4 class="ta-title">TripAdvisor Traveler Rating</h4> <a data-ta-link href="{{weburl}}" target="_blank" collect='true' data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "partner_referral", "linkObject" : "Social | TripAdvisor", "interactionUrl" : "{{%%web_url}}", "referralType" : "social | tripadvisor", "value" : 5 } }'> <img src="{{rating_image_url}}" alt="TripAdvisor Traveler Rating - {{rating}}" /> </a> <span class="reviews-rating-line-text"> <a data-ta-link href="{{web_url}}" target="_blank" collect='true' data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "partner_referral", "linkObject" : "Social | TripAdvisor", "interactionUrl" : "{{%%web_url}}", "interactionText" : "{{%%num_reviews}} reviews", "referralType" : "social | tripadvisor", "value" : 5 } }'> {{num_reviews}} reviews </a> </span> </div> </div> {{/data}} </script> <script> require([ 'jquery', 'plugins_core/main', 'sv_site', 'sv_crmLib', 'sv_cloudinaryLib', "sv_goatee!plugins=cloudinary,stringLib", 'sv_clientMoment', 'sv_arrayLib', 'sv_load!plugins_dtn', 'plugins_common_custom_layoutjs', 'plugins_common_custom_lazyload', 'sv_load!site_gamClient', 'plugins_common_custom_ui_watcher', 'sv_clientLib', 'plugins_common_custom_utils', 'sv_urlLib', ], function( $, core, site, crmLib, sv_cloudinaryLib, goatee, clientMoment, arrayLib, dtn, layoutjs, lazyload, gamClient, UIWatcher, clientLib, utils, urlLib, ) { init(); async function init() { const dataString = document.querySelector('#ljs_data_0fff43c3-6b81-4808-88bf-6704fdca044d').textContent; const widget = JSON.parse(dataString); const { allCats, validCats, allSubcats, validSubcats, groupedSubcats, groupedCats, allRegions, validRegions, allCategoryGroups, validCategoryGroups, allAmenities, allChannels, validChannels } = await setup(widget); const searchAvailability = (widget?.data?.show_availability ?? 'false') === 'true'; const searchRegion = (widget?.data?.show_region ?? 'false') === 'true'; const cats = validCats.map(cat => ({ label: cat.catname, value: cat.catid.toString() })); const useGroupedCats = !widget?.data?.cats; const subcats = validSubcats.map(subcat => ({ label: subcat.subcatname, value: subcat.subcatid.toString() })); const hasCatGroups = widget?.data?.use_cat_groups === 'on' && !!widget.data.cat_groups; const categorygroups = validCategoryGroups.map(categorygroup => ({ label: categorygroup.categorygroup, value: categorygroup.categorygroupid.toString() })); const regions = validRegions.map(region => ({ label: region.region, value: region.regionid.toString() })); const regionsChosen = !!widget?.data?.regions; const subcatsChosen = !!widget?.data?.subcats; const specificListingsChosen = !!widget?.data?.specific_listings_ids; const amenities = allAmenities.docs.map(amenity => ({ label: amenity.label, value: amenity.uniquename })); const hasPrimaryCat = !!widget?.data?.cats; const initialAmenities = (widget?.data?.amenities_filter) ? widget.data.amenities_filter : undefined; const dtnargs = {}//; const hasDtn = (dtnargs?.auid?.length > 0 && dtnargs?.limit > 0 && dtn); const limit = 15; let xhr; const controller = new AbortController; const signal = controller.signal; const defaultHooks = []; const defaultView = widget?.data?.default_view ? widget.data.default_view : 'grid'; var tripadvisorTemplate = $("[data-sv-tripadvisorTemplate]").html(); const t = { leo: widget.translations['translations.static.leo'], listings: widget.translations['translations.static.listings'], events: widget.translations['translations.static.events'], }; let widgetStartDate = clientMoment(); let widgetEndDate = clientMoment().add(6, 'days'); const restrictRanks = !!widget?.data?.rank_filter; const channel_filter = validChannels.map(channel => ({ label: channel.channelname, value: channel.channelkey.toString() })); const restrictChannels = !!widget?.data?.channel_filter; widgetStartDate = widgetStartDate.format('YYYY-MM-DD'); widgetEndDate = widgetEndDate.format('YYYY-MM-DD'); if (widget?.data?.detail_type) { defaultHooks.push({ name : 'afterFind_custom_detail_type', args : { detail_type : widget.data.detail_type } }); } if (widget?.data?.dtnlimit) { // if a limit is specified in the widget, override that passed in config dtnargs.limit = Number(widget.dtnlimit); } if (hasDtn) { // we want the smaller of the limit and dtnargs.limit dtnargs.limit = Math.min(dtnargs.limit, limit); } // the base filter is the minimum filter applied to all queries. This is *not* the same as a "default" query, or the initial query. // this is the base. Any filter components that can be done in the UI are added to this object const baseFilter = { $and : [] } let allFilterTagItems; let showBookingFilters; if (hasCatGroups) { baseFilter['custom.subcatgroups'] = { $in : categorygroups.map(function(val) { return Number(val.value) }) } } else { allFilterTagItems = cats.map(cat => ({ site: site.site, catid: Number(cat.value) })); if (subcatsChosen) { subcatTagItems = subcats.map(subcat => ({ site: site.site, subcatid: Number(subcat.value) })); allFilterTagItems = subcatTagItems; } baseFilter.$and.push({ filter_tags : { $in : crmLib.getListingFilterTags({ items : allFilterTagItems }) }, }); } baseFilter.$and.push({ "custom.channels.channelkey" : { $in:[ 148441 ]} }); if (restrictRanks) { baseFilter.$and.push({ rankid: { $in: widget.data.rank_filter.map(rank => Number(rank)) } }); } if (regionsChosen) { baseFilter['listingudfs_object.11.value_raw.listid'] = { $in : regions.map(function(val) { return Number(val.value) }) } } if (restrictChannels) { baseFilter.$and.push({ "custom.channels.channelkey": { $in: widget.data.channel_filter.map(channelkey => Number(channelkey)) } }); } if (specificListingsChosen) { baseFilter.recid = { $in : widget.data.specific_listings_ids }; } if (initialAmenities && widget.data.amenities_search === 'none') { initialAmenities.forEach(function(val) { baseFilter[`amenities.${val}.value_raw`] = true; }); } else if (initialAmenities && widget.data.amenities_search === 'custom') { initialAmenities.forEach(function(val) { let selected = amenities.some(function(amenity) { return amenity.value === val; }); if (!selected) { baseFilter[`amenities.${val}.value_raw`] = true; } }); } const vue = layoutjs.getVue({ rootNode : $('#layoutjs_0fff43c3-6b81-4808-88bf-6704fdca044d'), type : 'listings', view : defaultView, limit : limit, sort : 'qualityScore', translations : t.leo, // if there is a defaultImageUrl defined in client config, use it. Else it will utilize the default declared in custom_layoutjs.js fallbackImageUrl : site.siteConfig.custom && site.siteConfig.custom[site.site] && site.siteConfig.custom[site.site].defaultImageUrl, showFilter : widget.data.show_search_box === 'true', baseFilter : baseFilter, // change to true in order to show the first and last page arrows pager_first_last_page_arrows: false, filters : [ { name : 'keyword', label : t.leo.keyword, placeholder : t.leo.search_placeholder, type : 'keyword', toFilter : function(value, filter, context) { filter.solrOptions = { keyword : value } return filter; } }, { name : "onlybooking", label : "Search Availability", type : "toggle", show: searchAvailability, toFilter : function(value, filter, context) { filter.bookingOptions = { currency: 'GBP', occupancies: [{}], ...filter.bookingOptions, filter: true, } return filter; }, }, { name : 'daterange', label : 'Check in/Check out', type : 'daterange', reset : false, show: searchAvailability, initialValue : { start : widgetStartDate, end : widgetEndDate }, typeExtra : { dateFormat : 'MMM Do', showQuicklinks: false, }, toFilter : function(value, filter, context) { if (context === 'query') { filter.bookingOptions = { currency: 'GBP', occupancies: [{}], ...filter.bookingOptions, start_date: clientMoment(value.start).format('YYYY-MM-DD'), end_date: clientMoment(value.end).format('YYYY-MM-DD'), } } else if (context === 'runCounts') { delete filter.bookingOptions; } return filter; } }, { name: 'flex', label: 'Flex Dates', type: 'select', show: searchAvailability, initialValue: '0', typeExtra: { options: [ { label: '+/- 0 Days', value: '0' }, { label: '+/- 1 Days', value: '1' }, { label: '+/- 2 Days', value: '2' }, { label: '+/- 3 Days', value: '3' }, { label: '+/- 4 Days', value: '4' }, { label: '+/- 5 Days', value: '5' }, { label: '+/- 6 Days', value: '6' }, { label: '+/- 7 Days', value: '7' }, ], group: false, }, toFilter: function(value, filter, context) { if (context === 'query') { filter.bookingOptions = { currency: 'GBP', occupancies: [{}], ...filter.bookingOptions, fuzzy: Number(value), } } else if (context === 'runCounts') { delete filter.bookingOptions; } return filter; } }, { name: 'adults', label: 'Number of Adults', type: 'select', show: searchAvailability, initialValue: '1', typeExtra: { options: [ { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, toFilter: function(value, filter, context) { if (context === 'query') { filter.bookingOptions = { currency: 'GBP', occupancies: [{}], ...filter.bookingOptions, occupancies: [ { ...filter.bookingOptions.occupancies[0], adults: Number(value), } ] } } else if (context === 'runCounts') { delete filter.bookingOptions; } return filter; } }, { name: 'children', label: 'Number of Children', type: 'select', show: searchAvailability, initialValue: '0', typeExtra: { options: [ { label: '0', value: '0' }, { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, toFilter: function(value, filter, context) { if (context === 'query') { filter.bookingOptions = { currency: 'GBP', occupancies: [{}], ...filter.bookingOptions, occupancies: [ { ...filter.bookingOptions.occupancies[0], children: Number(value), } ] } } else if (context === 'runCounts') { delete filter.bookingOptions; } return filter; } }, ( hasCatGroups ? { name : 'cat_groups', label : t.leo.categories, show : hasCatGroups, type : 'checkbox', typeExtra : { options : categorygroups, countArgs : { watchFilters : hasCatGroups ? ['amenities', 'daterange', 'regions'] : ['daterange', 'amenities', 'regions'], field : 'custom.subcatgroups', unwind: 'custom.subcatgroups', model : 'plugins_listings_listings', sort : true } }, toFilter : function(value, filter, context) { filter.$and.push({ "custom.subcatgroups" : { $in : value.map(function(val) { return Number(val) }) } }); return filter; } } : { name : 'subcats', label: t.leo.categories, show : subcats.length > 1, type : useGroupedCats ? 'twostage' : 'checkbox', typeExtra : { options : useGroupedCats ? groupedCats : subcats, countArgs : { watchFilters : ['amenities', 'regions'], unsupportedFilters : ['keyword'], field : 'categories.subcatid', unwind : 'categories', model : 'plugins_listings_listings', sort : true } }, toFilter : function(value, filter, context) { filter.$and.push({ filter_tags : { $in : crmLib.getListingFilterTags({ items : this.custom_selectedSubcatItems }) } }); return filter; } } ), { name : 'regions', label : t.leo.regions, // we implicitly filter on regions if they have been selected in the widget, so no reason to display a region option with 1 choice // if no regions were selected, then a region option with 1 choice is valid and therefore we pass the whole array show : regionsChosen ? regions.length > 1 : regions.length > 0 && searchRegion, type : 'checkbox', typeExtra : { options : regions, countArgs : { watchFilters : hasCatGroups ? ['amenities', 'cat_groups', 'daterange'] : ['subcats', 'amenities'], unsupportedFilters : ['keyword'], field : 'listingudfs_object.11.value_raw.listid', unwind: 'listingudfs_object.11.value_raw', model : 'plugins_listings_listings', sort : true } }, toFilter : function(value, filter, context) { filter.$and.push({ "listingudfs_object.11.value_raw.listid" : { $in : value.map(function(val) { return Number(val) }) } }); return filter; } }, { name : 'channel', label : 'Channel', // we implicitly filter on regions if they have been selected in the widget, so no reason to display a region option with 1 choice // if no regions were selected, then a region option with 1 choice is valid and therefore we pass the whole array show : regionsChosen ? channel_filter.length > 1 : channel_filter.length > 0, type : 'checkbox', reset : false, typeExtra : { options : channel_filter, countArgs : { watchFilters : hasCatGroups ? ['amenities', 'cat_groups', 'daterange'] : ['subcats', 'amenities'], field : 'custom.channels.channelkey', unwind: 'custom.channels', model : 'plugins_listings_listings', sort : true } }, toFilter : function(value, filter, context) { filter.$and.push({ "custom.channels.channelkey" : { $in : value.map(function(val) { return Number(val) }) } }); return filter; } }, { name : 'amenities', label : t.listings.amenities, // we do not implicitly filter on amenities so if there is only one available option we still want to show the checkbox show : amenities.length > 0, type : 'checkbox', initialValue : initialAmenities, typeExtra : { options : amenities, countArgs : { watchFilters : hasCatGroups ? ['regions', 'cat_groups', 'daterange'] : ['subcats', 'regions'], unsupportedFilters : ['keyword'], field : 'amenities_array.uniquename', unwind : 'amenities_array', model : 'plugins_listings_listings', sort : true } }, toFilter : function(value, filter) { value.forEach(function(val) { filter[`amenities.${val}.value_raw`] = true; }); return filter; } } ], sortOptions : [ { value : 'qualityScore', label : t.leo.recommended }, { value : 'distance', label : t.leo.near_me }, //{ value : 'price_asc', label : '<i class="fas fa-sort-numeric-up-alt" aria-hidden="true"></i> Price <span class="sr-only">(low to high)</span>' }, //{ value : 'price_desc', label : '<i class="fas fa-sort-numeric-down-alt" aria-hidden="true"></i> Price <span class="sr-only">(high to low)</span>' }, //{ value : 'price_asc', label : 'Price <span class="sr-only">(low to high)</span>' }, //{ value : 'price_desc', label : 'Price <span class="sr-only">(high to low)</span>' }, { value : 'pan', label : '' } ], maxRangeMiles : site.siteConfig.maxRangeMiles, latitude : site.siteConfig.latitude, longitude : site.siteConfig.longitude, data : { custom_catid : (widget.listingcats !== undefined) ? Number(widget.listingcats) : undefined, custom_dtnids : [], }, // computed allows the passing of computed and method properties, in cases where they may need to be unique to the template computed : { custom_selectedSubcatItems : function() { return this.filter_subcats_numberArray.map(function(val) { return { site : site.site, subcatid : val } }); }, custom_dtnFilterTagItems : function() { // if we have not chosen subcats in the widget, then we need to load via the category id // if we have chosen subcats then we utilize whatever the state of the if (this.custom_selectedSubcatItems.length > 0) { // if we have items selected in the UI, use them return this.custom_selectedSubcatItems; } else if (subcatsChosen) { // if we have items chosen in the widget, use those return allFilterTagItems; } else { // otherwise fall back to the chosen catid return [{ site : site.site, catid : this.custom_catid }]; } } }, methods : {}, watch : { docs: function() { // place logic in here that needs to happen after render of items this.$nextTick(function() { if (hasDtn) { gamClient.renderAds(); } }); $(this.$el).find("[data-tripadvisor-index]").each(function() { var taTracking; // todo. get crm to ad ta hit tracking id. see palm springs var ta = $(this); var recid = $(this).closest('[data-recid]').attr('data-recid'); var taArgs = { service : "tripadvisor", recid : recid }; $.get("/includes/plugins/listings/getreviews/", taArgs, function(res) { if (res.success) { ta.html(goatee.fill(tripadvisorTemplate, res)); if (taTracking) { ta.find('[data-ta-link]').each(function(){ var href = $(this).attr("href") $(this).attr("href", crmLib.getTrackUrl(taTracking, href)); }); } } }); }); lazyload.lazy($(this.$el).find('.content .item')) } }, query : async function(cb) { const self = this; const filter = self.getFilter('query'); const options = { limit : self.args.limit, skip : self.skip, count : true, castDocs : false, fields : { recid : 1, type: 1, title : 1, address1 : 1, "listingudfs_object.2.value" : 1, "listingudfs_object.12.value" : 1, city : 1, url : 1, isDTN : 1, latitude : 1, longitude : 1, primary_image_url : 1, 'taid' : 1, qualityScore : 1, weburl : 1, tripadvisor: 1, "dtn.rank" : 1, booking_price_avg: 1, booking_price_total: 1, booking_full: 1, categories: 1, acctid : 1, city : 1, region : 1, rankname : 1, "listingudfs_object.26.value_string" : 1, "custom.channels.channelkey": 1, "custom.externallinks.linkname": 1, "custom.externallinks.linkkey": 1, "custom.externallinks.url": 1, primary_category: 1, "custom.coupons": 1, "listingudfs_object.26.value_string": 1, "listingudfs_object.27.value_raw": 1, "listingudfs_object.28.value_string": 1, "listingudfs_object.29.value_raw": 1, categories: 1, "custom.subcatgroups": 1 }, hooks : defaultHooks }; var test1 = options.fields["listingudfs_object.26.value_raw"]; var test2 = options.fields["listingudfs_object.26.value_raw"]; var test3 = options.sort = { "listingudfs_object.26.value_raw": -1 }; console.log(test3); if (self.sort === 'pan') { options.sort = { qualityScore : -1, "listingudfs_object.15.value": 1, sortcompany : 1 }; filter['loc.coordinates'] = { "$geoWithin": { "$geometry": { type: 'Polygon', coordinates: [[ [parseFloat(self.bounds.Sa.j),parseFloat(self.bounds.Wa.j)], [parseFloat(self.bounds.Sa.i),parseFloat(self.bounds.Wa.j)], [parseFloat(self.bounds.Sa.i),parseFloat(self.bounds.Wa.i)], [parseFloat(self.bounds.Sa.j),parseFloat(self.bounds.Wa.i)], [parseFloat(self.bounds.Sa.j),parseFloat(self.bounds.Wa.j)] ]] } } } } else if (self.sort === 'qualityScore') { options.sort = { rankorder : -1, "listingudfs_object.15.value": 1, sortcompany : 1 }; } else if (self.sort === 'distance') { filter.solrOptions = filter.solrOptions || {}; filter.solrOptions.sort = 'distance'; filter.solrOptions.point = [self.georesult.latitude, self.georesult.longitude].join(","); filter.solrOptions.radius = self.args.maxRangeMiles.toString(); } else if (self.sort === 'price_asc') { const item = options.sort = { "listingudfs_object.26.value_raw": 1, rankorder: -1, "listingudfs_object.15.value": 1 }; const sorted = options.sort((a, b) => { const k1 = a["listingudfs_object.26.value_raw"] === undefined ? 0 : 1 const k2 = b["listingudfs_object.26.value_raw"] === undefined ? 0 : 2 return k2 - k1 }) options.sort = sorted; } else if (self.sort === 'price_desc') {; options.sort = { "listingudfs_object.28.value_raw": -1, rankorder: -1, "listingudfs_object.15.value": 1 } } if (options.skip === 0) { // whenever the skip is 0, we reset the custom_dtnids back to scratch self.custom_dtnids = []; } const dtnDocs = await dtn(); const rtn = await data(); return cb(null, rtn); async function dtn() { if (hasDtn === false || options.skip > 0 || self.sort === 'distance' || self.custom_catid === undefined || self.sort === 'pan' ) return []; const dtnFilter = self.getFilter('query'); dtnFilter.$and.push({ filter_tags : { $in : crmLib.getListingFilterTags({ items : self.custom_dtnFilterTagItems, dtn : true }) } }); // using 0000 and 2359 for caching purposes, otherwise we could just use Date().toISOString() const today0000 = clientMoment().startOf('day'); // send date as 00:00:00 in the client timezone in UTC const today2359 = clientMoment().endOf('day'); // send date as 23:59:59 in the client timezone in UTC dtnFilter.$and.push( { $or : [ { "dtn.sdate" : { $lte : { $date : today0000.toISOString() } } }, { "dtn.sdate" : { $exists : false } } ] }, { $or : [ { "dtn.edate" : { $gte : { $date : today2359.toISOString() } } }, { "dtn.edate" : { $exists : false } } ] } ); const dtnOptions = $.extend({}, options, { // we allow DTN to oversell the first page by a factor of 2 // we will pull from this set a max of the limit limit : self.args.limit * 2, count : false, hooks : defaultHooks.concat('afterFind_dtn') }); xhr = utils.call(fetch(utils.getAPIUrl('/includes/rest_v2/plugins_listings_listings/find/', { json: JSON.stringify({ filter: dtnFilter, options: dtnOptions }), token: core.simpleToken }), {signal})); const [res, resErr] = await xhr; if (resErr) return new Error(resErr); res.docs = arrayLib.randomize(res.docs); res.docs = res.docs.splice(0, dtnargs.limit); res.docs.forEach(function(val) { self.custom_dtnids.push(val.recid); val.dtnAuid = dtnargs.auid; val.isDTN = true; }); return res.docs; } async function data() { if (dtnDocs.length > 0) { // has DTN listings, need to adjust page 1 limit and store dtnids for exclusion from main query on all pages options.limit -= self.custom_dtnids.length; } else { options.skip = (options.skip - self.custom_dtnids.length); } if (self.custom_dtnids.length > 0) { filter.recid = { $nin : self.custom_dtnids } } if (self.custom_dtnids.length === self.args.limit) { options.limit = 1; } xhr = utils.call(fetch(utils.getAPIUrl('/includes/rest_v2/plugins_listings_listings/find/', { json: JSON.stringify({ filter, options }), token: core.simpleToken }), {signal})); const [res, resErr] = await xhr; if (resErr) return new Error(resErr); const returnData = { total : res.docs.count + self.custom_dtnids.length, docs : dtnDocs.concat(res.docs.docs).slice(0, self.args.limit) }; const params = urlLib.parse(window.location.toString()).get const hasBooking = params['filter_daterange'] !== undefined; console.log(params) let bookingquery = {}; let bookingParams = ''; if (hasBooking) { bookingquery = { filter_daterange: params['filter_daterange'], filter_adults: params['filter_adults'] || '1', filter_children: params['filter_children'] || '0', filter_flex: params['filter_flex'] || '0', }; bookingParams = urlLib.build({ get: bookingquery }); } returnData.docs = returnData.docs.map((val, index) => ({ recid : val.recid, type: val.type, title : val.title, image_url : val.primary_image_url, crmc : val.primary_category.catname, crmsc : val.primary_category.subcatname, acctid : val.acctid, city : val.city, region : val.region, rankname : val.rankname, price: val.listingudfs_object?.[26]?.value_string, index: (index + (options.skip || 0)) ?? undefined, url : hasBooking ? `${val.url}${bookingParams}` : val.url, dtn : val.isDTN ? { auid : dtnargs.auid, rank : val.dtn.rank } : undefined, yelp : val.yelp, channels: val.custom.channels.channelkey, subcatgroups: val.custom.subcatgroups, coupons: val.custom.coupons, description: val.description, shortdescription: val.shortdescription, listingudfs_object: val.listingudfs_object, listingudfs: val.listingudfs, locations: [{ title : val.city }], // sets listing location latitude : val.latitude, longitude : val.longitude, qualityScore : val.qualityScore, tripadvisor : val.tripadvisor, taid: val.taid, primary_category: val.primary_category, booking_full: val.booking_full, booking_price_avg: val.booking_price_avg, booking_price_total: val.booking_price_total, categories: val.categories, externallinks: val.custom.externallinks, halloween: val.custom.externallinks ? val.custom.externallinks.find(link => link.linkkey === 249831) ? val.custom.externallinks.find(link => link.linkkey === 249831).linkname : undefined : undefined, halloween_link: val.custom.externallinks ? val.custom.externallinks.find(link => link.linkkey === 249831) ? val.custom.externallinks.find(link => link.linkkey === 249831).url : undefined : undefined, manchesterpass: val.custom.externallinks ? val.custom.externallinks.find(link => link.linkkey === 249841) ? val.custom.externallinks.find(link => link.linkkey === 249841).linkname : undefined : undefined, manchesterpass_link: val.custom.externallinks ? val.custom.externallinks.find(link => link.linkkey === 249841) ? val.custom.externallinks.find(link => link.linkkey === 249841).url : undefined : undefined, button : { title : t.leo.read_more, url : hasBooking ? `${val.url}${bookingParams}` : val.url, weburl : val.weburl, weburl_title : t.leo.visit_website } // call to action button })); returnData.itemType = 'listings'; returnData.itemListName = 'Listings Index'; return returnData; } } }); /* register available UI events */ const watcher = new UIWatcher(vue, $, document); const uid = clientLib.uuid().toString(); const widgetEvents = [ 'change-page', 'view-change', 'value-change', 'sort-change', 'toggle-show-more', 'scroll-into-view', 'item-click', 'title-click', 'map-pin-click', 'tripbuilder', ]; for (let i = 0; i < widgetEvents.length; i++) { watcher.add('vue', widgetEvents[i], uid, { name: 'Listings' }); } async function setup(widget) { const [allCats, allCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_cats/find/', { json: JSON.stringify({ filter: { active: true, sites: { $in: [site.site] } }, options: { castDocs:false, fields: { catid: 1, catname: 1, has_listings: 1 } } }), token: core.simpleToken }))); if (allCatsErr) return new Error(allCatsErr); const validCats = !!widget?.data?.cats ? allCats.docs.filter(cat => widget.data.cats.indexOf(cat.catid.toString()) !== -1) : allCats.docs; const [allSubcats, allSubcatsErr] = await utils.call(fetch(utils.getAPIUrl('/includes/rest_v2/plugins_listings_subcats/find/', { json: JSON.stringify({ filter: { active: true, categoryid: widget?.data?.cats ? { $in: widget.data.cats.map(catid => Number(catid)) } : { $exists: true }, sites: { $in: [site.site] } }, options: { castDocs:false, fields: { categoryid: 1, catname: 1, subcatid: 1, subcatname: 1, has_listings: 1 } } }), token: core.simpleToken }))); if (allSubcatsErr) return new Error(allSubcatsErr); const validSubcats = !!widget?.data?.subcats ? allSubcats.docs.filter(subcat => widget.data.subcats.indexOf(subcat.subcatid.toString()) !== -1) : allSubcats.docs; const groupedSubcats = allSubcats.docs.reduce((acc, curr) => { if (acc[curr.categoryid] === undefined) { acc[curr.categoryid] = []; } acc[curr.categoryid].push({ label: curr.subcatname, value: curr.subcatid.toString() }); return acc; }, {}); const groupedCats = allCats.docs .filter(cat => cat.has_listings) .map(cat => ({ label: cat.catname, value: cat.catid.toString(), options: groupedSubcats[cat.catid], })) .filter(cat => !!cat.options); const [allRegions, allRegionErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_polygons/find/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { regionid: 1, region: 1 } } }), token: core.simpleToken } ))); if (allRegionErr) return new Error(allRegionErr); const validRegions = !!widget?.data?.regions ? allRegions.docs.filter(region => widget.data.regions.indexOf(region.regionid.toString()) !== -1) : allRegions.docs; const [allCategoryGroups, allCategoryGroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_categorygroups/find/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { categorygroupid: 1, categorygroup: 1 } } }), token: core.simpleToken } ))); if (allCategoryGroupsErr) return new Error(allCategoryGroupsErr); const validCategoryGroups = !!widget?.data?.cat_groups ? allCategoryGroups.docs.filter(categorygroup => widget.data.cat_groups.indexOf(categorygroup.categorygroupid.toString()) !== -1) : allCategoryGroups.docs; const [allChannels, allChannelsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_channels/find/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { channelkey: 1, channelname: 1 } } }), token: core.simpleToken } ))); if (allChannelsErr) return new Error(allChannelsErr); const validChannels = !!widget?.data?.channel_filter ? allChannels.docs.filter(channel => widget.data.channel_filter.indexOf(channel.channelkey.toString()) !== -1) : allChannels.docs; const showAmenities = widget?.data?.amenities_search !== 'none'; const showCustomAmenities = widget?.data?.amenities_search === 'custom'; let allAmenities, allAmenitiesErr; if (showAmenities) { const allAmenitiesRes = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_boolean_amenities/find/', { json: JSON.stringify({ filter: showCustomAmenities && widget?.data?.custom_amenities.length > 0 ? { uniquename: { $in: widget.data.custom_amenities } } : {}, options: { castDocs:false, fields: { label: 1, uniquename: 1, fieldid: 1 } } }), token: core.simpleToken } ))); allAmenities = allAmenitiesRes[0]; allAmenitiesErr = allAmenitiesRes[1] if (allAmenitiesErr) return new Error(allAmenitiesErr); } else { allAmenities = { docs: [] }; } return {allCats, validCats, allSubcats, validSubcats, allCategoryGroups, validCategoryGroups, allRegions, validRegions, allChannels, validChannels, allAmenities}; } } }); </script></div><div data-civid="6525b69a58d8a262bf5e6c65" class="contentRender contentRender_16 contentRender_type_panel contentRender_name_plugins_common_product_search_container" data-sv-time="1" data-sv-index="16" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <section class="product-search" data-guid="4079a280-924e-4ef0-8f3a-c97368f52879"> <div class="ps-wrapper"> <div class="nav"> <div class="inner"> <header> <h2 class="panel-title">Search for something...</h2> <p class="panel-description">Continue your Manchester story by exploring further.</p> </header> <div class="ps-tabs" role="tablist" aria-label="Product Searches" data-tab-list></div> </div> </div> <div data-civid="659bd8eece7a575babca8115" class="contentRender contentRender_17 contentRender_type_widget contentRender_name_plugins_common_product_search" data-sv-time="57" data-sv-index="17" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <button role="tab" aria-controls="panel-330778fa-b435-4868-8092-a995caaf8912" id="tab-330778fa-b435-4868-8092-a995caaf8912" class="mobile-tab" >Things to do <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"></i></button> <div data-guid="330778fa-b435-4868-8092-a995caaf8912" data-product-search="Things to do" data-default-selected="closed" role="tabpanel" id="panel-330778fa-b435-4868-8092-a995caaf8912" aria-labelledby="tab-330778fa-b435-4868-8092-a995caaf8912" class="ps-panel" > <div id="ps_330778fa-b435-4868-8092-a995caaf8912"> <script id="ps_data_330778fa-b435-4868-8092-a995caaf8912" type="text/template">{"sections":{},"data":{"title":"Things to do","default_selected":"false","type":"listings","use_cat_groups":"on","categorygroups":["155071","155161","155141","155151","155031","155011","155051","154101","155061","154141","155171","155331","155111","155181","154171","155081","155131","155041","155121"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"true","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"6526428258d8a262bf5ece3e","type":"plugins_nav_navitem_primary_main"},"link":{"id":"6526428258d8a262bf5ece3e","url":"https://www.visitmanchester.com/things-to-see-and-do/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_6526428258d8a262bf5ece3e"}},"guid":"330778fa-b435-4868-8092-a995caaf8912","customSettings":{},"widgetArgs":{"nav":{"_id":"6525e39d58d8a262bf5e85d3","sortorder":0,"title":"Restaurants","folder":"restaurants","section":"main","type":"page","active":true,"show_on_nav":true,"publish_start":"2023-10-10T23:00:00.000Z","searchable":"yes","new_window":false,"image_id":"6597dd7e02e07159334f718b","description":"<p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.</p>","meta_title":"Restaurants in Manchester | Visit Manchester","meta_description":"Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.","tags_ids":["65280bf2bd338238afbc223c"],"parent_id":"6525e38c58d8a262bf5e73b7","parents_ids":["6525e38c58d8a262bf5e73b7"],"version_id":"659fe5c55863e2659ef6393e","created":"2023-10-10T23:51:57.575Z","content_owner":"default","site_name":"primary","updated":"2024-01-11T12:57:41.493Z","title_sort":"restaurants","site_section":"primary.main","published":true,"amp":false,"cms_title":"Restaurants - /food-and-drink/restaurants/","cms_title_sort":"restaurants - /food-and-drink/restaurants/","folderHref":"/food-and-drink/restaurants/","image":{"_id":"6597dd7e02e07159334f718b","original_public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","title":"Couple eating in the Edwardian Manchester restaurant","resource_raw":{"asset_id":"c9dbeebf9cfe686fc1b344707de6fe87","public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","version":1704451414,"version_id":"7a10f4e1a1bcaaa1c76d5f2bfa7c5a4c","signature":"510871297937606aadd2373fda0919789421829e","width":1920,"height":1317,"format":"jpg","resource_type":"image","created_at":"2024-01-05T10:43:34.000Z","pages":1,"bytes":242467,"type":"upload","etag":"7d3c03ce65a4397955f9ac2b39d15ae5","placeholder":false,"url":"http://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","secure_url":"https://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","folder":"clients/manchester","access_mode":"public","original_filename":"file","api_key":"756897581616859"},"tags_ids":["65280bf2bd338238afbc223c","6597dc6002e07159334f7185"],"alt_text_raw":"Couple eating in the Edwardian Manchester restaurant","focal_point":{"x":1222,"y":696},"content_owner":"default","title_sort":"couple eating in the edwardian manchester restaurant","updated":"2024-01-05T10:44:14.456Z","private":false,"deleted":false,"created":"2024-01-05T10:44:14.456Z","resource":{"raw":{"resource_type":"image","format":"jpg","pages":1,"public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38"},"focalPoint":{"x":1222,"y":696}},"id":"6597dd7e02e07159334f718b","type":"image","inAssetRequest":false,"alt_text":"Couple eating in the Edwardian Manchester restaurant","expired":false},"locale_count":0,"tags":[{"_id":"65280bf2bd338238afbc223c","tag":"Food & drink","created":"2023-10-12T15:08:34.285Z","sort_tag":"food & drink","updated":"2023-11-21T11:59:30.571Z","id":"65280bf2bd338238afbc223c"}],"id":"6525e39d58d8a262bf5e85d3","parent_id_string":"6525e38c58d8a262bf5e73b7","version_id_string":"659fe5c55863e2659ef6393e","href":"/food-and-drink/restaurants/","absoluteHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","absoluteFolderHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","metaTitle":"Restaurants in Manchester | Visit Manchester","rootCmsUrl":"/nav/sitemap/site_primary/section_main/"},"num":17,"guid":"330778fa-b435-4868-8092-a995caaf8912","data":{"title":"Things to do","default_selected":"false","type":"listings","use_cat_groups":"on","categorygroups":["155071","155161","155141","155151","155031","155011","155051","154101","155061","154141","155171","155331","155111","155181","154171","155081","155131","155041","155121"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"true","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"6526428258d8a262bf5ece3e","type":"plugins_nav_navitem_primary_main"},"link":{"id":"6526428258d8a262bf5ece3e","url":"https://www.visitmanchester.com/things-to-see-and-do/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_6526428258d8a262bf5ece3e"}},"civ":{"instance":{"type":"widget","name":"plugins_common_product_search","site_name":"primary","saved":false,"created":"2024-01-08T11:14:56.327Z","updated":"2024-01-08T11:14:56.327Z","deleted":false,"id":"659bd8eece7a575babca8115","version_id_string":"659bd8eece7a575babca8116"},"version":{"data":{"title":"Things to do","default_selected":"false","type":"listings","use_cat_groups":"on","categorygroups":["155071","155161","155141","155151","155031","155011","155051","154101","155061","154141","155171","155331","155111","155181","154171","155081","155131","155041","155121"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"true","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"6526428258d8a262bf5ece3e","type":"plugins_nav_navitem_primary_main"},"link":{"id":"6526428258d8a262bf5ece3e","url":"https://www.visitmanchester.com/things-to-see-and-do/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_6526428258d8a262bf5ece3e"}},"created":"2024-01-08T11:14:56.329Z","id":"659bd8eece7a575babca8116","instance_id_string":"659bd8eece7a575babca8115"},"onTrunk":true,"civid":"659bd8eece7a575babca8115"},"name":"plugins_common_product_search"},"translations":{"translations.static.leo":{"apply":"Apply","clear_filters":"Clear Filters","reset":"Reset","filter":"Filter","sort":"Sort","view":"View","keyword":"Keyword","search_placeholder":"Search","select":"Select","regions":"Regions","categories":"Categories","grid":"Grid","list":"List","map":"Map","show_map":"Show Map","hide_map":"Hide Map","recommended":"Recommended","near_me":"Near Me","read_more":"Read More","quick_view":"Quick View","featured_title":"Partner","visit_website":"Visit Website","email":"E-mail","tollfree":"Toll Free","tab_about":"About","tab_map":"Map","tab_openings":"Dates and Times","tab_guide_prices":"Prices","tab_offers":"Special Offers","tab_faq":"FAQs","tab_gradings":"Gradings","tab_awards":"Awards","tab_also_like":"You might also be interested in...","tab_downloads":"Downloads","tab_routes":"Routes","tab_facilities":"Facilities","tab_virtual_tours":"Virtual Tours","show_more":"Show $1 more","show_less":"Show Less","results":"$1 results","no_results":"There are no results that match your filter.","miles_from_you":"Miles from You","meeting_rooms":"Meeting Rooms","square_feet":"Total Sq. Ft.","largest_room":"Largest Room","sleeping_rooms":"Sleeping Rooms","banquet":"Banquet Capacity","reception":"Reception Capacity","theatre":"Theater Capacity","classroom":"Classroom Capacity","compare":"Compare","close_compare_dropdown":"Close compare dropdown","compare_add":"Add to compare","compare_remove":"Remove from compare","compare_clear_all":"Clear All","compare_limit_message":"You can only compare four (4) items at a time","location":"Location","locations":"Locations","details":"Details","address":"Address","err_loc_timeout":"We're unable to determine your location at this time.","err_loc_blocked":"You must allow location access for distance sorting.","err_loc_radius":"You must be within $1 miles to sort by distance.","date_range_title":"Show Events For","date_range_day":"Day","date_range_week":"Week","date_range_weekend":"Weekend","date_range_month":"Month","date_range_year":"Year","date_range_selected_dates":"Selected Dates","per_page_label":"Items Per Page","tb_add":"Add to Trip","tb_remove":"Remove from Trip","tb_view":"View Trip","facilities":"Facilities","download":"Download Events as CSV","convention":"Convention","venues":"Venues","dates":"Dates","attendance":"Attendance","whats_nearby":"What's Nearby","attractions":"Attractions","dining":"Dining","accommodations":"Accommodations","events":"Events","things_to_do":"Things To Do","get_directions":"Get Directions","redo_search_in_map":"Redo Search in Map","add_to_calendar":"Add to Calendar","add_to_google_calendar":"Add to Google Calendar","add_to_microsoft_calendar":"Add to Microsoft Live Calendar","add_to_outlook_calendar":"Add to Office365 Outlook Calendar","add_to_iCloud_calendar":"Add to iCloud Calendar","add_to_windows_calendar":"Add to Windows Calendar","start_date":"Start Date","end_date":"End Date","learn_more":"Learn more about"}}}</script> </div> </div> <script> require([ 'jquery', 'plugins_core/main', 'sv_site', 'sv_clientMoment', 'plugins_common_custom_product_search', 'plugins_common_custom_utils', ], function( $, core, site, clientMoment, product_search, utils ) { init(); async function init() { const dataString = document.querySelector('#ps_data_330778fa-b435-4868-8092-a995caaf8912').textContent const widget = JSON.parse(dataString); const t = { leo: widget.translations['translations.static.leo'], }; // Collect all select options let options = {} // date format to ensure all dates passed through clientMoment and the date range plugin are formated correctly const queryDateFormat = 'YYYY-MM-DD'; const today = clientMoment().format(queryDateFormat); const thisWeek = clientMoment().add(6, 'days').format(queryDateFormat); const thisMonth = clientMoment().add(1, 'months').format(queryDateFormat); const weekendFri = clientMoment().day(5).format(queryDateFormat); const weekendSun = clientMoment().day(7).format(queryDateFormat); const customStart = clientMoment(widget.data.from_date).format(queryDateFormat); const customEnd = clientMoment(widget.data.to_date).format(queryDateFormat); const showBooking = (widget?.data?.show_booking ?? 'false') === 'true'; const showBookingActiveByDefault = (widget?.data?.show_booking_active ?? 'false') === 'true'; const showRegion = (widget?.data?.show_region ?? 'false') === 'true'; const useCatGroups = (widget?.data?.use_cat_groups ?? 'off') === 'on'; const hasCatGroups = widget?.data?.use_cat_groups === 'on'; // Set initial start and end days for the calendar dropdown let initialDates = { start: today, end: today } if (widget.data.defaultRange === 'week') { initialDates.end = thisWeek; } else if (widget.data.defaultRange === 'weekend') { initialDates.start = weekendFri; initialDates.end = weekendSun; } else if (widget.data.defaultRange === 'month') { initialDates.end = thisMonth; } else if (widget.data.defaultRange === 'custom') { initialDates.start = customStart; initialDates.end = customEnd; } // The hidden filter is to store values that are manually selected in the CMS. // Regions and event categories are the two available fields for manual selection const hiddenFilters = {} if (widget.data.type === 'listings' && widget.data.regionid) { hiddenFilters.regionid = widget.data.regionid; } else if (widget.data.type === 'events' && widget.data.regionidevents) { hiddenFilters.regionidevents = widget.data.regionidevents; } else if (widget.data.type === 'events' && widget.data.cat_groups_events && widget.data.cat_groups_events.length > 0) { hiddenFilters.catids = widget.data.cat_groups_events; } else if (widget.data.type === 'offers' && widget.data.offer_category && widget.data.offer_category.length > 0) { hiddenFilters.catid = data.offer_category; } if (widget.data.hide_date_filters === 'true') { hiddenFilters.dates = initialDates; } if (widget.data.channel) { hiddenFilters.channelkey = widget.data.channel; } // if listings if (widget.data.type === 'listings') { if (useCatGroups) { // if doesn't have category groups const [categorygroups, categorygroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_categorygroups/aggregate/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { categorygroupid: 1, categorygroup: 1 } } }), token: core.simpleToken } ))); if (categorygroupsErr) return new Error(categorygroupsErr); const groups = !!widget ?.data ?.categorygroups ? categorygroups.docs.filter(group => widget.data.categorygroups.indexOf(group.categorygroupid.toString()) !== -1) : categorygroups.docs; options.groups = groups.map(group => ({ label: group.categorygroup, value: group.categorygroupid.toString() })); } else { const [allSubcats, allSubcatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_subcats/find/', { json: JSON.stringify({ filter: { active: { $eq: true }, has_listings: { $eq: true }, sites: { $in: [site.site] } }, options: { castDocs: false, sort: { fullname: 1 }, fields: { categoryid: 1, subcatid: 1, subcatname: 1, } } }), token: core.simpleToken } ))); if (allSubcatsErr) return new Error(allSubcatsErr); let subcats = allSubcats.docs; if (widget?.data?.cats) { subcats = subcats.filter(subcat => subcat.categoryid === Number(widget.data.cats)); } options.subcats = subcats.map(subcat => ({ label: subcat.subcatname, value: subcat.subcatid.toString() })); } if (!widget.data.regionid) { // if doesn't have regions const [regions, regionsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_polygons/aggregate/', { json: JSON.stringify({ pipeline: [ { $sort: { region: 1 } }, { $project: { label: "$region", value: "$regionid" } }, ] }), token: core.simpleToken } ))); if (regionsErr) return new Error(regionsErr); options.regions = regions.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'events') { const catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : []; options.catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : [] // if events if (useCatGroups) { const [eventCatGroups, eventCatGroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_catgroup_x_tags/find/', { json: JSON.stringify({ filter: {}, options: { castDocs: false, sort: { sort_tag: 1 }, fields: { tag: 1, "cat_groups.title": 1, "cat_groups.cats": 1, } } }), token: core.simpleToken } ))); if (eventCatGroupsErr) return new Error(eventCatGroupsErr); eventCatGroups.docs.map(tag => tag.cat_groups.sort((a, b) => a.title.localeCompare(b.title))); options.catgroups = eventCatGroups.docs.map(tag => tag.cat_groups.map(cg => ({ label: cg.title, value: cg.cats.join(','), group: tag.tag, }))).flat(); if (widget?.data?.cat_groups_events) { const selectedGroups = widget.data.cat_groups_events.map(cg => cg.title); options.catgroups = options.catgroups.filter(cg => selectedGroups.indexOf(cg.label) !== -1); } } else { const [allCats, allCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_categories/find/', { json: JSON.stringify({ filter: { calendarid: { $eq: (widget?.data?.calendar ?? '1') }, ...(widget?.data?.cats_events ? { value: { $in: widget.data.cats_events } } : {}), }, options: { castDocs: false, sort: { label: 1 }, fields: { label: 1, value: 1, } } }), token: core.simpleToken } ))); if (allCatsErr) return new Error(allCatsErr); options.cats = allCats.docs; } if (!widget.data.regionidevents) { const [regionsevents, regionseventsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_events_metadata/aggregate/', { json: JSON.stringify({ pipeline: [ { "$project" : { "option" : "$udfs_object.11.values" } }, { "$unwind" : "$option" }, { $sort: { regionsevents: 1 } }, { $project: { label: "$option.listvalue", value: "$option.listid" } }, ] }), token: core.simpleToken } ))); if (regionseventsErr) return new Error(regionseventsErr); options.regionsevents = regionsevents.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'offers') { // if offers const [offerCats, offerCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_offers_offermeta/aggregate/', { json: JSON.stringify({ pipeline: [ { $project: { _id: 0, categories: 1 } }, { $unwind: "$categories" }, { $match: { "categories.active": true } }, { $project: { label: "$categories.categoryname", value: { $toString: "$categories.categoryid" }, } }, { $sort: { "label": 1 } }, ] }), token: core.simpleToken } ))); if (offerCatsErr) return new Error(offerCatsErr); options.cats = offerCats.docs; } const vue = product_search.getVue({ rootNode: $('#ps_330778fa-b435-4868-8092-a995caaf8912'), type: widget.data.type, link: widget.data.link.url, linkText: widget.data.link_text, hiddenFilters: hiddenFilters, translations: t.leo, filters: [ { name : "filter_onlybooking", label : "Search Availability", type : "toggle", show: showBooking, value: "true", initialValue: showBookingActiveByDefault, }, { name: 'filter_daterange[start]', label: 'Check in', type: 'date_availability_start', show: showBooking, initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: 'Check out', type: 'date_availability_end', show: showBooking, initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_adults', label: 'Number of Adults', type: 'select', show: showBooking, initialValue: '1', typeExtra: { options: [ { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_children', label: 'Number of Children', type: 'select', show: showBooking, initialValue: '0', typeExtra: { options: [ { label: '0', value: '0' }, { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_daterange[start]', label: t.leo.start_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: t.leo.end_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_cat_groups[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && useCatGroups, typeExtra: { options: options.groups || [] } }, { name: useCatGroups ? 'filter_cat_groups[0]' : 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events', typeExtra: { options: useCatGroups ? (options.catGroupsEvents || []) : (options.cats || []), } }, { name: 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: (widget.data.type === 'offers' && !widget.data.offer_category), typeExtra: { options: options.cats } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && !widget.data.regionid && showRegion, typeExtra: { options: options.regions || [] } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events' && !widget.data.regionidevents && showRegion, typeExtra: { options: options.regionsevents || [] } }, { name: 'filter_keyword', label: t.leo.keyword, placeholder: t.leo.search_placeholder, type: 'text', show: true }, { name: 'filter_channel[0]', label: 'Channel', placeholder: t.leo.search_placeholder, show: !widget.data.channel, typeExtra: { options: options.channel || [] } }, ] }); } }); </script></div><div data-civid="659bd8eece7a575babca8117" class="contentRender contentRender_18 contentRender_type_widget contentRender_name_plugins_common_product_search" data-sv-time="61" data-sv-index="18" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'> <button role="tab" aria-controls="panel-4f9fd040-ba5d-417b-9c87-9e11dddaeda6" id="tab-4f9fd040-ba5d-417b-9c87-9e11dddaeda6" class="mobile-tab" >What's On <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"></i></button> <div data-guid="4f9fd040-ba5d-417b-9c87-9e11dddaeda6" data-product-search="What's On" data-default-selected="closed" role="tabpanel" id="panel-4f9fd040-ba5d-417b-9c87-9e11dddaeda6" aria-labelledby="tab-4f9fd040-ba5d-417b-9c87-9e11dddaeda6" class="ps-panel" > <div id="ps_4f9fd040-ba5d-417b-9c87-9e11dddaeda6"> <script id="ps_data_4f9fd040-ba5d-417b-9c87-9e11dddaeda6" type="text/template">{"sections":{},"data":{"title":"What's On","default_selected":"false","type":"events","use_cat_groups":"on","calendar":"1","cats_events":["7419","8879","135","7359","6469","136","7429","147","6609","149","138"],"show_booking":"false","show_booking_active":"false","show_region":"false","regionidevents":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","cat_groups_events_ids":["6511699b3786100d79bf3de5","651169da3786100d79bf3de7","65281181bd338238afbc2251","6528119ebd338238afbc2253","652803cebd338238afbc2182","652811e9bd338238afbc2255","65281228bd338238afbc2259","6528120dbd338238afbc2257","65281274bd338238afbc225b","652803f7bd338238afbc2184","65280392bd338238afbc2180"],"link_raw":{"id":"650af9e3dc2abf6b654232e5","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af9e3dc2abf6b654232e5","url":"https://www.visitmanchester.com/whats-on/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af9e3dc2abf6b654232e5"},"cat_groups_events":[{"_id":"6511699b3786100d79bf3de5","title":"Art & exhibitions","cats":["134","8969","146"]},{"_id":"651169da3786100d79bf3de7","title":"Festivals","cats":["135"]},{"_id":"65281181bd338238afbc2251","title":"Comedy & entertainment","cats":["7419","8849","5309","8959","4939"]},{"_id":"6528119ebd338238afbc2253","title":"Family friendly","cats":["8879"]},{"_id":"652803cebd338238afbc2182","title":"Food & drink","cats":["7359","9209"]},{"_id":"652811e9bd338238afbc2255","title":"Markets, fetes & fairs","cats":["163","6469","136","5679","9009"]},{"_id":"65281228bd338238afbc2259","title":"Music","cats":["131","7429"]},{"_id":"6528120dbd338238afbc2257","title":"Sport","cats":["147"]},{"_id":"65281274bd338238afbc225b","title":"Theatre","cats":["6609"]},{"_id":"652803f7bd338238afbc2184","title":"Tours","cats":["9489","9339","137"]},{"_id":"65280392bd338238afbc2180","title":"Workshops, talks & lectures","cats":["139","138","8969","149"]}]},"guid":"4f9fd040-ba5d-417b-9c87-9e11dddaeda6","customSettings":{},"widgetArgs":{"nav":{"_id":"6525e39d58d8a262bf5e85d3","sortorder":0,"title":"Restaurants","folder":"restaurants","section":"main","type":"page","active":true,"show_on_nav":true,"publish_start":"2023-10-10T23:00:00.000Z","searchable":"yes","new_window":false,"image_id":"6597dd7e02e07159334f718b","description":"<p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.</p>","meta_title":"Restaurants in Manchester | Visit Manchester","meta_description":"Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.","tags_ids":["65280bf2bd338238afbc223c"],"parent_id":"6525e38c58d8a262bf5e73b7","parents_ids":["6525e38c58d8a262bf5e73b7"],"version_id":"659fe5c55863e2659ef6393e","created":"2023-10-10T23:51:57.575Z","content_owner":"default","site_name":"primary","updated":"2024-01-11T12:57:41.493Z","title_sort":"restaurants","site_section":"primary.main","published":true,"amp":false,"cms_title":"Restaurants - /food-and-drink/restaurants/","cms_title_sort":"restaurants - /food-and-drink/restaurants/","folderHref":"/food-and-drink/restaurants/","image":{"_id":"6597dd7e02e07159334f718b","original_public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","title":"Couple eating in the Edwardian Manchester restaurant","resource_raw":{"asset_id":"c9dbeebf9cfe686fc1b344707de6fe87","public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","version":1704451414,"version_id":"7a10f4e1a1bcaaa1c76d5f2bfa7c5a4c","signature":"510871297937606aadd2373fda0919789421829e","width":1920,"height":1317,"format":"jpg","resource_type":"image","created_at":"2024-01-05T10:43:34.000Z","pages":1,"bytes":242467,"type":"upload","etag":"7d3c03ce65a4397955f9ac2b39d15ae5","placeholder":false,"url":"http://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","secure_url":"https://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","folder":"clients/manchester","access_mode":"public","original_filename":"file","api_key":"756897581616859"},"tags_ids":["65280bf2bd338238afbc223c","6597dc6002e07159334f7185"],"alt_text_raw":"Couple eating in the Edwardian Manchester restaurant","focal_point":{"x":1222,"y":696},"content_owner":"default","title_sort":"couple eating in the edwardian manchester restaurant","updated":"2024-01-05T10:44:14.456Z","private":false,"deleted":false,"created":"2024-01-05T10:44:14.456Z","resource":{"raw":{"resource_type":"image","format":"jpg","pages":1,"public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38"},"focalPoint":{"x":1222,"y":696}},"id":"6597dd7e02e07159334f718b","type":"image","inAssetRequest":false,"alt_text":"Couple eating in the Edwardian Manchester restaurant","expired":false},"locale_count":0,"tags":[{"_id":"65280bf2bd338238afbc223c","tag":"Food & drink","created":"2023-10-12T15:08:34.285Z","sort_tag":"food & drink","updated":"2023-11-21T11:59:30.571Z","id":"65280bf2bd338238afbc223c"}],"id":"6525e39d58d8a262bf5e85d3","parent_id_string":"6525e38c58d8a262bf5e73b7","version_id_string":"659fe5c55863e2659ef6393e","href":"/food-and-drink/restaurants/","absoluteHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","absoluteFolderHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","metaTitle":"Restaurants in Manchester | Visit Manchester","rootCmsUrl":"/nav/sitemap/site_primary/section_main/"},"num":18,"guid":"4f9fd040-ba5d-417b-9c87-9e11dddaeda6","data":{"title":"What's On","default_selected":"false","type":"events","use_cat_groups":"on","calendar":"1","cats_events":["7419","8879","135","7359","6469","136","7429","147","6609","149","138"],"show_booking":"false","show_booking_active":"false","show_region":"false","regionidevents":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","cat_groups_events_ids":["6511699b3786100d79bf3de5","651169da3786100d79bf3de7","65281181bd338238afbc2251","6528119ebd338238afbc2253","652803cebd338238afbc2182","652811e9bd338238afbc2255","65281228bd338238afbc2259","6528120dbd338238afbc2257","65281274bd338238afbc225b","652803f7bd338238afbc2184","65280392bd338238afbc2180"],"link_raw":{"id":"650af9e3dc2abf6b654232e5","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af9e3dc2abf6b654232e5","url":"https://www.visitmanchester.com/whats-on/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af9e3dc2abf6b654232e5"},"cat_groups_events":[{"_id":"6511699b3786100d79bf3de5","title":"Art & exhibitions","cats":["134","8969","146"]},{"_id":"651169da3786100d79bf3de7","title":"Festivals","cats":["135"]},{"_id":"65281181bd338238afbc2251","title":"Comedy & entertainment","cats":["7419","8849","5309","8959","4939"]},{"_id":"6528119ebd338238afbc2253","title":"Family friendly","cats":["8879"]},{"_id":"652803cebd338238afbc2182","title":"Food & drink","cats":["7359","9209"]},{"_id":"652811e9bd338238afbc2255","title":"Markets, fetes & fairs","cats":["163","6469","136","5679","9009"]},{"_id":"65281228bd338238afbc2259","title":"Music","cats":["131","7429"]},{"_id":"6528120dbd338238afbc2257","title":"Sport","cats":["147"]},{"_id":"65281274bd338238afbc225b","title":"Theatre","cats":["6609"]},{"_id":"652803f7bd338238afbc2184","title":"Tours","cats":["9489","9339","137"]},{"_id":"65280392bd338238afbc2180","title":"Workshops, talks & lectures","cats":["139","138","8969","149"]}]},"civ":{"instance":{"type":"widget","name":"plugins_common_product_search","site_name":"primary","saved":false,"created":"2024-01-08T11:14:56.330Z","updated":"2024-01-08T11:14:56.330Z","deleted":false,"id":"659bd8eece7a575babca8117","version_id_string":"659bd8eece7a575babca8118"},"version":{"data":{"title":"What's On","default_selected":"false","type":"events","use_cat_groups":"on","calendar":"1","cats_events":["7419","8879","135","7359","6469","136","7429","147","6609","149","138"],"show_booking":"false","show_booking_active":"false","show_region":"false","regionidevents":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","cat_groups_events_ids":["6511699b3786100d79bf3de5","651169da3786100d79bf3de7","65281181bd338238afbc2251","6528119ebd338238afbc2253","652803cebd338238afbc2182","652811e9bd338238afbc2255","65281228bd338238afbc2259","6528120dbd338238afbc2257","65281274bd338238afbc225b","652803f7bd338238afbc2184","65280392bd338238afbc2180"],"link_raw":{"id":"650af9e3dc2abf6b654232e5","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af9e3dc2abf6b654232e5","url":"https://www.visitmanchester.com/whats-on/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af9e3dc2abf6b654232e5"},"cat_groups_events":[{"_id":"6511699b3786100d79bf3de5","title":"Art & exhibitions","cats":["134","8969","146"]},{"_id":"651169da3786100d79bf3de7","title":"Festivals","cats":["135"]},{"_id":"65281181bd338238afbc2251","title":"Comedy & entertainment","cats":["7419","8849","5309","8959","4939"]},{"_id":"6528119ebd338238afbc2253","title":"Family friendly","cats":["8879"]},{"_id":"652803cebd338238afbc2182","title":"Food & drink","cats":["7359","9209"]},{"_id":"652811e9bd338238afbc2255","title":"Markets, fetes & fairs","cats":["163","6469","136","5679","9009"]},{"_id":"65281228bd338238afbc2259","title":"Music","cats":["131","7429"]},{"_id":"6528120dbd338238afbc2257","title":"Sport","cats":["147"]},{"_id":"65281274bd338238afbc225b","title":"Theatre","cats":["6609"]},{"_id":"652803f7bd338238afbc2184","title":"Tours","cats":["9489","9339","137"]},{"_id":"65280392bd338238afbc2180","title":"Workshops, talks & lectures","cats":["139","138","8969","149"]}]},"created":"2024-01-08T11:14:56.332Z","id":"659bd8eece7a575babca8118","instance_id_string":"659bd8eece7a575babca8117"},"onTrunk":true,"civid":"659bd8eece7a575babca8117"},"name":"plugins_common_product_search"},"translations":{"translations.static.leo":{"apply":"Apply","clear_filters":"Clear Filters","reset":"Reset","filter":"Filter","sort":"Sort","view":"View","keyword":"Keyword","search_placeholder":"Search","select":"Select","regions":"Regions","categories":"Categories","grid":"Grid","list":"List","map":"Map","show_map":"Show Map","hide_map":"Hide Map","recommended":"Recommended","near_me":"Near Me","read_more":"Read More","quick_view":"Quick View","featured_title":"Partner","visit_website":"Visit Website","email":"E-mail","tollfree":"Toll Free","tab_about":"About","tab_map":"Map","tab_openings":"Dates and Times","tab_guide_prices":"Prices","tab_offers":"Special Offers","tab_faq":"FAQs","tab_gradings":"Gradings","tab_awards":"Awards","tab_also_like":"You might also be interested in...","tab_downloads":"Downloads","tab_routes":"Routes","tab_facilities":"Facilities","tab_virtual_tours":"Virtual Tours","show_more":"Show $1 more","show_less":"Show Less","results":"$1 results","no_results":"There are no results that match your filter.","miles_from_you":"Miles from You","meeting_rooms":"Meeting Rooms","square_feet":"Total Sq. Ft.","largest_room":"Largest Room","sleeping_rooms":"Sleeping Rooms","banquet":"Banquet Capacity","reception":"Reception Capacity","theatre":"Theater Capacity","classroom":"Classroom Capacity","compare":"Compare","close_compare_dropdown":"Close compare dropdown","compare_add":"Add to compare","compare_remove":"Remove from compare","compare_clear_all":"Clear All","compare_limit_message":"You can only compare four (4) items at a time","location":"Location","locations":"Locations","details":"Details","address":"Address","err_loc_timeout":"We're unable to determine your location at this time.","err_loc_blocked":"You must allow location access for distance sorting.","err_loc_radius":"You must be within $1 miles to sort by distance.","date_range_title":"Show Events For","date_range_day":"Day","date_range_week":"Week","date_range_weekend":"Weekend","date_range_month":"Month","date_range_year":"Year","date_range_selected_dates":"Selected Dates","per_page_label":"Items Per Page","tb_add":"Add to Trip","tb_remove":"Remove from Trip","tb_view":"View Trip","facilities":"Facilities","download":"Download Events as CSV","convention":"Convention","venues":"Venues","dates":"Dates","attendance":"Attendance","whats_nearby":"What's Nearby","attractions":"Attractions","dining":"Dining","accommodations":"Accommodations","events":"Events","things_to_do":"Things To Do","get_directions":"Get Directions","redo_search_in_map":"Redo Search in Map","add_to_calendar":"Add to Calendar","add_to_google_calendar":"Add to Google Calendar","add_to_microsoft_calendar":"Add to Microsoft Live Calendar","add_to_outlook_calendar":"Add to Office365 Outlook Calendar","add_to_iCloud_calendar":"Add to iCloud Calendar","add_to_windows_calendar":"Add to Windows Calendar","start_date":"Start Date","end_date":"End Date","learn_more":"Learn more about"}}}</script> </div> </div> <script> require([ 'jquery', 'plugins_core/main', 'sv_site', 'sv_clientMoment', 'plugins_common_custom_product_search', 'plugins_common_custom_utils', ], function( $, core, site, clientMoment, product_search, utils ) { init(); async function init() { const dataString = document.querySelector('#ps_data_4f9fd040-ba5d-417b-9c87-9e11dddaeda6').textContent const widget = JSON.parse(dataString); const t = { leo: widget.translations['translations.static.leo'], }; // Collect all select options let options = {} // date format to ensure all dates passed through clientMoment and the date range plugin are formated correctly const queryDateFormat = 'YYYY-MM-DD'; const today = clientMoment().format(queryDateFormat); const thisWeek = clientMoment().add(6, 'days').format(queryDateFormat); const thisMonth = clientMoment().add(1, 'months').format(queryDateFormat); const weekendFri = clientMoment().day(5).format(queryDateFormat); const weekendSun = clientMoment().day(7).format(queryDateFormat); const customStart = clientMoment(widget.data.from_date).format(queryDateFormat); const customEnd = clientMoment(widget.data.to_date).format(queryDateFormat); const showBooking = (widget?.data?.show_booking ?? 'false') === 'true'; const showBookingActiveByDefault = (widget?.data?.show_booking_active ?? 'false') === 'true'; const showRegion = (widget?.data?.show_region ?? 'false') === 'true'; const useCatGroups = (widget?.data?.use_cat_groups ?? 'off') === 'on'; const hasCatGroups = widget?.data?.use_cat_groups === 'on'; // Set initial start and end days for the calendar dropdown let initialDates = { start: today, end: today } if (widget.data.defaultRange === 'week') { initialDates.end = thisWeek; } else if (widget.data.defaultRange === 'weekend') { initialDates.start = weekendFri; initialDates.end = weekendSun; } else if (widget.data.defaultRange === 'month') { initialDates.end = thisMonth; } else if (widget.data.defaultRange === 'custom') { initialDates.start = customStart; initialDates.end = customEnd; } // The hidden filter is to store values that are manually selected in the CMS. // Regions and event categories are the two available fields for manual selection const hiddenFilters = {} if (widget.data.type === 'listings' && widget.data.regionid) { hiddenFilters.regionid = widget.data.regionid; } else if (widget.data.type === 'events' && widget.data.regionidevents) { hiddenFilters.regionidevents = widget.data.regionidevents; } else if (widget.data.type === 'events' && widget.data.cat_groups_events && widget.data.cat_groups_events.length > 0) { hiddenFilters.catids = widget.data.cat_groups_events; } else if (widget.data.type === 'offers' && widget.data.offer_category && widget.data.offer_category.length > 0) { hiddenFilters.catid = data.offer_category; } if (widget.data.hide_date_filters === 'true') { hiddenFilters.dates = initialDates; } if (widget.data.channel) { hiddenFilters.channelkey = widget.data.channel; } // if listings if (widget.data.type === 'listings') { if (useCatGroups) { // if doesn't have category groups const [categorygroups, categorygroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_categorygroups/aggregate/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { categorygroupid: 1, categorygroup: 1 } } }), token: core.simpleToken } ))); if (categorygroupsErr) return new Error(categorygroupsErr); const groups = !!widget ?.data ?.categorygroups ? categorygroups.docs.filter(group => widget.data.categorygroups.indexOf(group.categorygroupid.toString()) !== -1) : categorygroups.docs; options.groups = groups.map(group => ({ label: group.categorygroup, value: group.categorygroupid.toString() })); } else { const [allSubcats, allSubcatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_subcats/find/', { json: JSON.stringify({ filter: { active: { $eq: true }, has_listings: { $eq: true }, sites: { $in: [site.site] } }, options: { castDocs: false, sort: { fullname: 1 }, fields: { categoryid: 1, subcatid: 1, subcatname: 1, } } }), token: core.simpleToken } ))); if (allSubcatsErr) return new Error(allSubcatsErr); let subcats = allSubcats.docs; if (widget?.data?.cats) { subcats = subcats.filter(subcat => subcat.categoryid === Number(widget.data.cats)); } options.subcats = subcats.map(subcat => ({ label: subcat.subcatname, value: subcat.subcatid.toString() })); } if (!widget.data.regionid) { // if doesn't have regions const [regions, regionsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_polygons/aggregate/', { json: JSON.stringify({ pipeline: [ { $sort: { region: 1 } }, { $project: { label: "$region", value: "$regionid" } }, ] }), token: core.simpleToken } ))); if (regionsErr) return new Error(regionsErr); options.regions = regions.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'events') { const catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : []; options.catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : [] // if events if (useCatGroups) { const [eventCatGroups, eventCatGroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_catgroup_x_tags/find/', { json: JSON.stringify({ filter: {}, options: { castDocs: false, sort: { sort_tag: 1 }, fields: { tag: 1, "cat_groups.title": 1, "cat_groups.cats": 1, } } }), token: core.simpleToken } ))); if (eventCatGroupsErr) return new Error(eventCatGroupsErr); eventCatGroups.docs.map(tag => tag.cat_groups.sort((a, b) => a.title.localeCompare(b.title))); options.catgroups = eventCatGroups.docs.map(tag => tag.cat_groups.map(cg => ({ label: cg.title, value: cg.cats.join(','), group: tag.tag, }))).flat(); if (widget?.data?.cat_groups_events) { const selectedGroups = widget.data.cat_groups_events.map(cg => cg.title); options.catgroups = options.catgroups.filter(cg => selectedGroups.indexOf(cg.label) !== -1); } } else { const [allCats, allCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_categories/find/', { json: JSON.stringify({ filter: { calendarid: { $eq: (widget?.data?.calendar ?? '1') }, ...(widget?.data?.cats_events ? { value: { $in: widget.data.cats_events } } : {}), }, options: { castDocs: false, sort: { label: 1 }, fields: { label: 1, value: 1, } } }), token: core.simpleToken } ))); if (allCatsErr) return new Error(allCatsErr); options.cats = allCats.docs; } if (!widget.data.regionidevents) { const [regionsevents, regionseventsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_events_metadata/aggregate/', { json: JSON.stringify({ pipeline: [ { "$project" : { "option" : "$udfs_object.11.values" } }, { "$unwind" : "$option" }, { $sort: { regionsevents: 1 } }, { $project: { label: "$option.listvalue", value: "$option.listid" } }, ] }), token: core.simpleToken } ))); if (regionseventsErr) return new Error(regionseventsErr); options.regionsevents = regionsevents.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'offers') { // if offers const [offerCats, offerCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_offers_offermeta/aggregate/', { json: JSON.stringify({ pipeline: [ { $project: { _id: 0, categories: 1 } }, { $unwind: "$categories" }, { $match: { "categories.active": true } }, { $project: { label: "$categories.categoryname", value: { $toString: "$categories.categoryid" }, } }, { $sort: { "label": 1 } }, ] }), token: core.simpleToken } ))); if (offerCatsErr) return new Error(offerCatsErr); options.cats = offerCats.docs; } const vue = product_search.getVue({ rootNode: $('#ps_4f9fd040-ba5d-417b-9c87-9e11dddaeda6'), type: widget.data.type, link: widget.data.link.url, linkText: widget.data.link_text, hiddenFilters: hiddenFilters, translations: t.leo, filters: [ { name : "filter_onlybooking", label : "Search Availability", type : "toggle", show: showBooking, value: "true", initialValue: showBookingActiveByDefault, }, { name: 'filter_daterange[start]', label: 'Check in', type: 'date_availability_start', show: showBooking, initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: 'Check out', type: 'date_availability_end', show: showBooking, initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_adults', label: 'Number of Adults', type: 'select', show: showBooking, initialValue: '1', typeExtra: { options: [ { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_children', label: 'Number of Children', type: 'select', show: showBooking, initialValue: '0', typeExtra: { options: [ { label: '0', value: '0' }, { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_daterange[start]', label: t.leo.start_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: t.leo.end_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_cat_groups[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && useCatGroups, typeExtra: { options: options.groups || [] } }, { name: useCatGroups ? 'filter_cat_groups[0]' : 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events', typeExtra: { options: useCatGroups ? (options.catGroupsEvents || []) : (options.cats || []), } }, { name: 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: (widget.data.type === 'offers' && !widget.data.offer_category), typeExtra: { options: options.cats } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && !widget.data.regionid && showRegion, typeExtra: { options: options.regions || [] } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events' && !widget.data.regionidevents && showRegion, typeExtra: { options: options.regionsevents || [] } }, { name: 'filter_keyword', label: t.leo.keyword, placeholder: t.leo.search_placeholder, type: 'text', show: true }, { name: 'filter_channel[0]', label: 'Channel', placeholder: t.leo.search_placeholder, show: !widget.data.channel, typeExtra: { options: options.channel || [] } }, ] }); } }); </script></div><div data-civid="659bd8eece7a575babca8119" class="contentRender contentRender_19 contentRender_type_widget contentRender_name_plugins_common_product_search" data-sv-time="61" data-sv-index="19" data-gtm-vars='{ "tCore" : { "contentNum" : "3" } }'> <button role="tab" aria-controls="panel-6a2e6d7a-3ae9-4819-a256-0cc02cb88a81" id="tab-6a2e6d7a-3ae9-4819-a256-0cc02cb88a81" class="mobile-tab" >Accommodation <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"></i></button> <div data-guid="6a2e6d7a-3ae9-4819-a256-0cc02cb88a81" data-product-search="Accommodation" data-default-selected="closed" role="tabpanel" id="panel-6a2e6d7a-3ae9-4819-a256-0cc02cb88a81" aria-labelledby="tab-6a2e6d7a-3ae9-4819-a256-0cc02cb88a81" class="ps-panel" > <div id="ps_6a2e6d7a-3ae9-4819-a256-0cc02cb88a81"> <script id="ps_data_6a2e6d7a-3ae9-4819-a256-0cc02cb88a81" type="text/template">{"sections":{},"data":{"title":"Accommodation","default_selected":"false","type":"listings","use_cat_groups":"on","cats":"1","categorygroups":["154951","154991","154981","154961","153841","154971"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af313dc2abf6b6542303e","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af313dc2abf6b6542303e","url":"https://www.visitmanchester.com/where-to-stay/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af313dc2abf6b6542303e"}},"guid":"6a2e6d7a-3ae9-4819-a256-0cc02cb88a81","customSettings":{},"widgetArgs":{"nav":{"_id":"6525e39d58d8a262bf5e85d3","sortorder":0,"title":"Restaurants","folder":"restaurants","section":"main","type":"page","active":true,"show_on_nav":true,"publish_start":"2023-10-10T23:00:00.000Z","searchable":"yes","new_window":false,"image_id":"6597dd7e02e07159334f718b","description":"<p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.</p>","meta_title":"Restaurants in Manchester | Visit Manchester","meta_description":"Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.","tags_ids":["65280bf2bd338238afbc223c"],"parent_id":"6525e38c58d8a262bf5e73b7","parents_ids":["6525e38c58d8a262bf5e73b7"],"version_id":"659fe5c55863e2659ef6393e","created":"2023-10-10T23:51:57.575Z","content_owner":"default","site_name":"primary","updated":"2024-01-11T12:57:41.493Z","title_sort":"restaurants","site_section":"primary.main","published":true,"amp":false,"cms_title":"Restaurants - /food-and-drink/restaurants/","cms_title_sort":"restaurants - /food-and-drink/restaurants/","folderHref":"/food-and-drink/restaurants/","image":{"_id":"6597dd7e02e07159334f718b","original_public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","title":"Couple eating in the Edwardian Manchester restaurant","resource_raw":{"asset_id":"c9dbeebf9cfe686fc1b344707de6fe87","public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","version":1704451414,"version_id":"7a10f4e1a1bcaaa1c76d5f2bfa7c5a4c","signature":"510871297937606aadd2373fda0919789421829e","width":1920,"height":1317,"format":"jpg","resource_type":"image","created_at":"2024-01-05T10:43:34.000Z","pages":1,"bytes":242467,"type":"upload","etag":"7d3c03ce65a4397955f9ac2b39d15ae5","placeholder":false,"url":"http://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","secure_url":"https://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","folder":"clients/manchester","access_mode":"public","original_filename":"file","api_key":"756897581616859"},"tags_ids":["65280bf2bd338238afbc223c","6597dc6002e07159334f7185"],"alt_text_raw":"Couple eating in the Edwardian Manchester restaurant","focal_point":{"x":1222,"y":696},"content_owner":"default","title_sort":"couple eating in the edwardian manchester restaurant","updated":"2024-01-05T10:44:14.456Z","private":false,"deleted":false,"created":"2024-01-05T10:44:14.456Z","resource":{"raw":{"resource_type":"image","format":"jpg","pages":1,"public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38"},"focalPoint":{"x":1222,"y":696}},"id":"6597dd7e02e07159334f718b","type":"image","inAssetRequest":false,"alt_text":"Couple eating in the Edwardian Manchester restaurant","expired":false},"locale_count":0,"tags":[{"_id":"65280bf2bd338238afbc223c","tag":"Food & drink","created":"2023-10-12T15:08:34.285Z","sort_tag":"food & drink","updated":"2023-11-21T11:59:30.571Z","id":"65280bf2bd338238afbc223c"}],"id":"6525e39d58d8a262bf5e85d3","parent_id_string":"6525e38c58d8a262bf5e73b7","version_id_string":"659fe5c55863e2659ef6393e","href":"/food-and-drink/restaurants/","absoluteHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","absoluteFolderHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","metaTitle":"Restaurants in Manchester | Visit Manchester","rootCmsUrl":"/nav/sitemap/site_primary/section_main/"},"num":19,"guid":"6a2e6d7a-3ae9-4819-a256-0cc02cb88a81","data":{"title":"Accommodation","default_selected":"false","type":"listings","use_cat_groups":"on","cats":"1","categorygroups":["154951","154991","154981","154961","153841","154971"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af313dc2abf6b6542303e","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af313dc2abf6b6542303e","url":"https://www.visitmanchester.com/where-to-stay/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af313dc2abf6b6542303e"}},"civ":{"instance":{"type":"widget","name":"plugins_common_product_search","site_name":"primary","saved":false,"created":"2024-01-08T11:14:56.334Z","updated":"2024-01-08T11:14:56.334Z","deleted":false,"id":"659bd8eece7a575babca8119","version_id_string":"659bd8eece7a575babca811a"},"version":{"data":{"title":"Accommodation","default_selected":"false","type":"listings","use_cat_groups":"on","cats":"1","categorygroups":["154951","154991","154981","154961","153841","154971"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af313dc2abf6b6542303e","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af313dc2abf6b6542303e","url":"https://www.visitmanchester.com/where-to-stay/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af313dc2abf6b6542303e"}},"created":"2024-01-08T11:14:56.335Z","id":"659bd8eece7a575babca811a","instance_id_string":"659bd8eece7a575babca8119"},"onTrunk":true,"civid":"659bd8eece7a575babca8119"},"name":"plugins_common_product_search"},"translations":{"translations.static.leo":{"apply":"Apply","clear_filters":"Clear Filters","reset":"Reset","filter":"Filter","sort":"Sort","view":"View","keyword":"Keyword","search_placeholder":"Search","select":"Select","regions":"Regions","categories":"Categories","grid":"Grid","list":"List","map":"Map","show_map":"Show Map","hide_map":"Hide Map","recommended":"Recommended","near_me":"Near Me","read_more":"Read More","quick_view":"Quick View","featured_title":"Partner","visit_website":"Visit Website","email":"E-mail","tollfree":"Toll Free","tab_about":"About","tab_map":"Map","tab_openings":"Dates and Times","tab_guide_prices":"Prices","tab_offers":"Special Offers","tab_faq":"FAQs","tab_gradings":"Gradings","tab_awards":"Awards","tab_also_like":"You might also be interested in...","tab_downloads":"Downloads","tab_routes":"Routes","tab_facilities":"Facilities","tab_virtual_tours":"Virtual Tours","show_more":"Show $1 more","show_less":"Show Less","results":"$1 results","no_results":"There are no results that match your filter.","miles_from_you":"Miles from You","meeting_rooms":"Meeting Rooms","square_feet":"Total Sq. Ft.","largest_room":"Largest Room","sleeping_rooms":"Sleeping Rooms","banquet":"Banquet Capacity","reception":"Reception Capacity","theatre":"Theater Capacity","classroom":"Classroom Capacity","compare":"Compare","close_compare_dropdown":"Close compare dropdown","compare_add":"Add to compare","compare_remove":"Remove from compare","compare_clear_all":"Clear All","compare_limit_message":"You can only compare four (4) items at a time","location":"Location","locations":"Locations","details":"Details","address":"Address","err_loc_timeout":"We're unable to determine your location at this time.","err_loc_blocked":"You must allow location access for distance sorting.","err_loc_radius":"You must be within $1 miles to sort by distance.","date_range_title":"Show Events For","date_range_day":"Day","date_range_week":"Week","date_range_weekend":"Weekend","date_range_month":"Month","date_range_year":"Year","date_range_selected_dates":"Selected Dates","per_page_label":"Items Per Page","tb_add":"Add to Trip","tb_remove":"Remove from Trip","tb_view":"View Trip","facilities":"Facilities","download":"Download Events as CSV","convention":"Convention","venues":"Venues","dates":"Dates","attendance":"Attendance","whats_nearby":"What's Nearby","attractions":"Attractions","dining":"Dining","accommodations":"Accommodations","events":"Events","things_to_do":"Things To Do","get_directions":"Get Directions","redo_search_in_map":"Redo Search in Map","add_to_calendar":"Add to Calendar","add_to_google_calendar":"Add to Google Calendar","add_to_microsoft_calendar":"Add to Microsoft Live Calendar","add_to_outlook_calendar":"Add to Office365 Outlook Calendar","add_to_iCloud_calendar":"Add to iCloud Calendar","add_to_windows_calendar":"Add to Windows Calendar","start_date":"Start Date","end_date":"End Date","learn_more":"Learn more about"}}}</script> </div> </div> <script> require([ 'jquery', 'plugins_core/main', 'sv_site', 'sv_clientMoment', 'plugins_common_custom_product_search', 'plugins_common_custom_utils', ], function( $, core, site, clientMoment, product_search, utils ) { init(); async function init() { const dataString = document.querySelector('#ps_data_6a2e6d7a-3ae9-4819-a256-0cc02cb88a81').textContent const widget = JSON.parse(dataString); const t = { leo: widget.translations['translations.static.leo'], }; // Collect all select options let options = {} // date format to ensure all dates passed through clientMoment and the date range plugin are formated correctly const queryDateFormat = 'YYYY-MM-DD'; const today = clientMoment().format(queryDateFormat); const thisWeek = clientMoment().add(6, 'days').format(queryDateFormat); const thisMonth = clientMoment().add(1, 'months').format(queryDateFormat); const weekendFri = clientMoment().day(5).format(queryDateFormat); const weekendSun = clientMoment().day(7).format(queryDateFormat); const customStart = clientMoment(widget.data.from_date).format(queryDateFormat); const customEnd = clientMoment(widget.data.to_date).format(queryDateFormat); const showBooking = (widget?.data?.show_booking ?? 'false') === 'true'; const showBookingActiveByDefault = (widget?.data?.show_booking_active ?? 'false') === 'true'; const showRegion = (widget?.data?.show_region ?? 'false') === 'true'; const useCatGroups = (widget?.data?.use_cat_groups ?? 'off') === 'on'; const hasCatGroups = widget?.data?.use_cat_groups === 'on'; // Set initial start and end days for the calendar dropdown let initialDates = { start: today, end: today } if (widget.data.defaultRange === 'week') { initialDates.end = thisWeek; } else if (widget.data.defaultRange === 'weekend') { initialDates.start = weekendFri; initialDates.end = weekendSun; } else if (widget.data.defaultRange === 'month') { initialDates.end = thisMonth; } else if (widget.data.defaultRange === 'custom') { initialDates.start = customStart; initialDates.end = customEnd; } // The hidden filter is to store values that are manually selected in the CMS. // Regions and event categories are the two available fields for manual selection const hiddenFilters = {} if (widget.data.type === 'listings' && widget.data.regionid) { hiddenFilters.regionid = widget.data.regionid; } else if (widget.data.type === 'events' && widget.data.regionidevents) { hiddenFilters.regionidevents = widget.data.regionidevents; } else if (widget.data.type === 'events' && widget.data.cat_groups_events && widget.data.cat_groups_events.length > 0) { hiddenFilters.catids = widget.data.cat_groups_events; } else if (widget.data.type === 'offers' && widget.data.offer_category && widget.data.offer_category.length > 0) { hiddenFilters.catid = data.offer_category; } if (widget.data.hide_date_filters === 'true') { hiddenFilters.dates = initialDates; } if (widget.data.channel) { hiddenFilters.channelkey = widget.data.channel; } // if listings if (widget.data.type === 'listings') { if (useCatGroups) { // if doesn't have category groups const [categorygroups, categorygroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_categorygroups/aggregate/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { categorygroupid: 1, categorygroup: 1 } } }), token: core.simpleToken } ))); if (categorygroupsErr) return new Error(categorygroupsErr); const groups = !!widget ?.data ?.categorygroups ? categorygroups.docs.filter(group => widget.data.categorygroups.indexOf(group.categorygroupid.toString()) !== -1) : categorygroups.docs; options.groups = groups.map(group => ({ label: group.categorygroup, value: group.categorygroupid.toString() })); } else { const [allSubcats, allSubcatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_subcats/find/', { json: JSON.stringify({ filter: { active: { $eq: true }, has_listings: { $eq: true }, sites: { $in: [site.site] } }, options: { castDocs: false, sort: { fullname: 1 }, fields: { categoryid: 1, subcatid: 1, subcatname: 1, } } }), token: core.simpleToken } ))); if (allSubcatsErr) return new Error(allSubcatsErr); let subcats = allSubcats.docs; if (widget?.data?.cats) { subcats = subcats.filter(subcat => subcat.categoryid === Number(widget.data.cats)); } options.subcats = subcats.map(subcat => ({ label: subcat.subcatname, value: subcat.subcatid.toString() })); } if (!widget.data.regionid) { // if doesn't have regions const [regions, regionsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_polygons/aggregate/', { json: JSON.stringify({ pipeline: [ { $sort: { region: 1 } }, { $project: { label: "$region", value: "$regionid" } }, ] }), token: core.simpleToken } ))); if (regionsErr) return new Error(regionsErr); options.regions = regions.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'events') { const catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : []; options.catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : [] // if events if (useCatGroups) { const [eventCatGroups, eventCatGroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_catgroup_x_tags/find/', { json: JSON.stringify({ filter: {}, options: { castDocs: false, sort: { sort_tag: 1 }, fields: { tag: 1, "cat_groups.title": 1, "cat_groups.cats": 1, } } }), token: core.simpleToken } ))); if (eventCatGroupsErr) return new Error(eventCatGroupsErr); eventCatGroups.docs.map(tag => tag.cat_groups.sort((a, b) => a.title.localeCompare(b.title))); options.catgroups = eventCatGroups.docs.map(tag => tag.cat_groups.map(cg => ({ label: cg.title, value: cg.cats.join(','), group: tag.tag, }))).flat(); if (widget?.data?.cat_groups_events) { const selectedGroups = widget.data.cat_groups_events.map(cg => cg.title); options.catgroups = options.catgroups.filter(cg => selectedGroups.indexOf(cg.label) !== -1); } } else { const [allCats, allCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_categories/find/', { json: JSON.stringify({ filter: { calendarid: { $eq: (widget?.data?.calendar ?? '1') }, ...(widget?.data?.cats_events ? { value: { $in: widget.data.cats_events } } : {}), }, options: { castDocs: false, sort: { label: 1 }, fields: { label: 1, value: 1, } } }), token: core.simpleToken } ))); if (allCatsErr) return new Error(allCatsErr); options.cats = allCats.docs; } if (!widget.data.regionidevents) { const [regionsevents, regionseventsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_events_metadata/aggregate/', { json: JSON.stringify({ pipeline: [ { "$project" : { "option" : "$udfs_object.11.values" } }, { "$unwind" : "$option" }, { $sort: { regionsevents: 1 } }, { $project: { label: "$option.listvalue", value: "$option.listid" } }, ] }), token: core.simpleToken } ))); if (regionseventsErr) return new Error(regionseventsErr); options.regionsevents = regionsevents.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'offers') { // if offers const [offerCats, offerCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_offers_offermeta/aggregate/', { json: JSON.stringify({ pipeline: [ { $project: { _id: 0, categories: 1 } }, { $unwind: "$categories" }, { $match: { "categories.active": true } }, { $project: { label: "$categories.categoryname", value: { $toString: "$categories.categoryid" }, } }, { $sort: { "label": 1 } }, ] }), token: core.simpleToken } ))); if (offerCatsErr) return new Error(offerCatsErr); options.cats = offerCats.docs; } const vue = product_search.getVue({ rootNode: $('#ps_6a2e6d7a-3ae9-4819-a256-0cc02cb88a81'), type: widget.data.type, link: widget.data.link.url, linkText: widget.data.link_text, hiddenFilters: hiddenFilters, translations: t.leo, filters: [ { name : "filter_onlybooking", label : "Search Availability", type : "toggle", show: showBooking, value: "true", initialValue: showBookingActiveByDefault, }, { name: 'filter_daterange[start]', label: 'Check in', type: 'date_availability_start', show: showBooking, initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: 'Check out', type: 'date_availability_end', show: showBooking, initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_adults', label: 'Number of Adults', type: 'select', show: showBooking, initialValue: '1', typeExtra: { options: [ { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_children', label: 'Number of Children', type: 'select', show: showBooking, initialValue: '0', typeExtra: { options: [ { label: '0', value: '0' }, { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_daterange[start]', label: t.leo.start_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: t.leo.end_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_cat_groups[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && useCatGroups, typeExtra: { options: options.groups || [] } }, { name: useCatGroups ? 'filter_cat_groups[0]' : 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events', typeExtra: { options: useCatGroups ? (options.catGroupsEvents || []) : (options.cats || []), } }, { name: 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: (widget.data.type === 'offers' && !widget.data.offer_category), typeExtra: { options: options.cats } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && !widget.data.regionid && showRegion, typeExtra: { options: options.regions || [] } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events' && !widget.data.regionidevents && showRegion, typeExtra: { options: options.regionsevents || [] } }, { name: 'filter_keyword', label: t.leo.keyword, placeholder: t.leo.search_placeholder, type: 'text', show: true }, { name: 'filter_channel[0]', label: 'Channel', placeholder: t.leo.search_placeholder, show: !widget.data.channel, typeExtra: { options: options.channel || [] } }, ] }); } }); </script></div><div data-civid="659bd8eece7a575babca811b" class="contentRender contentRender_20 contentRender_type_widget contentRender_name_plugins_common_product_search" data-sv-time="62" data-sv-index="20" data-gtm-vars='{ "tCore" : { "contentNum" : "4" } }'> <button role="tab" aria-controls="panel-44bb67e3-8231-4435-8c9e-c698f606ee20" id="tab-44bb67e3-8231-4435-8c9e-c698f606ee20" class="mobile-tab" >Shopping <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"></i></button> <div data-guid="44bb67e3-8231-4435-8c9e-c698f606ee20" data-product-search="Shopping" data-default-selected="closed" role="tabpanel" id="panel-44bb67e3-8231-4435-8c9e-c698f606ee20" aria-labelledby="tab-44bb67e3-8231-4435-8c9e-c698f606ee20" class="ps-panel" > <div id="ps_44bb67e3-8231-4435-8c9e-c698f606ee20"> <script id="ps_data_44bb67e3-8231-4435-8c9e-c698f606ee20" type="text/template">{"sections":{},"data":{"title":"Shopping","default_selected":"false","type":"listings","use_cat_groups":"on","categorygroups":["155411","155281","155291","155391","155301","155271","155321"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af2e0dc2abf6b65422fbe","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af2e0dc2abf6b65422fbe","url":"https://www.visitmanchester.com/shopping/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af2e0dc2abf6b65422fbe"}},"guid":"44bb67e3-8231-4435-8c9e-c698f606ee20","customSettings":{},"widgetArgs":{"nav":{"_id":"6525e39d58d8a262bf5e85d3","sortorder":0,"title":"Restaurants","folder":"restaurants","section":"main","type":"page","active":true,"show_on_nav":true,"publish_start":"2023-10-10T23:00:00.000Z","searchable":"yes","new_window":false,"image_id":"6597dd7e02e07159334f718b","description":"<p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.</p>","meta_title":"Restaurants in Manchester | Visit Manchester","meta_description":"Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.","tags_ids":["65280bf2bd338238afbc223c"],"parent_id":"6525e38c58d8a262bf5e73b7","parents_ids":["6525e38c58d8a262bf5e73b7"],"version_id":"659fe5c55863e2659ef6393e","created":"2023-10-10T23:51:57.575Z","content_owner":"default","site_name":"primary","updated":"2024-01-11T12:57:41.493Z","title_sort":"restaurants","site_section":"primary.main","published":true,"amp":false,"cms_title":"Restaurants - /food-and-drink/restaurants/","cms_title_sort":"restaurants - /food-and-drink/restaurants/","folderHref":"/food-and-drink/restaurants/","image":{"_id":"6597dd7e02e07159334f718b","original_public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","title":"Couple eating in the Edwardian Manchester restaurant","resource_raw":{"asset_id":"c9dbeebf9cfe686fc1b344707de6fe87","public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","version":1704451414,"version_id":"7a10f4e1a1bcaaa1c76d5f2bfa7c5a4c","signature":"510871297937606aadd2373fda0919789421829e","width":1920,"height":1317,"format":"jpg","resource_type":"image","created_at":"2024-01-05T10:43:34.000Z","pages":1,"bytes":242467,"type":"upload","etag":"7d3c03ce65a4397955f9ac2b39d15ae5","placeholder":false,"url":"http://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","secure_url":"https://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","folder":"clients/manchester","access_mode":"public","original_filename":"file","api_key":"756897581616859"},"tags_ids":["65280bf2bd338238afbc223c","6597dc6002e07159334f7185"],"alt_text_raw":"Couple eating in the Edwardian Manchester restaurant","focal_point":{"x":1222,"y":696},"content_owner":"default","title_sort":"couple eating in the edwardian manchester restaurant","updated":"2024-01-05T10:44:14.456Z","private":false,"deleted":false,"created":"2024-01-05T10:44:14.456Z","resource":{"raw":{"resource_type":"image","format":"jpg","pages":1,"public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38"},"focalPoint":{"x":1222,"y":696}},"id":"6597dd7e02e07159334f718b","type":"image","inAssetRequest":false,"alt_text":"Couple eating in the Edwardian Manchester restaurant","expired":false},"locale_count":0,"tags":[{"_id":"65280bf2bd338238afbc223c","tag":"Food & drink","created":"2023-10-12T15:08:34.285Z","sort_tag":"food & drink","updated":"2023-11-21T11:59:30.571Z","id":"65280bf2bd338238afbc223c"}],"id":"6525e39d58d8a262bf5e85d3","parent_id_string":"6525e38c58d8a262bf5e73b7","version_id_string":"659fe5c55863e2659ef6393e","href":"/food-and-drink/restaurants/","absoluteHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","absoluteFolderHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","metaTitle":"Restaurants in Manchester | Visit Manchester","rootCmsUrl":"/nav/sitemap/site_primary/section_main/"},"num":20,"guid":"44bb67e3-8231-4435-8c9e-c698f606ee20","data":{"title":"Shopping","default_selected":"false","type":"listings","use_cat_groups":"on","categorygroups":["155411","155281","155291","155391","155301","155271","155321"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af2e0dc2abf6b65422fbe","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af2e0dc2abf6b65422fbe","url":"https://www.visitmanchester.com/shopping/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af2e0dc2abf6b65422fbe"}},"civ":{"instance":{"type":"widget","name":"plugins_common_product_search","site_name":"primary","saved":false,"created":"2024-01-08T11:14:56.337Z","updated":"2024-01-08T11:14:56.337Z","deleted":false,"id":"659bd8eece7a575babca811b","version_id_string":"659bd8eece7a575babca811c"},"version":{"data":{"title":"Shopping","default_selected":"false","type":"listings","use_cat_groups":"on","categorygroups":["155411","155281","155291","155391","155301","155271","155321"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af2e0dc2abf6b65422fbe","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af2e0dc2abf6b65422fbe","url":"https://www.visitmanchester.com/shopping/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af2e0dc2abf6b65422fbe"}},"created":"2024-01-08T11:14:56.338Z","id":"659bd8eece7a575babca811c","instance_id_string":"659bd8eece7a575babca811b"},"onTrunk":true,"civid":"659bd8eece7a575babca811b"},"name":"plugins_common_product_search"},"translations":{"translations.static.leo":{"apply":"Apply","clear_filters":"Clear Filters","reset":"Reset","filter":"Filter","sort":"Sort","view":"View","keyword":"Keyword","search_placeholder":"Search","select":"Select","regions":"Regions","categories":"Categories","grid":"Grid","list":"List","map":"Map","show_map":"Show Map","hide_map":"Hide Map","recommended":"Recommended","near_me":"Near Me","read_more":"Read More","quick_view":"Quick View","featured_title":"Partner","visit_website":"Visit Website","email":"E-mail","tollfree":"Toll Free","tab_about":"About","tab_map":"Map","tab_openings":"Dates and Times","tab_guide_prices":"Prices","tab_offers":"Special Offers","tab_faq":"FAQs","tab_gradings":"Gradings","tab_awards":"Awards","tab_also_like":"You might also be interested in...","tab_downloads":"Downloads","tab_routes":"Routes","tab_facilities":"Facilities","tab_virtual_tours":"Virtual Tours","show_more":"Show $1 more","show_less":"Show Less","results":"$1 results","no_results":"There are no results that match your filter.","miles_from_you":"Miles from You","meeting_rooms":"Meeting Rooms","square_feet":"Total Sq. Ft.","largest_room":"Largest Room","sleeping_rooms":"Sleeping Rooms","banquet":"Banquet Capacity","reception":"Reception Capacity","theatre":"Theater Capacity","classroom":"Classroom Capacity","compare":"Compare","close_compare_dropdown":"Close compare dropdown","compare_add":"Add to compare","compare_remove":"Remove from compare","compare_clear_all":"Clear All","compare_limit_message":"You can only compare four (4) items at a time","location":"Location","locations":"Locations","details":"Details","address":"Address","err_loc_timeout":"We're unable to determine your location at this time.","err_loc_blocked":"You must allow location access for distance sorting.","err_loc_radius":"You must be within $1 miles to sort by distance.","date_range_title":"Show Events For","date_range_day":"Day","date_range_week":"Week","date_range_weekend":"Weekend","date_range_month":"Month","date_range_year":"Year","date_range_selected_dates":"Selected Dates","per_page_label":"Items Per Page","tb_add":"Add to Trip","tb_remove":"Remove from Trip","tb_view":"View Trip","facilities":"Facilities","download":"Download Events as CSV","convention":"Convention","venues":"Venues","dates":"Dates","attendance":"Attendance","whats_nearby":"What's Nearby","attractions":"Attractions","dining":"Dining","accommodations":"Accommodations","events":"Events","things_to_do":"Things To Do","get_directions":"Get Directions","redo_search_in_map":"Redo Search in Map","add_to_calendar":"Add to Calendar","add_to_google_calendar":"Add to Google Calendar","add_to_microsoft_calendar":"Add to Microsoft Live Calendar","add_to_outlook_calendar":"Add to Office365 Outlook Calendar","add_to_iCloud_calendar":"Add to iCloud Calendar","add_to_windows_calendar":"Add to Windows Calendar","start_date":"Start Date","end_date":"End Date","learn_more":"Learn more about"}}}</script> </div> </div> <script> require([ 'jquery', 'plugins_core/main', 'sv_site', 'sv_clientMoment', 'plugins_common_custom_product_search', 'plugins_common_custom_utils', ], function( $, core, site, clientMoment, product_search, utils ) { init(); async function init() { const dataString = document.querySelector('#ps_data_44bb67e3-8231-4435-8c9e-c698f606ee20').textContent const widget = JSON.parse(dataString); const t = { leo: widget.translations['translations.static.leo'], }; // Collect all select options let options = {} // date format to ensure all dates passed through clientMoment and the date range plugin are formated correctly const queryDateFormat = 'YYYY-MM-DD'; const today = clientMoment().format(queryDateFormat); const thisWeek = clientMoment().add(6, 'days').format(queryDateFormat); const thisMonth = clientMoment().add(1, 'months').format(queryDateFormat); const weekendFri = clientMoment().day(5).format(queryDateFormat); const weekendSun = clientMoment().day(7).format(queryDateFormat); const customStart = clientMoment(widget.data.from_date).format(queryDateFormat); const customEnd = clientMoment(widget.data.to_date).format(queryDateFormat); const showBooking = (widget?.data?.show_booking ?? 'false') === 'true'; const showBookingActiveByDefault = (widget?.data?.show_booking_active ?? 'false') === 'true'; const showRegion = (widget?.data?.show_region ?? 'false') === 'true'; const useCatGroups = (widget?.data?.use_cat_groups ?? 'off') === 'on'; const hasCatGroups = widget?.data?.use_cat_groups === 'on'; // Set initial start and end days for the calendar dropdown let initialDates = { start: today, end: today } if (widget.data.defaultRange === 'week') { initialDates.end = thisWeek; } else if (widget.data.defaultRange === 'weekend') { initialDates.start = weekendFri; initialDates.end = weekendSun; } else if (widget.data.defaultRange === 'month') { initialDates.end = thisMonth; } else if (widget.data.defaultRange === 'custom') { initialDates.start = customStart; initialDates.end = customEnd; } // The hidden filter is to store values that are manually selected in the CMS. // Regions and event categories are the two available fields for manual selection const hiddenFilters = {} if (widget.data.type === 'listings' && widget.data.regionid) { hiddenFilters.regionid = widget.data.regionid; } else if (widget.data.type === 'events' && widget.data.regionidevents) { hiddenFilters.regionidevents = widget.data.regionidevents; } else if (widget.data.type === 'events' && widget.data.cat_groups_events && widget.data.cat_groups_events.length > 0) { hiddenFilters.catids = widget.data.cat_groups_events; } else if (widget.data.type === 'offers' && widget.data.offer_category && widget.data.offer_category.length > 0) { hiddenFilters.catid = data.offer_category; } if (widget.data.hide_date_filters === 'true') { hiddenFilters.dates = initialDates; } if (widget.data.channel) { hiddenFilters.channelkey = widget.data.channel; } // if listings if (widget.data.type === 'listings') { if (useCatGroups) { // if doesn't have category groups const [categorygroups, categorygroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_categorygroups/aggregate/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { categorygroupid: 1, categorygroup: 1 } } }), token: core.simpleToken } ))); if (categorygroupsErr) return new Error(categorygroupsErr); const groups = !!widget ?.data ?.categorygroups ? categorygroups.docs.filter(group => widget.data.categorygroups.indexOf(group.categorygroupid.toString()) !== -1) : categorygroups.docs; options.groups = groups.map(group => ({ label: group.categorygroup, value: group.categorygroupid.toString() })); } else { const [allSubcats, allSubcatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_subcats/find/', { json: JSON.stringify({ filter: { active: { $eq: true }, has_listings: { $eq: true }, sites: { $in: [site.site] } }, options: { castDocs: false, sort: { fullname: 1 }, fields: { categoryid: 1, subcatid: 1, subcatname: 1, } } }), token: core.simpleToken } ))); if (allSubcatsErr) return new Error(allSubcatsErr); let subcats = allSubcats.docs; if (widget?.data?.cats) { subcats = subcats.filter(subcat => subcat.categoryid === Number(widget.data.cats)); } options.subcats = subcats.map(subcat => ({ label: subcat.subcatname, value: subcat.subcatid.toString() })); } if (!widget.data.regionid) { // if doesn't have regions const [regions, regionsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_polygons/aggregate/', { json: JSON.stringify({ pipeline: [ { $sort: { region: 1 } }, { $project: { label: "$region", value: "$regionid" } }, ] }), token: core.simpleToken } ))); if (regionsErr) return new Error(regionsErr); options.regions = regions.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'events') { const catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : []; options.catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : [] // if events if (useCatGroups) { const [eventCatGroups, eventCatGroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_catgroup_x_tags/find/', { json: JSON.stringify({ filter: {}, options: { castDocs: false, sort: { sort_tag: 1 }, fields: { tag: 1, "cat_groups.title": 1, "cat_groups.cats": 1, } } }), token: core.simpleToken } ))); if (eventCatGroupsErr) return new Error(eventCatGroupsErr); eventCatGroups.docs.map(tag => tag.cat_groups.sort((a, b) => a.title.localeCompare(b.title))); options.catgroups = eventCatGroups.docs.map(tag => tag.cat_groups.map(cg => ({ label: cg.title, value: cg.cats.join(','), group: tag.tag, }))).flat(); if (widget?.data?.cat_groups_events) { const selectedGroups = widget.data.cat_groups_events.map(cg => cg.title); options.catgroups = options.catgroups.filter(cg => selectedGroups.indexOf(cg.label) !== -1); } } else { const [allCats, allCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_categories/find/', { json: JSON.stringify({ filter: { calendarid: { $eq: (widget?.data?.calendar ?? '1') }, ...(widget?.data?.cats_events ? { value: { $in: widget.data.cats_events } } : {}), }, options: { castDocs: false, sort: { label: 1 }, fields: { label: 1, value: 1, } } }), token: core.simpleToken } ))); if (allCatsErr) return new Error(allCatsErr); options.cats = allCats.docs; } if (!widget.data.regionidevents) { const [regionsevents, regionseventsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_events_metadata/aggregate/', { json: JSON.stringify({ pipeline: [ { "$project" : { "option" : "$udfs_object.11.values" } }, { "$unwind" : "$option" }, { $sort: { regionsevents: 1 } }, { $project: { label: "$option.listvalue", value: "$option.listid" } }, ] }), token: core.simpleToken } ))); if (regionseventsErr) return new Error(regionseventsErr); options.regionsevents = regionsevents.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'offers') { // if offers const [offerCats, offerCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_offers_offermeta/aggregate/', { json: JSON.stringify({ pipeline: [ { $project: { _id: 0, categories: 1 } }, { $unwind: "$categories" }, { $match: { "categories.active": true } }, { $project: { label: "$categories.categoryname", value: { $toString: "$categories.categoryid" }, } }, { $sort: { "label": 1 } }, ] }), token: core.simpleToken } ))); if (offerCatsErr) return new Error(offerCatsErr); options.cats = offerCats.docs; } const vue = product_search.getVue({ rootNode: $('#ps_44bb67e3-8231-4435-8c9e-c698f606ee20'), type: widget.data.type, link: widget.data.link.url, linkText: widget.data.link_text, hiddenFilters: hiddenFilters, translations: t.leo, filters: [ { name : "filter_onlybooking", label : "Search Availability", type : "toggle", show: showBooking, value: "true", initialValue: showBookingActiveByDefault, }, { name: 'filter_daterange[start]', label: 'Check in', type: 'date_availability_start', show: showBooking, initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: 'Check out', type: 'date_availability_end', show: showBooking, initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_adults', label: 'Number of Adults', type: 'select', show: showBooking, initialValue: '1', typeExtra: { options: [ { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_children', label: 'Number of Children', type: 'select', show: showBooking, initialValue: '0', typeExtra: { options: [ { label: '0', value: '0' }, { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_daterange[start]', label: t.leo.start_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: t.leo.end_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_cat_groups[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && useCatGroups, typeExtra: { options: options.groups || [] } }, { name: useCatGroups ? 'filter_cat_groups[0]' : 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events', typeExtra: { options: useCatGroups ? (options.catGroupsEvents || []) : (options.cats || []), } }, { name: 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: (widget.data.type === 'offers' && !widget.data.offer_category), typeExtra: { options: options.cats } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && !widget.data.regionid && showRegion, typeExtra: { options: options.regions || [] } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events' && !widget.data.regionidevents && showRegion, typeExtra: { options: options.regionsevents || [] } }, { name: 'filter_keyword', label: t.leo.keyword, placeholder: t.leo.search_placeholder, type: 'text', show: true }, { name: 'filter_channel[0]', label: 'Channel', placeholder: t.leo.search_placeholder, show: !widget.data.channel, typeExtra: { options: options.channel || [] } }, ] }); } }); </script></div><div data-civid="659bd8eece7a575babca811d" class="contentRender contentRender_21 contentRender_type_widget contentRender_name_plugins_common_product_search" data-sv-time="62" data-sv-index="21" data-gtm-vars='{ "tCore" : { "contentNum" : "5" } }'> <button role="tab" aria-controls="panel-4864e5cd-e5d5-48f9-95aa-64e055955ca0" id="tab-4864e5cd-e5d5-48f9-95aa-64e055955ca0" class="mobile-tab" >Food & Drink <img src="/includes/public/assets/shared/arrows/arrow_right.svg" alt="Arrow down"></i></button> <div data-guid="4864e5cd-e5d5-48f9-95aa-64e055955ca0" data-product-search="Food & Drink" data-default-selected="defaultSelected" role="tabpanel" id="panel-4864e5cd-e5d5-48f9-95aa-64e055955ca0" aria-labelledby="tab-4864e5cd-e5d5-48f9-95aa-64e055955ca0" class="ps-panel" > <div id="ps_4864e5cd-e5d5-48f9-95aa-64e055955ca0"> <script id="ps_data_4864e5cd-e5d5-48f9-95aa-64e055955ca0" type="text/template">{"sections":{},"data":{"title":"Food & Drink","default_selected":"true","type":"listings","use_cat_groups":"on","categorygroups":["155371","155391","155361","155381","155351","151091"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af396dc2abf6b654230be","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af396dc2abf6b654230be","url":"https://www.visitmanchester.com/food-and-drink/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af396dc2abf6b654230be"}},"guid":"4864e5cd-e5d5-48f9-95aa-64e055955ca0","customSettings":{},"widgetArgs":{"nav":{"_id":"6525e39d58d8a262bf5e85d3","sortorder":0,"title":"Restaurants","folder":"restaurants","section":"main","type":"page","active":true,"show_on_nav":true,"publish_start":"2023-10-10T23:00:00.000Z","searchable":"yes","new_window":false,"image_id":"6597dd7e02e07159334f718b","description":"<p>Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.</p>","meta_title":"Restaurants in Manchester | Visit Manchester","meta_description":"Discover Manchester's culinary delights with our Restaurants guide. From cosy neighbourhood eateries to upscale dining destinations, explore a diverse array of culinary experiences. Our guide showcases the city's gastronomic treasures, ensuring you savour every bite of Manchester's vibrant restaurant scene.","tags_ids":["65280bf2bd338238afbc223c"],"parent_id":"6525e38c58d8a262bf5e73b7","parents_ids":["6525e38c58d8a262bf5e73b7"],"version_id":"659fe5c55863e2659ef6393e","created":"2023-10-10T23:51:57.575Z","content_owner":"default","site_name":"primary","updated":"2024-01-11T12:57:41.493Z","title_sort":"restaurants","site_section":"primary.main","published":true,"amp":false,"cms_title":"Restaurants - /food-and-drink/restaurants/","cms_title_sort":"restaurants - /food-and-drink/restaurants/","folderHref":"/food-and-drink/restaurants/","image":{"_id":"6597dd7e02e07159334f718b","original_public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","title":"Couple eating in the Edwardian Manchester restaurant","resource_raw":{"asset_id":"c9dbeebf9cfe686fc1b344707de6fe87","public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38","version":1704451414,"version_id":"7a10f4e1a1bcaaa1c76d5f2bfa7c5a4c","signature":"510871297937606aadd2373fda0919789421829e","width":1920,"height":1317,"format":"jpg","resource_type":"image","created_at":"2024-01-05T10:43:34.000Z","pages":1,"bytes":242467,"type":"upload","etag":"7d3c03ce65a4397955f9ac2b39d15ae5","placeholder":false,"url":"http://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","secure_url":"https://res.cloudinary.com/simpleview/image/upload/v1704451414/clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38.jpg","folder":"clients/manchester","access_mode":"public","original_filename":"file","api_key":"756897581616859"},"tags_ids":["65280bf2bd338238afbc223c","6597dc6002e07159334f7185"],"alt_text_raw":"Couple eating in the Edwardian Manchester restaurant","focal_point":{"x":1222,"y":696},"content_owner":"default","title_sort":"couple eating in the edwardian manchester restaurant","updated":"2024-01-05T10:44:14.456Z","private":false,"deleted":false,"created":"2024-01-05T10:44:14.456Z","resource":{"raw":{"resource_type":"image","format":"jpg","pages":1,"public_id":"clients/manchester/couple_hotel_31_large_6f20191b-7478-4bf5-a1d5-d93976c74e38"},"focalPoint":{"x":1222,"y":696}},"id":"6597dd7e02e07159334f718b","type":"image","inAssetRequest":false,"alt_text":"Couple eating in the Edwardian Manchester restaurant","expired":false},"locale_count":0,"tags":[{"_id":"65280bf2bd338238afbc223c","tag":"Food & drink","created":"2023-10-12T15:08:34.285Z","sort_tag":"food & drink","updated":"2023-11-21T11:59:30.571Z","id":"65280bf2bd338238afbc223c"}],"id":"6525e39d58d8a262bf5e85d3","parent_id_string":"6525e38c58d8a262bf5e73b7","version_id_string":"659fe5c55863e2659ef6393e","href":"/food-and-drink/restaurants/","absoluteHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","absoluteFolderHref":"https://www.visitmanchester.com/food-and-drink/restaurants/","metaTitle":"Restaurants in Manchester | Visit Manchester","rootCmsUrl":"/nav/sitemap/site_primary/section_main/"},"num":21,"guid":"4864e5cd-e5d5-48f9-95aa-64e055955ca0","data":{"title":"Food & Drink","default_selected":"true","type":"listings","use_cat_groups":"on","categorygroups":["155371","155391","155361","155381","155351","151091"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af396dc2abf6b654230be","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af396dc2abf6b654230be","url":"https://www.visitmanchester.com/food-and-drink/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af396dc2abf6b654230be"}},"civ":{"instance":{"type":"widget","name":"plugins_common_product_search","site_name":"primary","saved":false,"created":"2024-01-08T11:14:56.340Z","updated":"2024-01-08T11:14:56.340Z","deleted":false,"id":"659bd8eece7a575babca811d","version_id_string":"659bd8eece7a575babca811e"},"version":{"data":{"title":"Food & Drink","default_selected":"true","type":"listings","use_cat_groups":"on","categorygroups":["155371","155391","155361","155381","155351","151091"],"calendar":"1","show_booking":"false","show_booking_active":"false","show_region":"false","regionid":"411","defaultRange":"week","hide_date_filters":"false","link_text":"Search","link_raw":{"id":"650af396dc2abf6b654230be","type":"plugins_nav_navitem_primary_main"},"link":{"id":"650af396dc2abf6b654230be","url":"https://www.visitmanchester.com/food-and-drink/search-results/","title":"Search Results","valid":true,"type":"plugins_nav_navitem_primary_main","typeLabel":"Nav Item - Primary - Main Navigation","target":"_self","uniqueId":"plugins_nav_navitem_primary_main_650af396dc2abf6b654230be"}},"created":"2024-01-08T11:14:56.341Z","id":"659bd8eece7a575babca811e","instance_id_string":"659bd8eece7a575babca811d"},"onTrunk":true,"civid":"659bd8eece7a575babca811d"},"name":"plugins_common_product_search"},"translations":{"translations.static.leo":{"apply":"Apply","clear_filters":"Clear Filters","reset":"Reset","filter":"Filter","sort":"Sort","view":"View","keyword":"Keyword","search_placeholder":"Search","select":"Select","regions":"Regions","categories":"Categories","grid":"Grid","list":"List","map":"Map","show_map":"Show Map","hide_map":"Hide Map","recommended":"Recommended","near_me":"Near Me","read_more":"Read More","quick_view":"Quick View","featured_title":"Partner","visit_website":"Visit Website","email":"E-mail","tollfree":"Toll Free","tab_about":"About","tab_map":"Map","tab_openings":"Dates and Times","tab_guide_prices":"Prices","tab_offers":"Special Offers","tab_faq":"FAQs","tab_gradings":"Gradings","tab_awards":"Awards","tab_also_like":"You might also be interested in...","tab_downloads":"Downloads","tab_routes":"Routes","tab_facilities":"Facilities","tab_virtual_tours":"Virtual Tours","show_more":"Show $1 more","show_less":"Show Less","results":"$1 results","no_results":"There are no results that match your filter.","miles_from_you":"Miles from You","meeting_rooms":"Meeting Rooms","square_feet":"Total Sq. Ft.","largest_room":"Largest Room","sleeping_rooms":"Sleeping Rooms","banquet":"Banquet Capacity","reception":"Reception Capacity","theatre":"Theater Capacity","classroom":"Classroom Capacity","compare":"Compare","close_compare_dropdown":"Close compare dropdown","compare_add":"Add to compare","compare_remove":"Remove from compare","compare_clear_all":"Clear All","compare_limit_message":"You can only compare four (4) items at a time","location":"Location","locations":"Locations","details":"Details","address":"Address","err_loc_timeout":"We're unable to determine your location at this time.","err_loc_blocked":"You must allow location access for distance sorting.","err_loc_radius":"You must be within $1 miles to sort by distance.","date_range_title":"Show Events For","date_range_day":"Day","date_range_week":"Week","date_range_weekend":"Weekend","date_range_month":"Month","date_range_year":"Year","date_range_selected_dates":"Selected Dates","per_page_label":"Items Per Page","tb_add":"Add to Trip","tb_remove":"Remove from Trip","tb_view":"View Trip","facilities":"Facilities","download":"Download Events as CSV","convention":"Convention","venues":"Venues","dates":"Dates","attendance":"Attendance","whats_nearby":"What's Nearby","attractions":"Attractions","dining":"Dining","accommodations":"Accommodations","events":"Events","things_to_do":"Things To Do","get_directions":"Get Directions","redo_search_in_map":"Redo Search in Map","add_to_calendar":"Add to Calendar","add_to_google_calendar":"Add to Google Calendar","add_to_microsoft_calendar":"Add to Microsoft Live Calendar","add_to_outlook_calendar":"Add to Office365 Outlook Calendar","add_to_iCloud_calendar":"Add to iCloud Calendar","add_to_windows_calendar":"Add to Windows Calendar","start_date":"Start Date","end_date":"End Date","learn_more":"Learn more about"}}}</script> </div> </div> <script> require([ 'jquery', 'plugins_core/main', 'sv_site', 'sv_clientMoment', 'plugins_common_custom_product_search', 'plugins_common_custom_utils', ], function( $, core, site, clientMoment, product_search, utils ) { init(); async function init() { const dataString = document.querySelector('#ps_data_4864e5cd-e5d5-48f9-95aa-64e055955ca0').textContent const widget = JSON.parse(dataString); const t = { leo: widget.translations['translations.static.leo'], }; // Collect all select options let options = {} // date format to ensure all dates passed through clientMoment and the date range plugin are formated correctly const queryDateFormat = 'YYYY-MM-DD'; const today = clientMoment().format(queryDateFormat); const thisWeek = clientMoment().add(6, 'days').format(queryDateFormat); const thisMonth = clientMoment().add(1, 'months').format(queryDateFormat); const weekendFri = clientMoment().day(5).format(queryDateFormat); const weekendSun = clientMoment().day(7).format(queryDateFormat); const customStart = clientMoment(widget.data.from_date).format(queryDateFormat); const customEnd = clientMoment(widget.data.to_date).format(queryDateFormat); const showBooking = (widget?.data?.show_booking ?? 'false') === 'true'; const showBookingActiveByDefault = (widget?.data?.show_booking_active ?? 'false') === 'true'; const showRegion = (widget?.data?.show_region ?? 'false') === 'true'; const useCatGroups = (widget?.data?.use_cat_groups ?? 'off') === 'on'; const hasCatGroups = widget?.data?.use_cat_groups === 'on'; // Set initial start and end days for the calendar dropdown let initialDates = { start: today, end: today } if (widget.data.defaultRange === 'week') { initialDates.end = thisWeek; } else if (widget.data.defaultRange === 'weekend') { initialDates.start = weekendFri; initialDates.end = weekendSun; } else if (widget.data.defaultRange === 'month') { initialDates.end = thisMonth; } else if (widget.data.defaultRange === 'custom') { initialDates.start = customStart; initialDates.end = customEnd; } // The hidden filter is to store values that are manually selected in the CMS. // Regions and event categories are the two available fields for manual selection const hiddenFilters = {} if (widget.data.type === 'listings' && widget.data.regionid) { hiddenFilters.regionid = widget.data.regionid; } else if (widget.data.type === 'events' && widget.data.regionidevents) { hiddenFilters.regionidevents = widget.data.regionidevents; } else if (widget.data.type === 'events' && widget.data.cat_groups_events && widget.data.cat_groups_events.length > 0) { hiddenFilters.catids = widget.data.cat_groups_events; } else if (widget.data.type === 'offers' && widget.data.offer_category && widget.data.offer_category.length > 0) { hiddenFilters.catid = data.offer_category; } if (widget.data.hide_date_filters === 'true') { hiddenFilters.dates = initialDates; } if (widget.data.channel) { hiddenFilters.channelkey = widget.data.channel; } // if listings if (widget.data.type === 'listings') { if (useCatGroups) { // if doesn't have category groups const [categorygroups, categorygroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_categorygroups/aggregate/', { json: JSON.stringify({ filter: {}, options: { castDocs:false, fields: { categorygroupid: 1, categorygroup: 1 } } }), token: core.simpleToken } ))); if (categorygroupsErr) return new Error(categorygroupsErr); const groups = !!widget ?.data ?.categorygroups ? categorygroups.docs.filter(group => widget.data.categorygroups.indexOf(group.categorygroupid.toString()) !== -1) : categorygroups.docs; options.groups = groups.map(group => ({ label: group.categorygroup, value: group.categorygroupid.toString() })); } else { const [allSubcats, allSubcatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_subcats/find/', { json: JSON.stringify({ filter: { active: { $eq: true }, has_listings: { $eq: true }, sites: { $in: [site.site] } }, options: { castDocs: false, sort: { fullname: 1 }, fields: { categoryid: 1, subcatid: 1, subcatname: 1, } } }), token: core.simpleToken } ))); if (allSubcatsErr) return new Error(allSubcatsErr); let subcats = allSubcats.docs; if (widget?.data?.cats) { subcats = subcats.filter(subcat => subcat.categoryid === Number(widget.data.cats)); } options.subcats = subcats.map(subcat => ({ label: subcat.subcatname, value: subcat.subcatid.toString() })); } if (!widget.data.regionid) { // if doesn't have regions const [regions, regionsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_listings_custom_view_polygons/aggregate/', { json: JSON.stringify({ pipeline: [ { $sort: { region: 1 } }, { $project: { label: "$region", value: "$regionid" } }, ] }), token: core.simpleToken } ))); if (regionsErr) return new Error(regionsErr); options.regions = regions.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'events') { const catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : []; options.catGroupsEvents = useCatGroups ? widget.data.cat_groups_events.map(cg =>({ label: cg.title, value: cg.cats.join(',') })) : [] // if events if (useCatGroups) { const [eventCatGroups, eventCatGroupsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_catgroup_x_tags/find/', { json: JSON.stringify({ filter: {}, options: { castDocs: false, sort: { sort_tag: 1 }, fields: { tag: 1, "cat_groups.title": 1, "cat_groups.cats": 1, } } }), token: core.simpleToken } ))); if (eventCatGroupsErr) return new Error(eventCatGroupsErr); eventCatGroups.docs.map(tag => tag.cat_groups.sort((a, b) => a.title.localeCompare(b.title))); options.catgroups = eventCatGroups.docs.map(tag => tag.cat_groups.map(cg => ({ label: cg.title, value: cg.cats.join(','), group: tag.tag, }))).flat(); if (widget?.data?.cat_groups_events) { const selectedGroups = widget.data.cat_groups_events.map(cg => cg.title); options.catgroups = options.catgroups.filter(cg => selectedGroups.indexOf(cg.label) !== -1); } } else { const [allCats, allCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_custom_view_categories/find/', { json: JSON.stringify({ filter: { calendarid: { $eq: (widget?.data?.calendar ?? '1') }, ...(widget?.data?.cats_events ? { value: { $in: widget.data.cats_events } } : {}), }, options: { castDocs: false, sort: { label: 1 }, fields: { label: 1, value: 1, } } }), token: core.simpleToken } ))); if (allCatsErr) return new Error(allCatsErr); options.cats = allCats.docs; } if (!widget.data.regionidevents) { const [regionsevents, regionseventsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_events_events_metadata/aggregate/', { json: JSON.stringify({ pipeline: [ { "$project" : { "option" : "$udfs_object.11.values" } }, { "$unwind" : "$option" }, { $sort: { regionsevents: 1 } }, { $project: { label: "$option.listvalue", value: "$option.listid" } }, ] }), token: core.simpleToken } ))); if (regionseventsErr) return new Error(regionseventsErr); options.regionsevents = regionsevents.docs.map(({label, value}) => ({ label, value: value.toString() })); } } else if (widget.data.type === 'offers') { // if offers const [offerCats, offerCatsErr] = await utils.call(fetch(utils.getAPIUrl( '/includes/rest_v2/plugins_offers_offermeta/aggregate/', { json: JSON.stringify({ pipeline: [ { $project: { _id: 0, categories: 1 } }, { $unwind: "$categories" }, { $match: { "categories.active": true } }, { $project: { label: "$categories.categoryname", value: { $toString: "$categories.categoryid" }, } }, { $sort: { "label": 1 } }, ] }), token: core.simpleToken } ))); if (offerCatsErr) return new Error(offerCatsErr); options.cats = offerCats.docs; } const vue = product_search.getVue({ rootNode: $('#ps_4864e5cd-e5d5-48f9-95aa-64e055955ca0'), type: widget.data.type, link: widget.data.link.url, linkText: widget.data.link_text, hiddenFilters: hiddenFilters, translations: t.leo, filters: [ { name : "filter_onlybooking", label : "Search Availability", type : "toggle", show: showBooking, value: "true", initialValue: showBookingActiveByDefault, }, { name: 'filter_daterange[start]', label: 'Check in', type: 'date_availability_start', show: showBooking, initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: 'Check out', type: 'date_availability_end', show: showBooking, initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_adults', label: 'Number of Adults', type: 'select', show: showBooking, initialValue: '1', typeExtra: { options: [ { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_children', label: 'Number of Children', type: 'select', show: showBooking, initialValue: '0', typeExtra: { options: [ { label: '0', value: '0' }, { label: '1', value: '1' }, { label: '2', value: '2' }, { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, { label: '7', value: '7' }, { label: '8', value: '8' }, { label: '9', value: '9' }, { label: '10', value: '10' }, ], group: false, }, }, { name: 'filter_daterange[start]', label: t.leo.start_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.start, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_daterange[end]', label: t.leo.end_date, type: 'date', show: widget.data.hide_date_filters === 'false' && widget.data.type === 'events', initialValue: initialDates.end, typeExtra: { dateFormat: 'MMM Do' } }, { name: 'filter_cat_groups[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && useCatGroups, typeExtra: { options: options.groups || [] } }, { name: useCatGroups ? 'filter_cat_groups[0]' : 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events', typeExtra: { options: useCatGroups ? (options.catGroupsEvents || []) : (options.cats || []), } }, { name: 'filter_categories[0]', label: t.leo.categories, placeholder: `${t.leo.select}...`, type: 'select', show: (widget.data.type === 'offers' && !widget.data.offer_category), typeExtra: { options: options.cats } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'listings' && !widget.data.regionid && showRegion, typeExtra: { options: options.regions || [] } }, { name: 'filter_regions[0]', label: t.leo.regions, placeholder: `${t.leo.select}...`, type: 'select', show: widget.data.type === 'events' && !widget.data.regionidevents && showRegion, typeExtra: { options: options.regionsevents || [] } }, { name: 'filter_keyword', label: t.leo.keyword, placeholder: t.leo.search_placeholder, type: 'text', show: true }, { name: 'filter_channel[0]', label: 'Channel', placeholder: t.leo.search_placeholder, show: !widget.data.channel, typeExtra: { options: options.channel || [] } }, ] }); } }); </script></div> </div> </section> <script> require(['lodash'], function(lodash) { const root = document.querySelector('[data-guid="4079a280-924e-4ef0-8f3a-c97368f52879"]'); const panels = Array.from(root.querySelectorAll("[data-product-search]")); const tabList = root.querySelector("[data-tab-list]"); let desktopInitialized = false; let mobileInitialized = false; function initProductSearch() { if (window.innerWidth > 640) { let tabButtons = []; if (!desktopInitialized) { // Create Tabs for desktop and tablet panels.forEach((panel, ind) => { const tabId = panel.getAttribute('data-guid'); const tabTitle = panel.getAttribute('data-product-search'); const checkSelected = panel.getAttribute('data-default-selected'); let selected = (checkSelected === 'defaultSelected') ? true : false; const btnHtml = ` <button role="tab" aria-selected="${selected}" aria-controls="panel-${tabId}" id="tab-${tabId}" >${tabTitle}</button> `; if (selected) panel.classList.add('active'); tabList.insertAdjacentHTML('beforeend', btnHtml); tabButtons = tabList.querySelectorAll('[role="tab"]'); }); //If no default search is selected, revert to search one within the panel as selected if (!panels.some(search => search.getAttribute('data-default-selected') === 'defaultSelected')) { panels[0].classList.add('active'); tabList.querySelector('button:first-of-type').setAttribute("aria-selected", "true"); } desktopInitialized = true; } // Define click handler function handleTabClick(event) { // Mark all tabs as unselected tabButtons.forEach(tab => { tab.setAttribute('aria-selected', false); }); // Select the tab event.currentTarget.setAttribute('aria-selected', true); // Select the associated tab panel const panelId = event.currentTarget.getAttribute('aria-controls'); const tabPanel = panels.find(panel => panel.getAttribute('id') === panelId); panels.find(panel => panel.classList.remove('active')); tabPanel.classList.add('active'); } tabButtons.forEach(tab => tab.addEventListener('click', handleTabClick)); } else if (!mobileInitialized) { const mobileButtons = root.querySelectorAll('.mobile-tab'); // Define click handler function handleTabClick(event) { if (event.currentTarget.getAttribute('aria-expanded') === "true") { event.currentTarget.setAttribute('aria-expanded', false); } else { mobileButtons.forEach(tab => tab.setAttribute('aria-expanded', false)); event.currentTarget.setAttribute('aria-expanded', true); } } mobileButtons.forEach(tab => tab.setAttribute('aria-expanded', false)); panels.find(panel => panel.classList.remove('active')); mobileButtons.forEach(tab => tab.addEventListener('click', handleTabClick)); mobileInitialized = true; } } initProductSearch(); window.onresize = lodash.debounce(initProductSearch, 400); }); </script></div><div data-civid="659fe5085863e2659ef63689" class="contentRender contentRender_22 contentRender_type_widget contentRender_name_plugins_collections_type_custom_slides contentRender_name_plugins_collections_template_custom_core_slider_4_across_fullwidth" data-sv-time="69" data-sv-index="22" data-gtm-vars='{ "tCore" : { "contentNum" : "4" } }'> <style>.slider-4-across-fullwidth .img-cont { aspect-ratio: 394 / 547; }@media (min-width: 640px) { .slider-4-across-fullwidth .img-cont { aspect-ratio: 394 / 547; } }@media (min-width: 1024px) { .slider-4-across-fullwidth .img-cont { aspect-ratio: 394 / 547; } }@media (min-width: 1440px) { .slider-4-across-fullwidth .img-cont { aspect-ratio: 394 / 547; } }</style> <!-- no slides selected --> </div><div data-civid="6502d3e2524531454d9a8f72" class="contentRender contentRender_23 contentRender_type_panel contentRender_name_plugins_common_snapwidget" data-sv-time="1" data-sv-index="23" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="panel-snapwidget"> <div class="title"> <i class="social-icon fab fa-instagram"></i> <h2 class="panel-title">Share and follow Visit Manchester on Instagram</h2> </div> <div data-civid="6526645758d8a262bf5ed62d" class="contentRender contentRender_24 contentRender_type_widget contentRender_name_plugins_common_embed" data-sv-time="15" data-sv-index="24" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'> <div class="custom-embed full" data-sv-embed-widget="true" data-guid="22537ecc-2424-47af-9981-8add77d8ee07"> <div class="embed-container"> <!-- SnapWidget --> <script src="https://snapwidget.com/js/snapwidget.js"></script> <iframe src="https://snapwidget.com/embed/277452" class="snapwidget-widget" allowTransparency="true" frameborder="0" scrolling="no" style="border:none; overflow:hidden; width:100%; "></iframe> </div> </div> </div> <div class="tagline"> Follow us everywhere <div data-civid="6526645758d8a262bf5ed62f" class="contentRender contentRender_25 contentRender_type_widget contentRender_name_plugins_collections_type_custom_social_slides contentRender_name_plugins_collections_template_custom_social_links" data-sv-time="43" data-sv-index="25" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'> <ul class="social-links"> <li class="social-network"> <a class="social-link" href="https://www.tiktok.com/@visitmanchester" target="_blank" rel="noopener" title="Visit our tiktok page" aria-label="Visit our tiktok page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Tiktok", "interactionUrl" : "https%3A%2F%2Fwww.tiktok.com%2F%40visitmanchester", "interactionSource": "widget" } }' > <i class="social-icon fab fa-tiktok" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.youtube.com/user/visitmanchester" target="_blank" rel="noopener" title="Visit our youtube page" aria-label="Visit our youtube page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Youtube", "interactionUrl" : "https%3A%2F%2Fwww.youtube.com%2Fuser%2Fvisitmanchester", "interactionSource": "widget" } }' > <i class="social-icon fab fa-youtube" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://twitter.com/visit_mcr" target="_blank" rel="noopener" title="Visit our twitter page" aria-label="Visit our twitter page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Twitter", "interactionUrl" : "https%3A%2F%2Ftwitter.com%2Fvisit_mcr", "interactionSource": "widget" } }' > <i class="social-icon fab fa-twitter" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.instagram.com/visitmanchester/" target="_blank" rel="noopener" title="Visit our instagram page" aria-label="Visit our instagram page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Instagram", "interactionUrl" : "https%3A%2F%2Fwww.instagram.com%2Fvisitmanchester%2F", "interactionSource": "widget" } }' > <i class="social-icon fab fa-instagram" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.facebook.com/visitmanchester/" target="_blank" rel="noopener" title="Visit our facebook page" aria-label="Visit our facebook page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Facebook", "interactionUrl" : "https%3A%2F%2Fwww.facebook.com%2Fvisitmanchester%2F", "interactionSource": "widget" } }' > <i class="social-icon fab fa-facebook" aria-hidden="true" ></i> </a> </li> </ul></div> </div> </div> </div><div data-civid="64d4b1b9938c6344c3e83a02" class="contentRender contentRender_26 contentRender_type_widget contentRender_name_plugins_common_embed" data-sv-time="16" data-sv-index="26" data-gtm-vars='{ "tCore" : { "contentNum" : "3" } }'> <div class="custom-embed full" data-sv-embed-widget="true" data-guid="2b96e736-0b29-4e8c-81cc-b7463d1a8711"> <div class="embed-container"> </div> </div> </div> </div> <div class="footer-container"> <div data-civid="64c7adda7bb02a0e877d05d5" class="contentRender contentRender_27 contentRender_type_panel contentRender_name_plugins_common_footer" data-sv-time="0" data-sv-index="27" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="sponsor-logos-container"> <div class="sponsor-logos"> <div data-civid="659a7653ce7a575babca106d" class="contentRender contentRender_40 contentRender_type_widget contentRender_name_plugins_common_sponsor_logos" data-sv-time="17" data-sv-index="40" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="sponsor-logos" data-guid="8203cd7b-e751-4d8e-b05e-3b382dc82104" data-gtm-vars='{ "tClient_ga4": { "eventName": "widget_interaction", "widgetName": "Logo | Sponsor", "interactionSource": "widget" } }'> <a href="https://www.cntraveller.com/article/best-places-to-go-in-uk-and-ireland-2024" target="_blank" aria-label="Marketing Manchester" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Best Places to go 2024 logo", "interactionUrl": "https://www.cntraveller.com/article/best-places-to-go-in-uk-and-ireland-2024" } }'> <img src="/includes/public/assets/shared/logos/logo_bestplacestogo.png" alt="Best Places to go 2024 logo" loading="lazy" width="102" height="102" /> </a> <a href="" target="" aria-label="Marketing Manchester" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Best of the World 2023 logo", "interactionUrl": "" } }'> <img src="/includes/public/assets/shared/logos/accolade_bestworld.png" alt="Best of the World 2023 logo" loading="lazy" width="113" height="103" /> </a> <a href="https://www.afar.com/magazine/where-to-go-2024" target="_blank" aria-label="Marketing Manchester" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Where to go 2024 logo", "interactionUrl": "https://www.afar.com/magazine/where-to-go-2024" } }'> <img src="/includes/public/assets/shared/logos/logo_wheretogo.png" alt="Where to go 2024 logo" loading="lazy" width="108" height="80" /> </a> </div></div> </div> <div class="footer-links"> <div data-civid="659a7653ce7a575babca106f" class="contentRender contentRender_41 contentRender_type_widget contentRender_name_plugins_common_footer_links" data-sv-time="17" data-sv-index="41" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="footer-links" data-guid="bd7171f4-1696-49aa-802c-e131d62d1ebc"> <div class="TA"> <p>Ratings Powered by</p> <a class="tripAdvisor" href="https://www.tripadvisor.com/" target="" aria-label="Marketing Manchester"> <img src="/includes/public/assets/shared/logos/logo_tripadvisor.png" alt="Marketing Manchester" loading="lazy" width="140" height="40" /> </a> </div> <a class="dataThistle" href="https://www.datathistle.com/" target="" aria-label="Marketing Manchester"> <img src="/includes/public/assets/shared/logos/logo_datathistle.png" alt="Marketing Manchester" loading="lazy" width="140" height="40" /> </a> </div></div> </div> </div> <footer class="panel-footer" data-guid="15dddde9-5ab7-4725-a45c-8766c479f813"> <div class="footer-content-container"> <div class="footer-logo"> <div data-civid="659a7653ce7a575babca105b" class="contentRender contentRender_31 contentRender_type_widget contentRender_name_plugins_common_logo_footer" data-sv-time="16" data-sv-index="31" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'><div class="logo-footer" data-guid="70f428bf-30b3-415c-a621-ea15f650d8a6" > <a href="" target="" aria-label="Visit Manchester Logo" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "eventName": "widget_interaction", "widgetName": "Logo | Footer", "interactionSource": "widget", "linkObject": "Visit%20Manchester%20Logo", "interactionUrl": "" } }'> <img src="https://assets.simpleviewinc.com/simpleview/image/upload/c_pad,h_30,q_75,w_234/v1/clients/manchester/logo_c3fd195c-4f61-4268-98f6-2de196faa506.png" srcset="https://assets.simpleviewinc.com/simpleview/image/upload/c_pad,h_30,q_75,w_234/v1/clients/manchester/logo_c3fd195c-4f61-4268-98f6-2de196faa506.png 1x, https://assets.simpleviewinc.com/simpleview/image/upload/c_pad,h_30,q_75,w_234/v1/clients/manchester/logo_c3fd195c-4f61-4268-98f6-2de196faa506.png 2x" alt="Visit Manchester Logo" loading="lazy" width="234" height="30" /> </a> </div></div> </div> <div class="cta-container"> <div data-civid="659a7653ce7a575babca1055" class="contentRender contentRender_28 contentRender_type_widget contentRender_name_plugins_common_call_to_action" data-sv-time="16" data-sv-index="28" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="call-to-action" data-guid="" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Call to Action", "interactionSource" : "widget" } }'> <a href="https://www.visitmanchester.com/contact-us/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Get%20in%20Touch", "interactionUrl" : "https%3A%2F%2Fwww.visitmanchester.com%2Fcontact-us%2F", "interactionText" : "Get%20in%20Touch"} }'> <div class="inner"> <div class="content"> <h3 class="title">Get in Touch</h3> </div> </div> </a> </div> </div><div data-civid="659a7653ce7a575babca1057" class="contentRender contentRender_29 contentRender_type_widget contentRender_name_plugins_common_call_to_action" data-sv-time="16" data-sv-index="29" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'> <div class="call-to-action" data-guid="" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Call to Action", "interactionSource" : "widget" } }'> <a href="https://www.visitmanchester.com/advertise-with-us/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "Work%20With%20Us", "interactionUrl" : "https%3A%2F%2Fwww.visitmanchester.com%2Fadvertise-with-us%2F", "interactionText" : "Work%20With%20Us"} }'> <div class="inner"> <div class="content"> <h3 class="title">Work With Us</h3> </div> </div> </a> </div> </div><div data-civid="659a7653ce7a575babca1059" class="contentRender contentRender_30 contentRender_type_widget contentRender_name_plugins_common_call_to_action" data-sv-time="16" data-sv-index="30" data-gtm-vars='{ "tCore" : { "contentNum" : "3" } }'> <div class="call-to-action" data-guid="" data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Call to Action", "interactionSource" : "widget" } }'> <a href="https://www.visitmanchester.com/enewsletter-sign-up/" target="_self" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "linkObject" : "E-newsletter%20sign%20up", "interactionUrl" : "https%3A%2F%2Fwww.visitmanchester.com%2Fenewsletter-sign-up%2F", "interactionText" : "E-newsletter%20sign%20up"} }'> <div class="inner"> <div class="content"> <h3 class="title">E-newsletter sign up</h3> </div> </div> </a> </div> </div> </div> <div class="social-media"> <p class="subtitle"> Follow us</p> <div data-civid="659a7653ce7a575babca105f" class="contentRender contentRender_33 contentRender_type_widget contentRender_name_plugins_collections_type_custom_social_slides contentRender_name_plugins_collections_template_custom_social_links" data-sv-time="43" data-sv-index="33" data-gtm-vars='{ "tCore" : { "contentNum" : "3" } }'> <ul class="social-links"> <li class="social-network"> <a class="social-link" href="https://www.tiktok.com/@visitmanchester" target="_blank" rel="noopener" title="Visit our tiktok page" aria-label="Visit our tiktok page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Tiktok", "interactionUrl" : "https%3A%2F%2Fwww.tiktok.com%2F%40visitmanchester", "interactionSource": "widget" } }' > <i class="social-icon fab fa-tiktok" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.youtube.com/user/visitmanchester" target="_blank" rel="noopener" title="Visit our youtube page" aria-label="Visit our youtube page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Youtube", "interactionUrl" : "https%3A%2F%2Fwww.youtube.com%2Fuser%2Fvisitmanchester", "interactionSource": "widget" } }' > <i class="social-icon fab fa-youtube" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://twitter.com/visit_mcr" target="_blank" rel="noopener" title="Visit our twitter page" aria-label="Visit our twitter page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Twitter", "interactionUrl" : "https%3A%2F%2Ftwitter.com%2Fvisit_mcr", "interactionSource": "widget" } }' > <i class="social-icon fab fa-twitter" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.instagram.com/visitmanchester/" target="_blank" rel="noopener" title="Visit our instagram page" aria-label="Visit our instagram page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Instagram", "interactionUrl" : "https%3A%2F%2Fwww.instagram.com%2Fvisitmanchester%2F", "interactionSource": "widget" } }' > <i class="social-icon fab fa-instagram" aria-hidden="true" ></i> </a> </li> <li class="social-network"> <a class="social-link" href="https://www.facebook.com/visitmanchester/" target="_blank" rel="noopener" title="Visit our facebook page" aria-label="Visit our facebook page" data-gtm-click data-gtm-vars='{ "tClient_ga4" : {"eventName" : "navigation_click", "navType" : "Social Links", "linkObject": "Social | Facebook", "interactionUrl" : "https%3A%2F%2Fwww.facebook.com%2Fvisitmanchester%2F", "interactionSource": "widget" } }' > <i class="social-icon fab fa-facebook" aria-hidden="true" ></i> </a> </li> </ul></div> </div> <div class="footer-nav"> <p class="subtitle"> Website Information</p> <div data-civid="659a7653ce7a575babca1061" class="contentRender contentRender_34 contentRender_type_widget contentRender_name_plugins_nav_footer" data-sv-time="24" data-sv-index="34" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <ul class="navigation-footer" data-gtm-vars='{ "tClient_ga4": { "eventName": "navigation_click", "navType": "Footer", "interactionSource": "navigation" } }' > <li class="item item-parent row-1"> <a href="/enewsletter-sign-up/" target="_self" class="" title="E-Newsletter Sign Up" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "E-Newsletter%20Sign%20Up", "interactionUrl": "%2Fenewsletter-sign-up%2F", "interactionText": "E-Newsletter%20Sign%20Up" } }' > E-Newsletter Sign Up </a> </li> <li class="item item-parent row-2"> <a href="/advertise-with-us/" target="_self" class="" title="Advertise With Us" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Advertise%20With%20Us", "interactionUrl": "%2Fadvertise-with-us%2F", "interactionText": "Advertise%20With%20Us" } }' > Advertise With Us </a> </li> <li class="item item-parent row-3"> <a href="https://www.visitmanchester.com/whats-on/submit-event/" target="_self" class="" title="Submit event" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Submit%20event", "interactionUrl": "https%3A%2F%2Fwww.visitmanchester.com%2Fwhats-on%2Fsubmit-event%2F", "interactionText": "Submit%20event" } }' > Submit event </a> </li> <li class="item item-parent row-4"> <a href="/contact-us/" target="_self" class="" title="Contact Us" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Contact%20Us", "interactionUrl": "%2Fcontact-us%2F", "interactionText": "Contact%20Us" } }' > Contact Us </a> </li> <li class="item item-parent row-5"> <a href="/terms-and-conditions/" target="_self" class="" title="Terms and Conditions" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Terms%20and%20Conditions", "interactionUrl": "%2Fterms-and-conditions%2F", "interactionText": "Terms%20and%20Conditions" } }' > Terms and Conditions </a> </li> <li class="item item-parent row-6"> <a href="https://www.growthco.uk/about-us/policies/privacy-policy/" target="_self" class="" title="Privacy Policy" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Privacy%20Policy", "interactionUrl": "https%3A%2F%2Fwww.growthco.uk%2Fabout-us%2Fpolicies%2Fprivacy-policy%2F", "interactionText": "Privacy%20Policy" } }' > Privacy Policy </a> </li> <li class="item item-parent row-7"> <a href="/cookies/" target="_self" class="" title="Cookies" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Cookies", "interactionUrl": "%2Fcookies%2F", "interactionText": "Cookies" } }' > Cookies </a> </li> <li class="item item-parent row-8"> <a href="/accessibility-statement/" target="_self" class="" title="Accessibility Statement" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Accessibility%20Statement", "interactionUrl": "%2Faccessibility-statement%2F", "interactionText": "Accessibility%20Statement" } }' > Accessibility Statement </a> </li> <li class="item item-parent row-9"> <a href="https://www.growthco.uk/about-us/policies/modern-slavery-and-human-trafficking-statement/" target="_self" class="" title="Modern Slavery and Human Trafficking Statement" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Modern%20Slavery%20and%20Human%20Trafficking%20Statement", "interactionUrl": "https%3A%2F%2Fwww.growthco.uk%2Fabout-us%2Fpolicies%2Fmodern-slavery-and-human-trafficking-statement%2F", "interactionText": "Modern%20Slavery%20and%20Human%20Trafficking%20Statement" } }' > Modern Slavery and Human Trafficking Statement </a> </li> <li class="item item-parent row-10"> <a href="/free-listing/" target="_self" class="" title="Free Listing" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Free%20Listing", "interactionUrl": "%2Ffree-listing%2F", "interactionText": "Free%20Listing" } }' > Free Listing </a> </li> <li class="item item-parent row-11 last"> <a href="/sitemap/" target="_self" class="" title="Sitemap" data-gtm-click data-gtm-vars='{ "tClient_ga4": { "linkObject": "Sitemap", "interactionUrl": "%2Fsitemap%2F", "interactionText": "Sitemap" } }' > Sitemap </a> </li> </ul> </div> </div> <div class="site-links-container"> <p class="subtitle"> Our websites</p> <div class="site-links-outer"> <div class="site-links-inner"> <div data-civid="659a7653ce7a575babca1063" class="contentRender contentRender_35 contentRender_type_widget contentRender_name_plugins_common_site_links" data-sv-time="68" data-sv-index="35" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <div class="site-link" data-guid="24fe0972-c725-4114-9a78-ee68e5072b74"> <a title="Visit" href="/" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Custom Site Links", "interactionSource" : "widget", "linkObject" : "Visit", "interactionUrl" : "%2F", "interactionText" : "Visit" } }'> Visit </a> </div></div><div data-civid="659a7653ce7a575babca1065" class="contentRender contentRender_36 contentRender_type_widget contentRender_name_plugins_common_site_links" data-sv-time="64" data-sv-index="36" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'> <div class="site-link" data-guid="e9893ef5-26ad-47d0-b054-27c159c76c91"> <a title="Meet" href="https://www.meetinmanchester.com/" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Custom Site Links", "interactionSource" : "widget", "linkObject" : "Meet", "interactionUrl" : "https%3A%2F%2Fwww.meetinmanchester.com%2F", "interactionText" : "Meet" } }'> Meet </a> </div></div><div data-civid="659a7653ce7a575babca1067" class="contentRender contentRender_37 contentRender_type_widget contentRender_name_plugins_common_site_links" data-sv-time="65" data-sv-index="37" data-gtm-vars='{ "tCore" : { "contentNum" : "3" } }'> <div class="site-link" data-guid="1d70c392-1f25-43e5-861c-8acbaeeac003"> <a title="Invest" href="https://www.investinmanchester.com/" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Custom Site Links", "interactionSource" : "widget", "linkObject" : "Invest", "interactionUrl" : "https%3A%2F%2Fwww.investinmanchester.com%2F", "interactionText" : "Invest" } }'> Invest </a> </div></div><div data-civid="659a7653ce7a575babca1069" class="contentRender contentRender_38 contentRender_type_widget contentRender_name_plugins_common_site_links" data-sv-time="66" data-sv-index="38" data-gtm-vars='{ "tCore" : { "contentNum" : "4" } }'> <div class="site-link" data-guid="c809a8f7-5e6c-4e5e-984e-3de193c9b9fa"> <a title="Study" href="https://www.studyinmanchester.com/" data-gtm-click data-gtm-vars='{ "tClient_ga4" : { "eventName" : "navigation_click", "navType" : "Custom Site Links", "interactionSource" : "widget", "linkObject" : "Study", "interactionUrl" : "https%3A%2F%2Fwww.studyinmanchester.com%2F", "interactionText" : "Study" } }'> Study </a> </div></div> </div> </div> </div> <div class="footer-content"> <div data-civid="659a7653ce7a575babca105d" class="contentRender contentRender_32 contentRender_type_widget contentRender_name_plugins_core_textbox" data-sv-time="16" data-sv-index="32" data-gtm-vars='{ "tCore" : { "contentNum" : "2" } }'><section data-sv-core-textbox data-guid="cf2e4d06-f6d8-4b44-9685-35f796a6cf49"> <div class="address"> <p>Marketing Manchester Ltd</p> <p>Lee House</p> <p>90 Great Bridgewater Street</p> <p>Manchester</p> <p>M1 5JW</p> <p>Registered in England No: 031925892</p> <p>VAT No: 727102071</p> </div> <p>DISCLOSURE: We may earn commission when you buy tickets for an event, attraction or experience through visitmanchester.com.</p> </section></div> </div> </div> <div class="attributions"> <div class="attribution-content-container"> <p>© Copyright Marketing Manchester. All Rights Reserved.</p> <a class="made-by-sv" href="https://www.simpleviewinc.com/our-services/creative-design/" target="_blank" rel="noopener" > <img src="/includes/public/assets/shared/made-by-sv-white.svg" alt="Made by Simpleview" loading="lazy" width="385" height="54" /> </a> </div> </div> <div class="mobile-fixed"> <div data-civid="659a7653ce7a575babca106b" class="contentRender contentRender_39 contentRender_type_widget contentRender_name_plugins_common_vancookietool" data-sv-time="17" data-sv-index="39" data-gtm-vars='{ "tCore" : { "contentNum" : "1" } }'> <script type="text/javascript" src="https://svsharedimages.blob.core.windows.net/cookiebanner/CookieScript.js?v=1" async defer></script> <link rel="Stylesheet" type="text/css" href="https://svsharedimages.blob.core.windows.net/cookiebanner/CookieStyleFinal.css" media="screen" /></div> </div> </footer> </div> </div> </div> <div id="gallery-portal" data-gallery-portal></div> <div id="quickview-detail" data-quickview-detail></div></div> <!-- footer css bundles --> <!-- footer js bundles --> <script src="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/core/public/js/loginCheck.js"></script> <script src="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/js/shared_footer.js" defer></script> <script src="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/js/custom_forms.js" defer></script> <script src="/includes/public/managed/v_df9c14a4_1499fc8c/core/plugins/common/virtuals/js/main.js" defer></script> <!-- bottomBody --> <script data-id="site_global_footer"> require(["sv_clientLib", "sv_load!plugins_dynamic_content"], function(clientLib) { clientLib._initLazy(); }); </script> <script type="text/javascript"> !function(){var b=function(){window.__AudioEyeSiteHash = "cb168926215e1f0cf16f931368c35d14"; var a=document.createElement("script");a.src="https://wsmcdn.audioeye.com/aem.js";a.type="text/javascript";a.setAttribute("async","");document.getElementsByTagName("body")[0].appendChild(a)};"complete"!==document.readyState?window.addEventListener?window.addEventListener("load",b):window.attachEvent&&window.attachEvent("onload",b):b()}(); </script> </body> </html>