CINXE.COM
Find Exhibitors and Sessions - SATELLITE 2025
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Find Exhibitors and Sessions - SATELLITE 2025</title> <meta name="description" content="Find exhibitors and sessions at SATELLITE 2025. Create a free My Show Planner to save and remember your favorites, and get recommendations."> <script type="application/ld+json"> { "@context" : "https://schema.org", "@type" : "WebSite", "name" : "SATELLITE 2025", "url" : "https://satellite2025.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm?featured=false" } </script> <meta property="og:url" content="https://satellite2025.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm?featured=false" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Find Exhibitors and Sessions - SATELLITE 2025" /> <meta property="og:description" content="Find exhibitors and sessions at SATELLITE 2025. Create a free My Show Planner to save and remember your favorites, and get recommendations." /> <meta property="og:image" content="" /> <meta property="og:site_name" content="SATELLITE 2025" /> <meta name="twitter:card" content="summary"> <meta name="twitter:title" content="Find Exhibitors and Sessions - SATELLITE 2025" /> <meta name="twitter:description" content="Find exhibitors and sessions at SATELLITE 2025. Create a free My Show Planner to save and remember your favorites, and get recommendations." /> <meta name="twitter:image" content="" /> <meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1"> <link rel="icon" href="/8_0/includes/imgs/favicon.ico" /> <link rel="stylesheet" href="/8_0/assets/css/main.css?myscache=20241023A"> <script> function parse_query_string(query) { var vars = query.split("&"); var query_string = {}; for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); var key = decodeURIComponent(pair[0]); var value = decodeURIComponent(pair[1]); // If first entry with this name if (typeof query_string[key] === "undefined") { query_string[key] = decodeURIComponent(value); // If second entry with this name } else if (typeof query_string[key] === "string") { var arr = [query_string[key], decodeURIComponent(value)]; query_string[key] = arr; // If third or later entry with this name } else { query_string[key].push(decodeURIComponent(value)); } } return query_string; } // handles the language change in includes/_language.cfm function changeLanguage(languageFormId){ if (languageFormId === undefined){ languageFormId = 'mys-langset'; } var query = window.location.search.substring(1); var qs; if (query){ qs = parse_query_string(query); for (var key in qs) { var input = document.createElement("input"); input.setAttribute("type", "hidden"); input.setAttribute("name", key); input.setAttribute("value", qs[key]); //append to form element that you want . document.getElementById(languageFormId).appendChild(input); } } document.getElementById(languageFormId).action = window.location.pathname + window.location.hash; document.getElementById(languageFormId).submit(); } var query = window.location.search.substring(1); var qs; if (query){ qs = parse_query_string(query); } </script> <!-- Grab theme CSS --> <style> :root {--color-accent-10: hsl(170, 78%, 36%);--color-accent-20: hsl(170, 78%, 46%);--color-accent-30: hsl(170, 78%, 56%);--color-accent-40: hsl(170, 78%, 66%);--color-accent-50: hsl(170, 78%, 76%);--color-brand-10: hsl(245, 100%, 21%);--color-brand-20: hsl(245, 87%, 29%);--color-brand-30: hsl(245, 82%, 33%);--color-brand-40: hsl(245, 76%, 39%);--color-brand-50: hsl(245, 67%, 45%);--color-brand-60: hsl(245, 65%, 55%);--color-brand-70: hsl(245, 74%, 65%);--color-brand-80: hsl(245, 84%, 74%);--color-brand-90: hsl(245, 97%, 85%);--color-brand-100: hsl(245, 75%, 97%);--color-header: hsl(0, 0%, 100%);--color-header-background: hsl(0, 0%, 100%);--color-nav: hsl(0, 0%, 100%);--color-nav-background: hsl(245, 69%, 29%);--color-shortcut: hsl(0, 0%, 100%);--color-shortcut-background: hsl(205, 82%, 33%);--color-nav-2: hsl(0, 0%, 0%);--color-nav-background-2: hsl(0, 0%, 100%);--style-search-background: hsl(0, 0%, 60%);--border-radius: 0.5rem;--event-info-font-weight: normal;--event-info-visibility: 0.875rem;--nav-links-alignment-navbar-v2: center;} </style> <!-- Grab Gardner Styles --> <style> .nav--wrapper_inner.is-mobile { --color-nav-background: #FFFFFF; --color-nav: black; } .is-floorplan .o-nav_avatar_button .o-bell_icon path { stroke: var(--color-nav-2); } </style> <link href="/8_0/assets/js/mys-bundled/quicklists-min.css" rel="stylesheet" /> <link href="/8_0/assets/js/vue-multiselect/2.1.6/vue-multiselect.min.css" rel="stylesheet" /><script src="/8_0/assets/js/mys-bundled/quicklists-min.js"></script> <script src="/8_0/assets/js/vue-multiselect/2.1.6/vue-multiselect.min.js"></script><script type='text/javascript'> Vue.component('multiselect', window.VueMultiselect.default); </script> <script> /*Vue.mixin({ data: function() { return { get searchcontent() { return {"includes\\vue\\search\\featured-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"tableHeadPlanner"}],"tableHeadBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadLegend":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Legend","APP_VERSION":"8_0","SECTION":"tableHeadLegend"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Featured Companies","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"See Results on Floor Plan","APP_VERSION":"8_0","SECTION":"viewOnFloorplan"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"viewAllFeaturedButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"includes\\vue\\generic\\backtotop-button.cfm":{"backToTopText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\backtotop-button.cfm","TEXT":"Back to Top","APP_VERSION":"8_0","SECTION":"backToTopText"}]},"includes\\vue\\mixin\\global-mixin.cfm":{"septemberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"September","APP_VERSION":"8_0","SECTION":"septemberText"}],"julyText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"July","APP_VERSION":"8_0","SECTION":"julyText"}],"julyAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Jul","APP_VERSION":"8_0","SECTION":"julyAbbrText"}],"tuesdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Tue","APP_VERSION":"8_0","SECTION":"tuesdayAbbrText"}],"wednesdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Wed","APP_VERSION":"8_0","SECTION":"wednesdayAbbrText"}],"februaryText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"February","APP_VERSION":"8_0","SECTION":"februaryText"}],"mayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"May","APP_VERSION":"8_0","SECTION":"mayText"}],"thursdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Thursday","APP_VERSION":"8_0","SECTION":"thursdayText"}],"mondayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Monday","APP_VERSION":"8_0","SECTION":"mondayText"}],"juneAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Jun","APP_VERSION":"8_0","SECTION":"juneAbbrText"}],"marchAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Mar","APP_VERSION":"8_0","SECTION":"marchAbbrText"}],"novemberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"November","APP_VERSION":"8_0","SECTION":"novemberText"}],"octoberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Oct","APP_VERSION":"8_0","SECTION":"octoberAbbrText"}],"aprilAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Apr","APP_VERSION":"8_0","SECTION":"aprilAbbrText"}],"fridayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Friday","APP_VERSION":"8_0","SECTION":"fridayText"}],"saturdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Saturday","APP_VERSION":"8_0","SECTION":"saturdayText"}],"tuesdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Tuesday","APP_VERSION":"8_0","SECTION":"tuesdayText"}],"augustText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"August","APP_VERSION":"8_0","SECTION":"augustText"}],"februaryAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Feb","APP_VERSION":"8_0","SECTION":"februaryAbbrText"}],"marchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"March","APP_VERSION":"8_0","SECTION":"marchText"}],"sundayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sun","APP_VERSION":"8_0","SECTION":"sundayAbbrText"}],"saturdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sat","APP_VERSION":"8_0","SECTION":"saturdayAbbrText"}],"mondayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Mon","APP_VERSION":"8_0","SECTION":"mondayAbbrText"}],"octoberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"October","APP_VERSION":"8_0","SECTION":"octoberText"}],"decemberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Dec","APP_VERSION":"8_0","SECTION":"decemberAbbrText"}],"mayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"May","APP_VERSION":"8_0","SECTION":"mayAbbrText"}],"decemberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"December","APP_VERSION":"8_0","SECTION":"decemberText"}],"januaryAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Jan","APP_VERSION":"8_0","SECTION":"januaryAbbrText"}],"thursdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Thu","APP_VERSION":"8_0","SECTION":"thursdayAbbrText"}],"septemberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sep","APP_VERSION":"8_0","SECTION":"septemberAbbrText"}],"aprilText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"April","APP_VERSION":"8_0","SECTION":"aprilText"}],"novemberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Nov","APP_VERSION":"8_0","SECTION":"novemberAbbrText"}],"januaryText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"January","APP_VERSION":"8_0","SECTION":"januaryText"}],"juneText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"June","APP_VERSION":"8_0","SECTION":"juneText"}],"sundayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sunday","APP_VERSION":"8_0","SECTION":"sundayText"}],"fridayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Fri","APP_VERSION":"8_0","SECTION":"fridayAbbrText"}],"augustAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Aug","APP_VERSION":"8_0","SECTION":"augustAbbrText"}],"wednesdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Wednesday","APP_VERSION":"8_0","SECTION":"wednesdayText"}]},"includes\\vue\\generic\\modal-display.cfm":{"closeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\modal-display.cfm","TEXT":"Close","APP_VERSION":"8_0","SECTION":"closeText"}]},"includes\\vue\\generic\\toggle-favorite.cfm":{"processingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please check back, we are still processing your request.","APP_VERSION":"8_0","SECTION":"processingText"}],"savingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Saving...","APP_VERSION":"8_0","SECTION":"savingText"}],"waitlistModalText2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please confirm you would like to be removed from the waitlist.","APP_VERSION":"8_0","SECTION":"waitlistModalText2"}],"waitlistModalText1":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Removing this session will cause you to lose your position in the waitlist queue.","APP_VERSION":"8_0","SECTION":"waitlistModalText1"}],"addToMyShowPlannerText-session":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Add to My Show Planner","APP_VERSION":"8_0","SECTION":"addToMyShowPlannerText-session"}],"noAccessText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Not Available","APP_VERSION":"8_0","SECTION":"noAccessText"}],"processingModalTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Processing request","APP_VERSION":"8_0","SECTION":"processingModalTitle"}],"reserveModalText1":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"By hitting confirm you are losing your reserved seat in this session. If you choose to add it back, there may not be any seats available. We cannot guarantee you will get your seat back.","APP_VERSION":"8_0","SECTION":"reserveModalText1"}],"removeFromPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Remove From Planner","APP_VERSION":"8_0","SECTION":"removeFromPlannerText"}],"reservedRemoveText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"This session has been removed from your schedule.","APP_VERSION":"8_0","SECTION":"reservedRemoveText"}],"reserveModalText2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please confirm you want to remove this session.","APP_VERSION":"8_0","SECTION":"reserveModalText2"}],"processingModalText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please Wait...","APP_VERSION":"8_0","SECTION":"processingModalText"}],"waitlistRemoveText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Remove from Waitlist","APP_VERSION":"8_0","SECTION":"waitlistRemoveText"}],"confirmModalTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Confirm Request","APP_VERSION":"8_0","SECTION":"confirmModalTitle"}],"noAccessHintText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Your registration does not grant you access to this session.","APP_VERSION":"8_0","SECTION":"noAccessHintText"}],"loginText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Log In Required","APP_VERSION":"8_0","SECTION":"loginText"}],"confirmTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Confirm Change","APP_VERSION":"8_0","SECTION":"confirmTitle"}],"filledText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Session Filled","APP_VERSION":"8_0","SECTION":"filledText"}],"reserveAddText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Add to Schedule","APP_VERSION":"8_0","SECTION":"reserveAddText"}],"confirmText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Confirm","APP_VERSION":"8_0","SECTION":"confirmText"}],"addToMyShowPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Add To My Show Planner","APP_VERSION":"8_0","SECTION":"addToMyShowPlannerText"}],"reserveRemoveText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Remove from Schedule","APP_VERSION":"8_0","SECTION":"reserveRemoveText"}],"cancelText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Cancel","APP_VERSION":"8_0","SECTION":"cancelText"}],"savedToMyShowPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Saved to My Show Planner","APP_VERSION":"8_0","SECTION":"savedToMyShowPlannerText"}],"waitlistAddText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Join Waitlist","APP_VERSION":"8_0","SECTION":"waitlistAddText"}],"filledHintText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"This session does not have any seats available, and the waitlist is currently full.","APP_VERSION":"8_0","SECTION":"filledHintText"}],"loginHintText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please log in to your planner","APP_VERSION":"8_0","SECTION":"loginHintText"}],"appointmentRemoveFromPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Cancel Appointment","APP_VERSION":"8_0","SECTION":"appointmentRemoveFromPlannerText"}],"cancelTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Cancel Change","APP_VERSION":"8_0","SECTION":"cancelTitle"}],"conflictModalText2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"This session time overlaps with another session on your schedule. In order to add this session, the following session(s) will be removed from your schedule:","APP_VERSION":"8_0","SECTION":"conflictModalText2"}],"conflictModalText3":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please confirm you would like to proceed with this update.","APP_VERSION":"8_0","SECTION":"conflictModalText3"}],"updatingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Updating","APP_VERSION":"8_0","SECTION":"updatingText"}],"waitlistRemovedText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"You have been removed from the waitlist.","APP_VERSION":"8_0","SECTION":"waitlistRemovedText"}],"conflictModalText1":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"ALERT: Schedule Conflict","APP_VERSION":"8_0","SECTION":"conflictModalText1"}],"reservedText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Your seat has successfully been reserved.","APP_VERSION":"8_0","SECTION":"reservedText"}],"waitlistText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"You have been added to the waitlist for this session and will automatically be moved to reserved should a seat become available.","APP_VERSION":"8_0","SECTION":"waitlistText"}]},"includes\\vue\\exhibitor\\exh-exhibitorgallery-select-filter-display.cfm":{"filterPlaceholder":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\exhibitor\\exh-exhibitorgallery-select-filter-display.cfm","TEXT":"Show All","APP_VERSION":"8_0","SECTION":"filterPlaceholder"}]},"includes\\vue\\generic\\loading-display.cfm":{"loadingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\loading-display.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingText"}]},"includes\\vue\\generic\\recommendations-modal.cfm":{"closeButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Close","APP_VERSION":"8_0","SECTION":"closeButtonText"}],"recommenendedResultsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Recommended Results","APP_VERSION":"8_0","SECTION":"recommenendedResultsText"}],"dontHaveRecsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"You don't have any recommendations yet. As you browse through the directory recommendations will be made based on your interests.","APP_VERSION":"8_0","SECTION":"dontHaveRecsText"}],"sessionButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Sessions","APP_VERSION":"8_0","SECTION":"sessionButtonText"}],"exhibitorButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"exhibitorButtonText"}],"loadingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingText"}],"topSixRecText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Below are up to the first 6 recommendations for you. To see your entire list and easily add to your planner or dismiss","APP_VERSION":"8_0","SECTION":"topSixRecText"}],"errorLoadingRecommendations":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Error loading recommendations","APP_VERSION":"8_0","SECTION":"errorLoadingRecommendations"}],"dismssText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Dismiss","APP_VERSION":"8_0","SECTION":"dismssText"}],"loginOrCreatePlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Log in or Create a Planner","APP_VERSION":"8_0","SECTION":"loginOrCreatePlannerText"}]},"includes\\vue\\search\\exhibitor-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"tableHeadPlanner"}],"tableHeadBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadLegend":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Legend","APP_VERSION":"8_0","SECTION":"tableHeadLegend"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"All Companies","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"See Results on Floor Plan","APP_VERSION":"8_0","SECTION":"viewOnFloorplan"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"viewAllFeaturedButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"includes\\vue\\generic\\exhibitor-result-tr.cfm":{"seeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\exhibitor-result-tr.cfm","TEXT":"Also Known As","APP_VERSION":"8_0","SECTION":"seeText"}]},"includes\\vue\\generic\\noresults-display.cfm":{"noResultsFoundForText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"No results found for","APP_VERSION":"8_0","SECTION":"noResultsFoundForText"}],"noResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Sorry, No Results Found","APP_VERSION":"8_0","SECTION":"noResults"}],"didNotReturnAnyResultsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"did not return any results","APP_VERSION":"8_0","SECTION":"didNotReturnAnyResultsText"}],"searchSpelledText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Make sure that your search is spelled correctly","APP_VERSION":"8_0","SECTION":"searchSpelledText"}],"suggestionsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Suggestions","APP_VERSION":"8_0","SECTION":"suggestionsText"}],"yourSearchForText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Your search for","APP_VERSION":"8_0","SECTION":"yourSearchForText"}],"tryDifferentSearchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Try a different search","APP_VERSION":"8_0","SECTION":"tryDifferentSearchText"}],"tryGeneralSearchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Try a more general search","APP_VERSION":"8_0","SECTION":"tryGeneralSearchText"}]},"includes\\vue\\generic\\exhibitor-result-list.cfm":{"seeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\exhibitor-result-list.cfm","TEXT":"Also Known As","APP_VERSION":"8_0","SECTION":"seeText"}]},"includes\\vue\\generic\\session-result-card.cfm":{"onDemandLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\session-result-card.cfm","TEXT":"On Demand","APP_VERSION":"8_0","SECTION":"onDemandLabel"}],"moreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\session-result-card.cfm","TEXT":"more","APP_VERSION":"8_0","SECTION":"moreText"}],"regRequiredText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\session-result-card.cfm","TEXT":"Registration Required*","APP_VERSION":"8_0","SECTION":"regRequiredText"}]},"includes\\vue\\generic\\recommendations-widget.cfm":{"okayGotItText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-widget.cfm","TEXT":"Okay, Got it!","APP_VERSION":"8_0","SECTION":"okayGotItText"}]},"includes\\vue\\generic\\exhibitor-result-card.cfm":{"seeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\exhibitor-result-card.cfm","TEXT":"Also Known As","APP_VERSION":"8_0","SECTION":"seeText"}]},"includes\\vue\\generic\\multi-select.cfm":{"deselectGroupLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to deselect group","APP_VERSION":"8_0","SECTION":"deselectGroupLabel"}],"selectLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to select","APP_VERSION":"8_0","SECTION":"selectLabel"}],"selectedLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Selected","APP_VERSION":"8_0","SECTION":"selectedLabel"}],"selectGroupLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to select group","APP_VERSION":"8_0","SECTION":"selectGroupLabel"}],"deselectLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to remove","APP_VERSION":"8_0","SECTION":"deselectLabel"}]}}; } } } });*/ const searchcontent = {"includes\\vue\\search\\featured-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"tableHeadPlanner"}],"tableHeadBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadLegend":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Legend","APP_VERSION":"8_0","SECTION":"tableHeadLegend"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Featured Companies","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"See Results on Floor Plan","APP_VERSION":"8_0","SECTION":"viewOnFloorplan"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"viewAllFeaturedButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\featured-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"includes\\vue\\generic\\backtotop-button.cfm":{"backToTopText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\backtotop-button.cfm","TEXT":"Back to Top","APP_VERSION":"8_0","SECTION":"backToTopText"}]},"includes\\vue\\mixin\\global-mixin.cfm":{"septemberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"September","APP_VERSION":"8_0","SECTION":"septemberText"}],"julyText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"July","APP_VERSION":"8_0","SECTION":"julyText"}],"julyAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Jul","APP_VERSION":"8_0","SECTION":"julyAbbrText"}],"tuesdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Tue","APP_VERSION":"8_0","SECTION":"tuesdayAbbrText"}],"wednesdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Wed","APP_VERSION":"8_0","SECTION":"wednesdayAbbrText"}],"februaryText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"February","APP_VERSION":"8_0","SECTION":"februaryText"}],"mayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"May","APP_VERSION":"8_0","SECTION":"mayText"}],"thursdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Thursday","APP_VERSION":"8_0","SECTION":"thursdayText"}],"mondayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Monday","APP_VERSION":"8_0","SECTION":"mondayText"}],"juneAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Jun","APP_VERSION":"8_0","SECTION":"juneAbbrText"}],"marchAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Mar","APP_VERSION":"8_0","SECTION":"marchAbbrText"}],"novemberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"November","APP_VERSION":"8_0","SECTION":"novemberText"}],"octoberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Oct","APP_VERSION":"8_0","SECTION":"octoberAbbrText"}],"aprilAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Apr","APP_VERSION":"8_0","SECTION":"aprilAbbrText"}],"fridayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Friday","APP_VERSION":"8_0","SECTION":"fridayText"}],"saturdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Saturday","APP_VERSION":"8_0","SECTION":"saturdayText"}],"tuesdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Tuesday","APP_VERSION":"8_0","SECTION":"tuesdayText"}],"augustText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"August","APP_VERSION":"8_0","SECTION":"augustText"}],"februaryAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Feb","APP_VERSION":"8_0","SECTION":"februaryAbbrText"}],"marchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"March","APP_VERSION":"8_0","SECTION":"marchText"}],"sundayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sun","APP_VERSION":"8_0","SECTION":"sundayAbbrText"}],"saturdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sat","APP_VERSION":"8_0","SECTION":"saturdayAbbrText"}],"mondayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Mon","APP_VERSION":"8_0","SECTION":"mondayAbbrText"}],"octoberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"October","APP_VERSION":"8_0","SECTION":"octoberText"}],"decemberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Dec","APP_VERSION":"8_0","SECTION":"decemberAbbrText"}],"mayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"May","APP_VERSION":"8_0","SECTION":"mayAbbrText"}],"decemberText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"December","APP_VERSION":"8_0","SECTION":"decemberText"}],"januaryAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Jan","APP_VERSION":"8_0","SECTION":"januaryAbbrText"}],"thursdayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Thu","APP_VERSION":"8_0","SECTION":"thursdayAbbrText"}],"septemberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sep","APP_VERSION":"8_0","SECTION":"septemberAbbrText"}],"aprilText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"April","APP_VERSION":"8_0","SECTION":"aprilText"}],"novemberAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Nov","APP_VERSION":"8_0","SECTION":"novemberAbbrText"}],"januaryText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"January","APP_VERSION":"8_0","SECTION":"januaryText"}],"juneText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"June","APP_VERSION":"8_0","SECTION":"juneText"}],"sundayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Sunday","APP_VERSION":"8_0","SECTION":"sundayText"}],"fridayAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Fri","APP_VERSION":"8_0","SECTION":"fridayAbbrText"}],"augustAbbrText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Aug","APP_VERSION":"8_0","SECTION":"augustAbbrText"}],"wednesdayText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\mixin\\global-mixin.cfm","TEXT":"Wednesday","APP_VERSION":"8_0","SECTION":"wednesdayText"}]},"includes\\vue\\generic\\modal-display.cfm":{"closeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\modal-display.cfm","TEXT":"Close","APP_VERSION":"8_0","SECTION":"closeText"}]},"includes\\vue\\generic\\toggle-favorite.cfm":{"processingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please check back, we are still processing your request.","APP_VERSION":"8_0","SECTION":"processingText"}],"savingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Saving...","APP_VERSION":"8_0","SECTION":"savingText"}],"waitlistModalText2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please confirm you would like to be removed from the waitlist.","APP_VERSION":"8_0","SECTION":"waitlistModalText2"}],"waitlistModalText1":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Removing this session will cause you to lose your position in the waitlist queue.","APP_VERSION":"8_0","SECTION":"waitlistModalText1"}],"addToMyShowPlannerText-session":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Add to My Show Planner","APP_VERSION":"8_0","SECTION":"addToMyShowPlannerText-session"}],"noAccessText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Not Available","APP_VERSION":"8_0","SECTION":"noAccessText"}],"processingModalTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Processing request","APP_VERSION":"8_0","SECTION":"processingModalTitle"}],"reserveModalText1":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"By hitting confirm you are losing your reserved seat in this session. If you choose to add it back, there may not be any seats available. We cannot guarantee you will get your seat back.","APP_VERSION":"8_0","SECTION":"reserveModalText1"}],"removeFromPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Remove From Planner","APP_VERSION":"8_0","SECTION":"removeFromPlannerText"}],"reservedRemoveText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"This session has been removed from your schedule.","APP_VERSION":"8_0","SECTION":"reservedRemoveText"}],"reserveModalText2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please confirm you want to remove this session.","APP_VERSION":"8_0","SECTION":"reserveModalText2"}],"processingModalText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please Wait...","APP_VERSION":"8_0","SECTION":"processingModalText"}],"waitlistRemoveText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Remove from Waitlist","APP_VERSION":"8_0","SECTION":"waitlistRemoveText"}],"confirmModalTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Confirm Request","APP_VERSION":"8_0","SECTION":"confirmModalTitle"}],"noAccessHintText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Your registration does not grant you access to this session.","APP_VERSION":"8_0","SECTION":"noAccessHintText"}],"loginText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Log In Required","APP_VERSION":"8_0","SECTION":"loginText"}],"confirmTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Confirm Change","APP_VERSION":"8_0","SECTION":"confirmTitle"}],"filledText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Session Filled","APP_VERSION":"8_0","SECTION":"filledText"}],"reserveAddText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Add to Schedule","APP_VERSION":"8_0","SECTION":"reserveAddText"}],"confirmText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Confirm","APP_VERSION":"8_0","SECTION":"confirmText"}],"addToMyShowPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Add To My Show Planner","APP_VERSION":"8_0","SECTION":"addToMyShowPlannerText"}],"reserveRemoveText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Remove from Schedule","APP_VERSION":"8_0","SECTION":"reserveRemoveText"}],"cancelText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Cancel","APP_VERSION":"8_0","SECTION":"cancelText"}],"savedToMyShowPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Saved to My Show Planner","APP_VERSION":"8_0","SECTION":"savedToMyShowPlannerText"}],"waitlistAddText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Join Waitlist","APP_VERSION":"8_0","SECTION":"waitlistAddText"}],"filledHintText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"This session does not have any seats available, and the waitlist is currently full.","APP_VERSION":"8_0","SECTION":"filledHintText"}],"loginHintText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please log in to your planner","APP_VERSION":"8_0","SECTION":"loginHintText"}],"appointmentRemoveFromPlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Cancel Appointment","APP_VERSION":"8_0","SECTION":"appointmentRemoveFromPlannerText"}],"cancelTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Cancel Change","APP_VERSION":"8_0","SECTION":"cancelTitle"}],"conflictModalText2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"This session time overlaps with another session on your schedule. In order to add this session, the following session(s) will be removed from your schedule:","APP_VERSION":"8_0","SECTION":"conflictModalText2"}],"conflictModalText3":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Please confirm you would like to proceed with this update.","APP_VERSION":"8_0","SECTION":"conflictModalText3"}],"updatingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Updating","APP_VERSION":"8_0","SECTION":"updatingText"}],"waitlistRemovedText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"You have been removed from the waitlist.","APP_VERSION":"8_0","SECTION":"waitlistRemovedText"}],"conflictModalText1":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"ALERT: Schedule Conflict","APP_VERSION":"8_0","SECTION":"conflictModalText1"}],"reservedText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"Your seat has successfully been reserved.","APP_VERSION":"8_0","SECTION":"reservedText"}],"waitlistText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\toggle-favorite.cfm","TEXT":"You have been added to the waitlist for this session and will automatically be moved to reserved should a seat become available.","APP_VERSION":"8_0","SECTION":"waitlistText"}]},"includes\\vue\\exhibitor\\exh-exhibitorgallery-select-filter-display.cfm":{"filterPlaceholder":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\exhibitor\\exh-exhibitorgallery-select-filter-display.cfm","TEXT":"Show All","APP_VERSION":"8_0","SECTION":"filterPlaceholder"}]},"includes\\vue\\generic\\loading-display.cfm":{"loadingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\loading-display.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingText"}]},"includes\\vue\\generic\\recommendations-modal.cfm":{"closeButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Close","APP_VERSION":"8_0","SECTION":"closeButtonText"}],"recommenendedResultsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Recommended Results","APP_VERSION":"8_0","SECTION":"recommenendedResultsText"}],"dontHaveRecsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"You don't have any recommendations yet. As you browse through the directory recommendations will be made based on your interests.","APP_VERSION":"8_0","SECTION":"dontHaveRecsText"}],"sessionButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Sessions","APP_VERSION":"8_0","SECTION":"sessionButtonText"}],"exhibitorButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"exhibitorButtonText"}],"loadingText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingText"}],"topSixRecText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Below are up to the first 6 recommendations for you. To see your entire list and easily add to your planner or dismiss","APP_VERSION":"8_0","SECTION":"topSixRecText"}],"errorLoadingRecommendations":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Error loading recommendations","APP_VERSION":"8_0","SECTION":"errorLoadingRecommendations"}],"dismssText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Dismiss","APP_VERSION":"8_0","SECTION":"dismssText"}],"loginOrCreatePlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-modal.cfm","TEXT":"Log in or Create a Planner","APP_VERSION":"8_0","SECTION":"loginOrCreatePlannerText"}]},"includes\\vue\\search\\exhibitor-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"tableHeadPlanner"}],"tableHeadBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadLegend":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Legend","APP_VERSION":"8_0","SECTION":"tableHeadLegend"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"All Companies","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"See Results on Floor Plan","APP_VERSION":"8_0","SECTION":"viewOnFloorplan"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"viewAllFeaturedButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\exhibitor-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"includes\\vue\\generic\\exhibitor-result-tr.cfm":{"seeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\exhibitor-result-tr.cfm","TEXT":"Also Known As","APP_VERSION":"8_0","SECTION":"seeText"}]},"includes\\vue\\generic\\noresults-display.cfm":{"noResultsFoundForText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"No results found for","APP_VERSION":"8_0","SECTION":"noResultsFoundForText"}],"noResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Sorry, No Results Found","APP_VERSION":"8_0","SECTION":"noResults"}],"didNotReturnAnyResultsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"did not return any results","APP_VERSION":"8_0","SECTION":"didNotReturnAnyResultsText"}],"searchSpelledText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Make sure that your search is spelled correctly","APP_VERSION":"8_0","SECTION":"searchSpelledText"}],"suggestionsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Suggestions","APP_VERSION":"8_0","SECTION":"suggestionsText"}],"yourSearchForText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Your search for","APP_VERSION":"8_0","SECTION":"yourSearchForText"}],"tryDifferentSearchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Try a different search","APP_VERSION":"8_0","SECTION":"tryDifferentSearchText"}],"tryGeneralSearchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\noresults-display.cfm","TEXT":"Try a more general search","APP_VERSION":"8_0","SECTION":"tryGeneralSearchText"}]},"includes\\vue\\generic\\exhibitor-result-list.cfm":{"seeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\exhibitor-result-list.cfm","TEXT":"Also Known As","APP_VERSION":"8_0","SECTION":"seeText"}]},"includes\\vue\\generic\\session-result-card.cfm":{"onDemandLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\session-result-card.cfm","TEXT":"On Demand","APP_VERSION":"8_0","SECTION":"onDemandLabel"}],"moreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\session-result-card.cfm","TEXT":"more","APP_VERSION":"8_0","SECTION":"moreText"}],"regRequiredText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\session-result-card.cfm","TEXT":"Registration Required*","APP_VERSION":"8_0","SECTION":"regRequiredText"}]},"includes\\vue\\generic\\recommendations-widget.cfm":{"okayGotItText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\recommendations-widget.cfm","TEXT":"Okay, Got it!","APP_VERSION":"8_0","SECTION":"okayGotItText"}]},"includes\\vue\\generic\\exhibitor-result-card.cfm":{"seeText":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\exhibitor-result-card.cfm","TEXT":"Also Known As","APP_VERSION":"8_0","SECTION":"seeText"}]},"includes\\vue\\generic\\multi-select.cfm":{"deselectGroupLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to deselect group","APP_VERSION":"8_0","SECTION":"deselectGroupLabel"}],"selectLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to select","APP_VERSION":"8_0","SECTION":"selectLabel"}],"selectedLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Selected","APP_VERSION":"8_0","SECTION":"selectedLabel"}],"selectGroupLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to select group","APP_VERSION":"8_0","SECTION":"selectGroupLabel"}],"deselectLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\multi-select.cfm","TEXT":"Press enter to remove","APP_VERSION":"8_0","SECTION":"deselectLabel"}]}}; ; </script> </head> <body class="l-wrapper theme_2" > <header class="mys-directory-header l-header" id="js-navigation"> <div class="center mw9"> <a href="http://www.satshow.com/"> <img class="db center tc o-show_header" src="/mys_shared/SATELLITE2025/showfiles/imgs/SATELLITE2025_IDS_header.jpg?breakcache=BEDDCB59-A27B-4149-C09E2EB5E54E5669" srcset="/mys_shared/SATELLITE2025/showfiles/imgs/SATELLITE2025_IDS_header@2x.jpg?breakcache=BEDDCB5A-C13B-3CCF-5A1818E9031B5F57 2x" alt="SATELLITE 2025 logo"> </a> </div> </header> <script> var fixElementMixin = { data: function(){ return { isFixed: false, elementToFixHeight: null, fixOnScrollObserver: null } }, methods: { getElementToFix: function(element, extraTopOffset){ var elementToFixOffsetTop = this.getElementOffset(element).topRelative; if (extraTopOffset) { elementToFixOffsetTop = elementToFixOffsetTop + extraTopOffset; } return elementToFixOffsetTop; }, fixElement: function(elementOffset){ if (window.pageYOffset > elementOffset) { this.isFixed = true; } else { this.isFixed = false; } }, fixElementOnScrollTrackObserver: function(primaryReferenceElement, backupReferenceElement){ var vObj = this, primaryElement = document.querySelector(primaryReferenceElement) || document.querySelector('.l-nav'), backupElement = document.querySelector(backupReferenceElement); vObj.fixOnScrollObserver = new IntersectionObserver(function (entries, observer) { if (entries[0].isIntersecting) { vObj.isFixed = false; } else { vObj.isFixed = true; } }); vObj.fixOnScrollObserver.observe(primaryElement || backupElement); }, destroyScrollObserver: function(){ if (this.fixOnScrollObserver){ this.fixOnScrollObserver.disconnect(); this.fixOnScrollObserver = null } } } }; </script> <script> var scrollHighlightMixin = { mixins: [fixElementMixin], data: function(){ return { scrolledToSection: '' } }, methods: { getElementsToScrollTrack: function(highlightElement, trackingElements, extraOffsetValue){ var extraOffsetValueFromParameter; if (typeof extraOffsetValue !== 'undefined' && typeof extraOffsetValue == 'number') { extraOffsetValueFromParameter = extraOffsetValue; } else { extraOffsetValueFromParameter = 0; } var elementOne = document.querySelector(highlightElement), elementTwo = document.querySelectorAll(trackingElements), elementsToScrollTrack = { highlightElement: elementOne, trackingElements: elementTwo, extraOffsetValue: extraOffsetValueFromParameter }; this.highlightSectionsOnScroll(elementsToScrollTrack); }, highlightSectionsOnScroll: function(trackElements){ var windowOffset = window.pageYOffset, currentElementID, divPos, divHeight, divID, highlightedAnchors; for (var i = 0; i < trackElements.trackingElements.length; i++) { currentElementID = trackElements.trackingElements[i], divPos = currentElementID.offsetTop + trackElements.extraOffsetValue, divHeight = currentElementID.clientHeight, divID = trackElements.trackingElements[i].id; if (windowOffset >= divPos && windowOffset < divPos + divHeight) { highlightedAnchors = document.querySelectorAll("a[href='" + divID + "']"); highlightedAnchors.forEach(function(element) { element.classList.add('is-selected'); }); this.scrolledToSection = divID; } else { highlightedAnchors = document.querySelectorAll("a[href='" + divID + "']"); highlightedAnchors.forEach(function(element) { element.classList.remove('is-selected'); }); this.scrolledToSection = ''; } } }, highlightSectionsOnScrollObserver: function(ElementsToHighlight, ElementsToTrack, highlightIoOverrides){ var scrollElementsToHighlight = document.querySelectorAll(ElementsToHighlight), scrollElementsToTrack = document.querySelectorAll(ElementsToTrack), highlightOnScrollConfigDefaults = { root: null, rootMargin: '0px 0px -97% 0px', threshold: 0 }, highlightOnScrollConfigUpdatedSettings = Object.assign({}, highlightOnScrollConfigDefaults, highlightIoOverrides); var highLightScrollObserver = new IntersectionObserver(function (entries, observer){ entries.forEach(function (entry){ if (entry.isIntersecting){ intersectionHandler(entry); } }); }, highlightOnScrollConfigUpdatedSettings); scrollElementsToTrack.forEach(function (element){ highLightScrollObserver.observe(element); }); function intersectionHandler(entry){ var id = entry.target.id, currentlyActive = document.querySelector(ElementsToHighlight + '.is-selected'), shouldBeActive = document.querySelector(ElementsToHighlight + '[href=' + id + ']'); if (currentlyActive) { currentlyActive.classList.remove('is-selected'); } if (shouldBeActive) { shouldBeActive.classList.add('is-selected'); } } } } }; </script> <script type="text/x-template" id="error-template"> <div v-if="showmessage && animationClass" v-bind:class="[alertclass, animationClass, 'o-Alert', 'animated']" v-bind:style="{ zIndex: zindex }" v-cloak> <div class="center mw9 flex justify-between items-center"> <div class="mb0 center" v-for="(e, index) in messages"> <span v-html="e"></span> </div> <a href="" class="bb-0 pa1 ml2" @click.prevent="closeDisplay()" title="Close this message"> <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true"><path fill="#000" fill-rule="nonzero" d="M23.954 21.03l-9.184-9.095 9.092-9.174L21.03-.046l-9.09 9.179L2.764.045l-2.81 2.81L9.14 11.96.045 21.144l2.81 2.81 9.112-9.192 9.18 9.1z"/></svg> </a> </div> </div></script> <script> var MessageDisplay = Vue.component('message-display', { template:"#error-template", props: { showmessage:{ type: Boolean, default: false }, messages: { type: Array, default: [] }, type:{ type:String, default: "info" // warning, info, error, or success }, timeout:{ type: Number, default: 20 } }, data: function(){ return { hidemessage: null, alertclass: "o-Alert_Info", headertext: "", zindex: 9999, dateseed: 0, timeoutid: null } }, created: function(){ this.dateseed = Vue.MYS.getShowDateTime().getTime(); }, watch:{ stuff: function(e){ var vObj = this; if (vObj.hidemessage == false){ vObj.hidemessage = true; } setTimeout(function(){ vObj.hidemessage = false; vObj.zindex = 10000 + Vue.MYS.getShowDateTime().getTime() - vObj.dateseed; if (vObj.timeoutid){ clearTimeout(vObj.timeoutid); } switch(vObj.type){ case "warning": vObj.alertclass = "o-Alert_Warning"; vObj.headertext = "Warning"; break; case "info": vObj.alertclass = "o-Alert_Info"; vObj.headertext = "Note"; break; case "error": vObj.alertclass = "o-Alert_Error"; vObj.headertext = "Error"; break; case "success": vObj.alertclass = "o-Alert_Success"; vObj.headertext = "Success"; break; default: vObj.alertclass = "o-Alert_Info"; vObj.headertext = ""; break; } if (e){ vObj.timeoutid = setTimeout(function(){ vObj.hidemessage = true; }, vObj.timeout * 1000); } }, 500); } }, computed: { stuff: function(){ return { showmessage: this.showmessage, messages: this.messages, type: this.type } }, animationClass: function(){ if (this.hidemessage == true){ return 'fadeOutUp'; } else if (this.hidemessage == false){ return 'fadeInDown'; } else { return ''; } } }, methods: { closeDisplay:function(){ this.hidemessage = true; } } }); // this is a helper mixin to assist with display and ssuch var messagedisplayMixin = { data: function() { return { messagetype: "", messages: [], showmessage: false }; }, methods: { showMessage: function(type, msg){ this.messagetype = type; if (msg.constructor === Array){ this.messages = []; this.messages.push.apply(this.messages,msg); } else { this.messages = []; this.messages.push(msg); } this.showmessage = true; } } }; </script> <style> .slide-fade-enter-active { transition: all .3s ease; } .slide-fade-leave-active { /* transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);*/ transition: all .3s ease; } .slide-fade-enter, .slide-fade-leave-to /* .slide-fade-leave-active below version 2.1.8 */ { transform: translateX(10px); opacity: 0; } </style> <script type="text/x-template" id="recommendations-widget-template"> <a class="dim dib bb-0 b" href="#" aria-label="View your recommendations" v-if="recommendationsactive" v-on:click.stop.prevent="handleClick();" v-bind="getBindings()"> <svg width="22" height="25" xmlns="http://www.w3.org/2000/svg" class="o-bell_icon ml2"><path d="M17.667 8.3a6.87 6.87 0 0 0-1.953-4.808A6.6 6.6 0 0 0 11 1.5a6.601 6.601 0 0 0-4.714 1.992A6.87 6.87 0 0 0 4.333 8.3C4.333 16.233 1 18.5 1 18.5h20s-3.333-2.267-3.333-10.2ZM13 22.5a2.186 2.186 0 0 1-.846.732A2.588 2.588 0 0 1 11 23.5c-.405 0-.803-.092-1.154-.268A2.186 2.186 0 0 1 9 22.5" fill="transparent" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> <transition enter-active-class="animated pulse" leave-active-class="animated pulse"> <div v-if="hasnewrecommendations" class="token-recommendation absolute bg-accent ba b--white dib"></div> </transition> </a></script> <script> var RecommendationsWidget = Vue.component('recommendations-widget', { template:"#recommendations-widget-template", props: { rectype:{ default: "exhibitor", type: String }, id:{ default: "", type: String }, firsttimemessage:{ default: "", type: String }, secondtimemessage: { default: "", type: String }, useraction: { default: "", type: String }, actionvalue: { default: "", type: String }, maxuserinterestactions: { default: 100, type: Number }, isloggedinmyshow: { default: false, type: Boolean } }, mixins: [], data: function(){ return { compincludepath: "includes/vue/generic/recommendations-widget.cfm", showModal: false, hasnewrecommendations: false, userinterests: [], intro: null, // was {} modalstatus: "", getBindingsReturnObj: {} } }, computed: { content: function(){ return { okayGotItText: this.displaycontent(this.compincludepath, 'okayGotItText') } } }, mounted: function(){ var vObj = this; if (document.body.classList.contains('recommendation-tooltip-isopen')) { document.body.classList.remove('recommendation-tooltip-isopen'); } if (vObj.hasLocalStorage() && (vObj.firsttimemessage || vObj.secondtimemessage)){ var recommendationsFirstMessageShown = localStorage.getItem('vts_recommendation_first_message_shown') == 'true', recommendationsSecondMessageShown = localStorage.getItem('vts_recommendation_second_message_shown') == 'true'; if (!recommendationsFirstMessageShown && !recommendationsSecondMessageShown){ this.modalstatus = "firsttime"; } else if (recommendationsFirstMessageShown && !recommendationsSecondMessageShown){ this.modalstatus = "secondtime"; } else { this.modalstatus = "none"; } // add to user's session vObj.intro = introJs(); // check if user is using a browser with session storage, if so log and get their recs if (vObj.hasLocalStorage()){ if (localStorage.getItem("userinterests")){ vObj.userinterests = JSON.parse(localStorage.getItem("userinterests")); } if (vObj.userinterests.length > 0){ setTimeout(function(){ vObj.hasnewrecommendations = true; }, 1500); } if (localStorage.getItem("hasnewrecommendations")){ // vObj.hasnewrecommendations = (localStorage.getItem("hasnewrecommendations") === 'true'); } if (vObj.actionvalue.length > 0 && vObj.useraction.length > 0){ // https://stackoverflow.com/questions/24812930/how-to-remove-element-from-array-in-foreach-loop /*vObj.userinterests.slice().reverse().forEach(function(item, index, obj){ if (item.useraction === useraction && item.actionvalue === actionvalue){ vObj.userinterests.splice(obj.length - 1 - index, 1); } });*/ var recObj = { useraction: vObj.useraction, actionvalue: vObj.actionvalue, actiondate: new Date() }; vObj.userinterests.unshift(recObj); // vObj.hasnewrecommendations = true; // now keep top x recs in session vObj.userinterests.slice(0, vObj.maxuserinterestactions); localStorage.setItem("userinterests", JSON.stringify(vObj.userinterests)); localStorage.setItem("hasnewrecommendations", true); } } //run IntroJS tip vObj.$nextTick(function(){ setTimeout(function(){ vObj.startRecommendationTip(); }, 500); }); } }, beforeDestroy: function() { var vObj = this; if (vObj.intro) { vObj.intro.exit(); } }, methods: { getBindings: function(){ var vObj = this; if (vObj.modalstatus == "firsttime" && vObj.firsttimemessage){ vObj.getBindingsReturnObj["data-intro"] = vObj.firsttimemessage; vObj.getBindingsReturnObj["id"]= vObj.id; } else if (vObj.modalstatus == "secondtime" && vObj.secondtimemessage){ vObj.getBindingsReturnObj["data-intro"] = vObj.secondtimemessage; vObj.getBindingsReturnObj["id"]= vObj.id; } return vObj.getBindingsReturnObj; }, handleClick: function(){ if (typeof this.intro === 'function') { this.intro.exit(); } if (this.isloggedinmyshow){ window.location.href = this.path2approot + "/myshow/?s=recommendations"; } else { this.openModal(); } }, openModal: function(){ var vObj = this, requestArray = []; vObj.showModal = true; // vObj.hasnewrecommendations = false; this.$emit("open-modal"); return true; }, startRecommendationTip: function(){ var vObj = this, recommendationsFirstMessageShown = localStorage.getItem('vts_recommendation_first_message_shown') == 'true', recommendationsSecondMessageShown = localStorage.getItem('vts_recommendation_second_message_shown') == 'true'; if (recommendationsFirstMessageShown && recommendationsSecondMessageShown || vObj.userinterests.length < 1){ return; } else if (recommendationsFirstMessageShown && !recommendationsSecondMessageShown && vObj.userinterests.length < 6){ return; } vObj.intro.setOptions({ showBullets: false, exitOnOverlayClick: false, doneLabel: vObj.content.okayGotItText, tooltipClass: "is-introjs", showStepNumbers: false }); if (!document.body.classList.contains('recommendation-tooltip-isopen')) { document.body.classList.add('recommendation-tooltip-isopen'); } vObj.intro.start(); if (vObj.getBindingsReturnObj["data-intro"] == vObj.firsttimemessage){ vObj.intro.oncomplete(function(){ if (document.body.classList.contains('recommendation-tooltip-isopen')) { document.body.classList.remove('recommendation-tooltip-isopen'); } localStorage.setItem('vts_recommendation_first_message_shown', 'true'); }); vObj.intro.onexit(function(){ if (document.body.classList.contains('recommendation-tooltip-isopen')) { document.body.classList.remove('recommendation-tooltip-isopen'); } localStorage.setItem('vts_recommendation_first_message_shown', 'true'); }); } else if (vObj.getBindingsReturnObj["data-intro"] == vObj.secondtimemessage) { vObj.intro.oncomplete(function(){ if (document.body.classList.contains('recommendation-tooltip-isopen')) { document.body.classList.remove('recommendation-tooltip-isopen'); } localStorage.setItem('vts_recommendation_second_message_shown', 'true'); }); vObj.intro.onexit(function(){ if (document.body.classList.contains('recommendation-tooltip-isopen')) { document.body.classList.remove('recommendation-tooltip-isopen'); } localStorage.setItem('vts_recommendation_second_message_shown', 'true'); }); } } } }); </script> <script> /* Set global variable to determine printing state to adjust necesessary styles, such as removing IntersectionObserver() so content is rendered when printing */ window.idsIsPrinting = false; window.addEventListener('beforeprint', function(){ window.idsIsPrinting = true; }); window.addEventListener('afterprint', function(){ window.idsIsPrinting = false; }); </script> <script> var VueMYS = {}; VueMYS.install = function(Vue, options){ Vue.MYS = {}; Vue.MYS.exhibitorTags = [{"color":"bg-color-brand-09","title":"Products"},{"color":"bg-color-accent-05","title":"Press Releases"},{"color":"bg-light-silver","title":"Business Cards"}]; Vue.MYS.trackcss = {}; Vue.MYS.isValidURL = function(str){ // https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address '(\\:\\d+)?(\\/[-a-z\\d#%_.~+]*)*'+ // port and path '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string '(\\#[-a-z\\d_]*)?$','i'); // fragment locator return !!pattern.test(str); }; Vue.MYS.productsVoting = []; Vue.MYS.settingsConfig = {"timesettings":{"timezonelabel":"Eastern Time (US & Canada)","showtimezone":false},"spotlightsettings":{"spotlightcount":3},"exhibitorsettings":{"sendemail":[]},"numconcurrentmeetings":5,"schedulepage":{"topsection":"disabled","rotatetop":[],"searchtypes":["Sessions","Guest Appearances"],"days":7,"topdisplay":"date","rotatetime":7,"happeningtoday":"daily","hours":2,"livestreamoption":"youtube","sessions":{"display":"freetext","secondaryfilter":"disabled","texten":"Sessions"},"guestappearances":{"display":"freetext","secondaryfilter":"disabled","texten":"Exhibitor Scheduled Event"},"homepage":false,"liveevents":{"display":"freetext","secondaryfilter":"disabled","texten":"Exhibitor Interactive Demo"},"restricttop":[]},"alertsettings":{"liveeventalerts":"none","sessionalerts":"none"},"sessionsettings":{},"searchsettings":{"hidechildsessions":false,"hideoriginaltimes":false,"defaultsearchview":"grid","hidesessionlocations":false,"hidesessiontimes":false,"myshowincludesessionexhibitors":false,"hideallresults":true}}; Vue.MYS.useExhSubVersion3 = false; Vue.MYS.useExhSubVersion2 = true; Vue.MYS.exhSubVersion = 02; Vue.MYS.sessionSubVersion = 02; Vue.MYS.validRooms = []; Vue.MYS.validHalls = ["A"]; Vue.MYS.altregid = ""; Vue.MYS.regtype = ""; Vue.MYS.genericKey = "production/satellite2025"; Vue.MYS.seatrestriction = false; Vue.MYS.allowedschedules = []; Vue.MYS.lockdown = false; Vue.MYS.getTimezoneDisplay = function(){ if ("timesettings" in Vue.MYS.settingsConfig && "showtimezone" in Vue.MYS.settingsConfig.timesettings && Vue.MYS.settingsConfig.timesettings.showtimezone) { if ("timezonelabelen" in Vue.MYS.settingsConfig.timesettings) { return Vue.MYS.settingsConfig.timesettings["timezonelabelen"]; } else { return ""; } } else { return ""; } }; Vue.MYS.getActiveVotingRound = function(showtime){ return false; }; Vue.MYS.getShowDateTime = function(){ var dt = new Date(); var returnDate = new Date(dt.getTime() + Vue.MYS.compareToShowDate(dt)); return returnDate; }; Vue.MYS.compareToShowDate = function(datetocompare) { // Get the current date for the user, JS gets the date in the user's time zone var currentdate = new Date(); // Get the offset for the current user based on where they are and add it back in. This will calculate their time in UTC time // currentdate.getTimezoneOffset() will return how far off the user is from UTC time // Add in the show's offset and that will calculate the user's time from UTC in the show's timezone // this.timezoneoffset will be the show's offset value var currentdateinshowtimezone = new Date(currentdate.getTime() + (-300 + currentdate.getTimezoneOffset()) * 60000); var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; var isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/); var getVersion = navigator.userAgent.replace(/(.*)Version\//,"") var version = getVersion.substr(0, getVersion.indexOf(" ")); if((isSafari && parseFloat(version) < 14) || (isIOS && (window.navigator.userAgent.search('OS 13') > -1 || window.navigator.userAgent.search('OS X 10') > -1 || window.navigator.userAgent.search('OS 12') > -1 || window.navigator.userAgent.search('OS 11') > -1))) { var datetocompare = new Date(datetocompare.getTime() + (datetocompare.getTimezoneOffset() * 60000)); } return currentdateinshowtimezone.getTime() - datetocompare.getTime(); }; Vue.MYS.isAjaxSuccess = function(response){ if ("SUCCESS" in response && response.SUCCESS){ return true; } else { return false; } }; Vue.MYS.getAjaxErrors = function(response){ if ("ERRORS" in response && response.ERRORS.length > 0) { return response.ERRORS; } else { return response; } }; Vue.MYS.ajaxPost = function(url, formData, successCallback, errorCallback, keepalive){ keepalive = typeof keepalive !== 'undefined' ? keepalive : false; fetch(url, { method: "POST", body: formData, headers: { "X-Requested-With": "XMLHttpRequest" }, credentials:'include', redirect: "manual", keepalive: keepalive }) .then(function(fetchResponse) { fetchResponse.json() .then(function(response){ if (Vue.MYS.isAjaxSuccess(response)){ successCallback(response); } else { errorCallback(response); } }) .catch(function(error){ errorCallback(error); }); }) .catch(function (error) { console.log(error); errorCallback(error); }); }; Vue.MYS.formatSpeakerName = function(result, keynote) { var speakerName = Vue.MYS.settingsConfig.searchsettings.speakernamedisplay; if(keynote) { var replacements = { PREFIX: result.prefix || '', SUFFIX: result.suffix || '', FIRSTNAME: result.firstname || '', LASTNAME: result.lastname || '', MIDDLENAME: result.middlename || '', }; } else { var replacements = { PREFIX: result.fields.speakerprefix_t || '', SUFFIX: result.fields.speakersuffix_t || '', FIRSTNAME: result.fields.speakerfname_t || '', LASTNAME: result.fields.speakerlname_t || '', MIDDLENAME: result.fields.speakermname_t || '', }; } for (var [key, value] of Object.entries(replacements)) { if((key == 'SUFFIX' || key == 'LASTNAME') && value.length == 0) { speakerName = speakerName.replaceAll(`[${key}],`, ''); if(key == 'SUFFIX') { speakerName = speakerName.replaceAll(`[LASTNAME],`, '[LASTNAME]'); } } speakerName = speakerName.replaceAll(`[${key}]`, value); } return speakerName.trim(); }; Vue.MYS.sendBeacon = function(url, data) { if (navigator.sendBeacon){ navigator.sendBeacon(url, data); } else { Vue.MYS.ajaxPost(url, data, function(){ /* do nothing */ }, function(){ /* do nothing */ }); } }; Vue.MYS.getServerlessURL = function(s3bucket, s3key, width, height, fit) { var returnurl = "https://d3fv3oe83qat1b.cloudfront.net/"; var sharpparams = {}; sharpparams["bucket"] = s3bucket; sharpparams["key"] = s3key; sharpparams["edits"] = { resize: { width: width, height: height, fit: fit || "contain", quality:"70" } }; returnurl += btoa(JSON.stringify(sharpparams)); return returnurl; }; Vue.MYS.environment = 'production'; }; Vue.use(VueMYS); </script> <script> // https://stackoverflow.com/questions/36170425/detect-click-outside-element Vue.directive('click-outside', { bind: function (el, binding, vnode) { el.clickOutsideEvent = function (event) { // here I check that click was outside the el and his childrens if (!(el == event.target || el.contains(event.target))) { // and if it did, call method provided in attribute value vnode.context[binding.expression](event); } }; document.body.addEventListener('click', el.clickOutsideEvent) }, unbind: function (el) { document.body.removeEventListener('click', el.clickOutsideEvent) }, }); // global mixin Vue.mixin({ data: function() { return { get hasmyshow(){ return true; }, get globalcompincludepath(){ return "includes/vue/mixin/global-mixin.cfm"; }, get hasvalidation() { return true; }, get validated() { return false; }, get showid() { return "SATELLITE2025"; }, get showidlowercase() { return ("SATELLITE2025").toLowerCase(); }, get thispageurl(){ var temppath = "/8_0/explore/exhibitor-gallery.cfm" + '?featured\x3Dfalse'; if (temppath === this.path2approot + '/index.cfm'){ return this.path2approot } else { return temppath; } }, get path2approot(){ return "/8_0" }, get httphost(){ return "https://satellite2025.mapyourshow.com" }, get exhibitorrecommendationstatus(){ return "A" }, get sessionrecommendationstatus(){ return "I" }, get regemail(){ return "" }, get availableforchat() { return false }, get hasattendeechat() { return false }, get hasexhibitorchat() { return false }, get hassessiongroupchat() { return true }, get isexhibitor() { return false }, get showbooths(){ return true }, get maxshowbooths(){ return 3 }, get requireboothsfordisplay(){ return false }, get speakernamedisplay(){ return false }, get modules(){ return ["ExhChecklist","Exhibitors","Floorplan","groups","Sessions","Surveying"] }, get hasexhicons(){ return true }, get hasnetworking(){ return false }, get legendcontent(){ return {"COLUMNS":["ICONID","ICONFILE","DISPLAYID","TYPE","COLUMNNAME","DATESTART","DAYSPAN","DISPLAYTEXT","USEFORNEWEXHIBITORFILTER","USEFORGREENFILTER"],"DATA":[[1,"/mys_shared/SATELLITE2025/showfiles/exhicons/Exhibitor.png",103714,"bit","newexhibitor",null,null,"New Exhibitor",true,false],[2,"/mys_shared/SATELLITE2025/showfiles/exhicons/Sponsor.png",127138,"bit","issponsor",null,null,"Sponsor",false,false],[3,"/mys_shared/SATELLITE2025/showfiles/exhicons/GovMilSpace.png",194672,"bit","govmilspace",null,null,"GovMilSpace Exhibitor",false,false],[4,"/mys_shared/SATELLITE2025/showfiles/exhicons/Startup_Pavilion.png",194673,"bit","startup",null,null,"Startup Pavilion",false,false]]} }, get floorplanactive(){ return true }, get advancedsearchmaxparameters(){ return 10 }, get hassessionconferences(){ return false }, get showsessionconferences(){ return false }, get usefriendlyexhibitorurl(){ return false }, get virtualtradeshow() { return false; }, get timezoneoffset() { return -300; }, get httpreferer() { return ""; } } }, computed:{ exhibitorrecommendationsactive: function(){ var hasExhModule = false; for (var i = 0 ; i < this.modules.length; i++){ if (this.modules[i] == "Exhibitors"){ hasExhModule = true; break; } } return (this.exhibitorrecommendationstatus != "I" && this.exhibitorrecommendationstatus != "X" && hasExhModule) ? true : false; }, sessionrecommendationsactive: function(){ var hasSessModule = false; for (var i = 0 ; i < this.modules.length; i++){ if ((this.modules[i] == "Sessions") || (this.modules[i] == "Conferences")){ hasSessModule = true; } } return (this.sessionrecommendationstatus != "I" && this.sessionrecommendationstatus != "X" && hasSessModule) ? true : false; }, recommendationsactive: function(){ return this.exhibitorrecommendationsactive || this.sessionrecommendationsactive; }, globalcontent: function(){ return this.getContentObject(this.globalcompincludepath); } }, methods: { // this is a function to check if one of the MYS formatted ajax responses is a valid one isAjaxSuccess: function(response){ if ("SUCCESS" in response && response.SUCCESS){ return true; } else { return false; } }, getAjaxErrors: function(response){ if ("ERRORS" in response && response.ERRORS.length > 0) { return response.ERRORS; } else { return response; } }, ajaxGet: function(url, successCallback, errorCallback){ var vObj = this; const controller = new AbortController(); setTimeout(() => controller.abort(), 60000); fetch(url, { headers: {"X-Requested-With": "XMLHttpRequest", "cache-control":"no-cache", "pragma":"no-cache"}, credentials:'include', cache: "no-store", signal: controller.signal }) .then(function(fetchResponse) { fetchResponse.json() .then(function(response){ if (vObj.isAjaxSuccess(response)){ successCallback(response); } else { errorCallback(response); } }) .catch(function(error){ console.log(error); errorCallback(error); }); }) .catch(function (error) { console.log(error); errorCallback(error); }); }, ajaxJsonPost: function(url, jsonString, successCallback, errorCallback){ var vObj = this; const controller = new AbortController(); setTimeout(() => controller.abort(), 60000); fetch(url, { method: "POST", body: jsonString, headers: { "Content-Type": "application/json; charset=utf-8", "X-Requested-With": "XMLHttpRequest" }, credentials:'include', signal: controller.signal }) .then(function(fetchResponse) { fetchResponse.json().then(function(response){ if (vObj.isAjaxSuccess(response)){ successCallback(response); } else { errorCallback(response); } }); }) .catch(function (error) { console.log(error); errorCallback(error); }); }, ajaxPost: function(url, formData, successCallback, errorCallback){ var vObj = this; const controller = new AbortController(); setTimeout(() => controller.abort(), 60000); fetch(url, { method: "POST", body: formData, headers: { "X-Requested-With": "XMLHttpRequest" }, credentials:'include', signal: controller.signal }) .then(function(fetchResponse) { fetchResponse.json().then(function(response){ if (vObj.isAjaxSuccess(response)){ successCallback(response); } else { errorCallback(response); } }); }) .catch(function (error) { console.log(error); errorCallback(error); }); }, getCurrentURL: function(){ return window.location.href.replace(this.httphost, ""); }, displayLogoURL: function(logo){ if (typeof logo !== 'undefined') { return '/mys_shared/' + this.showid + '/logos/' + logo; } else { return ""; } }, displayBannerURL: function(mediafile){ if (typeof mediafile !== 'undefined') { return '/mys_shared/' + this.showid + '/banners/' + mediafile; } else { return ""; } }, goToURL: function(url, newtab){ if(newtab && url) { window.open(url, '_blank'); } else if (url){ window.location = url; } }, displaySearchURL: function(searchtype, search, show){ if (searchtype && search){ return this.httphost + this.path2approot + "/#/searchtype/" + encodeURI(searchtype) + "/search/" + encodeURI(search) + "/show/" + encodeURI(show); } else { return ""; } }, createSummary: function(htmldescription, maxLength){ var text = htmldescription; if (!text || typeof text !== 'string'){ text = ""; } else { // https://stackoverflow.com/questions/45816265/remove-style-tags-globally-using-regex-in-javascript text = text.replace( /((<style>)|(<style type=.+))((\s+)|(\S+)|(\r+)|(\n+))(.+)((\s+)|(\S+)|(\r+)|(\n+))(<\/style>)/g,''); var doc = new DOMParser().parseFromString(text, 'text/html'); text = doc.body.textContent || ""; } if (text && text.length > maxLength){ text = text.substring(0, maxLength) + "..."; } return text; }, scrollToTop: function(){ if (typeof VueScrollTo !== 'undefined' && "scrollTo" in VueScrollTo){ VueScrollTo.scrollTo('#jq-keywordSearchForm'); } }, getScrollPosition: function(){ return window.scrollY || window.scrollTop || document.getElementsByTagName("html")[0].scrollTop; }, saveScrollPosition: function(){ var scrollPos = this.getScrollPosition(); var scrollURL = this.getCurrentURL(); if (this.hasSessionStorage()){ sessionStorage.setItem("scrollPosition", scrollPos); sessionStorage.setItem("scrollURL", scrollURL); } }, storageAvailable: function(type) { try { var storage = window[type], x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); return true; } catch(e) { return e instanceof DOMException && ( // everything except Firefox e.code === 22 || // Firefox e.code === 1014 || // test name field too, because code might not be present // everything except Firefox e.name === 'QuotaExceededError' || // Firefox e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && // acknowledge QuotaExceededError only if there's something already stored storage.length !== 0; } }, hasLocalStorage: function(){ var hasLocalStorage = this.storageAvailable('localStorage'); return hasLocalStorage; }, hasSessionStorage: function(){ var hasSessionStorage = this.storageAvailable('sessionStorage'); return hasSessionStorage; }, objectToURLValues: function(obj){ var queryString = Object.keys(obj).map(function(key){ return key + '=' + obj[key] }).join('&'); return queryString; }, // Pass 'log' as second argument to log returned offsets{} (including element) getElementOffset: function(element, log){ var rect = element.getBoundingClientRect(), scrollTop = window.pageYOffset || document.documentElement.scrollTop, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; var offsets = { element: element, rect: rect, top: rect.top, right: rect.right, bottom: rect.top, left: rect.left, topRelative: rect.top + scrollTop, leftRelative: rect.left + scrollLeft, scrollTop: scrollTop, scrollLeft: scrollLeft, height: rect.height, width: rect.width }; if ((arguments[1] !== undefined) && (arguments[1].toLowerCase() === 'log')) { console.log(offsets); } return offsets; }, toDate: function(date){ var date2; if (date instanceof Date) { date2 = date; } else if (date){ var datePart = (date+"").split('T')[0]; var timePart = (date+"").split('T')[1].replace("Z", ""); if (this.detectIE()){ date2 = new Date(datePart + "T" + timePart); } else if (this.detectSafari()){ date2 = new Date(datePart + "T" + timePart); var myyear = datePart.substring(0, 4)+""; var mymonth = datePart.substring(5, 7)+""; var myday = datePart.substring(8, 10)+""; var newdate = new Date(mymonth + "/" + myday + "/" + myyear + " " + timePart); if (newdate && newdate != 'Invalid Date'){ date2 = newdate; } } else { date2 = new Date(datePart + " " + timePart); } } else { date2 = new Date(); } return date2; }, formatSessionMonth: function(date){ if (!(typeof date.getMonth === 'function')) { date = this.toDate(date); } // var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var monthNames = [ this.globalcontent.januaryAbbrText , this.globalcontent.februaryAbbrText , this.globalcontent.marchAbbrText , this.globalcontent.aprilAbbrText , this.globalcontent.mayAbbrText , this.globalcontent.juneAbbrText , this.globalcontent.julyAbbrText , this.globalcontent.augustAbbrText , this.globalcontent.septemberAbbrText , this.globalcontent.octoberAbbrText , this.globalcontent.novemberAbbrText , this.globalcontent.decemberAbbrText ]; return monthNames[date.getMonth()]; }, bitToBool: function(bit){ if (bit == 1){ return true; } else { return false; } }, logStats: function(useraction, useractiontype, actionvalue, altvalue, optionvalue) { var optionvalue = optionvalue || ''; var referrer = ''; var AjaxURL = this.path2approot + '/includes/stats.cfm'; this.ajaxGet(AjaxURL + '?useraction=' + useraction + '&useractiontype=' + useractiontype + '&actionvalue=' + encodeURIComponent(actionvalue) + '&altvalue=' + altvalue + '&optionvalue=' + optionvalue + '&referrer=' + referrer, function(response){ // success }, function(response){ // error }); // end ajaxGet }, logAttendance: function(tablename, tablekey, subtablename, subtablekey, meetingkey, action, duringevent, requireplanner) { var AjaxURL = this.path2approot + '/includes/attendancelogs.cfm'; this.ajaxGet(AjaxURL + '?tablename=' + tablename + '&tablekey=' + tablekey + '&subtablename=' + subtablename + '&subtablekey=' + subtablekey + '&meetingkey=' + meetingkey + '&action=' + action + '&duringevent=' + duringevent + '&requireplanner=' + requireplanner, function(response){ // success }, function(response){ // error if(!response.success) { location.reload(true); } }); // end ajaxGet }, formatSessionDay: function(date){ if (!(typeof date.getMonth === 'function')) { date = this.toDate(date); } var weekday = []; weekday[0] = this.globalcontent.sundayText; weekday[1] = this.globalcontent.mondayText; weekday[2] = this.globalcontent.tuesdayText; weekday[3] = this.globalcontent.wednesdayText; weekday[4] = this.globalcontent.thursdayText; weekday[5] = this.globalcontent.fridayText; weekday[6] = this.globalcontent.saturdayText; return weekday[date.getDay()]; }, formatSessionDate: function(date){ if (!(typeof date.getMonth === 'function')) { date = this.toDate(date); } var month = new Array(); month[0] = this.globalcontent.januaryAbbrText; month[1] = this.globalcontent.februaryAbbrText; month[2] = this.globalcontent.marchAbbrText; month[3] = this.globalcontent.aprilAbbrText; month[4] = this.globalcontent.mayAbbrText; month[5] = this.globalcontent.juneAbbrText; month[6] = this.globalcontent.julyAbbrText; month[7] = this.globalcontent.augustAbbrText; month[8] = this.globalcontent.septemberAbbrText; month[9] = this.globalcontent.octoberAbbrText; month[10] = this.globalcontent.novemberAbbrText; month[11] = this.globalcontent.decemberAbbrText; if('us' == 'us') { return this.formatSessionDay(date) + ", " + month[date.getMonth()] + " " + date.getDate()+ " "; } else { return this.formatSessionDay(date) + ", " + date.getDate() + " " + month[date.getMonth()] + " "; } }, getMonthAsString: function(date){ if (!(typeof date.getMonth === 'function')) { date = this.toDate(date); } // var month = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; var month = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; var monthcontent = { "Jan": this.globalcontent.januaryAbbrText, "Feb": this.globalcontent.februaryAbbrText, "Mar": this.globalcontent.marchAbbrText, "Apr": this.globalcontent.aprilAbbrText, "May": this.globalcontent.mayAbbrText, "Jun": this.globalcontent.juneAbbrText, "Jul": this.globalcontent.julyAbbrText, "Aug": this.globalcontent.augustAbbrText, "Sep": this.globalcontent.septemberAbbrText, "Oct": this.globalcontent.octoberAbbrText, "Nov": this.globalcontent.novemberAbbrText, "Dec": this.globalcontent.decemberAbbrText }; var monthreturn = monthcontent[month[date.getMonth()]]; return monthreturn; }, formatSessionTime: function(date){ if (!(typeof date.getMonth === 'function')) { date = this.toDate(date); } var weekday = []; weekday[0] = this.globalcontent.sundayAbbrText; weekday[1] = this.globalcontent.mondayAbbrText; weekday[2] = this.globalcontent.tuesdayAbbrText; weekday[3] = this.globalcontent.wednesdayAbbrText; weekday[4] = this.globalcontent.thursdayAbbrText; weekday[5] = this.globalcontent.fridayAbbrText; weekday[6] = this.globalcontent.saturdayAbbrText; var Time = []; Time[0] = "12"; Time[1] = "1"; Time[2] = "2"; Time[3] = "3"; Time[4] = "4"; Time[5] = "5"; Time[6] = "6"; Time[7] = "7"; Time[8] = "8"; Time[9] = "9"; Time[10] = "10"; Time[11] = "11"; Time[12] = "12"; Time[13] = "1"; Time[14] = "2"; Time[15] = "3"; Time[16] = "4"; Time[17] = "5"; Time[18] = "6"; Time[19] = "7"; Time[20] = "8"; Time[21] = "9"; Time[22] = "10"; Time[23] = "11"; var leadingZero = '' if(date.getMinutes() < 10){ leadingZero = '0'; } if(date.getHours() < 12){ newStartTime = /*this.formatSessionDay(date) + ', ' +*/ Time[date.getHours()] + ':' + leadingZero + date.getMinutes() + ' AM'; }else{ newStartTime = /*this.formatSessionDay(date) + ', ' +*/ Time[date.getHours()] + ':' + leadingZero + date.getMinutes() + ' PM'; } return newStartTime; }, isJsonString: function (str) { try { JSON.parse(str); } catch (e) { return false; } return true; }, saveViewState: function(path, section, value){ if (this.hasSessionStorage()){ var requestString = sessionStorage.getItem("resultviewstate"); if (requestString && (this.isJsonString(requestString))){ var viewStateObj = JSON.parse(sessionStorage.getItem("resultviewstate")); } else { var viewStateObj = {}; } if (!(path in viewStateObj)) { viewStateObj[path] = {}; } if (!(section in viewStateObj[path])) { viewStateObj[path][section] = {}; } viewStateObj[path][section] = value; sessionStorage.setItem("resultviewstate", JSON.stringify(viewStateObj)); } }, getViewState: function(path, section){ var returnval = ""; if (this.hasSessionStorage()){ var requestString = sessionStorage.getItem("resultviewstate"); if (requestString && (this.isJsonString(requestString))){ var viewStateObj = JSON.parse(sessionStorage.getItem("resultviewstate")); if (path in viewStateObj && section in viewStateObj[path]) { returnval = viewStateObj[path][section]; } } } return returnval; }, getContentObject: function(page) { let sections = this.getContentSections(page); let contentObj = {}; for (let i = 0; i < sections.length; i++) { contentObj[sections[i]] = this.displaycontent(page, sections[i]); } return contentObj; }, getContentSections: function(page) { var returnval = []; var pagescrubbed = ""; if (page){ pagescrubbed = page.replace(/\//g, "\\"); // replace forward slashes with back slashes } if (searchcontent && page in searchcontent){ returnval = Object.keys(searchcontent[page]); } else if (searchcontent && pagescrubbed in searchcontent){ returnval = Object.keys(searchcontent[pagescrubbed]); } return returnval; }, displaycontent: function(page, section){ var pagescrubbed = ""; if (page){ pagescrubbed = page.replace(/\//g, "\\"); // replace forward slashes with back slashes } if (searchcontent && page in searchcontent && section in searchcontent[page]){ return searchcontent[page][section][0]["TEXT"]; } else if (searchcontent && pagescrubbed in searchcontent && section in searchcontent[pagescrubbed]){ return searchcontent[pagescrubbed][section][0]["TEXT"]; } else { return ""; } }, customURIEncode: function(text){ text = encodeURIComponent(text); // https://stackoverflow.com/questions/4540753/should-i-use-encodeuri-or-encodeuricomponent-for-encoding-urls text = text.replace(/\(/g, '%28').replace(/\)/g, '%29'); // parenthesis text = text.replace(/\~/g, '%7E'); // ~ character text = text.replace(/\!/g, '%21'); // ! character text = text.replace(/\*/g, '%2A'); // * character text = text.replace(/\'/g, '%27'); // ' character text = text.replace(/\+/g, '%2B'); // + character return text; }, // from https://codepen.io/gapcode/pen/vEJNZN detectIE: function() { var ua = window.navigator.userAgent; // Test values; Uncomment to check result … // IE 10 // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; // IE 11 // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; // Edge 12 (Spartan) // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; // Edge 13 // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; var msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; }, detectSafari: function(){ var isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/); var isChromeForiOS = !!navigator.userAgent.match(/CriOS\/[\d\.]+.*Safari/); var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; var returnval = false; if (iOS || isSafari || isChromeForiOS) { returnval = true; } return returnval; }, detectFirefox: function(){ var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; return isFirefox }, detectChrome: function(){ var isChromium = window.chrome; var winNav = window.navigator; var vendorName = winNav.vendor; var isOpera = typeof window.opr !== "undefined"; var isIEedge = winNav.userAgent.indexOf("Edge") > -1; var isIOSChrome = winNav.userAgent.match("CriOS"); if (isIOSChrome) { // is Google Chrome on IOS } else if( isChromium !== null && typeof isChromium !== "undefined" && vendorName === "Google Inc." && isOpera === false && isIEedge === false ) { // is Google Chrome return true; } else { // not Google Chrome return false; } }, detectMobileDevice: function(){ return navigator.userAgent.match(/Android|iPhone|iPad|iPod|BlackBerry|Opera Mini|IEMobile/i); }, getDataUriFromResponse: function(response, mimetype) { var uInt8Array = new Uint8Array(response); var i = uInt8Array.length; var binaryString = new Array(i); while (i--) { binaryString[i] = String.fromCharCode(uInt8Array[i]); } var data = binaryString.join(''); var base64 = window.btoa(data); var dataUrl = 'data:' + mimetype + ';charset=utf-16le;base64,' + base64; return dataUrl; }, getBlobUriFromResponse: function(response, mimetype) { var blob = new Blob([response], { type: mimetype }); var downloadUrl = URL.createObjectURL(blob); return downloadUrl; }, getExhibitorURL: function(exhid, exhname){ var returnstring = ""; if (exhname){ exhname = (exhname+'').replace(/[^A-z_0-9-]+/g, " ").replace(/\s/g, "-"); // replace no alphanumerics with a space, then replace all spaces with a dash if (exhname.lastIndexOf("-") == exhname.length-1){ exhname = exhname.substring(0, exhname.lastIndexOf("-")); } if (exhname.charAt(0) == "-"){ exhname = exhname.substring(1, exhname.length-1); } } if ((!this.usefriendlyexhibitorurl) || (!exhname && exhid)) { return this.path2approot + "/exhibitor/exhibitor-details.cfm?exhid=" + exhid; } else if (exhname && exhid) { return this.path2approot + "/exhibitor/" + exhid + "/" + exhname; } else { return ""; } }, sendEmailVerfication: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/myshow/myshow-actions.cfm?action=SendEmailVerficationMessage', function(response) { vObj.showMessage("success", "Email successfully sent. Please check your email and click the verification link provided."); }, function(error) { vObj.showMessage("error", "Error sending verification email"); }); } } }); </script> <style> [v-cloak] { display: none; } </style> <script> if (window.jQuery) { var V = $.Velocity; } else { var V = Velocity; } if (typeof $ !== 'undefined') { V = $.Velocity; } else { V = Velocity; } if (typeof Velocity !== 'undefined'){ V = Velocity; } // staggered transition mixins var staggeredTransitionsMixin = { data: function(){ return { timeoutIntervalIDs: [], alreadyVisibleCount: 0 } }, methods: { beforeEnterStaggered: function (el) { //el.style.opacity = 0 }, enterStaggered: function (el, done) { done(); /*var delayOffset = 25 , delay , intervalID , maxopacity = 1; if ( "dataset" in el && "searchsize" in el.dataset && "index" in el.dataset){ delay = (el.dataset.index % el.dataset.searchsize) * delayOffset; } else if ( "dataset" in el && "totalitemcount" in el.dataset && "index" in el.dataset){ delay = (el.dataset.index * 1/el.dataset.totalitemcount) * delayOffset; } else { if ("dataset" in el && "index" in el.dataset){ delay = el.dataset.index * delayOffset; } else { delay = 1 * delayOffset; } } // get opacity if ("dataset" in el && "maxopacity" in el.dataset){ maxopacity = el.dataset.maxopacity; } intervalID = setTimeout(function () { V( el, { opacity: maxopacity }, { complete: done } ) }, delay); this.timeoutIntervalIDs.push(intervalID);*/ }, leaveStaggered: function (el, done) { done(); /*var delay = el.dataset.index * 25 setTimeout(function () { V( el, { opacity: 0 }, { complete: done } ) }, delay);*/ }, enterCancelled: function(el){ /*for (var i = 0; i < this.timeoutIntervalIDs.length; i++){ clearInterval(this.timeoutIntervalIDs[i]); }*/ } } }; // end staggeredTransitionsMixin </script> <script type="text/x-template" id="modal-template"> <transition name="modal" v-if="showmodal"> <div class="modal-mask" @keyup.esc="onEscape" tabindex="0" ref="modalparent"> <div class="modal-wrapper" v-on:click.self="closeModal(true);"> <div class="modal-container relative" v-bind:class="[small ? 'modal-container_small' : '']"> <div class="modal-header flex justify-between items-center"> <h2 class="mt0">{{title}}</h2> <button v-if="allowclose" v-on:click.stop.prevent="closeModal(false);" class="button-close bb-0 btn-reset" aria-label="Close this Window"> <svg width="36" height="36" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img"> <g transform="translate(-1108 -386)" fill="none" fill-rule="evenodd"><rect class="icon-close__circle" x="1108" y="386" width="36" height="36" rx="18"/><path class="icon-close__x" d="M1126 402.822l8.822-8.822 1.178 1.178-8.822 8.822 8.822 8.822-1.178 1.178-8.822-8.822-8.822 8.822-1.178-1.178 8.822-8.822-8.822-8.822 1.178-1.178z"/></g></svg> </button> </div> <slot></slot> </div> </div> </div> </transition></script> <style> .modal-wrapper .button-close { position: absolute; top: 0.5rem; right: 0.5rem; } .modal-wrapper .icon-close__x { fill: #333; } .modal-wrapper .button-close:hover .icon-close__circle, .modal-wrapper .button-close:focus .icon-close__circle { fill: rgba(0,0,0,0.1); } </style> <script> var ModalDisplay = Vue.component('modal-display', { template:"#modal-template", props: { showmodal: { default: false, type: Boolean }, title: { default: "", type: String }, small: { default: false, type: Boolean }, closeonoutsideclick: { default: true, type: Boolean }, allowcloseonesc: { default: true, type: Boolean }, allowclose: { default: true, type: Boolean } }, data: function(){ return { compincludepath: "includes/vue/generic/modal-display.cfm" } }, watch: { showmodal: function(){ var vObj = this; if (vObj.showmodal == true){ Vue.nextTick(function(){ vObj.$refs.modalparent.focus(); }); } } }, computed:{ content: function(){ return { closeText: this.displaycontent(this.compincludepath, 'closeText') }; } }, methods: { closeDisplay:function(){ vObj.hideerror = true; }, openModal: function(){ this.$emit("open-modal"); }, closeModal: function(outsideclicked) { if(this.allowclose && !outsideclicked || (outsideclicked && this.closeOnOutsideClick)) { this.$emit("close-modal"); } }, onEscape: function(){ if (this.allowcloseonesc){ this.closeModal(); } } } }); </script> <script type="text/x-template" id="toggleFavoriteTemplate"> <span :title="tippyTitle" v-tippy> <message-display :messages="messages" :type="messagetype" :showmessage="showmessage" :timeout="5"> </message-display> <modal-display :title="content.confirmModalTitle" :showmodal="showconflict" v-on:close-modal="showconflict = false" > <p>{{content.conflictModalText1}}</p> <p>{{content.conflictModalText2}}</p> <template v-for="session in conflictingsessions"> <p>{{session.title}}</p> <p>{{formatSessionDate(session.isodate)}} {{session.starttime}} - {{session.endtime}}</p> </template> <p>{{content.conflictModalText3}}</p> <button :aria-label="content.cancelText" :title="content.cancelTitle" v-on:click="showconflict = false" class="btn btn-tertiary">{{content.cancelText}}</button> <button :aria-label="content.confirmText" :title="content.confirmTitle" v-on:click.stop.prevent="toggleAddToPlanner" class="btn btn-primary">{{content.confirmText}}</button> </modal-display> <modal-display :title="content.confirmModalTitle" :showmodal="showconfirm" v-on:close-modal="showconfirm = false" > <template v-if="currentStatus == 'Reserved' || attendancestatus == 'Reserved'"> <p>{{content.reserveModalText1}}</p> <p>{{content.reserveModalText2}}</p> </template> <template v-else-if="currentStatus == 'Waitlist' || attendancestatus == 'Waitlist'"> <p>{{content.waitlistModalText1}}</p> <p>{{content.waitlistModalText2}}</p> </template> <button :aria-label="content.cancelText" :title="content.cancelTitle" v-on:click.stop="showconfirm = false" class="btn btn-tertiary">{{content.cancelText}}</button> <button :aria-label="content.confirmText" :title="content.confirmTitle" v-on:click.stop.prevent="toggleAddToPlanner" class="btn btn-primary">{{content.confirmText}}</button> </modal-display> <modal-display :title="content.processingModalTitle" :showmodal="seatrestriction && loading && sessionCheck" :allowclose="false" > {{content.processingModalText}} </modal-display> <template v-if="hasmyshow"> <template v-if="exhSubVersion < 3"> <template v-if="fullbuttondisplay"> <a v-on:click.stop.prevent="evaluateAdd()" :title="myshowTitleText" class="btn-primary center js-myShow" v-bind:class="[absolute ? 'absolute' : '', {'is-saved': addedtoplannerfinal, 'is-disabled': !computedEnabled }]"> <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" v-bind:class="{'is-saved': addedtoplannerfinal, 'icon': true,'rotating': loading}" role="img" aria-hidden="true"> <path v-if="!addedtoplannerfinal && !loading" d="M24 10H14V0h-4v10H0v4h10v10h4V14h10z" fill="white"></path> <path v-if="addedtoplannerfinal && !loading" d="M9 21.035l-9-8.638 2.791-2.87 6.156 5.874 12.21-12.436L24 5.782z" fill="white"></path> <path v-if="loading" v-bind:d="loadingIcon" fill="white"></path> </svg> <span class="b ml2 v-mid" v-if="!loading">{{buttonLabel}}</span> <span class="b ml2 v-mid" v-if="loading">{{content.updatingText}}...</span> </a> </template> <template v-else> <a class="flex-Icon center js-myShow pointer" v-on:click.stop.prevent="evaluateAdd()" v-bind:class="[absolute ? 'absolute' : '', {'is-saved': addedtoplannerfinal, 'is-disabled': !computedEnabled }]" :title="myshowTitleText"> <transition name="favorite-icon"> <svg v-bind:class="{'is-saved': addedtoplannerfinal, 'icon': true, 'rotating': loading}" width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-hidden="true"> <path v-if="!addedtoplannerfinal && !loading" v-bind:d="notAddedToPlannerIcon"></path> <path v-if="addedtoplannerfinal && !loading" v-bind:d="addedToPlannerIcon"></path> <path v-if="loading" v-bind:d="loadingIcon"></path> </svg> </transition> </a> </template> </template> <template v-else> <template v-if="fullbuttondisplay"> <button class="btn-primary btn-addtoplanner" @click="evaluateAdd()" v-bind:class="[absolute ? 'absolute' : '', {'is-saved': addedtoplannerfinal, 'is-disabled': !computedEnabled }]"> <span> <svg v-show="addedtoplannerfinal" class="addtoplannericon animated fadeIn" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"> <path d="m15.784 8.375-2.16-2.16.914-.936 1.246 1.247L18.87 3.42l.936.935-4.02 4.02ZM5.313 18.22V5.145c0-.442.153-.816.459-1.123.306-.306.68-.46 1.122-.46h5.755a5.169 5.169 0 0 0-.58 1.154 3.843 3.843 0 0 0-.194 1.253c0 1.033.335 1.936 1.004 2.707a4.025 4.025 0 0 0 2.496 1.387c.251.033.47.049.656.049.186 0 .405-.016.656-.049v8.156L11 15.78l-5.687 2.44Z"/></g></svg> <svg v-show="!addedtoplannerfinal" class="addtoplannericon animated fadeIn" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"> <path stroke-width=".025" d="M5.512 20.231V5.308c0-.502.173-.927.52-1.274a1.732 1.732 0 0 1 1.275-.521h5.68v1.474h-5.68a.307.307 0 0 0-.22.1.307.307 0 0 0-.1.22V17.97l.017-.008 4.995-2.147 4.995 2.148.018.007v-6.957h1.474v9.219l-6.482-2.781.002-.005-.012.005-6.482 2.781ZM18.486 7v1.987h-1.474v-2h-2V5.513h2v-2h1.474v2h2.001v1.474h-2V7Z"/></g></svg> </span> <span v-if="!loading">{{buttonLabel}}</span> <span v-if="loading">{{content.updatingText}}...</span> </button> </template> <button v-else class="button-addtoplanner" @click="evaluateAdd()" v-bind:class="[absolute ? 'absolute' : '', {'is-saved': addedtoplannerfinal, 'is-disabled': !computedEnabled }]"> <svg v-show="addedtoplannerfinal" class="addtoplannericon animated fadeIn" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"> <path d="m15.784 8.375-2.16-2.16.914-.936 1.246 1.247L18.87 3.42l.936.935-4.02 4.02ZM5.313 18.22V5.145c0-.442.153-.816.459-1.123.306-.306.68-.46 1.122-.46h5.755a5.169 5.169 0 0 0-.58 1.154 3.843 3.843 0 0 0-.194 1.253c0 1.033.335 1.936 1.004 2.707a4.025 4.025 0 0 0 2.496 1.387c.251.033.47.049.656.049.186 0 .405-.016.656-.049v8.156L11 15.78l-5.687 2.44Z"/> </svg> <svg v-show="!addedtoplannerfinal" class="addtoplannericon animated fadeIn" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"> <path stroke-width=".025" d="M5.512 20.231V5.308c0-.502.173-.927.52-1.274a1.732 1.732 0 0 1 1.275-.521h5.68v1.474h-5.68a.307.307 0 0 0-.22.1.307.307 0 0 0-.1.22V17.97l.017-.008 4.995-2.147 4.995 2.148.018.007v-6.957h1.474v9.219l-6.482-2.781.002-.005-.012.005-6.482 2.781ZM18.486 7v1.987h-1.474v-2h-2V5.513h2v-2h1.474v2h2.001v1.474h-2V7Z"/> </svg> </button> </template> </template> </span></script> <script> var ToggleFavorite = Vue.component("toggle-favorite", { props: { keys:{ default: "", type: [String, Number] }, exhid:{ default: "", type: [String, Number] }, addedtoplanner: { default: false, type: [String, Boolean] }, type: { default: "exhibitor", type: String }, absolute: { default: false, type: Boolean }, tablename: { default: "", type: String }, fullbuttondisplay: { default: false, type: Boolean }, enabled: { default: true, type: Boolean }, disabledtext: { default: "", type: String }, appointment: { default: false, type: Boolean }, fromcalendar: { default: false, type: Boolean }, seatsqty: { default: 0, type: Number }, waitlistqty: { default: 0, type: Number }, attendancestatus: { default: "", type: String }, conflictingsessions: { default: () => [], type: Array } }, mixins: [messagedisplayMixin], template:"#toggleFavoriteTemplate", data: function(){ return { compincludepath: "includes/vue/generic/toggle-favorite.cfm", loading: false, showconflict: false, showconfirm: false, addedtoplannerfinal: (String(this.addedtoplanner).toLowerCase() === 'true'), addedToPlannerIcon: "M9 21.035l-9-8.638 2.791-2.87 6.156 5.874 12.21-12.436L24 5.782z", notAddedToPlannerIcon: "M24 10H14V0h-4v10H0v4h10v10h4V14h10z", loadingIcon: "M11.501 4.025v-4.025h1v4.025l-.5-.025-.5.025zm-7.079 5.428l-3.884-1.041-.26.966 3.881 1.04c.067-.331.157-.651.263-.965zm5.995-5.295l-1.039-3.878-.967.259 1.041 3.883c.315-.106.635-.197.965-.264zm-6.416 7.842l.025-.499h-4.026v1h4.026l-.025-.501zm2.713-5.993l-2.846-2.845-.707.707 2.846 2.846c.221-.251.457-.487.707-.708zm-1.377 1.569l-3.48-2.009-.5.866 3.484 2.012c.15-.299.312-.591.496-.869zm13.696.607l3.465-2-.207-.36-3.474 2.005.216.355zm.751 1.993l3.873-1.038-.129-.483-3.869 1.037.125.484zm-3.677-5.032l2.005-3.472-.217-.125-2.002 3.467.214.13zm-1.955-.843l1.037-3.871-.16-.043-1.038 3.873.161.041zm3.619 2.168l2.835-2.834-.236-.236-2.834 2.833.235.237zm-9.327-1.627l-2.011-3.484-.865.5 2.009 3.479c.276-.184.568-.346.867-.495zm-4.285 8.743l-3.88 1.04.26.966 3.884-1.041c-.106-.314-.197-.634-.264-.965zm11.435 5.556l2.01 3.481.793-.458-2.008-3.478c-.255.167-.522.316-.795.455zm3.135-2.823l3.477 2.007.375-.649-3.476-2.007c-.116.224-.242.439-.376.649zm-1.38 1.62l2.842 2.842.59-.589-2.843-2.842c-.187.207-.383.403-.589.589zm2.288-3.546l3.869 1.037.172-.644-3.874-1.038c-.049.218-.102.434-.167.645zm.349-2.682l.015.29-.015.293h4.014v-.583h-4.014zm-6.402 8.132l1.039 3.879.967-.259-1.041-3.884c-.315.106-.635.197-.965.264zm-1.583.158l-.5-.025v4.025h1v-4.025l-.5.025zm-5.992-2.712l-2.847 2.846.707.707 2.847-2.847c-.25-.22-.487-.456-.707-.706zm-1.165-1.73l-3.485 2.012.5.866 3.48-2.009c-.185-.278-.347-.57-.495-.869zm2.734 3.106l-2.01 3.481.865.5 2.013-3.486c-.299-.149-.591-.311-.868-.495zm1.876.915l-1.042 3.886.967.259 1.04-3.881c-.33-.067-.65-.158-.965-.264z", tippy: null, timesran: 0, intervalid: '', seatrestriction: Vue.MYS.seatrestriction, allowedschedules: Vue.MYS.allowedschedules, lockdown: Vue.MYS.lockdown, exhSubVersion: Vue.MYS.exhSubVersion } }, watch: { addedtoplanner: { deep: true, handler: function(e){ this.addedtoplannerfinal = e; } } }, computed:{ buttonLabel: function() { if(this.addedtoplannerfinal) { if(this.seatrestriction && this.sessionCheck) { switch(this.currentStatus) { case 'Waitlist': return this.content.waitlistRemoveText; break; case 'Reserved': return this.content.reserveRemoveText; break; } } else { return this.content.savedToMyShowPlannerText; } } else { if(!this.computedEnabled && this.enabled) { if(this.regemail.length == 0) { return this.content.loginText; } else { return this.content.noAccessText; } } else if(this.seatrestriction && this.sessionCheck) { switch(this.currentStatus) { case 'Waitlist': return this.content.waitlistAddText; break; case 'Reserved': return this.content.reserveAddText; break; case 'Filled': return this.content.filledText; break; } } else { return this.content.addToMyShowPlannerText; } } }, computedEnabled: function() { if(this.sessionCheck) { if(!this.lockdown || (this.allowedschedules.includes(''+this.keys) || this.attendancestatus != '')) { return this.enabled; } else { return false; } } else { return this.enabled; } }, content: function() { var formattedURL = this.thispageurl.toLowerCase().trim(); var sessionDetailsSuffix = formattedURL.indexOf("/sessions/session-details.cfm") >= 0 ? "-session" : ""; return { addToMyShowPlannerText: this.displaycontent(this.compincludepath, `addToMyShowPlannerText${sessionDetailsSuffix}`), savedToMyShowPlannerText: this.displaycontent(this.compincludepath, 'savedToMyShowPlannerText'), removeFromPlannerText: this.displaycontent(this.compincludepath, 'removeFromPlannerText'), appointmentRemoveFromPlannerText: this.displaycontent(this.compincludepath, 'appointmentRemoveFromPlannerText'), updatingText: this.displaycontent(this.compincludepath, 'updatingText'), filledText: this.displaycontent(this.compincludepath, 'filledText'), filledHintText: this.displaycontent(this.compincludepath, 'filledHintText'), loginText: this.displaycontent(this.compincludepath, 'loginText'), loginHintText: this.displaycontent(this.compincludepath, 'loginHintText'), noAccessText: this.displaycontent(this.compincludepath, 'noAccessText'), noAccessHintText: this.displaycontent(this.compincludepath, 'noAccessHintText'), waitlistText: this.displaycontent(this.compincludepath, 'waitlistText'), waitlistRemovedText: this.displaycontent(this.compincludepath, 'waitlistRemovedText'), waitlistAddText: this.displaycontent(this.compincludepath, 'waitlistAddText'), waitlistRemoveText: this.displaycontent(this.compincludepath, 'waitlistRemoveText'), reservedText: this.displaycontent(this.compincludepath, 'reservedText'), reservedRemoveText: this.displaycontent(this.compincludepath, 'reservedRemoveText'), reserveAddText: this.displaycontent(this.compincludepath, 'reserveAddText'), reserveRemoveText: this.displaycontent(this.compincludepath, 'reserveRemoveText'), processingText: this.displaycontent(this.compincludepath, 'processingText'), cancelText: this.displaycontent(this.compincludepath, 'cancelText'), confirmText: this.displaycontent(this.compincludepath, 'confirmText'), reserveModalText1: this.displaycontent(this.compincludepath, 'reserveModalText1'), reserveModalText2: this.displaycontent(this.compincludepath, 'reserveModalText2'), waitlistModalText1: this.displaycontent(this.compincludepath, 'waitlistModalText1'), waitlistModalText2: this.displaycontent(this.compincludepath, 'waitlistModalText2'), conflictModalText1: this.displaycontent(this.compincludepath, 'conflictModalText1'), conflictModalText2: this.displaycontent(this.compincludepath, 'conflictModalText2'), conflictModalText3: this.displaycontent(this.compincludepath, 'conflictModalText3'), confirmModalTitle: this.displaycontent(this.compincludepath, 'confirmModalTitle'), processingModalTitle: this.displaycontent(this.compincludepath, 'processingModalTitle'), processingModalText: this.displaycontent(this.compincludepath, 'processingModalText'), cancelTitle: this.displaycontent(this.compincludepath, 'cancelTitle'), confirmTitle: this.displaycontent(this.compincludepath, 'confirmTitle') }; }, currentStatus: function() { if(this.sessionCheck) { if(this.attendancestatus == 'Reserved' || this.attendancestatus == 'Waitlist') { return this.attendancestatus; } else if(this.seatsqty > 0) { return 'Reserved'; } else if (this.waitlistqty > 0) { return 'Waitlist'; } else { return 'Filled'; } } else { return ''; } }, myshowTitleText: function() { if (this.computedEnabled){ if (this.addedtoplannerfinal){ if(this.appointment) { return this.content.appointmentRemoveFromPlannerText; } else { return this.buttonLabel; } } else { return this.buttonLabel; } } else { if(this.sessionCheck && this.seatrestriction) { if(this.currentStatus == 'Filled') { return this.content.filledHintText; } else if (this.regemail.length == 0) { return this.content.loginHintText; } else { return this.content.noAccessHintText; } } else { return this.disabledtext; } } }, tippyTitle: function() { if (!this.computedEnabled) { return this.myshowTitleText; } else { return ""; } }, scheduleConflict: function() { if(this.sessionCheck && this.attendancestatus == 'Conflict') { return true; } else { return false; } }, sessionCheck: function() { if(this.type == 'session' || this.type == 'calendar') { return true; } else { return false; } } }, methods: { checkStatus: function() { var vObj = this, requestObj = {}; requestObj["scheduleid"] = vObj.keys; if (!vObj.addedtoplannerfinal) { requestObj["status"] = vObj.currentStatus; } else { requestObj["status"] = "Remove"; } vObj.timesran += 1; if(vObj.timesran >= 5) { vObj.intervalid = clearInterval(vObj.intervalid); vObj.timesran = 0; vObj.loading = false; vObj.showMessage("error", vObj.content.processingText); } else { vObj.ajaxGet(vObj.path2approot + '/myshow/myshow-actions.cfm?action=sessionstatus&' + vObj.objectToURLValues(requestObj), // ajaxGet() defined in _global-mixin function(response) { // success if(response.DATA == 'Reserved') { vObj.showMessage("success", vObj.content.reservedText); } else if(response.DATA == 'Waitlist') { vObj.showMessage("success", vObj.content.waitlistText); } else if (requestObj["status"] == 'Remove') { if(vObj.currentStatus == 'Reserved') { vObj.showMessage("success", vObj.content.reservedRemoveText); } else { vObj.showMessage("success", vObj.content.waitlistRemovedText); } } vObj.intervalid = clearInterval(vObj.intervalid); vObj.timesran = 0; vObj.loading = false; vObj.addedtoplannerfinal = !vObj.addedtoplannerfinal; vObj.$emit('toggle-favorite', {type: vObj.type, keys: vObj.keys, status: response.DATA}); }, function(response) { // error }); // end ajaxGet } }, evaluateAdd: function() { if(this.computedEnabled) { if(this.type == 'session' && this.scheduleConflict) { this.showconflict = true; } else if (this.seatrestriction && this.addedtoplannerfinal && (this.type == 'session' || (this.type == 'calendar' && this.attendancestatus))) { this.showconfirm = true; } else { this.toggleAddToPlanner(); } } }, toggleAddToPlanner: function() { var myshowfunction = "" , requestObj = {} , vObj = this , callback = function(){ } , errormessage = ""; if (vObj.computedEnabled && !vObj.fromcalendar){ switch(vObj.type){ case "exhibitor": // if not added to planner then add if (!vObj.addedtoplannerfinal){ myshowfunction = "AddExhibitor"; requestObj["keys"] = vObj.keys; errormessage = "Error adding exhibitor to planner"; callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveExhibitor"; requestObj["keys"] = vObj.keys; errormessage = "Error removing exhibitor from planner"; callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "session": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddSession"; requestObj["keys"] = vObj.keys; requestObj["status"] = vObj.currentStatus; errormessage = "Error adding session to planner"; callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveSession"; requestObj["keys"] = vObj.keys; requestObj["status"] = 'Remove'; errormessage = "Error removing session from planner"; callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "showfeature": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ShowFeatures"; errormessage = "Error adding show feature to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ShowFeatures"; errormessage = "Error removing show feature from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "collateral": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "PressReleases"; errormessage = "Error adding collateral to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "PressReleases"; errormessage = "Error removing collateral from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "special": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ShowSpecials"; errormessage = "Error adding special to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ShowSpecials"; errormessage = "Error removing special from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "product": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ExhibitorProducts"; errormessage = "Error adding product to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ExhibitorProducts"; errormessage = "Error removing product from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "guestappearances": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "exhibitor_guests"; errormessage = "Error adding guest appearance to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "exhibitor_guests"; errormessage = "Error removing guest appearance from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "onlinecontact": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "AdditionalContacts"; errormessage = "Error adding online contact to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "AdditionalContacts"; errormessage = "Error removing online contact from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; case "scheduledevent": if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ScheduledEvents"; errormessage = "Error adding event to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = "ScheduledEvents"; errormessage = "Error removing event from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } break; default: if (vObj.tablename){ if (!vObj.addedtoplannerfinal){ myshowfunction = "AddFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = vObj.tablename; errormessage = "Error adding to planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = true; }; } else { myshowfunction = "RemoveFavorite"; requestObj["keys"] = vObj.keys; requestObj["tablename"] = vObj.tablename; errormessage = "Error removing from planner"; if (vObj.exhid){ requestObj["exhid"] = vObj.exhid; } callback = function(){ vObj.addedtoplannerfinal = false; }; } } } vObj.showconflict = false; vObj.showconfirm = false; vObj.loading = true; var return_to = encodeURIComponent(vObj.getCurrentURL()); vObj.ajaxGet(vObj.path2approot + '/myshow/myshow-actions.cfm?action=' + myshowfunction + "&" + vObj.objectToURLValues(requestObj) + "&return_to=" + return_to, // ajaxGet() defined in _global-mixin function(response){ // success if(vObj.type == "session" && vObj.seatrestriction) { vObj.intervalid = setInterval(function(){vObj.checkStatus()}, 2000); } else { vObj.loading = false; callback(); vObj.$emit('toggle-favorite', {type: vObj.type, keys: vObj.keys}); } }, function(response){ // error vObj.loading = false; if ("ERRORCODE" in response && response.ERRORCODE == "12345"){ location.href = vObj.path2approot + '/login/login.cfm'; } else { vObj.showMessage("error", "Error favoriting item"); } }); // end ajaxGet } // end if else if (vObj.fromcalendar){ vObj.$emit('toggle-favorite', {type: vObj.type, keys: vObj.keys}); } } // end toggleAddToPlanner } }); </script> <style> @-webkit-keyframes rotating /* Safari and Chrome */ { from { -webkit-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); -o-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes rotating { from { -ms-transform: rotate(0deg); -moz-transform: rotate(0deg); -webkit-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); } to { -ms-transform: rotate(360deg); -moz-transform: rotate(360deg); -webkit-transform: rotate(360deg); -o-transform: rotate(360deg); transform: rotate(360deg); } } .rotating { -webkit-animation: rotating 2s linear infinite; -moz-animation: rotating 2s linear infinite; -ms-animation: rotating 2s linear infinite; -o-animation: rotating 2s linear infinite; animation: rotating 2s linear infinite; } </style> <script type="text/x-template" id="exhibitor-result-card-template"> <li class="js-Card card br3 dib float pa3" v-bind:style="manualHeight" v-on:click.self="handleClick()"> <div v-if="intersected" v-on:click.self="handleClick()"> <div class="card-Details mb2" v-on:click.self="handleClick()"> <div v-if="logo !== '' && iscrossref != 1" class="flex-Thumb thumb-Border mr3 pa2"> <a v-bind:href="exhURL()" v-on:click.self="handleClick();"> <v-lazy-image v-bind:src="logo" v-bind:alt=exhname v-bind:title=exhname class="mw-100 js-LogoImg" v-bind:ref="'js' + exhname+'logo'" v-bind:src-placeholder="placeholderimg" onerror="this.onerror=null;this.src='/8_0/assets/imgs/1x1.gif';" /> </a> </div> <div class="flex-Title mb0 mr3" v-on:click.self="handleClick()"> <h3 class="card-Title break-word f2 mb1 mt0" v-on:click.self="handleClick()"> <a class="bb-0" v-bind:href="exhURL()" v-on:click.self="handleClick()"> <span class="b" v-if="slotted"> {{exhname}} <span v-if="iscrossref && crossrefname">({{content.seeText}}: {{crossrefname}})</span> </span> <span class="normal" v-else> {{exhname}} <span v-if="iscrossref && crossrefname">({{content.seeText}}: {{crossrefname}})</span> </span> </a> </h3> <p class="card-Subtitle f5 ma0 muted" v-if="booths && booths.length > 0 && showbooths && iscrossref != 1" v-on:click.self="handleClick()"> <span v-for="i in numOfBoothsToShow"> <a v-if="floorplanactive && validHalls.includes(hallids[i-1])" class="bb-0 color-inherit" v-bind:href="boothURL((booths[i-1]+'').replace('randomstring', ''))" title="Visit this booth">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow">, </span></a> <span v-else class="bb-0 color-inherit f6">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow">, </span></span> </span> <span v-if="booths.length > numOfBoothsToShow" class="bb-0 color-inherit f6"> + {{booths.length - numOfBoothsToShow}} more </span> </p> </div> <toggle-favorite :type="'exhibitor'" v-bind:keys="exhid" v-bind:addedtoplanner="addedtoplanner" v-on:toggle-favorite="$emit('toggle-favorite', $event)"> </toggle-favorite> </div> <div class="mt3" v-on:click.self="handleClick()"> <a class="bb-0" v-bind:href="exhURL()" v-on:click.self="handleClick()"> <span v-for="tag in tags" :class="tag.color + ' br1 dark-gray dib f7 normal mb2 mr1 pa2 pt1 pb1'">{{tag.display}}</span> </a> </div> <p class="card-Desc f5 lh-copy ma0 muted" v-if="iscrossref != 1"> <a class="bb-0" v-bind:href="exhURL()" v-on:click.self="handleClick()"> {{summary}}</a> </p> <img class="mt3 mr2 mb2 mw4 mw-100" v-for="icon in icons" :src="getIconUrl(icon)" :title="icon.title" :alt="icon.title" v-if="iscrossref != 1"/> <slot> </slot> </div> <a v-if="!intersected" v-bind:href="exhURL()">{{exhname}}</a> </li></script> <script> var ExhibitorResultCard = Vue.component('exhibitor-result-card', { template:"#exhibitor-result-card-template", props: ["exhid", "exhname", "booths", "hallids", "description", "logo", "boothsdisplay", "slotted", "addedtoplanner", "isrecommendation", "icons", "tags", "exhadvind", "iscrossref", "crossrefname"], data: function(){ return { compincludepath: "includes/vue/generic/exhibitor-result-card.cfm", menuvisible: false, intersected: false, observer: null, validHalls: Vue.MYS.validHalls, hideimg: false, subShowVersion: Vue.MYS.useExhSubVersion3 } }, computed: { content: function(){ return { seeText: this.displaycontent(this.compincludepath, 'seeText') }; }, boothlist: function(){ if (this.booths){ return this.booths.join(", "); } else { return ""; } }, getIconUrl: function() { return function(icon) { if (this.subShowVersion) { return this.getServerlessImageURL(icon.iconfile); } else { return icon.iconfile; } }; }, summary: function(){ if (this.bitToBool(this.exhadvind)){ return this.createSummary(this.description, 170); } else { return this.createSummary(this.description, 85); } }, manualHeight: function(){ return (this.intersected) ? "" : "height: 189px"; }, placeholderimg: function(){ return this.path2approot + "/assets/imgs/grey.gif"; }, numOfBoothsToShow: function (){ return (this.maxshowbooths == 0 ? this.booths.length: (this.maxshowbooths > this.booths.length ? this.booths.length : this.maxshowbooths)); } }, mounted: function(){ var vObj = this; vObj.observer = new IntersectionObserver(function(entries) { var image = entries[0]; if (image.isIntersecting) { vObj.intersected = true; vObj.observer.disconnect(); } }, {}); vObj.observer.observe(vObj.$el); }, destroyed: function() { this.observer.disconnect(); }, methods: { boothURL: function(booth){ return (this.path2approot + "/floorplan_link.cfm?exhid=" + this.exhid + "&booth=" + (booth+'').replace('randomstring', '') + "&show_id=" + this.showid); }, toggleMenu: function(){ this.menuvisible = !this.menuvisible; }, exhURL: function(){ return this.getExhibitorURL(this.exhid, this.exhname); }, getServerlessImageURL: function(iconfile) { const bucket = 'mys-showfiles'; const environment = Vue.MYS.environment; const showid = this.showidlowercase; const s3key = `${environment}/${showid}/exhicons/${iconfile}`; return Vue.MYS.getServerlessURL(bucket, s3key, null, 56, 'cover'); }, handleClick: function(){ if (this.isrecommendation){ // log function(useraction, useractiontype, actionvalue, altvalue) this.logStats("Recommendation Selected: Exhibitor", "", this.exhid, this.exhname); } this.goToURL(this.exhURL()); } } }); </script> <script> var VLazyImageComponent = { props: { src: { type: String, required: true }, srcPlaceholder: { type: String, default: "" }, srcset: { type: String }, intersectionOptions: { type: Object, default: function(){ return {} } } }, data: function() { return { observer: null, intersected: false, loaded: false } }, computed: { srcImage: function() { return this.intersected ? this.src : this.srcPlaceholder; }, srcsetImage: function() { return this.intersected && this.srcset ? this.srcset : false; } }, render: function(h) { return h("img", { attrs: { src: this.srcImage, srcset: this.srcsetImage }, class: { "v-lazy-image": true, "v-lazy-image-loaded": this.loaded } }); }, mounted: function() { var vObj = this; vObj.$el.addEventListener("load", function() { if (vObj.$el.getAttribute('src') !== vObj.srcPlaceholder) { vObj.loaded = true; vObj.$emit("load"); } }); this.observer = new IntersectionObserver(function(entries) { var image = entries[0]; if (image.isIntersecting) { vObj.intersected = true; vObj.observer.disconnect(); vObj.$emit("intersect"); } }, vObj.intersectionOptions); vObj.observer.observe(vObj.$el); }, destroyed: function() { this.observer.disconnect(); } }; /*var VLazyImagePlugin = { install: (Vue, opts) => { Vue.component("VLazyImage", VLazyImageComponent); } };*/ Vue.component("VLazyImage", VLazyImageComponent); </script> <script type="text/x-template" id="featured-result-card-template"> <li class="js-Card card br3 dib float pa3" v-bind:style="manualHeight" v-on:click.self="handleClick();"> <div v-if="intersected" v-on:click.self="handleClick();"> <div class="card-Details mb2" v-on:click.self="handleClick();"> <div v-if="logo !== '' && hideimg != true && bitToBool(exhadvind) && iscrossref != 1" class="flex-Thumb thumb-Border mr3 pa2"> <a v-bind:href="exhURL()" v-on:click.self="handleClick();"> <v-lazy-image v-bind:src="logo" v-bind:alt=exhname v-bind:title=exhname class="mw-100 js-LogoImg" v-bind:ref="'js' + exhname+'logo'" v-bind:src-placeholder="placeholderimg" onerror="this.onerror=null;this.src='/8_0/assets/imgs/1x1.gif';" /> </a> </div> <div class="flex-Title mb0 mr3" v-on:click.self="handleClick();"> <h3 class="card-Title break-word f2 mb1 mt0" v-on:click.self="handleClick();"> <a class="bb-0" v-bind:href="exhURL()" v-on:click.self="handleClick();"> <span>{{exhname}}</span> <span v-if="iscrossref && crossrefname">({{content.seeText}}: {{crossrefname}})</span> </a> </h3> <p class="card-Subtitle f5 ma0 muted" v-if="booths && booths.length > 0 && showbooths && iscrossref != 1" v-on:click.self="handleClick()"> <span v-for="i in numOfBoothsToShow" > <a v-if="floorplanactive && validHalls.includes(hallids[i-1])" class="bb-0 color-inherit" v-bind:href="boothURL((booths[i-1]+'').replace('randomstring', ''))" title="Visit this booth">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow">, </span></a> <span v-else class="bb-0 color-inherit f6">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow">, </span></span> </span> <span v-if="booths.length > numOfBoothsToShow" class="bb-0 color-inherit f6"> + {{booths.length - numOfBoothsToShow}} more </span> </p> </div> <toggle-favorite :type="'exhibitor'" v-bind:keys="exhid" v-bind:addedtoplanner="addedtoplanner" v-on:toggle-favorite="$emit('toggle-favorite', $event)"> </toggle-favorite> </div> <div class="mt3" v-on:click.self="handleClick()"> <a class="bb-0" v-bind:href="exhURL()" v-on:click.self="handleClick()"> <span v-for="tag in tags" :class="tag.color + ' br1 dark-gray dib f7 normal mb2 mr1 pa2 pt1 pb1'">{{tag.display}}</span> </a> </div> <p class="card-Desc f5 lh-copy ma0 muted" v-if="iscrossref != 1"> <a class="bb-0" v-bind:href="exhURL()" v-on:click.self="handleClick();">{{summary}}</a> </p> <img class="mt3 mr2 mb2 mw4 mw-100" v-for="icon in icons" :src="getIconUrl(icon)" :title="icon.title" :alt="icon.title" v-if="iscrossref != 1" /> <slot></slot> </div> <a v-if="!intersected" v-bind:href="exhURL()">{{exhname}}</a> </li></script> <script> var FeaturedResultCard = Vue.component('featured-result-card', ExhibitorResultCard.extend({ template:"#featured-result-card-template", computed: { summary: function(){ if (this.bitToBool(this.exhadvind)){ return this.createSummary(this.description, 170); } else { return this.createSummary(this.description, 85); } }, manualHeight: function(){ return (this.intersected) ? "" : "height: 240px"; }, placeholderimg: function(){ return this.path2approot + "/assets/imgs/grey.gif"; }, numOfBoothsToShow: function (){ return (this.maxshowbooths == 0 ? this.booths.length: (this.maxshowbooths > this.booths.length ? this.booths.length : this.maxshowbooths)); } }, methods: { hideImage: function(e){ // this.hideimg = true; // console.log(this.$refs); // this.$refs[e].$el.onerror = function(){ // alert("hey"); // }; // console.log(this); }, exhURL: function(){ return this.getExhibitorURL(this.exhid, this.exhname); } } }) ); </script> <script type="text/x-template" id="session-result-card-template"> <li class="js-Card card br3 dib float pa3" v-on:click.self="handleClick()"> <div class="card-Details mb2" v-on:click.self="handleClick()" v-if="intersected"> <div class="flex-Title mb0 mr3" v-on:click.self="handleClick()"> <p class="card-Subtitle b f5 mb0" v-if="scheduledate"> <a class="bb-0" v-bind:href="sessionURL()" v-on:click.self="handleClick()" v-if="showDateTime && !hidesessiontimes"> <span v-if="showfulldate"> <span class="">{{formatSessionDay(schedulestarttime)}},</span> {{formatSessionMonth(scheduledate)}} {{toDate(scheduledate).getDate()}} <span class="ml1 mr1 normal o-50">•</span> </span> <div v-if="schedulestarttime != ''"> {{formatSessionTime(schedulestarttime)}} - {{formatSessionTime(scheduleendtime)}}<span v-if="showtimezone"> {{timezonelabel}}</span> </div> </a> <a class="bb-0" v-bind:href="sessionURL()" v-on:click.self="handleClick()" v-if="!showDateTime"> <span>{{content.onDemandLabel}}</span> </a> </p> <p class="f5 mb3 muted"> <template v-if="!hidesessionlocations"> <a class="bb-0" v-if="floorplanactive && validRooms.includes(location)" v-bind:href="floorplanlink">{{location}}</a> <span v-else>{{location}}</span> </template> </p> <h3 class="card-Title break-word f2 mb0 mt0"> <a class="bb-0" v-bind:href="sessionURL()" v-on:click.self="handleClick()"> {{title}} </a> </h3> </div> <toggle-favorite v-if="!seatrestriction" :type="'session'" v-bind:keys="scheduleidstring" v-bind:addedtoplanner="addedtoplanner" v-bind:enabled="bitToBool(allowadd)" v-bind:disabledtext="content.regRequiredText" v-on:toggle-favorite="$emit('toggle-favorite', $event)"> </toggle-favorite> </div> <p class="card-Desc f5 lh-copy ma0 muted" v-on:click.self="handleClick()" v-if="intersected"> {{summary}} </p> <div class="flex items-center mt3" v-if="tracktitle.length > 0 && intersected" v-on:click.self="handleClick()"> <div v-if="tracktitle.length <= 3"> <div class="muted mb2 pb1" v-for="(track, index) in tracktitle" v-on:click.capture="handleClick()"> <span class="dib token-track mr2" v-bind:style="{ backgroundColor: getTrackBgColor(track) }"></span>{{track}} </div> </div> <div v-if="tracktitle.length > 3"> <div class="muted mb2 pb1" v-for="i in 3" v-on:click.capture="handleClick()"> <span class="dib token-track mr2" v-bind:style="{ backgroundColor: getTrackBgColor(tracktitle[i]) }"></span>{{tracktitle[i]}} </div> <div class="muted" v-on:click.capture="handleClick()"> + {{tracktitle.length-3}} {{content.moreText}}</div> </div> </div> <div v-if="ondemand" class="mt3"> <span class="bg-color-brand-09 br1 dark-gray dib f7 normal pa2 pt1 pb1">{{content.onDemandLabel}}</span> </div> <slot> </slot> <a v-if="!intersected" v-bind:href="sessionURL()">{{title}}</a> </li></script> <script> var SessionResultCard = Vue.component('session-result-card', { template:"#session-result-card-template", props: ["title","tracktitle","location","description","scheduledate","scheduleid","schedulestarttime","scheduleendtime","addedtoplanner", "backgroundcolorhexarray", "textcolorhexarray","showfulldate", "isrecommendation", "handoutnamearray", "sponsorarray", "score", "allowadd", "ondemand"], data: function(){ return { compincludepath: "includes/vue/generic/session-result-card.cfm", menuvisible: false, showtimezone: Vue.MYS.settingsConfig.timesettings.showtimezone, timezonelabel: Vue.MYS.settingsConfig.timesettings.timezonelabel, hidesessiontimes: Vue.MYS.settingsConfig.searchsettings.hidesessiontimes, hidesessionlocations: Vue.MYS.settingsConfig.searchsettings.hidesessionlocations, intersected: false, observer: null, validRooms: Vue.MYS.validRooms, seatrestriction: Vue.MYS.seatrestriction } }, mounted: function(){ var vObj = this; vObj.observer = new IntersectionObserver(function(entries) { var image = entries[0]; if (image.isIntersecting) { vObj.intersected = true; vObj.observer.disconnect(); } }, {}); vObj.observer.observe(vObj.$el); }, destroyed: function() { this.observer.disconnect(); }, computed: { boothlist: function(){ if (this.booths){ return this.booths.join(", "); } else { return ""; } }, summary: function(){ return this.createSummary(this.description, 85); }, scheduleidstring: function(){ return this.scheduleid+""; }, content: function(){ return { regRequiredText: this.displaycontent(this.compincludepath, 'regRequiredText'), moreText: this.displaycontent(this.compincludepath, 'moreText'), onDemandLabel: this.displaycontent(this.compincludepath, 'onDemandLabel') }; }, floorplanlink: function(){ return this.path2approot + '/floorplan_link.cfm?show_id=' + this.showid + '&alt_entry=true&curr_pri=facility&object_type=room&booth=' + this.location; }, showDateTime: function(){ return (this.scheduledate == "1900-01-01T00:00:00Z" || this.scheduledate == "1970-01-01T00:00:00Z" ? false : true); } }, methods: { toggleMenu: function(){ this.menuvisible = !this.menuvisible; }, sessionURL: function(){ return this.path2approot + "/sessions/session-details.cfm?scheduleid=" + this.scheduleid; }, handleClick: function(){ if (this.isrecommendation){ // log function(useraction, useractiontype, actionvalue, altvalue) this.logStats("Recommendation Selected: Session", "", this.scheduleid, this.title); } this.goToURL(this.sessionURL()); }, getTrackBgColor: function(trackname) { if (trackname in Vue.MYS.trackcss && "backgroundcolorhex" in Vue.MYS.trackcss[trackname]) { return Vue.MYS.trackcss[trackname]["backgroundcolorhex"]; } else { return "#b2b2b2"; } } } }); </script> <script type="text/x-template" id="recommendations-modal-template"> <div id="rec-modal"> <message-display v-bind:messages="messages" v-bind:type="messagetype" v-bind:showmessage="showmessage" :timeout="20"> </message-display> <transition name="modal" v-if="showmodal"> <div class="modal-mask"> <div class="modal-wrapper" v-on:click.self="closeModal();"> <div class="modal-container"> <div class="modal-header flex justify-between items-center"> <h2 class="mt0">{{content.recommenendedResultsText}} </h2> <button class="btn-tertiary modal-default-button nowrap" v-on:click.stop.prevent="closeModal();"> {{content.closeButtonText}} </button> </div> <div class="mb4"> <a class="toggle-grid btn-tertiary" href="" v-if="exhibitorrecommendationsactive" v-on:click.stop.prevent="switchDisplay('exhibitor');" v-bind:class="[rectype == 'exhibitor' ? 'is-selected' : '']"> <span class="v-mid">{{content.exhibitorButtonText}}</span> </a> <a class="toggle-grid btn-tertiary" href="" v-if="sessionrecommendationsactive" v-on:click.stop.prevent="switchDisplay('session');" v-bind:class="[rectype == 'session' ? 'is-selected' : '']"> <span class="v-mid">{{content.sessionButtonText}}</span> </a> </div> <div v-if="!isloggedinmyshow"> <p class="mb4" v-if="recommendedresults.totalhits > 0"> {{content.topSixRecText}} <a :href="path2approot + '/myshow/'">{{content.loginOrCreatePlannerText}}</a>. </p> <p class="mb4" v-if="recommendedresults.totalhits == 0 && !loading"> {{content.dontHaveRecsText}} </p> </div> <div v-if="loading"> {{content.loadingText}} </div> <div class="o-Recommendation_toggle bg-white mb0-last pb3 tl" > <!-- card view --> <transition-group name="staggered-fade" appear tag="ul" id="rec-result-card" class="cards exh-basic" v-bind:css="false" v-on:before-enter="beforeEnterStaggered" v-on:enter="enterStaggered" v-on:leave="leaveStaggered"> <component v-for="(result, index) in recommendedresults.results" v-on:toggle-favorite="onToggleFavorite" :key="'recommendedresults'+index" :is="getCardTypeDisplay(result)" :data-index="index" :data-maxopacity="getFadedExhibitorOpacity(index)" v-bind="getComponentProps(result)" v-bind:style=""> </component> </transition-group> </div> <div class="modal-footer"> <slot name="footer"></slot> </div> </div> </div> </div> </transition> </div></script> <script> var overriderecstatus = ""; var RecommendationsModal = Vue.component('recommendations-modal', { template:"#recommendations-modal-template", props: { recommendationCategory: { default: "Recommendations", type: String }, recommendedTotal: { default: 0, type: Number }, showmodal:{ default: false, type: Boolean }, isloggedinmyshow: { default: false, type: Boolean } }, mixins: [staggeredTransitionsMixin, fixElementMixin, messagedisplayMixin], data: function(){ return { compincludepath: "includes/vue/generic/recommendations-modal.cfm", recommendationCounter: this.recommendedTotal, recommendedresults: { results: [], totalhits: 0 }, loading: false, maxunfadedexhibitors: 3, rectype: "exhibitor" } }, mounted: function(){ if (this.exhibitorrecommendationsactive && !this.sessionrecommendationsactive){ this.rectype = "exhibitor"; } else if (!this.exhibitorrecommendationsactive && this.sessionrecommendationsactive) { this.rectype = "session"; } }, watch:{ showmodal: function(val){ if (val == true){ this.openModal(); } } }, methods: { switchDisplay: function(rectype){ this.rectype = rectype; this.loadRecs(); }, resetRecommendedResults: function(){ this.recommendedresults = { results: [], totalhits: 0 }; }, isFadedExhibitor: function(index){ if (!this.isloggedinmyshow && index > this.recommendedresults.results.length - this.maxunfadedexhibitors-1){ return true; } else { return false; } }, getFadedExhibitorOpacity: function(index){ if (this.isFadedExhibitor(index)){ // note: commenting out for as we revist how last recs display. Love, Stephen. Have a great day // return 0.3 ; return 1 ; } else { return 1 ; } }, // using this to determine which card component type to display getCardTypeDisplay: function(result){ switch(this.rectype) { case "exhibitor": if (result.MYS.exhfeatured_t == true ){ return "featured-result-card"; } else { return "exhibitor-result-card"; } break; case "session": return "session-result-card"; break; } }, // we can dynamically bind properties to a component. So instead of v-bind:exhid="0000" we can put them in an obj and say v-bind=obj. See <component> above getComponentProps: function(result){ var vObj = this; switch(vObj.rectype){ case "exhibitor": return { "exhid" : result.MYS.exhid_l, "exhname" : result.MYS.exhname_t, "description" : result.MYS.exhdesc_t, "categories" : result.MYS.categories_ta, "categoryids" : result.MYS.categoryid_la, "booths" : result.MYS.booths_la, "boothsdisplay" : result.MYS.boothsdisplay_la, "hallids" : result.MYS.hallid_la, "logo" : vObj.displayLogoURL(result.MYS.exhlogo_t), "slotted" : result.MYS.exhslotted_t, "addedtoplanner" : result.MYS.MYS.addedtoplanner, "search" : result.MYS.search, "searchtype" : result.MYS.searchtype, "searchtypedisplay" : result.MYS.searchtypedisplay, "isrecommendation" : true } break; case "session": var tempresult = { "title":result.MYS.title , "tracktitle":result.MYS.tracktitle , "location":result.MYS.location , "description":result.MYS.description , "scheduledate":result.MYS.scheduledate , "scheduleid":result.MYS.scheduleid , "schedulestarttime":result.MYS.starttime , "scheduleendtime":result.MYS.endtime , "addedtoplanner":result.MYS.addedtoplanner, "allowadd": vObj.bitToBool(result.MYS.allowadd), "backgroundcolorhexarray": [], "textcolorhexarray": [], "showfulldate": true, "isrecommendation" : true }; if ("MYS" in result && "backgroundcolorhexarray" in result.MYS){ tempresult["backgroundcolorhexarray"] = result.MYS.backgroundcolorhexarray; } if ("MYS" in result && "textcolorhexarray" in result.MYS){ tempresult["textcolorhexarray"] = result.MYS.textcolorhexarray; } return tempresult; break; } }, closeModal: function(){ this.$emit('close-modal'); }, loadRecs: function(){ var vObj = this; var overriderecstatusstring = ""; vObj.loading = true; if (overriderecstatus.length > 0){ overriderecstatusstring = "&recstatus=" + overriderecstatus; } if (vObj.hasLocalStorage()){ requestString = localStorage.getItem("userinterests"); vObj.resetRecommendedResults(); // ajaxJsonPost() defined in _global-mixin vObj.ajaxJsonPost(vObj.path2approot + '/ajax/remote-proxy.cfm?action=recommended' + overriderecstatusstring + '&returntype=' + vObj.rectype + '&from=modal', requestString, function(response){ // success vObj.loading = false; if (vObj.rectype == "session"){ vObj.recommendedresults["results"] = response["DATA"].results[vObj.rectype].filteredbuckets; } else { vObj.recommendedresults["results"] = response["DATA"].results[vObj.rectype].filteredbuckets; } vObj.recommendedresults["totalhits"] = response["DATA"].totalhitsfiltered; // now mark new recs as new if (vObj.hasLocalStorage() ){ localStorage.setItem("hasnewrecommendations", false); } }, function(response){ // error vObj.loading = false; vObj.showMessage("error", vObj.content.errorLoadingRecommendations); }); // end ajaxJsonPost } }, openModal: function(){ this.loadRecs(); }, onToggleFavorite: function(){ this.openModal(); }, startDismissTip: function(){ var recommendationsIntroShown = localStorage.getItem('vts_recommendation_dismiss_shown') == 'true'; if (recommendationsIntroShown) return; var intro2 = introJs(".o-Recommendation_Dismiss"); intro2.setOptions({ showBullets: false }) intro2.start(); intro2.oncomplete(function() { localStorage.setItem('vts_recommendation_dismiss_shown', 'true'); }) intro2.onexit(function() { localStorage.setItem('vts_recommendation_dismiss_shown', 'true'); }) }, dismissRec: function(result){ var vObj = this; var actionvalue; if (vObj.rectype == "session"){ actionvalue = result.MYS.scheduleid_l; } else { actionvalue = result.MYS.exhid_l; } if (vObj.isloggedinmyshow){ // ajaxGet() defined in _global-mixin vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=recommended' + "&type=" + vObj.rectype + '&actionvalue=' + actionvalue + '&returntype=dismiss', // ajaxGet() defined in _global-mixin function(response){ // success vObj.loading = false; vObj.openModal(); }, function(error){ // error vObj.loading = false; vObj.showMessage("error", "Error dismissing recommendation"); }); // end ajaxGet } else { // add tooltip vObj.startDismissTip(); } return false; }, // TODO :: STEPHEN :: Should this be self contained in a mixin? This is a copy of what's happening in session search results display getSessionsBySchedule: function(results){ var returnArray = []; var vObj = this; for (var i = 0; i < results.length; i++){ for (var j = 0; j < results[i].MYS.scheduleid_la.length; j++){ var tracktitle = '' if ('tracktitle_la' in results[i].MYS){ tracktitle = results[i].MYS.tracktitle_la; } var scheduleObj = { scheduleid: results[i].MYS.scheduleid_la[j], location: results[i].MYS.schedulelocation_ta[j], title: results[i].MYS.sessiontitle_t, tracktitle: tracktitle, description: results[i].MYS.sessiontitle_t, scheduledate: vObj.toDate(results[i].MYS.scheduledate_da[j]), starttime: vObj.toDate(results[i].MYS.schedulestarttime_da[j]), endtime: vObj.toDate(results[i].MYS.scheduleendtime_da[j]), addedtoplanner: results[i].MYS.addedtoplanner_la[j] }; returnArray.push(scheduleObj); } } returnArray.sort(function(a,b){ if (a.starttime < b.starttime) return -1; if (a.starttime > b.starttime) return 1; return 0; }); // sort array by date return returnArray; }, clearLocalStorageRecommendationData: function(){ vObj = this; if (vObj.hasLocalStorage()){ localStorage.removeItem('vts_recommendation_first_message_shown'); localStorage.removeItem('vts_recommendation_second_message_shown'); localStorage.removeItem('userinterests'); } } }, computed: { content: function(){ return { recommenendedResultsText: this.displaycontent(this.compincludepath, 'recommenendedResultsText'), closeButtonText: this.displaycontent(this.compincludepath, 'closeButtonText'), exhibitorButtonText: this.displaycontent(this.compincludepath, 'exhibitorButtonText'), sessionButtonText: this.displaycontent(this.compincludepath, 'sessionButtonText'), topSixRecText: this.displaycontent(this.compincludepath, 'topSixRecText'), loginOrCreatePlannerText: this.displaycontent(this.compincludepath, 'loginOrCreatePlannerText'), dontHaveRecsText: this.displaycontent(this.compincludepath, 'dontHaveRecsText'), loadingText: this.displaycontent(this.compincludepath, 'loadingText'), dismssText: this.displaycontent(this.compincludepath, 'dismssText'), errorLoadingRecommendations: this.displaycontent(this.compincludepath, 'errorLoadingRecommendations') }; }, previousRecommendationCounter: function(){ var previousRecommendNumber = this.recommendationCounter - 1; if (previousRecommendNumber < 0) { previousRecommendNumber = 0; } return previousRecommendNumber; }, nextRecommendationCounter: function(){ return this.recommendationCounter + 1; }, shouldShowOnExpoMYS: function(){ return (this.showidlowercase === 'expomys' || this.showidlowercase === 'expomys1' || this.showidlowercase === 'expomys2' || this.showidlowercase === 'expomys3' || this.showidlowercase === 'expomys4' || this.showidlowercase === 'expomys5' || this.showidlowercase === 'imts18'); } } }); </script> <script type="text/x-template" id="contactImageTemplate"> <div> <div v-if="userimage && intersected && !imgerror"> <img class="o-chat_avatar" :class="status.toLowerCase() == 'available' ? 'is-available' : ''" :src="imgsrc" :srcset="srcset" @error="imgerror = true" :alt="username" :width="width" :height="height" v-bind:style="imgStyleObject" /> </div> <div v-else class="contact-image-wrapper" :class="status.toLowerCase() == 'available' ? 'is-available' : ''" style=""> <span class="contact-image-initials" :style="{color: colorlookup[firstinitial]}" :title="username">{{initials}}</span> </div> </div></script> <style> .contact-image-wrapper { background-color: white; background-image: none; border: 1px solid #CCC; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 12px; width: 48px; height: 48px; } .contact-image-initials { font-weight: bold; font-size: 1.250em; color: #333; text-align: center; } </style> <script> var ContactImage = Vue.component("contact-image", { template:"#contactImageTemplate", props: { username: { default: "", type: String }, userimage: { default: "", type: String }, status: { default: "", type: String }, large: { default: false, type: Boolean }, width: { type: [String, Number], default: "" }, height: { type: [String, Number], default: "" } }, data: function(){ return { compincludepath: "includes/vue/generic/contact-image.cfm", intersected: false, observer: null, imgsrc: "", imgsrc2x: "", imgerror: false } }, mounted: function(){ var vObj = this; vObj.observer = new IntersectionObserver(function(entries) { var image = entries[0]; if (image.isIntersecting) { vObj.intersected = true; vObj.observer.disconnect(); if (vObj.userimage){ var cachedImgPath = vObj.getCachedImgPath(false); var cachedImgPath2x = vObj.getCachedImgPath(true); if (cachedImgPath !== "" && cachedImgPath2x !== ""){ vObj.imgsrc = cachedImgPath; vObj.imgsrc2x = cachedImgPath2x; } else { vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=misc&function=profileimage&image=' + vObj.userimage + '&large=' + vObj.large, // ajaxGet() defined in _global-mixin function(response){ // success if ("url" in response.DATA){ vObj.imgsrc = response.DATA["url"]; vObj.imgsrc2x = response.DATA["url2x"]; vObj.imgerror = false; if (vObj.hasSessionStorage()) { sessionStorage.setItem(vObj.username + "-" + vObj.userimage + "-" + vObj.large, vObj.imgsrc); sessionStorage.setItem(vObj.username + "-" + vObj.userimage + "-" + vObj.large + "-2x", vObj.imgsrc2x); } } }, function(response){ // error }); // end ajaxGet } } } }, {}); vObj.observer.observe(vObj.$el); }, computed:{ content: function(){ return { backToTopText: this.displaycontent(this.compincludepath, 'backToTopText'), }; }, colorlookup: function(){ var colorStruct = {}; colorStruct["?"] = "#9fadad"; colorStruct["A"] = "ff3019"; colorStruct["B"] = "#6b1315"; colorStruct["C"] = "#87b95f"; colorStruct["D"] = "#8c59dd"; colorStruct["E"] = "#8058f8"; colorStruct["F"] = "#8dfb54"; colorStruct["G"] = "#bc0a4e"; colorStruct["H"] = "#685a34"; colorStruct["I"] = "#ed94bb"; colorStruct["J"] = "#9b6371"; colorStruct["K"] = "#58226c"; colorStruct["L"] = "#3c1e38"; colorStruct["M"] = "#b2451e"; colorStruct["N"] = "#3e4f9d"; colorStruct["O"] = "#ba12c8"; colorStruct["P"] = "#e8d247"; colorStruct["Q"] = "#2c1a96"; colorStruct["R"] = "#c4a31b"; colorStruct["S"] = "#35a8a7"; colorStruct["T"] = "#ec8721"; colorStruct["U"] = "#c0547d"; colorStruct["V"] = "#b387b3"; colorStruct["W"] = "#d528d3"; colorStruct["X"] = "#792006"; colorStruct["Y"] = "#10073c"; colorStruct["Z"] = "#5ebf4f"; return colorStruct; }, initials: function(){ var name = this.username.replace(/[^A-z\s]/gi, '').trim(); var tempNameArray = name.split(" "); var nameArray = []; var returnVal = "??"; // trim any empty items from array for (var i = 0; i < tempNameArray.length; i++) { if (tempNameArray[i].trim() !== ""){ nameArray.push(tempNameArray[i].trim()); } } // one element in array and string is 1 char if (nameArray.length == 1 && nameArray[0].length == 1){ returnVal = nameArray[0]; } else if (nameArray.length == 1 && nameArray[0].length > 1){ returnVal = nameArray[0].charAt(0); } else if (nameArray.length == 1 && nameArray[0].length == 2){ // one element in array and the length is 2 characters returnVal = nameArray[0].charAt(0) + nameArray[0].charAt(1); } else if (nameArray.length == 2){ // if there are two elements in the array, get first letter of each returnVal = nameArray[0].charAt(0) + nameArray[1].charAt(0); } else if (nameArray.length >= 3){ // if the array length is >= 3, get letters 1 and 3 returnVal = nameArray[0].charAt(0) + nameArray[2].charAt(0); } return returnVal.toUpperCase(); }, firstinitial: function(){ return this.initials.charAt(0); }, srcset: function(){ if (this.imgsrc2x) { return this.imgsrc2x + " 2x"; } else { return ""; } }, imgStyleObject: function(){ if (this.width && this.height){ return { width: this.width + 'px', height: this.height + 'px' } } else { return {}; } } }, methods: { getCachedImgPath: function(twox){ var vObj = this; var returnURL = ""; var is2xstring = (twox) ? "-2x" : ""; if (vObj.hasSessionStorage()) { var imgurl = sessionStorage.getItem(vObj.username + "-" + vObj.userimage + "-" + vObj.large + is2xstring); if (imgurl){ returnURL = imgurl; } } return returnURL; } } }); </script> <link rel="stylesheet" href="/8_0/assets/css/navbar-v2.css?myscache=20221018A"> <div id="navbar-v2" class="nav--wrapper_outer" :data-hasmyshow="''+hasmyshow" v-cloak> <form ref="logoutform" action="/8_0/login/logout.cfm" method="post" style="display:none;" id="logoutformmys"> <input type="hidden" name="logouttoken" value="E6A8A426571FA68C3D5BEDC4489941716D0936D6"> <input type="submit" value="Logout" /> </form> <div class="nav--wrapper_inner wrapper" :class="{'is-desktop': navDisplayType === 'desktop', 'is-mobile': navDisplayType === 'mobile'}"> <div class="show-logo" :class="[!showLogoVisible ? 'is-visually-hidden-nav-item' : '']"> <a href="http://www.satshow.com/" class="dim" v-show="showLogoVisible"> <img class="logo" src="/mys_shared/SATELLITE2025/SATELLITE2025_Custom_logo.png?breakcache=BEDDCC2C-F663-EBCC-8CBB021A6981D19B" srcset="/mys_shared/SATELLITE2025/SATELLITE2025_Custom_logo@2x.png?breakcache=BEDDCC2D-F165-27EA-906CDD113E50406D 2x" width="200" height="70" alt="SATELLITE 2025 logo"> </a> <ul class="show-info list" :class="[showInfoVisible ? '' : 'is-hidden']"> <li class="show-date"> March 10-13, 2025 </li> <li class="show-location">Walter E. Washington</li> <li class="show-optional_text">Washington, D.C.</li> </ul> </div> <nav id="nav" class="navigation--wrapper l-nav" :class="[mobileMenuOpen ? 'is-open' : '', isLoggedIntoMyShow ? 'is-loggedin' : '']" aria-label="Primary"> <button id="js-toggle-nav" class="btn-toggle btn-tertiary o-mobile-menu_button" v-show="navDisplayType === 'mobile'" :aria-expanded="mobileMenuOpen.toString()" aria-controls="js-nav" aria-haspopup="true" @click.prevent="toggleMobileMenu()"> <span class="hamburger__text"> Menu</span> <span aria-hidden="true" id="js-toggle-icon" class="hamburger" :class="mobileMenuOpen ? 'hamburger--open' : ''"> <span class="hamburger__inner"></span> </span> </button> <button v-if="hasmyshow" class="btn-avatar btn-reset" v-show="navDisplayType === 'mobile'" @click.prevent="toggleProfileActionsMenu" alt="Log In or Create a Free Planner"> <recommendations-widget v-if="navDisplayType == 'mobile'" v-bind:firsttimemessage="firsttimemessage" v-bind:secondtimemessage="secondtimemessage" v-bind:id="'orecommendationswidgetmobile'" v-bind:rectype="'exhibitor'" v-bind:isloggedinmyshow="false" v-bind:useraction="''" v-bind:actionvalue="''" v-bind:maxuserinterestactions="100" v-on:open-modal="openModal();"> </recommendations-widget> <div v-if="hasnewrecommendations && isLoggedIntoMyShow" class="o-nav_avatar_recommendation"></div> <svg v-if="isLoggedIntoMyShow" class="dib ml1 o-arrow_down_svg" :class="profileActionsMenuOpen ? 'rotated-up' : ''" width="13" height="8" xmlns="http://www.w3.org/2000/svg" aria-describedby="arrow-down-title" role="img"> <title id="arrow-down-title">See more links</title> <path fill-rule="nonzero" d="M0 1.665L1.532.25l4.97 4.67L11.468.25 13 1.665 6.502 7.75z"></path> </svg> </button> <span v-if="navDisplayType === 'mobile' && hasmyshow" id="js-profile-actions_dropdown" class="o-profile-actions_dropdown" :class="profileActionsMenuOpen ? 'animated fadeIn' : 'dn'"> <div v-if="isLoggedIntoMyShow" class="o-profile-actions_dropdown_inner"> <div class="pa3 pt2 pb2"> <span class="db"> <svg width="19" height="20" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-planner_icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.514.176a.833.833 0 0 0-1.025 0L.321 6.54A.833.833 0 0 0 0 7.197v10a2.653 2.653 0 0 0 2.648 2.652h12.706a2.647 2.647 0 0 0 2.649-2.652v-10c0-.257-.119-.5-.321-.657L9.514.176Zm3.043 18.006h2.797a.98.98 0 0 0 .982-.985V7.604L9.001 1.89 1.667 7.604v9.593a.986.986 0 0 0 .981.985h2.797V9.924c0-.46.374-.833.834-.833h5.445c.46 0 .833.373.833.833v8.258Zm-5.445 0h3.779v-7.424H7.112v7.424Z" /></svg> <a href="/8_0/myshow/index.cfm" target="" class="dim dib bb-0 ml2">My Planner</a> </span> <span class="db"> <svg width="20" height="21" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-profile_icon"><g clip-path="url(#a)" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13.348a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"/><path d="M16.167 13.348a1.375 1.375 0 0 0 .275 1.517l.05.05a1.666 1.666 0 0 1-.541 2.72 1.669 1.669 0 0 1-1.818-.362l-.05-.05a1.375 1.375 0 0 0-1.516-.274 1.375 1.375 0 0 0-.834 1.258v.142a1.667 1.667 0 0 1-3.333 0v-.076a1.375 1.375 0 0 0-.9-1.258 1.374 1.374 0 0 0-1.517.275l-.05.05a1.668 1.668 0 1 1-2.358-2.358l.05-.05a1.375 1.375 0 0 0 .275-1.517 1.375 1.375 0 0 0-1.258-.833H2.5a1.667 1.667 0 0 1 0-3.334h.075a1.375 1.375 0 0 0 1.258-.9 1.375 1.375 0 0 0-.275-1.516l-.05-.05a1.667 1.667 0 1 1 2.359-2.359l.05.05a1.375 1.375 0 0 0 1.516.275H7.5a1.375 1.375 0 0 0 .833-1.258v-.142a1.667 1.667 0 0 1 3.334 0v.075a1.375 1.375 0 0 0 .833 1.259 1.375 1.375 0 0 0 1.517-.275l.05-.05a1.667 1.667 0 1 1 2.358 2.358l-.05.05a1.375 1.375 0 0 0-.275 1.517v.066a1.376 1.376 0 0 0 1.258.834h.142a1.667 1.667 0 1 1 0 3.333h-.075a1.375 1.375 0 0 0-1.258.833v0Z"/></g><defs><clipPath id="a"><path fill="#fff" transform="translate(0 .849)" d="M0 0h20v20H0z"/></clipPath></defs></svg> <a href="/8_0/myshow/preview.cfm" target="" class="dim dib bb-0 ml2">My Profile</a> </span> <span class="db"> <svg width="18" height="21" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-recommendations_icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M9 .849c-.827 0-1.647.164-2.41.484a6.295 6.295 0 0 0-2.045 1.38A6.369 6.369 0 0 0 3.18 4.778c-.317.772-.48 1.6-.48 2.436 0 3.047-.644 4.941-1.239 6.042-.3.553-.59.917-.792 1.132a2.7 2.7 0 0 1-.275.257l-.003.002a.908.908 0 0 0-.35 1.02.909.909 0 0 0 .325.462.893.893 0 0 0 .535.177h16.198c.193 0 .38-.062.535-.177a.909.909 0 0 0 .316-1.03.909.909 0 0 0-.34-.452l-.003-.002a2.702 2.702 0 0 1-.275-.257 5.403 5.403 0 0 1-.792-1.132c-.594-1.102-1.24-2.995-1.24-6.042 0-.836-.163-1.664-.48-2.436a6.37 6.37 0 0 0-1.365-2.065 6.297 6.297 0 0 0-2.044-1.38A6.244 6.244 0 0 0 9 .849Zm5.96 13.278c.068.126.137.246.205.36H2.835c.069-.114.138-.234.206-.36.756-1.399 1.46-3.597 1.46-6.913a4.57 4.57 0 0 1 1.342-3.17 4.476 4.476 0 0 1 3.158-1.306c1.181 0 2.315.47 3.157 1.307A4.57 4.57 0 0 1 13.5 7.214c0 3.317.704 5.514 1.46 6.913Zm-6.739 4.45a.892.892 0 0 0-1.226-.324.917.917 0 0 0-.33 1.236c.238.414.578.757.988.995a2.679 2.679 0 0 0 2.695 0c.41-.238.75-.581.988-.995a.916.916 0 0 0-.327-1.242.892.892 0 0 0-1.23.33.906.906 0 0 1-.778.452.894.894 0 0 1-.779-.452Z" /></svg> <a href="/8_0/myshow/index.cfm?s=recommendations" target="" class="dim dib bb-0 ml2">Recommendations</a> </span> <span class="db"> <svg width="20" height="21" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-logout_icon"><path d="M7.5 18.349H4.167A1.667 1.667 0 0 1 2.5 16.681V5.015A1.667 1.667 0 0 1 4.167 3.35H7.5M13.333 15.015l4.167-4.167-4.167-4.166M17.5 10.848h-10" stroke-linecap="round" stroke-linejoin="round" /></svg> <button class="btn-reset dim dib bb-0 ml2" @click="logout">Sign Out</button> </span> </div> </div> </span> <ul id="js-nav" class="main-navigation" :class="mobileMenuOpen ? '' : 'is-visually-hidden'"> <li class="" id="link-exhibitorsearch" > <a class="link js-nav_width" href="/8_0/index.cfm" target=""> <span class="link_hover">Home</span> </a> </li> <li class="" id="link-exhibitoralpha2" > <a class="link js-nav_width is-selected" href="/8_0/explore/exhibitor-gallery.cfm?nav=1" target=""> <span class="link_hover">Exhibitors and Sponsors</span> </a> </li> <li class="" id="link-floorplan" > <a class="link js-nav_width" href="/8_0/floorplan/" target=""> <span class="link_hover">Floor Plan</span> </a> </li> <li class="" id="link-40636233-A848-BBFB-ADE4132F52779B3E" > <a class="link js-nav_width" href="http://www.satshow.com/" target=""> <span class="link_hover">SATELLITE Website</span> </a> </li> <li v-if="hasmyshow" id="link-myshowavatar" :class="[navDisplayType === 'mobile' && isLoggedIntoMyShow ? 'is-visually-hidden-nav-item' : '']" @mouseover="openTogglePlannerMenu" @mouseleave="closeTogglePlannerMenu"> <button class="o-nav_avatar_button link" aria-controls="js-profile-actions_dropdown" alt="Log In or Create a Free Planner"> <a v-if="!isLoggedIntoMyShow" href="/8_0/login/login.cfm" class="link_hover dib js-nav_width"> My Show Planner </a> <span v-show="navDisplayType === 'desktop'" class="o-profile-image_wrapper"> <div v-if="hasnewrecommendations && isLoggedIntoMyShow" class="o-nav_avatar_recommendation"></div> </span> <span v-if="isLoggedIntoMyShow" class="link_hover o-arrow_down"> <svg class="dib ml1 o-arrow_down_svg" :class="profileActionsMenuOpen ? 'rotated-up' : ''" width="13" height="8" xmlns="http://www.w3.org/2000/svg" aria-describedby="arrow-down-title" role="img"> <title id="arrow-down-title">See more links</title> <path fill-rule="nonzero" d="M0 1.665L1.532.25l4.97 4.67L11.468.25 13 1.665 6.502 7.75z"></path> </svg> </span> <recommendations-widget v-if="navDisplayType == 'desktop'" :class="[navDisplayType === 'mobile' ? 'is-visually-hidden-nav-item' : '']" v-bind:firsttimemessage="firsttimemessage" v-bind:secondtimemessage="secondtimemessage" v-bind:id="'orecommendationswidgetdesktop'" v-bind:rectype="'exhibitor'" v-bind:isloggedinmyshow="false" v-bind:useraction="''" v-bind:actionvalue="''" v-bind:maxuserinterestactions="100" v-on:open-modal="openModal();"> </recommendations-widget> </button> <span id="js-profile-actions_dropdown" class="o-profile-actions_dropdown" :class="profileActionsMenuOpen ? 'animated fadeIn' : 'dn'"> <div class="o-profile-actions_dropdown_spacer"></div> <div v-if="isLoggedIntoMyShow" class="o-profile-actions_dropdown_inner"> <div class="pa3 pt2 pb2"> <span class="db"> <svg width="19" height="20" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-planner_icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.514.176a.833.833 0 0 0-1.025 0L.321 6.54A.833.833 0 0 0 0 7.197v10a2.653 2.653 0 0 0 2.648 2.652h12.706a2.647 2.647 0 0 0 2.649-2.652v-10c0-.257-.119-.5-.321-.657L9.514.176Zm3.043 18.006h2.797a.98.98 0 0 0 .982-.985V7.604L9.001 1.89 1.667 7.604v9.593a.986.986 0 0 0 .981.985h2.797V9.924c0-.46.374-.833.834-.833h5.445c.46 0 .833.373.833.833v8.258Zm-5.445 0h3.779v-7.424H7.112v7.424Z" /></svg> <a href="/8_0/myshow/index.cfm" target="" class="dim dib bb-0 ml2">My Planner</a> </span> <span class="db"> <svg width="20" height="21" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-profile_icon"><g clip-path="url(#a)" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13.348a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"/><path d="M16.167 13.348a1.375 1.375 0 0 0 .275 1.517l.05.05a1.666 1.666 0 0 1-.541 2.72 1.669 1.669 0 0 1-1.818-.362l-.05-.05a1.375 1.375 0 0 0-1.516-.274 1.375 1.375 0 0 0-.834 1.258v.142a1.667 1.667 0 0 1-3.333 0v-.076a1.375 1.375 0 0 0-.9-1.258 1.374 1.374 0 0 0-1.517.275l-.05.05a1.668 1.668 0 1 1-2.358-2.358l.05-.05a1.375 1.375 0 0 0 .275-1.517 1.375 1.375 0 0 0-1.258-.833H2.5a1.667 1.667 0 0 1 0-3.334h.075a1.375 1.375 0 0 0 1.258-.9 1.375 1.375 0 0 0-.275-1.516l-.05-.05a1.667 1.667 0 1 1 2.359-2.359l.05.05a1.375 1.375 0 0 0 1.516.275H7.5a1.375 1.375 0 0 0 .833-1.258v-.142a1.667 1.667 0 0 1 3.334 0v.075a1.375 1.375 0 0 0 .833 1.259 1.375 1.375 0 0 0 1.517-.275l.05-.05a1.667 1.667 0 1 1 2.358 2.358l-.05.05a1.375 1.375 0 0 0-.275 1.517v.066a1.376 1.376 0 0 0 1.258.834h.142a1.667 1.667 0 1 1 0 3.333h-.075a1.375 1.375 0 0 0-1.258.833v0Z"/></g><defs><clipPath id="a"><path fill="#fff" transform="translate(0 .849)" d="M0 0h20v20H0z"/></clipPath></defs></svg> <a href="/8_0/myshow/preview.cfm" target="" class="dim dib bb-0 ml2">My Profile</a> </span> <span class="db"> <svg width="18" height="21" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-recommendations_icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M9 .849c-.827 0-1.647.164-2.41.484a6.295 6.295 0 0 0-2.045 1.38A6.369 6.369 0 0 0 3.18 4.778c-.317.772-.48 1.6-.48 2.436 0 3.047-.644 4.941-1.239 6.042-.3.553-.59.917-.792 1.132a2.7 2.7 0 0 1-.275.257l-.003.002a.908.908 0 0 0-.35 1.02.909.909 0 0 0 .325.462.893.893 0 0 0 .535.177h16.198c.193 0 .38-.062.535-.177a.909.909 0 0 0 .316-1.03.909.909 0 0 0-.34-.452l-.003-.002a2.702 2.702 0 0 1-.275-.257 5.403 5.403 0 0 1-.792-1.132c-.594-1.102-1.24-2.995-1.24-6.042 0-.836-.163-1.664-.48-2.436a6.37 6.37 0 0 0-1.365-2.065 6.297 6.297 0 0 0-2.044-1.38A6.244 6.244 0 0 0 9 .849Zm5.96 13.278c.068.126.137.246.205.36H2.835c.069-.114.138-.234.206-.36.756-1.399 1.46-3.597 1.46-6.913a4.57 4.57 0 0 1 1.342-3.17 4.476 4.476 0 0 1 3.158-1.306c1.181 0 2.315.47 3.157 1.307A4.57 4.57 0 0 1 13.5 7.214c0 3.317.704 5.514 1.46 6.913Zm-6.739 4.45a.892.892 0 0 0-1.226-.324.917.917 0 0 0-.33 1.236c.238.414.578.757.988.995a2.679 2.679 0 0 0 2.695 0c.41-.238.75-.581.988-.995a.916.916 0 0 0-.327-1.242.892.892 0 0 0-1.23.33.906.906 0 0 1-.778.452.894.894 0 0 1-.779-.452Z" /></svg> <a href="/8_0/myshow/index.cfm?s=recommendations" target="" class="dim dib bb-0 ml2">Recommendations</a> </span> <span class="db"> <svg width="20" height="21" fill="none" xmlns="http://www.w3.org/2000/svg" class="o-logout_icon"><path d="M7.5 18.349H4.167A1.667 1.667 0 0 1 2.5 16.681V5.015A1.667 1.667 0 0 1 4.167 3.35H7.5M13.333 15.015l4.167-4.167-4.167-4.166M17.5 10.848h-10" stroke-linecap="round" stroke-linejoin="round" /></svg> <button class="btn-reset dim dib bb-0 ml2" @click="logout" class="">Sign Out</button> </span> </div> </div> </span> </li> </ul> <recommendations-modal v-bind:showmodal="showModal" v-bind:rectype="'exhibitor'" v-bind:isloggedinmyshow="false" v-on:close-modal="closeModal()"> </recommendations-modal> </nav> </div> </div> <script> var searchconfig = [{"placeholdertext":"Search by Keyword","isadvanced":0,"displayoptions":"","ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Keyword","element":"keyword","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Exhibitor Name","element":"exhibitorname","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Category","isadvanced":1,"displayoptions":[{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getsearchcategories","display":"Category","element":"category","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Booth","isadvanced":1,"displayoptions":[{"transition":"fade","display":"Grid","active":true,"displayoptioncontentid":0,"default":true,"name":"grid"},{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":false,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Booths","element":"booth","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search By Pavilions","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getPavilions","display":"Pavilions","element":"pavilion","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Advanced","displayoptions":{},"ismain":1,"isfloor":0,"searchfieldtype":"search","hideslotted":0,"numcolumns":1,"datafunction":"","display":"Advanced Search","element":"advanced","searchsize":50,"type":"search"}]; var advancedsearchconfig = [{"placeholdertext":"Search by Keyword","isadvanced":0,"displayoptions":"","ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Keyword","element":"keyword","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Exhibitor Name","element":"exhibitorname","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Category","isadvanced":1,"displayoptions":[{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getsearchcategories","display":"Category","element":"category","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Booth","isadvanced":1,"displayoptions":[{"transition":"fade","display":"Grid","active":true,"displayoptioncontentid":0,"default":true,"name":"grid"},{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":false,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Booths","element":"booth","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search By Pavilions","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getPavilions","display":"Pavilions","element":"pavilion","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Advanced","displayoptions":{},"ismain":1,"isfloor":0,"searchfieldtype":"search","hideslotted":0,"numcolumns":1,"datafunction":"","display":"Advanced Search","element":"advanced","searchsize":50,"type":"search"}]; var keywordsearchconfig = [{"display":"Exhibitors and Sponsors","active":1,"requireplanner":0,"searchsize":50,"section":"exhibitor"},{"display":"Product Categories","active":1,"requireplanner":0,"searchsize":50,"section":"category"},{"display":"Show Features","active":1,"requireplanner":0,"searchsize":50,"section":"showfeature"},{"display":"Special Offers","active":1,"requireplanner":0,"searchsize":50,"section":"special"},{"display":"Booth, Hall","active":1,"requireplanner":0,"searchsize":50,"section":"booth"},{"display":"Brands","active":1,"requireplanner":0,"searchsize":50,"section":"brand"},{"display":"Pavilion","active":1,"requireplanner":0,"searchsize":50,"section":"pavilion"},{"display":"Points of Interest","active":1,"requireplanner":0,"searchsize":50,"section":"room"},{"display":"Collateral","active":1,"requireplanner":0,"searchsize":50,"section":"collateral"},{"display":"Sessions","active":1,"requireplanner":0,"searchsize":50,"section":"session"},{"display":"Session Speakers","active":1,"requireplanner":0,"searchsize":50,"section":"sessionspeaker"},{"display":"Session Tracks","active":1,"requireplanner":0,"searchsize":50,"section":"sessiontrack"}]; var relatedsearchesconfig = {}; var MAXRECENTSEARCHES = 5; var advancedsearchoptions = { exhibitor: ["booth","category","country","exhibitor","exhibitorname","georegion","pavilion","state","tradename"], session: ["audience", "sessiondate", "sessionlevels", "sessionsearch", "sessionspeakers", "sessionsponsor", "sessiontrack", "sessiontype"] }; for (i = 0; i < advancedsearchconfig.length; i++){ var search = advancedsearchoptions["exhibitor"].filter(function(advancedoption){ return advancedsearchconfig[i].element == advancedoption && advancedsearchconfig[i].type == "search"; })[0]; if (typeof search !== "undefined") { advancedsearchconfig[i]["isadvanced"] = 1; } var search = advancedsearchoptions["session"].filter(function(advancedoption){ return advancedsearchconfig[i].element == advancedoption && advancedsearchconfig[i].type == "sessionsearch"; })[0]; if (typeof search !== "undefined") { advancedsearchconfig[i]["isadvanced"] = 1; } } var searchMixin = { computed: { noresults: function(){ return (("totalhits" in this.searchresults && this.searchresults.totalhits == 0 ) ) ? true : false ; }, activesearchconfig: function(){ var activeArray = this.searchconfig.filter(function(item){ return (item.ismain == true); }); return activeArray; }, activeadvancedsearchconfig: function(){ var activeArray = this.advancedsearchconfig.filter(function(item){ return (item.ismain == true); }); return activeArray; }, filteredrecommededsearches: function(){ var vObj = this; if (vObj.recommendedsearches.results.constructor === Array){ var tempResults = vObj.recommendedsearches.results; } else { var tempResults = []; } return { // this filter filters out searches that equal the actual search performed results: tempResults.filter(function(a){ return (a.MYS.search+"".toLowerCase() !== vObj.searchtext+"".toLowerCase() || a.MYS.searchtype.toLowerCase().replace("exhibitor","keyword") !== vObj.searchtype); }) // this filter filters out duplicates. The .replace("keyword", "exhbitor") lets us find exhibitor only exhibitor keywords .filter(function(item, pos, self) { return (self.map(function(x){ return x.MYS.search + '|' + x.MYS.searchtype.replace("keyword","exhibitor"); }).indexOf(item.MYS.search + '|' + item.MYS.searchtype.replace("keyword","exhibitor")) == pos); }) }; }, hasexhibitorsearches: function(){ var returnVal = false; for (var i = 0; i < this.searchconfig.length; i++){ if (this.searchconfig[i].type == "search"){ returnVal = true; break; } } return returnVal; }, hassessionsearches: function(){ var returnVal = false; for (var i = 0; i < this.searchconfig.length; i++){ if (this.searchconfig[i].type == "sessionsearch"){ returnVal = true; break; } } return returnVal; } }, watch: { selectedsearchindex: function(val){ if ("element" in this.searchconfig[val]){ this.searchtype = this.searchconfig[val].element; } } }, data: { breadcrumbcontent: "", show: "all", // this is used to determine whether we want to get all results searchsize: 50, recommendedsize: 6, searchtext: "", searchtype: searchconfig[0].element, searchperformed: false, selectedselectoptions: [], selectedsearchindex: 0, searchresults: { searchtext: "", totalhits: 0, results: {} }, recommendedexhibitors: { results: [] }, recommendedsearches: { results: [] }, recommendedcategories: { results: [] }, searchconfig: searchconfig, advancedsearchconfig: advancedsearchconfig, recommendedexhibitorsconfig: {}, recommendedcategoriesconfig: {}, relatedsearchesconfig: relatedsearchesconfig, keywordsearchconfig: keywordsearchconfig, // searchsizeconfig: searchsizeconfig, recentsearches: [], searching: false, searchajaxcount:0, errors: [], error: false, globalsearchtype: "exhibitor" }, methods: { updateBreadcrumb: function(requestArray){ var vObj = this; // ajaxJsonPost() defined in _global-mixin vObj.ajaxJsonPost(vObj.path2approot + '/ajax/remote-proxy.cfm?action=breadcrumbs&function=update', JSON.stringify(requestArray), function(response){ // success vObj.breadcrumbcontent = response["DATA"].breadcrumbcontent; return response["DATA"]; }, function(response){ // error vObj.error = true; vObj.errors.push.apply(vObj.errors, vObj.getAjaxErrors(response)); // push add array to errors return {}; }); // end ajaxJsonPost }, getRecentSearches: function(){ var vObj = this; if (this.hasSessionStorage()){ var recentSearchArrayString = sessionStorage.getItem("recentsearches"); // if array if (recentSearchArrayString && (this.isJsonString(recentSearchArrayString))){ var recentSearchArray = JSON.parse(recentSearchArrayString); vObj.recentsearches = recentSearchArray.filter(function(obj){ return obj.globalsearchtype == vObj.globalsearchtype; }); } } }, getVuePath: function(){ return "/#" + this.$router.currentRoute.path; }, updateURLStringAlt: function(){ var vueURLParams = encodeURIComponent(this.getVuePath()) , vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=misc&function=updateURLStringAlt&queryString='+vueURLParams, // ajaxGet() defined in _global-mixin function(response){ // success // do nothing }, function(response){ // error vObj.error = true; vObj.errors.push.apply(vObj.errors, vObj.getAjaxErrors(response)); // push add array to errors }); // end ajaxGet }, resetAll: function(){ this.clearSearchResults(); this.clearRecommendedResults(); this.show = ""; this.selectedsearchindex = 0 this.searching = false; this.recentsearches = []; this.searchperformed = false; }, clearSearchResults: function(){ this.searchresults = { searchtext: "", totalhits: 0, results: {} }; }, clearRecommendedResults: function(){ this.recommendedexhibitors = { results: {} }; this.recommendedsearches = { results: {} }; }, resetErrors: function(){ this.errors = []; this.error = false; }, setSelectedIndexByType: function(type) { for (var i = 0; i < this.searchconfig.length; i++){ if (this.searchconfig[i].element === type){ this.selectedsearchindex = i; break; } } }, getSearchConfigByType: function(type){ var returnConfig = {}; for (var i = 0; i < this.searchconfig.length; i++){ if (this.searchconfig[i].element === type){ returnConfig = this.searchconfig[i]; break; } } return returnConfig; }, saveRecentSearch: function(globalsearchtype, searchtype, search, searchdisplay){ var recentSearchArray = []; if (this.hasSessionStorage()){ var recentSearchArrayString = sessionStorage.getItem("recentsearches"); // if array if (recentSearchArrayString && (this.isJsonString(recentSearchArrayString))){ recentSearchArray = JSON.parse(recentSearchArrayString); } if (globalsearchtype && searchtype && search && searchdisplay){ var alreadyinarray = false; // check if already exists in array for (var i = 0; i < recentSearchArray.length; i++){ if(recentSearchArray[i].globalsearchtype === globalsearchtype && recentSearchArray[i].searchtype == searchtype && recentSearchArray[i].search == search && recentSearchArray[i].searchdisplay == searchdisplay){ alreadyinarray = true; } } // if not already in array then add if (!alreadyinarray){ var searchObj = { globalsearchtype: globalsearchtype, searchtype: searchtype, search: search, searchdisplay: searchdisplay }; recentSearchArray.unshift(searchObj); } // now take top X if over max if (recentSearchArray.length > MAXRECENTSEARCHES){ recentSearchArray = recentSearchArray.slice(0, MAXRECENTSEARCHES); } } sessionStorage.setItem("recentsearches", JSON.stringify(recentSearchArray)); } } } }; </script> <script> var quicklistconfig = [{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/featured-exhibitors.cfm","displaytitlecontentid":278,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g clip-path=\\\"url(#clip0_122_255)\\\"><path d=\\\"M12 .288l2.833 8.718H24l-7.417 5.389 2.833 8.718L12 17.725l-7.417 5.388 2.833-8.718L0 9.006h9.167L12 .288z\\\" fill=\\\"#000\\\"/></g><defs><clipPath id=\\\"clip0_122_255\\\"><path fill=\\\"#fff\\\" d=\\\"M0 0h24v24H0z\\\"/></clipPath></defs></svg>\",\"linkid\":\"featuredexhibitors\",\"url\":\"explore/featured-exhibitors.cfm\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_122_255)\"><path d=\"M12 .288l2.833 8.718H24l-7.417 5.389 2.833 8.718L12 17.725l-7.417 5.388 2.833-8.718L0 9.006h9.167L12 .288z\" fill=\"#000\"/></g><defs><clipPath id=\"clip0_122_255\"><path fill=\"#fff\" d=\"M0 0h24v24H0z\"/></clipPath></defs></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/explore/featured-exhibitors.cfm","hasmultiplelinks":0,"displaytitle":"Featured Exhibitors","requireplanner":0,"name":"featuredexhibitors","tileindex":1,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"floorplan/","displaytitlecontentid":631,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12 0C8.852 0 6 2.553 6 5.702c0 4.682 4.783 5.177 6 12.298 1.217-7.121 6-7.616 6-12.298C18 2.553 15.149 0 12 0Zm0 8a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 8Zm12 16-6.707-2.427L12 24l-5.581-2.427L0 24l4-9 3.96-1.584c.38.516.741 1.08 1.061 1.729l-3.523 1.41-1.725 3.88 2.672-1.01 1.506-2.687-.635 3.044 4.189 1.789L12 19.55l.465 2.024 4.15-1.89-.618-3.033 1.572 2.896 2.732.989-1.739-3.978-3.581-1.415c.319-.65.681-1.215 1.062-1.731L20.064 15 24 24Z\\\" fill=\\\"#000\\\"/></svg>\",\"linkid\":\"floorplan\",\"url\":\"floorplan/\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 0C8.852 0 6 2.553 6 5.702c0 4.682 4.783 5.177 6 12.298 1.217-7.121 6-7.616 6-12.298C18 2.553 15.149 0 12 0Zm0 8a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 8Zm12 16-6.707-2.427L12 24l-5.581-2.427L0 24l4-9 3.96-1.584c.38.516.741 1.08 1.061 1.729l-3.523 1.41-1.725 3.88 2.672-1.01 1.506-2.687-.635 3.044 4.189 1.789L12 19.55l.465 2.024 4.15-1.89-.618-3.033 1.572 2.896 2.732.989-1.739-3.978-3.581-1.415c.319-.65.681-1.215 1.062-1.731L20.064 15 24 24Z\" fill=\"#000\"/></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/floorplan/","hasmultiplelinks":0,"displaytitle":"Floor Plan","requireplanner":0,"name":"floorplan","tileindex":3,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/exhibitor-categories.cfm","displaytitlecontentid":118714,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.362 2C15.518 2 14 8 14 8s6-1.65 6 2.457V22H4V2h7.362zm.827-2H2v24h20V9.614C22 7.223 15.352 0 12.189 0zM17 13h-3v-1h3v1zm0 2h-3v1h3v-1zm0 3H7v1h10v-1zm-5-6H7v4h5v-4z\\\" fill=\\\"#000\\\"/></svg>\",\"linkid\":\"exhibitorcategories\",\"url\":\"explore/exhibitor-categories.cfm\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.362 2C15.518 2 14 8 14 8s6-1.65 6 2.457V22H4V2h7.362zm.827-2H2v24h20V9.614C22 7.223 15.352 0 12.189 0zM17 13h-3v-1h3v1zm0 2h-3v1h3v-1zm0 3H7v1h10v-1zm-5-6H7v4h5v-4z\" fill=\"#000\"/></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/explore/exhibitor-categories.cfm","hasmultiplelinks":0,"displaytitle":"Product Categories","requireplanner":0,"name":"exhibitorcategories","tileindex":2,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/exhibitor-gallery.cfm","displaytitlecontentid":186720,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M23.111 20.058L18.134 15.081C19.099 13.561 19.657 11.759 19.657 9.83C19.657 4.41 15.248 0 9.828 0C4.408 0 0 4.41 0 9.83C0 15.25 4.408 19.66 9.829 19.66C11.663 19.66 13.381 19.155 14.851 18.277L19.872 23.298C22.016 25.439 25.256 22.202 23.111 20.058ZM3.047 9.83C3.047 6.091 6.09 3.048 9.829 3.048C13.568 3.048 16.611 6.09 16.611 9.83C16.611 13.57 13.568 16.612 9.829 16.612C6.09 16.612 3.047 13.569 3.047 9.83ZM5.057 8.066C7.041 3.467 13.721 4 14.979 8.815C12.445 5.841 7.986 5.521 5.057 8.066Z\\\"/></svg>\",\"linkid\":\"exhibitoralpha2\",\"url\":\"explore/exhibitor-gallery.cfm\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M23.111 20.058L18.134 15.081C19.099 13.561 19.657 11.759 19.657 9.83C19.657 4.41 15.248 0 9.828 0C4.408 0 0 4.41 0 9.83C0 15.25 4.408 19.66 9.829 19.66C11.663 19.66 13.381 19.155 14.851 18.277L19.872 23.298C22.016 25.439 25.256 22.202 23.111 20.058ZM3.047 9.83C3.047 6.091 6.09 3.048 9.829 3.048C13.568 3.048 16.611 6.09 16.611 9.83C16.611 13.57 13.568 16.612 9.829 16.612C6.09 16.612 3.047 13.569 3.047 9.83ZM5.057 8.066C7.041 3.467 13.721 4 14.979 8.815C12.445 5.841 7.986 5.521 5.057 8.066Z\"/></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/explore/exhibitor-gallery.cfm","hasmultiplelinks":0,"displaytitle":"Exhibitors and Sponsors Alpha List","requireplanner":0,"name":"exhibitoralpha2","tileindex":0,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"Shortcuts","active":1,"backgroundcolor":"hsla(203, 75%, 97%, 0.5)","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/collateral.cfm","displaytitlecontentid":45062,"linkorder":0,"linktype":"extralinks","quicklistdata":"{\"resultcount\":false,\"requireplanner\":false,\"newtab\":false,\"linkid\":\"collateral\",\"url\":\"explore/collateral.cfm\"}","svgpath":"","icon":"","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtYXNzZXRzIiwia2V5IjoidnRzL2ltZy90aWxlLXRleHR1cmVzL3RleHR1cmUtNi5wbmciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjYwMCwiaGVpZ2h0Ijo2MDAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==","vtsurl":"/8_0/explore/collateral.cfm","hasmultiplelinks":1,"displaytitle":"Press Releases","requireplanner":0,"name":"collateral","tileindex":-1,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"Shortcuts","active":1,"backgroundcolor":"hsla(203, 75%, 97%, 0.5)","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"exhibitor/exhibitor-list.cfm?export=pdf","displaytitlecontentid":48239,"linkorder":1,"linktype":"extralinks","quicklistdata":"{\"resultcount\":false,\"requireplanner\":false,\"newtab\":false,\"linkid\":\"exhibitorpdf\",\"url\":\"exhibitor/exhibitor-list.cfm?export=pdf\"}","svgpath":"","icon":"","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtYXNzZXRzIiwia2V5IjoidnRzL2ltZy90aWxlLXRleHR1cmVzL3RleHR1cmUtNi5wbmciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjYwMCwiaGVpZ2h0Ijo2MDAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==","vtsurl":"/8_0/exhibitor/exhibitor-list.cfm?export=pdf","hasmultiplelinks":1,"displaytitle":"Exhibitor PDF List","requireplanner":0,"name":"exhibitorpdf","tileindex":-1,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0}]; var sessionquicklistconfig = [{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/session-speakers.cfm","displaytitlecontentid":2767,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M12.238 5.82c.1-1.225.346-2.704 1.742-4.1a5.87 5.87 0 1 1 8.301 8.3c-1.402 1.4-2.881 1.646-4.102 1.74l-5.941-5.94Zm-2.685.14 8.484 8.486-6.363 6.365-2.162-2.16L2.659 24 0 21.338l5.346-6.856-2.158-2.158L9.553 5.96Zm-3.536 6.365 5.657 5.657 3.535-3.536L9.553 8.79l-3.536 3.536Zm3.62.088.764.4-1.343 1.342 1.776.611 1.756-1.757-2.41-1.139-.543.543Z\\\" fill=\\\"#000\\\"/></svg>\",\"linkid\":\"sessionspeakers\",\"url\":\"explore/session-speakers.cfm\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.238 5.82c.1-1.225.346-2.704 1.742-4.1a5.87 5.87 0 1 1 8.301 8.3c-1.402 1.4-2.881 1.646-4.102 1.74l-5.941-5.94Zm-2.685.14 8.484 8.486-6.363 6.365-2.162-2.16L2.659 24 0 21.338l5.346-6.856-2.158-2.158L9.553 5.96Zm-3.536 6.365 5.657 5.657 3.535-3.536L9.553 8.79l-3.536 3.536Zm3.62.088.764.4-1.343 1.342 1.776.611 1.756-1.757-2.41-1.139-.543.543Z\" fill=\"#000\"/></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/explore/session-speakers.cfm","hasmultiplelinks":0,"displaytitle":"Speakers","requireplanner":0,"name":"sessionspeakers","tileindex":1,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/session-tracks.cfm","displaytitlecontentid":15173,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.362 2C15.518 2 14 8 14 8s6-1.65 6 2.457V22H4V2h7.362zm.827-2H2v24h20V9.614C22 7.223 15.352 0 12.189 0zM17 13h-3v-1h3v1zm0 2h-3v1h3v-1zm0 3H7v1h10v-1zm-5-6H7v4h5v-4z\\\" fill=\\\"#000\\\"/></svg>\",\"linkid\":\"sessiontracks\",\"url\":\"explore/session-tracks.cfm\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.362 2C15.518 2 14 8 14 8s6-1.65 6 2.457V22H4V2h7.362zm.827-2H2v24h20V9.614C22 7.223 15.352 0 12.189 0zM17 13h-3v-1h3v1zm0 2h-3v1h3v-1zm0 3H7v1h10v-1zm-5-6H7v4h5v-4z\" fill=\"#000\"/></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/explore/session-tracks.cfm","hasmultiplelinks":0,"displaytitle":"Tracks","requireplanner":0,"name":"sessiontracks","tileindex":2,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0},{"displaytitle_extralinks":"","active":1,"backgroundcolor":"","searchoption":"","vtsurl_target":"","showresultcount":0,"url":"explore/session-gallery.cfm","displaytitlecontentid":51573,"linkorder":0,"linktype":"tile","quicklistdata":"{\"requireplanner\":false,\"resultcount\":false,\"newtab\":false,\"icon\":\"<svg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g clip-path=\\\"url(#clip0_122_242)\\\"><path d=\\\"M23.111 20.058l-4.977-4.977a9.767 9.767 0 001.523-5.251c0-5.42-4.409-9.83-9.829-9.83C4.408 0 0 4.41 0 9.83s4.408 9.83 9.829 9.83a9.764 9.764 0 005.022-1.383l5.021 5.021c2.144 2.141 5.384-1.096 3.239-3.24zM3.047 9.83a6.79 6.79 0 016.782-6.782 6.79 6.79 0 016.782 6.782 6.79 6.79 0 01-6.782 6.782A6.79 6.79 0 013.047 9.83zm2.01-1.764c1.984-4.599 8.664-4.066 9.922.749a7.002 7.002 0 00-9.922-.749z\\\" fill=\\\"#000\\\"/></g><defs><clipPath id=\\\"clip0_122_242\\\"><path fill=\\\"#fff\\\" d=\\\"M0 0h24v24H0z\\\"/></clipPath></defs></svg>\",\"linkid\":\"sessiongallery\",\"url\":\"explore/session-gallery.cfm\"}","svgpath":"","icon":"<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_122_242)\"><path d=\"M23.111 20.058l-4.977-4.977a9.767 9.767 0 001.523-5.251c0-5.42-4.409-9.83-9.829-9.83C4.408 0 0 4.41 0 9.83s4.408 9.83 9.829 9.83a9.764 9.764 0 005.022-1.383l5.021 5.021c2.144 2.141 5.384-1.096 3.239-3.24zM3.047 9.83a6.79 6.79 0 016.782-6.782 6.79 6.79 0 016.782 6.782 6.79 6.79 0 01-6.782 6.782A6.79 6.79 0 013.047 9.83zm2.01-1.764c1.984-4.599 8.664-4.066 9.922.749a7.002 7.002 0 00-9.922-.749z\" fill=\"#000\"/></g><defs><clipPath id=\"clip0_122_242\"><path fill=\"#fff\" d=\"M0 0h24v24H0z\"/></clipPath></defs></svg>","type":"core","imageurl":"https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9zYXRlbGxpdGUyMDI1L2xhbmRpbmcvaW1hZ2VzLzI2NzczRjQ4LUVFMjMtQkYwNS1CRkZBOENBRDdBQjA4OTM4LmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6ODAwLCJoZWlnaHQiOjY1MCwiZml0IjoiY292ZXIiLCJxdWFsaXR5IjoiNzAifX19","vtsurl":"/8_0/explore/session-gallery.cfm","hasmultiplelinks":0,"displaytitle":"All Sessions","requireplanner":0,"name":"sessiongallery","tileindex":0,"module":"Exhibitors","groupid":0,"buttoncolor":"","hidelabel":0}]; var masterlinkconfig = [{"module":"Exhibitors","showid":"Master","label":"Brochures","link":"explore/collateral.cfm?type=brochure","linkid":"brochure"},{"module":"Exhibitors","showid":"Master","label":"Exhibitor Collateral","link":"explore/collateral.cfm","linkid":"collateral"},{"module":"Exhibitors","showid":"Master","label":"Countries","link":"explore/countries.cfm","linkid":"countries"},{"module":"Conferences","showid":"Master","label":"Education Units","link":"explore/educationunits.cfm","linkid":"educationunits"},{"module":"Exhibitors","showid":"Master","label":"Exhibitor Alpha List","link":"explore/exhibitor-alphalist.cfm","linkid":"exhibitoralpha"},{"module":"Exhibitors","showid":"Master","label":"Product Categories","link":"explore/exhibitor-categories.cfm","linkid":"exhibitorcategories"},{"module":"Exhibitors","showid":"Master","label":"Exhibitor PDF List","link":"exhibitor/exhibitor-list.cfm?export=pdf","linkid":"exhibitorpdf"},{"module":"Exhibitors","showid":"Master","label":"Search The Show","link":"index.cfm","linkid":"exhibitorsearch"},{"module":"Exhibitors","showid":"Master","label":"Featured Exhibitors","link":"explore/featured-exhibitors.cfm","linkid":"featuredexhibitors"},{"module":"Conferences","showid":"Master","label":"Key Note Sessions","link":"explore/featured-sessions.cfm","linkid":"featuredsessions"},{"module":"","showid":"Master","label":"Floorplan","link":"floorplan/","linkid":"floorplan"},{"module":"Exhibitors","showid":"Master","label":"Exhibitor Meetings","link":"explore/meetings.cfm","linkid":"meetings"},{"module":"","showid":"Master","label":"My Show Planner","link":"myshow/index.cfm","linkid":"myshowlogin"},{"module":"Exhibitors","showid":"Master","label":"New Exhibitors","link":"explore/newexhibitor.cfm","linkid":"newexhibitors"},{"module":"Exhibitors","showid":"Master","label":"Press Releases","link":"explore/collateral.cfm?type=press","linkid":"press"},{"module":"Exhibitors","showid":"Master","label":"New Products and Technologies","link":"explore/products.cfm","linkid":"products"},{"module":"Sessions","showid":"Master","label":"Session Alpha List","link":"explore/session-alphalist.cfm","linkid":"sessionalpha"},{"module":"Conferences","showid":"Master","label":"Session Categories","link":"explore/session-categories.cfm","linkid":"sessioncategories"},{"module":"","showid":"Master","label":"All Sessions","link":"explore/session-fulllist.cfm","linkid":"sessionfulllist"},{"module":"Sessions","showid":"Master","label":"Session Grid","link":"sessions/session-grid.cfm","linkid":"sessiongrid"},{"module":"Sessions","showid":"Master","label":"Session Search","link":"sessions/index.cfm","linkid":"sessionsearch"},{"module":"Sessions","showid":"Master","label":"Session Speakers","link":"explore/session-speakers.cfm","linkid":"sessionspeakers"},{"module":"Sessions","showid":"Master","label":"Session Tracks","link":"explore/session-tracks.cfm","linkid":"sessiontracks"},{"module":"Exhibitors","showid":"Master","label":"Exhibitor Spotlights","link":"explore/show-features.cfm","linkid":"showfeatures"},{"module":"Exhibitors","showid":"Master","label":"Show Specials","link":"explore/specials.cfm","linkid":"specials"},{"module":"Exhibitors","showid":"Master","label":"White Papers","link":"explore/collateral.cfm?type=whitepaper","linkid":"whitepaper"}]; var navconfig = {"nav":[{"target":"","active":1,"mobileonly":0,"hasdropdown":false,"dropdownlinks":[],"displayorder":1.0,"linkid":"exhibitorsearch","module":"exhibitors","displaytitlecontentid":125,"iscurrentpage":false,"myscore":0,"newwindow":0,"link":"/8_0/index.cfm","type":"myslink","ismyshow":false,"displaytitle":"Home"},{"target":"","active":1,"mobileonly":0,"hasdropdown":false,"dropdownlinks":[],"displayorder":2.0,"linkid":"exhibitoralpha2","module":"Exhibitors","displaytitlecontentid":186718,"iscurrentpage":true,"myscore":0,"newwindow":0,"link":"/8_0/explore/exhibitor-gallery.cfm?nav=1","type":"myslink","ismyshow":false,"displaytitle":"Exhibitors and Sponsors"},{"target":"","active":1,"mobileonly":0,"hasdropdown":false,"dropdownlinks":[],"displayorder":3.0,"linkid":"floorplan","module":"","displaytitlecontentid":631,"iscurrentpage":false,"myscore":0,"newwindow":0,"link":"/8_0/floorplan/","type":"myslink","ismyshow":false,"displaytitle":"Floor Plan"},{"target":"","active":1,"mobileonly":0,"hasdropdown":false,"dropdownlinks":[],"displayorder":4.0,"linkid":"40636233-A848-BBFB-ADE4132F52779B3E","module":"","displaytitlecontentid":186719,"iscurrentpage":false,"myscore":0,"newwindow":0,"link":"http://www.satshow.com/","type":"externallink","ismyshow":false,"displaytitle":"SATELLITE Website"},{"target":"","active":1,"mobileonly":0,"hasdropdown":true,"dropdownlinks":[{"target":"","active":true,"mobileonly":false,"displayorder":1.0,"linkid":"planner","module":"","displaytitlecontentid":1004,"myscore":true,"newwindow":false,"link":"/8_0/myshow/index.cfm","type":"myslink","displaytitle":"My Planner"},{"target":"","active":true,"mobileonly":false,"displayorder":2.0,"linkid":"profile","module":"","displaytitlecontentid":36434,"myscore":true,"newwindow":false,"link":"/8_0/myshow/preview.cfm","type":"myslink","displaytitle":"My Profile"},{"target":"","active":true,"mobileonly":false,"displayorder":3.0,"linkid":"chat","module":"","displaytitlecontentid":110313,"myscore":true,"newwindow":false,"link":"/8_0/myshow/chat.cfm","type":"myslink","displaytitle":"Messages"},{"target":"","active":true,"mobileonly":false,"displayorder":4.0,"linkid":"recommendations","module":"","displaytitlecontentid":38109,"myscore":true,"newwindow":false,"link":"/8_0/myshow/index.cfm?s=recommendations","type":"myslink","displaytitle":"Recommendations"},{"target":"","active":true,"mobileonly":false,"displayorder":5.0,"linkid":"logout","module":"","displaytitlecontentid":160122,"myscore":true,"newwindow":false,"link":"/8_0/login/logout.cfm","type":"myslink","displaytitle":"Sign Out"}],"displayorder":5.0,"linkid":"myshowlogin","module":"","displaytitlecontentid":271,"iscurrentpage":false,"myscore":0,"newwindow":0,"link":"/8_0/myshow/index.cfm","type":"dropdownmenu","ismyshow":true,"displaytitle":"My Show Planner"}]}; var quicklistMixin = { mixins: [searchMixin, messagedisplayMixin], data: function() { return { globalquicklistconfig: quicklistconfig, sessionquicklistconfig: sessionquicklistconfig, masterlinkconfig: masterlinkconfig, navconfig: navconfig, name: "" }; }, mounted: function(){ var vObj = this; // fixing IE11 issue - https://github.com/vuejs/vue-router/issues/1849 if (vObj.detectIE()) { window.addEventListener('hashchange', function() { var currentPath = window.location.hash.slice(1) if (vObj.$route.path !== currentPath) { vObj.$router.push(currentPath) } }, false); } }, computed: { quicklistconfig: function(){ var config = { displayoptions: [] }; var joinedconfig = this.globalquicklistconfig.concat(this.sessionquicklistconfig); // TODO :: STEPHEN :: wil this be a problem if session configs have a ql with the same name? for (var i = 0; i < joinedconfig.length; i++){ if (joinedconfig[i].name == this.name){ config = joinedconfig[i]; } } return config; }, issessionquicklist: function(){ var returnval = false; for (var i = 0; i < this.sessionquicklistconfig.length; i++){ if (this.name == this.sessionquicklistconfig[i].name){ returnval = true; break; } } return returnval; }, isnavclick: function(){ var navClick = (this.thispageurl.indexOf("nav=1") >= 0) ? true : false; return navClick; }, navtitle: function(){ var urlToCheck = this.getCurrentURL().replace("/#/", "").replace("#/", ""); var urlToCheck2 = this.thispageurl.replace("/#/", "").replace("#/", ""); for (var i = 0; i < this.navconfig.nav.length; i++){ if (urlToCheck === this.navconfig.nav[i].link || urlToCheck2 === this.navconfig.nav[i].link || urlToCheck2 === this.navconfig.nav[i].link+"/"){ return this.navconfig.nav[i].displaytitle; } } return ""; }, navtitlecontentid: function(){ var urlToCheck = this.getCurrentURL().replace("#/", ""); var urlToCheck2 = this.thispageurl.replace("/#/", "").replace("#/", ""); for (var i = 0; i < this.navconfig.nav.length; i++){ if (urlToCheck === this.navconfig.nav[i].link || urlToCheck2 === this.navconfig.nav[i].link || urlToCheck2 === this.navconfig.nav[i].link+"/"){ return this.navconfig.nav[i].displaytitlecontentid; } } return 0; }, customtitle: function(){ var navClick = (this.thispageurl.indexOf("nav=1") >= 0) ? true : false; if (navClick) { return this.navtitle; } else if (this.quicklistconfig.displaytitle){ return this.quicklistconfig.displaytitle; } else if (this.navtitle){ return this.navtitle; } else { var returnString = ""; var urlToCheck = this.getCurrentURL().replace("?nav=1","").replace("&nav=1","").replace("#/", "").replace(this.path2approot+"/", ""); var urlToCheck2 = this.thispageurl.replace("?nav=1","").replace("&nav=1","").replace("#/", "").replace(this.path2approot+"/", ""); for (var i = 0; i < this.masterlinkconfig.length; i++){ if (urlToCheck === this.masterlinkconfig[i].link || urlToCheck2 === this.masterlinkconfig[i].link){ returnString = this.masterlinkconfig[i].label; } } return returnString; } }, customtitlecontentid: function(){ var navClick = (this.thispageurl.indexOf("nav=1") >= 0) ? true : false; if (navClick) { // var urlToCheck = this.getCurrentURL().replace("?nav=1","").replace("&nav=1","").replace("#/", "").replace(this.path2approot, ""); console.log(urlToCheck); return this.navtitlecontentid; } else if (this.quicklistconfig.displaytitlecontentid){ return this.quicklistconfig.displaytitlecontentid; } else if (this.navtitlecontentid){ return this.navtitlecontentid; } else { return ""; } } }, created: function(){ this.performSearch(); }, methods: { performSearch: function(onSuccess){ var action = "search" , search = this.customURIEncode(this.searchtext+"".trim()) , searchtype = this.searchtype , searchsize = this.searchsize , show = this.customURIEncode(this.show+"".trim()) , vObj = this; if (this.searchtype){ vObj.searchperformed = true; vObj.clearSearchResults(); vObj.searching = true; vObj.clearLazyLoadSearchCounts(); if (vObj.issessionquicklist){ var resettto = "resetsessions"; } else { var resettto = "reset"; } // update breadcrumb var response = vObj.updateBreadcrumb([{ title: vObj.customtitle, titlecontentid: vObj.customtitlecontentid, scriptname: vObj.thispageurl, querystring: "", resetto: resettto }]); // ajaxGet() defined in _global-mixin vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=' + action + "&search=" + search + "&searchtype=" + searchtype + "&show=" + show + vObj.getLazyLoadURLString(), function(response){ // success vObj.searching = false; // set results vObj.searchresults["searchtext"] = response["DATA"].searchtext+""; vObj.searchresults["totalhits"] = response["DATA"].totalhits; vObj.searchresults["results"] = response["DATA"].results; if (onSuccess !== undefined){ onSuccess(); } }, function(error){ // error vObj.searching = false; vObj.showMessage("error", "Error loading data"); }); // end ajaxGet } else { this.searchresults["results"] = {}; } }, loadMoreResults: function(searchsection){ var start = -1; var vObj = this; var search = vObj.searchtext+""; var searchtype = this.searchtype; var show = vObj.show; var action = "search"; start = vObj.searchresults["results"][searchsection]["start"]; start += vObj.searchresults["results"][searchsection]["hit"].length; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=' + action + "&search=" + search + "&searchtype=" + searchtype +"&searchsize=" + this.searchsize + "&start=" + start + "&show=" + searchsection + "&lazyload=true", // ajaxGet() defined in _global-mixin function(response){ // success vObj.searching = false; vObj.searchresults["results"][searchsection]["hit"] = vObj.searchresults["results"][searchsection]["hit"].concat(response["DATA"]["results"][searchsection]["hit"]); vObj.saveLazyLoadSearchCounts(); }, function(response){ // error vObj.showMessage("error", "Error loading more searches"); vObj.searchajaxcount--; vObj.searching = false; vObj.error = true; }); // end ajaxGet }, viewAllResults: function(searchsection){ var start = -1; var vObj = this; var search = vObj.searchtext+""; var searchtype = this.searchtype; var show = vObj.show; var action = "search"; var size = vObj.searchresults["results"][searchsection]["found"] vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=' + action + "&search=" + search + "&searchtype=" + searchtype +"&searchsize=" + size + "&start=0" + "&show=" + searchsection + "&lazyload=true" + "&size-" + searchsection + "=" + size, // ajaxGet() defined in _global-mixin function(response){ // success vObj.searching = false; vObj.searchresults["results"][searchsection]["hit"] = response["DATA"]["results"][searchsection]["hit"]; }, function(response){ // error vObj.showMessage("error", "Error loading more searches"); vObj.searchajaxcount--; vObj.searching = false; vObj.error = true; }); // end ajaxGet }, saveLazyLoadSearchCounts: function(){ if (this.hasSessionStorage()){ var lazyLoadSearchCounts = {}; var pageurl = this.getSearchURL(); var countObj = {}; if (sessionStorage.getItem('lazyloadsearchcounts') ){ lazyLoadSearchCounts = JSON.parse(sessionStorage.getItem('lazyloadsearchcounts')); } for (key in this.searchresults.results){ countObj[key] = this.searchresults.results[key].hit.length; } lazyLoadSearchCounts[pageurl] = countObj; sessionStorage.setItem('lazyloadsearchcounts', JSON.stringify(lazyLoadSearchCounts)); } }, clearLazyLoadSearchCounts: function(){ if (this.hasSessionStorage()){ var pageurl = this.getSearchURL(); var lazyLoadSearchCounts = {}; if (sessionStorage.getItem('lazyloadsearchcounts') ){ lazyLoadSearchCounts = JSON.parse(sessionStorage.getItem('lazyloadsearchcounts')); } if (!(pageurl in lazyLoadSearchCounts)) { sessionStorage.removeItem('lazyloadsearchcounts'); } } }, getLazyLoadURLString: function(){ var returnString = ""; var pageurl = this.getSearchURL(); if (this.hasSessionStorage()){ var lazyLoadSearchCounts = {}; if (sessionStorage.getItem('lazyloadsearchcounts') ){ lazyLoadSearchCounts = JSON.parse(sessionStorage.getItem('lazyloadsearchcounts')); } if (pageurl in lazyLoadSearchCounts){ for (key in lazyLoadSearchCounts[pageurl]){ returnString += "&size-" + key + "=" + lazyLoadSearchCounts[pageurl][key]; } } } return returnString; }, getSearchURL: function(){ // return this.path2approot + "/#/searchtype/" + this.searchtype + "/search/" + this.searchtext; return window.location.href.replace(this.httphost, ""); } } }; </script> <script> // search display mixin var searchDisplayMixin = { // props: ["searchtext", "searchtype", "displayoptions", "showheader", "showresultcount", "defaultselectedview", "selectedview"], props: { searchtext: { type: String, default: "" }, searchtype: { type: String, default: "" }, show: { type: String, default: "" }, floorplanresultsurl: { type: String, default: "" }, displayoptions: { type: Array, default: function () { return [] } }, showheader: { type: [Boolean,Number], default: true }, showresultcount: { type: [Boolean,Number], default: true }, defaultselectedview: { type: String, default: "" }, selectedview: { type: String, default: "grid" }, searchconfig:{ type: Array, default: function(){ return [] } }, keywordsearchconfig:{ type: Array, default: function(){ return [] } } }, data: function(){ return { } }, methods: { getUniqueSessionDays: function(key){ if(key == undefined) { var key = 'session'; } var dayArray = []; var dayStruct = {}; if ("searchresults" in this && "results" in this.searchresults && key in this.searchresults.results){ for (var i = 0; i < this.searchresults.results[key].hit.length; i++){ var currentDate = this.searchresults.results[key].hit[i].scheduledate; dayStruct[currentDate] = true; } } dayArray = Object.keys(dayStruct); return dayArray; }, isSelected: function(selectedview){ return (this.selectedview == selectedview); }, switchDisplay: function(selectedview){ this.selectedview = selectedview; }, getSessionsBySchedule: function(results){ var returnArray = []; var vObj = this; for (var i = 0; i < results.length; i++){ for (var j = 0; j < results[i].MYS.scheduleid_la.length; j++){ var tracktitle = '' if ('tracktitle_la' in results[i].MYS){ tracktitle = results[i].MYS.tracktitle_la; } var scheduleObj = { scheduleid: results[i].MYS.scheduleid_la[j], location: results[i].MYS.schedulelocation_ta[j], title: results[i].MYS.sessiontitle_t, tracktitle: tracktitle, description: results[i].MYS.sessiontitle_t, scheduledate: vObj.toDate(results[i].MYS.scheduledate_da[j]), starttime: vObj.toDate(results[i].MYS.schedulestarttime_da[j]), endtime: vObj.toDate(results[i].MYS.scheduleendtime_da[j]), addedtoplanner: results[i].MYS.addedtoplanner_la[j] }; returnArray.push(scheduleObj); } } returnArray.sort(function(a,b){ if (a.starttime < b.starttime) return -1; if (a.starttime > b.starttime) return 1; return 0; }); // sort array by date return returnArray; }, getSearchConfigByType: function(type){ var returnConfig = {}; for (var i = 0; i < this.searchconfig.length; i++){ if (this.searchconfig[i].element === type){ returnConfig = this.searchconfig[i]; break; } } return returnConfig; } }, computed:{ sectionheaderdisplay: function(){ var returntext = (this.content.displayResultHeader) ? this.content.displayResultHeader: ""; if (this.searchtype == "keyword" || this.searchtype == "sessionkeyword"){ for (var i = 0; i < this.keywordsearchconfig.length; i++){ if (this.keywordsearchconfig[i].section == this.resultsection){ returntext = this.keywordsearchconfig[i].display; break; } } } else { for (var i = 0; i < this.searchconfig.length; i++){ if (this.searchconfig[i].element == this.resultsection){ returntext = this.searchconfig[i].display; } } } return returntext; }, activedisplayoptions:function(){ return this.displayoptions; }, defaultdisplayoption: function(){ var defaultVal = "grid"; if (this.activedisplayoptions.length == 1){ defaultVal = this.activedisplayoptions[0].name; } else { for (var i = 0; i < this.activedisplayoptions.length; i++){ if (this.activedisplayoptions[i].default) { defaultVal = this.activedisplayoptions[i].name; break; } } } return defaultVal; } } }; </script> <script type="text/x-template" id="exhibitor-result-tr-template"> <tr class="js-List justify-between" v-if="$mq != 'large'"> <td class="is-hidden_small" v-if="intersected"> <span> <div v-if="logo !== '' && iscrossref != 1" class="mr3 pa2 flex-Thumb thumb-Border"> <a v-bind:href="exhURL()"> <v-lazy-image v-bind:src="logo" v-bind:alt=exhname v-bind:title=exhname class="mw-100" v-bind:src-placeholder="placeholderimg" onerror="this.onerror=null;this.src='/8_0/assets/imgs/1x1.gif';" /> </a> </div> <div v-else> </div> </span> </td> <td v-if="intersected && brand"> {{brand}} </td> <td v-if="intersected && tradename"> {{tradename}} </td> <td v-if="intersected" > <h3 class="card-Title break-word dib f5 ma0"> <a class="bb-0 color-inherit" v-bind:href="exhURL()"> <span class="b" v-if="slotted"> {{exhname}} <span v-if="iscrossref && crossrefname">({{content.seeText}}: {{crossrefname}})</span> </span> <span class="normal" v-else> {{exhname}} <span v-if="iscrossref && crossrefname">({{content.seeText}}: {{crossrefname}})</span> </span> </a> </h3> </td> <td v-if="intersected" class="is-hidden_small card-Desc f6"> <span v-if="iscrossref != 1">{{ summary }}</span> <span v-else> </span> </td> <td v-if="intersected && showbooths" class="card-Subtitle"> <span class="card-Subtitle muted" v-if="booths && booths.length > 0 && iscrossref != 1"> <span v-for="i in numOfBoothsToShow"> <a v-if="floorplanactive && validHalls.includes(hallids[i-1])" class="bb-0 color-inherit f6 pointer" v-bind:href="boothURL((booths[i-1]+'').replace('randomstring', ''))" title="Visit this booth">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow">, </span></a> <span v-else class="bb-0 color-inherit f6">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow" class="bb-0 color-inherit f6">, </span></span> </span> <span v-if="booths.length > numOfBoothsToShow" class="bb-0 color-inherit f6"> + {{booths.length - numOfBoothsToShow}} more </span> </span> </td> <td class="tc" v-if="intersected && hasexhicons"> <span v-for="tag in tags" :class="tag.color + ' br1 dark-gray dib f7 normal mb2 mr1 pa2 pt1 pb1'">{{tag.display}}</span> <img class="ml2 mr2 mw4 mw-100" v-for="icon in icons" :src="getIconUrl(icon)" :title="icon.title" :alt="icon.title" v-if="iscrossref != 1" /> </td> <td v-if="intersected" class="centered pointer tc w-15" > <toggle-favorite :type="'exhibitor'" v-bind:keys="exhid" v-bind:addedtoplanner="addedtoplanner"> </toggle-favorite> </td> <td class="is-hidden_small" v-if="!intersected"> </td> <td v-if="!intersected && brand">brand</td> <td v-if="!intersected && tradename">tradename</td> <td v-if="!intersected" style="height: 150px; "> <a v-bind:href="exhURL()">{{exhname}}</a> </td> <td v-if="!intersected" class="is-hidden_small card-Desc f6">{{ summary }}</td> <td v-if="!intersected && showbooths" class="card-Subtitle"> </td> <td class="tc" v-if="!intersected && hasexhicons"> </td> <td v-if="!intersected" class="centered pointer tc w-15"> </td> </tr></script> <script> var ExhibitorResultTr = Vue.component('exhibitor-result-tr', { template:"#exhibitor-result-tr-template", props: ["exhid", "exhname", "booths", "hallids", "description", "logo", "boothsdisplay", "slotted", "addedtoplanner", "tradename", "brand", "icons", "tags", "exhadvind", "iscrossref", "crossrefname"], data: function(){ return { compincludepath: "includes/vue/generic/exhibitor-result-tr.cfm", menuvisible: false, toggleVisible: false, intersected: false, validHalls: Vue.MYS.validHalls, observer: null, subShowVersion: Vue.MYS.useExhSubVersion3 } }, computed: { content: function(){ return { seeText: this.displaycontent(this.compincludepath, 'seeText') }; }, boothlist: function(){ if (this.booths){ return this.booths.join(", "); } else { return ""; } }, getIconUrl: function() { return function(icon) { if (this.subShowVersion) { return this.getServerlessImageURL(icon.iconfile); } else { return icon.iconfile; } }; }, summary: function(){ return this.createSummary(this.description,200) }, placeholderimg: function(){ return this.path2approot + "/assets/imgs/grey.gif"; }, numOfBoothsToShow: function (){ return (this.maxshowbooths == 0 ? this.booths.length: (this.maxshowbooths > this.booths.length ? this.booths.length : this.maxshowbooths)); } }, mounted: function(){ var vObj = this; vObj.observer = new IntersectionObserver(function(entries) { var image = entries[0]; if (image.isIntersecting) { vObj.intersected = true; vObj.observer.disconnect(); } }, {}); vObj.observer.observe(vObj.$el); }, destroyed: function() { this.observer.disconnect(); }, methods: { toggleMenu: function(){ this.menuvisible = !this.menuvisible; }, exhURL: function(exhid){ return this.getExhibitorURL(this.exhid, this.exhname); }, boothURL: function(booth) { return (this.path2approot + "/floorplan_link.cfm?exhid=" + this.exhid + "&booth=" + (booth+'').replace('randomstring', '') + "&show_id=" + this.showid); }, displayBooths: function(boothArray){ return boothArray.join(", "); }, getServerlessImageURL: function(iconfile) { const bucket = 'mys-showfiles'; const environment = Vue.MYS.environment; const showid = this.showidlowercase; const s3key = `${environment}/${showid}/exhicons/${iconfile}`; return Vue.MYS.getServerlessURL(bucket, s3key, null, 56, 'cover'); }, displayTradenames: function(tn){ if (tn.constructor !== Array){ return tn; } else { if (tn.length > 2){ return tn[0] + ", " + tn[1] + " + " + (tn.length - 2) + " more"; } else { return tn.join(", "); } } } } }); </script> <script> var printMixin = { data: function(){ return {} }, methods: { idsIsPrinting: function(){ return window.idsIsPrinting; } } }; </script> <script type="text/x-template" id="exhibitor-result-list-template"> <li class="js-Card card ba0 br0 db pa3" v-on:click.capture="goToURL(exhURL());"> <div v-if="intersected || idsIsPrinting"> <div class="card-Details"> <div v-if="logo !== '' && bitToBool(exhadvind)" class="flex-Thumb thumb-Border mr3 pa2"> <a v-bind:href="exhURL()"> <v-lazy-image v-bind:src="logo" v-bind:alt=exhname v-bind:title=exhname style="max-width: 65px;" /> </a> </div> <div v-if="logo == '' || !bitToBool(exhadvind)" class="mr3 pa2" style="width: 82px;"> </div> <div class="flex-Title mb0 mr3"> <h3 class="card-Title break-word f3 mb1 mt0" v-if="(tradename || brand)"> <span v-if="tradename">{{tradename}}</span> <span v-if="brand">{{brand}}</span> <span class="db f4 normal mb3"> <a class="muted" v-bind:href="exhURL()"> {{exhname}} <span v-if="iscrossref && crossrefname">({{content.seeText}}: {{crossrefname}})</span> </a> </span> </h3> <h3 class="card-Title break-word f3 mb1 mt0" v-if="!(tradename || brand)"> <a v-bind:href="exhURL()">{{exhname}}</a> </h3> <template v-if="booths && booths.length > 0"> <span v-for="i in numOfBoothsToShow" v-if="showbooths && iscrossref != 1" class="muted"> <a v-if="floorplanactive && validHalls.includes(hallids[i-1])" class="bb-0 color-inherit f6 pointer" v-bind:href="boothURL((booths[i-1]+'').replace('randomstring', ''))" title="Visit this booth">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow">, </span></a> <span v-else class="bb-0 color-inherit f6">{{(boothsdisplay[i-1]+'').replace('randomstring', '')}}<span v-if="i+1 <= numOfBoothsToShow" class="bb-0 color-inherit f6">, </span></span> </span> <span v-if="booths.length > numOfBoothsToShow" class="bb-0 color-inherit f6"> + {{booths.length - numOfBoothsToShow}} more </span> </template> </div> <toggle-favorite :type="'exhibitor'" v-bind:keys="exhid" v-bind:addedtoplanner="addedtoplanner" v-on:toggle-favorite="$emit('toggle-favorite', $event)"> </toggle-favorite> </div> <div v-if="icons && icons.length > 0 && iscrossref != 1" class="mt4" style="margin-left: 82px;"> <span v-for="tag in tags" :class="tag.color + ' br1 dark-gray dib f7 normal mb2 mr1 pa2 pt1 pb1'">{{tag.display}}</span> <img class="mb2 mw4 mw-100" v-for="icon in icons" :src="getIconUrl(icon)" :title="icon.title" :alt="icon.title" /> </div> <slot></slot> </div> <a v-if="!intersected" v-bind:href="exhURL()">{{exhname}}</a> </li></script> <script> var ExhibitorResultList = Vue.component('exhibitor-result-list', { template:"#exhibitor-result-list-template", props: ["exhid", "exhname", "booths", "hallids", "description", "logo", "boothsdisplay", "slotted", "addedtoplanner", "tradename", "brand", "icons", "tags", "exhadvind", "iscrossref", "crossrefname"], mixins: [printMixin], data: function(){ return { compincludepath: "includes/vue/generic/exhibitor-result-list.cfm", menuvisible: false, toggleVisible: false, intersected: false, validHalls: Vue.MYS.validHalls, observer: null, subShowVersion: Vue.MYS.useExhSubVersion3 } }, computed: { content: function(){ return { seeText: this.displaycontent(this.compincludepath, 'seeText') }; }, boothlist: function(){ if (this.booths){ return this.booths.join(", "); } else { return ""; } }, getIconUrl: function() { return function(icon) { if (this.subShowVersion) { return this.getServerlessImageURL(icon.iconfile); } else { return icon.iconfile; } }; }, summary: function(){ return this.createSummary(this.description,200) }, numOfBoothsToShow: function (){ return (this.maxshowbooths == 0 ? this.booths.length: (this.maxshowbooths > this.booths.length ? this.booths.length : this.maxshowbooths)); } }, mounted: function(){ var vObj = this; vObj.observer = new IntersectionObserver(function(entries) { var image = entries[0]; if (image.isIntersecting) { vObj.intersected = true; vObj.observer.disconnect(); } }, {}); vObj.observer.observe(vObj.$el); }, destroyed: function() { this.observer.disconnect(); }, methods: { toggleMenu: function(){ this.menuvisible = !this.menuvisible; }, exhURL: function(){ return this.getExhibitorURL(this.exhid, this.exhname); }, getServerlessImageURL: function(iconfile) { const bucket = 'mys-showfiles'; const environment = Vue.MYS.environment; const showid = this.showidlowercase; const s3key = `${environment}/${showid}/exhicons/${iconfile}`; return Vue.MYS.getServerlessURL(bucket, s3key, null, 56, 'cover'); }, boothURL: function(booth){ return (this.path2approot + "/floorplan_link.cfm?exhid=" + this.exhid + "&booth=" + (booth+'').replace('randomstring', '') + "&show_id=" + this.showid); }, displayBooths: function(boothArray){ return boothArray.join(", "); }, displayTradenames: function(tn){ if (tn.constructor !== Array){ return tn; } else { if (tn.length > 2){ return tn[0] + ", " + tn[1] + " + " + (tn.length - 2) + " more"; } else { return tn.join(", "); } } } } }); </script> <script type="text/x-template" id="exhibitor-search-results-template"> <section class="results-section_wrapper" v-bind:id="sectionid"> <div class="result-heading mb0 pb4"> <h2 class="db dib-l f3 ma0 mb3 mb0-l normal" v-if="Object.keys(searchresults.results).length > 1 && searchresults.results[resultsection].found > 0"> <span class="ttu">{{getDisplayHeader()}}</span> <span class="f5 mr3 muted normal" v-if="(showresultcount == true || showresultcount == 1) && !hideallresults"> ( <span v-if="searchresults.results[resultsection].hit.length < searchresults.results[resultsection].found"> {{searchresults.results[resultsection].hit.length}} {{content.of}} </span> {{searchresults.results[resultsection].found}} ) </span> </h2> <span v-if="searchresults.results[resultsection].hit.length < searchresults.results[resultsection].found"> <a class="btn-tertiary btn-tertiary_small" v-on:click="scrollToTop(); $emit('view-all-results', resultsection);" > <span v-if="resultsection != 'featured'">{{content.viewAllButton}}</span> <span v-if="resultsection == 'featured'">{{content.viewAllFeaturedButton}}</span> </a> </span> <span v-if="shouldshowfloorplanbutton"> <a class="btn-tertiary btn-tertiary_small" v-bind:href="floorplanresultsurl" v-on:click="scrollToTop();"> <span>{{content.viewOnFloorplan}}</span> </a> </span> </div> <div class="flex items-center mb5 flex-wrap" v-if="hasbanner && resultsection == 'featured'"> <a class="bb-0 mb2 mr2" v-bind:href="exhURL(selectedbanner.exhid, selectedbanner.exhname)" v-if="selectedbanner.mediafile && selectedbanner.exhid" v-on:click="logBannerClick()"> <v-lazy-image v-bind:src="displayBannerURL(selectedbanner.mediafile)" v-bind:srcset="displayBannerURL(encodeURIComponent(selectedbanner.mediafile)) + ', ' + displayBannerURL(encodeURIComponent(selectedbanner.mediafile2x))" :alt="selectedbanner.exhname + '-' + selectedbanner.categorydisplay + ' Sponsor'" :srcplaceholder="path2approot + '/assets/imgs/grey.gif'" v-on:intersect="logBannerView()"/> </a> <v-lazy-image v-if="selectedbanner.mediafile && !selectedbanner.exhid" v-bind:src="displayBannerURL(selectedbanner.mediafile)" v-bind:srcset="displayBannerURL(encodeURIComponent(selectedbanner.mediafile)) + ', ' + displayBannerURL(encodeURIComponent(selectedbanner.mediafile2x))" :alt="selectedbanner.exhname + '-' + selectedbanner.categorydisplay + ' Sponsor'" :srcplaceholder="path2approot + '/assets/imgs/grey.gif'" v-on:intersect="logBannerView()" /> <div v-if="selectedbanner.exhname && selectedbanner.categorydisplay"> <p class="f5 muted"><em>{{selectedbanner.exhname}} — {{selectedbanner.categorydisplay}} Sponsor</em></p> </div> </div> <transition-group name="staggered-fade" appear tag="ul" class="cards" v-bind:class="ulclass" v-if="selectedview == 'grid'" v-bind:css="false" v-on:before-enter="beforeEnterStaggered" v-on:enter="enterStaggered" v-on:leave="leaveStaggered" v-on:enter-cancelled="enterCancelled"> <component v-for="(result, index) in searchresults.results[resultsection].hit" v-bind:is="getCardTypeDisplay(result.fields.exhfeatured_t)" v-bind:data-index="index - startindex" v-bind:data-totalitemcount="searchresults.results[resultsection].hit.length" v-bind:data-searchsize="searchsize" :key="'exhcard'+ index" v-bind:exhid="result.fields.exhid_l" v-bind:exhname="result.fields.exhname_t" v-bind:description="result.fields.exhdesc_t" v-bind:slotted="result.fields.exhslotted_t" v-bind:booths="result.fields.booths_la" v-bind:boothsdisplay="result.fields.boothsdisplay_la" v-bind:hallids="result.fields.hallid_la" v-bind:exhadvind="result.fields.exhadvind_t" v-bind:logo="displayLogoURL(result.fields.exhlogo_t)" v-bind:addedtoplanner="result.fields.MYS.addedtoplanner" v-bind:icons="getExhibitorIconArray(result.fields.exhicons_l)" v-bind:tags="getExhibitorTagsArray(result.fields.exhtags_la)" v-bind:iscrossref="result.fields.iscrossref_l" v-bind:crossrefname="result.fields.MYS.crossrefname_t" > </component> </transition-group> <div class="results-list-view toggle-list-view" v-if="selectedview == 'list' && $mq != 'medium' && $mq != 'large'"> <table class="results-table word-wrap" cellpadding="0" cellspacing="0"> <thead> <th class="tl" style="min-width: 125px;"></th> <th class="tl" style="min-width: 300px;">{{content.tableHeadExhibitor}}</th> <th class="tl">{{content.tableHeadSummary}}</th> <th class="tl" style="min-width: 175px;" v-if="showbooths">{{content.tableHeadBooth}}</th> <th class="centered tc" style="min-width: 175px;" v-if="hasexhicons"> {{content.tableHeadLegend}} <span :title="tippyTitle" v-tippy="{theme : 'light'}"> <a class="bb-0"> <svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" class="v-mid ml1" role="img" aria-hidden="true"> <path v-bind:d="legendicon" fill-rule="nonzero" fill="#969696"></path> </svg> </a> </span> </th> <th class="centered tc" style="min-width: 90px;"><span v-if="hasmyshow">{{content.tableHeadPlanner}}</span></th> </thead> <transition-group name="staggered-fade2" appear tag="tbody" v-bind:css="false" v-on:before-enter="beforeEnterStaggered" v-on:enter="enterStaggered" v-on:leave="leaveStaggered" v-on:enter-cancelled="enterCancelled"> <exhibitor-result-tr v-for="(result, index) in searchresults.results[resultsection].hit" v-bind:data-index="index - startindex" v-bind:data-totalitemcount="searchresults.results[resultsection].hit.length" v-bind:data-searchsize="searchsize" v-bind:key="'exhtr-'+index" v-bind:exhid="result.fields.exhid_l" v-bind:exhname="result.fields.exhname_t" v-bind:description="result.fields.exhdesc_t" v-bind:slotted="result.fields.exhslotted_t" v-bind:booths="result.fields.booths_la" v-bind:hallids="result.fields.hallid_la" v-bind:exhadvind="result.fields.exhadvind_t" v-bind:boothsdisplay="result.fields.boothsdisplay_la" v-bind:logo="displayLogoURL(result.fields.exhlogo_t)" v-bind:addedtoplanner="result.fields.MYS.addedtoplanner" v-bind:icons="getExhibitorIconArray(result.fields.exhicons_l)" v-bind:tags="getExhibitorTagsArray(result.fields.exhtags_la)" v-bind:iscrossref="result.fields.iscrossref_l" v-bind:crossrefname="result.fields.MYS.crossrefname_t"> </exhibitor-result-tr> </transition-group> </table> </div> <div class="results-list-view toggle-list-view" v-if="selectedview == 'list' && ($mq == 'large' || $mq == 'medium')"> <transition-group name="staggered-fade2" appear tag="ul" v-bind:css="false" v-on:before-enter="beforeEnterStaggered" v-on:enter="enterStaggered" v-on:leave="leaveStaggered" v-on:enter-cancelled="enterCancelled"> <exhibitor-result-list v-for="(result, index) in searchresults.results[resultsection].hit" v-bind:data-index="startindex - index" v-bind:data-totalitemcount="searchresults.results[resultsection].hit.length" v-bind:data-searchsize="searchsize" v-bind:key="'exhlist'+index" v-bind:exhid="result.fields.exhid_l" v-bind:exhname="result.fields.exhname_t" v-bind:description="result.fields.exhdesc_t" v-bind:slotted="result.fields.exhslotted_t" v-bind:booths="result.fields.booths_la" v-bind:hallids="result.fields.hallid_la" v-bind:exhadvind="result.fields.exhadvind_t" v-bind:boothsdisplay="result.fields.boothsdisplay_la" v-bind:logo="displayLogoURL(result.fields.exhlogo_t)" v-bind:addedtoplanner="result.fields.MYS.addedtoplanner" v-bind:icons="getExhibitorIconArray(result.fields.exhicons_l)" v-bind:tags="getExhibitorTagsArray(result.fields.exhtags_la)" v-bind:iscrossref="result.fields.iscrossref_l" v-bind:crossrefname="result.fields.MYS.crossrefname_t"> </exhibitor-result-list> </transition-group> </div> <div class="o-BorderBehind pa0 pt3 pb3 tc" v-if="searchresults.results[resultsection].hit.length < searchresults.results[resultsection].found"> <span><a class="btn-secondary" v-on:click.stop.prevent="loadMore()">{{content.loadMoreResults}}</a></span> </div> </section></script> <script> var ExhibitorSearchResults = Vue.component('exhibitor-search-results', { data: function(){ return { compincludepath: "includes/vue/search/exhibitor-search-results-display.cfm", sectionid: "exhibitor-results", displaycardtype: "exhibitor-result-card", ulclass: "exh-basic", viewallsection: "exhibitor", startindex: 0, // used for staggered transition legendicon: "M10 0C4.478 0 0 4.477 0 10s4.478 10 10 10c5.523 0 10-4.477 10-10S15.523 0 10 0zm0 15.208a1.042 1.042 0 1 1 0-2.084 1.042 1.042 0 0 1 0 2.084zm1.634-4.94c-.753.813-.789 1.262-.779 1.815h-1.67c-.007-1.229.016-1.77 1.192-2.89.477-.453.854-.812.801-1.517-.048-.671-.608-1.022-1.137-1.022-.591 0-1.282.44-1.282 1.678H7.084c0-2 1.174-3.292 2.992-3.292.863 0 1.618.282 2.125.796.475.481.72 1.143.711 1.915-.013 1.152-.714 1.909-1.278 2.517z", hideallresults: Vue.MYS.settingsConfig.searchsettings.hideallresults, subShowVersion: Vue.MYS.useExhSubVersion3 } }, mixins: [staggeredTransitionsMixin, searchDisplayMixin], props: ["searchresults", "searchconfig", "searchsize"], template:"#exhibitor-search-results-template", methods: { loadMore: function(){ this.startindex = this.searchresults.results[this.resultsection].hit.length; this.$emit('load-more-results', this.resultsection); }, displayBooths: function(boothArray){ return boothArray.join(", "); }, getCardTypeDisplay: function(featured){ if (featured){ return "featured-result-card"; } else { return "exhibitor-result-card"; } }, exhURL: function(exhid, exhname) { if (this.selectedbanner.bannerhref == "internal"){ return this.getExhibitorURL(exhid, exhname); } else { return this.selectedbanner.bannerhref; } }, getServerlessImageURL: function(iconfile) { const bucket = 'mys-showfiles'; const environment = Vue.MYS.environment; const showid = this.showidlowercase; const s3key = `${environment}/${showid}/exhicons/${iconfile}`; return Vue.MYS.getServerlessURL(bucket, s3key, null, 56, 'cover'); }, logBannerView: function(){ this.logStats("Banner View", "" , this.searchresults.results.banner.categoryid, this.searchresults.results.banner.bannerid ); }, logBannerClick: function(){ this.logStats("Banner Click", "" , this.searchresults.results.banner.categoryid, this.searchresults.results.banner.bannerid ); }, getDisplayHeader: function() { if(this.$attrs.displayheader && this.$attrs.displayheader.length) { return this.$attrs.displayheader; } else { return this.content.displayResultHeader; } }, getExhibitorIconArray: function(json){ var returnArray = []; try { if (json.startsWith('"') && json.endsWith('"')){ json = json.substring(1, json.length-1); } returnArray = JSON.parse(json); } catch(err){/* do nothing */} return returnArray; }, getExhibitorTagsArray: function(tagArray){ var returnArray = []; if (tagArray && tagArray.constructor === Array){ for (var i = 0; i < tagArray.length; i++){ var currentColor = 'bg-light-silver'; for (var j = 0; j < Vue.MYS.exhibitorTags.length; j++){ if (tagArray[i] === Vue.MYS.exhibitorTags[j].title){ currentColor = Vue.MYS.exhibitorTags[j].color; } } returnArray.push({display: tagArray[i], color: currentColor }); } } return returnArray; } }, computed: { content: function(){ return { displayResultHeader: this.displaycontent(this.compincludepath, 'displayResultHeader'), viewAllButton: this.displaycontent(this.compincludepath, 'viewAllButton'), viewAllFeaturedButton: this.displaycontent(this.compincludepath, 'viewAllFeaturedButton'), viewOnFloorplan: this.displaycontent(this.compincludepath, 'viewOnFloorplan'), tableHeadExhibitor: this.displaycontent(this.compincludepath, 'tableHeadExhibitor'), tableHeadSummary: this.displaycontent(this.compincludepath, 'tableHeadSummary'), tableHeadBooth: this.displaycontent(this.compincludepath, 'tableHeadBooth'), tableHeadPlanner: this.displaycontent(this.compincludepath, 'tableHeadPlanner'), loadMoreResults: this.displaycontent(this.compincludepath, 'loadMoreResults'), of: this.displaycontent(this.compincludepath, 'of'), tableHeadLegend: this.displaycontent(this.compincludepath, 'tableHeadLegend') }; }, resultsection: function(){ if (this.displaycardtype == "featured-result-card"){ return "featured"; } else { return "exhibitor"; } }, selectedbanner: function(){ var returnObj = {}; if ("banner" in this.searchresults.results){ returnObj = this.searchresults.results["banner"]; // now create @2x value if (returnObj && "mediafile" in returnObj && returnObj.mediafile){ var indexOfDot = returnObj.mediafile.lastIndexOf(returnObj.mediafile); var filenameArray = returnObj.mediafile.split(/\.(?=[^\.]+$)/); if (filenameArray.length == 2){ returnObj["mediafile2x"] = filenameArray[0] + "@2x." + filenameArray[1]; } else { returnObj["mediafile2x"] = returnObj.mediafile; } } } return returnObj; }, hasbanner: function(){ return ("banner" in this.searchresults.results && "mediafile" in this.searchresults.results.banner && this.searchresults.results.banner.mediafile && this.searchresults.results.banner.exhid); }, tippyTitle: function(){ if (!this.enabled){ var divHTML = "<div class='db'>"; for (var i = 0; i < this.legendcontent.DATA.length; i++) { var tempImgSrc = this.httphost + this.legendcontent.DATA[i][1]; if (this.subShowVersion){ tempImgSrc = this.getServerlessImageURL(this.legendcontent.DATA[i][1]); } divHTML += "<div class='flex items-center mt2 mb2'>" + "<img class='mw3 mr3' src='" + tempImgSrc + "' alt='" + this.legendcontent.DATA[i][7] + "'/>" + "<div class='f6 flex-auto tl'>" + this.legendcontent.DATA[i][7] + "</div></div>"; } divHTML += "</div>"; return divHTML; } else { return ""; } }, shouldshowfloorplanbutton: function(){ var returnvalue = false; if ('isfloor' in this.getSearchConfigByType(this.searchtype) && this.getSearchConfigByType(this.searchtype).isfloor == 1 && this.floorplanresultsurl && this.showbooths && this.floorplanactive){ returnvalue = true; } // we don't have a good way of determining if something is coming from a quicklist call but need to be able to show button if necessary. So if the 'isfloor' option is in the results (a search option) then continue checkinng if the we have a valid floorplanresultsurl... we may change this at some point to take a config option into account else if (!('isfloor' in this.getSearchConfigByType(this.searchtype)) && this.floorplanresultsurl && this.showbooths && this.floorplanactive){ returnvalue = true; } return returnvalue; } } }); </script> <script> var FeaturedSearchResults = Vue.component('featured-search-results', ExhibitorSearchResults.extend({ data: function(){ return { compincludepath: "includes/vue/search/featured-search-results-display.cfm", sectionid: "featured-results", displaycardtype: "featured-result-card", ulclass: "exh-featured" } }, props: ["searchresults","searchtext", "searchtype", "searchsize"], template:"#exhibitor-search-results-template", computed: { content: function(){ return { displayResultHeader: this.displaycontent(this.compincludepath, 'displayResultHeader'), viewAllButton: this.displaycontent(this.compincludepath, 'viewAllButton'), viewAllFeaturedButton: this.displaycontent(this.compincludepath, 'viewAllFeaturedButton'), viewOnFloorplan: this.displaycontent(this.compincludepath, 'viewOnFloorplan'), tableHeadExhibitor: this.displaycontent(this.compincludepath, 'tableHeadExhibitor'), tableHeadSummary: this.displaycontent(this.compincludepath, 'tableHeadSummary'), tableHeadBooth: this.displaycontent(this.compincludepath, 'tableHeadBooth'), tableHeadPlanner: this.displaycontent(this.compincludepath, 'tableHeadPlanner'), loadMoreResults: this.displaycontent(this.compincludepath, 'loadMoreResults'), of: this.displaycontent(this.compincludepath, 'of'), tableHeadLegend: this.displaycontent(this.compincludepath, 'tableHeadLegend'), }; } } }) ); </script> <script type="text/x-template" id="search-results-wrapper-template"> <div class="search-results-wrapper l-middle" style="height:auto;"> <div class="l-content search-results pa4 pr5-m pl5-m pr6-l pl6-l"> <slot></slot> </div> </div></script> <script> var SearchResultsWrapper = Vue.component('search-results-wrapper', { template:"#search-results-wrapper-template" }); </script> <script type="text/x-template" id="loading-results-template"> <div>{{content.loadingText}}.</div></script> <script> var LoadingDisplay = Vue.component('loading-display', { data: function(){ return { compincludepath: "includes/vue/generic/loading-display.cfm" } }, props: [], template:"#loading-results-template", methods: { }, computed:{ content: function(){ return { loadingText: this.displaycontent(this.compincludepath, 'loadingText') }; } } }); </script> <script type="text/x-template" id="exh-exhibitorgallery-select-filter-display-template"> <div id="o-exhibitor-gallery-filter_container"> <label for="filterOptions" class="b mt0">{{filtertext}}</label> <select class="jq-chosen fm-Select w-100 w-50-m w-100-l" id="filterOptions" name="filterOption" v-model="selectedOption" @change="selectoption(selectedOption)"> <option value="" selected>{{content.filterPlaceholder}}</option> <option v-for="option in data" :value="option.fieldvalue">{{option.fielddisplay}}</option> </select> </div> </script> <script> var exhibitorGalleryFilters = Vue.component('exh-exhibitorgallery-select-filter-display', { props: { data: { type: Array, default: function () { return [] } }, filtertext: { type: String, default: "Filter by" }, selected: { type: String, default: "" } }, data: function(){ return { selectedOption: this.selected, compincludepath: "includes/vue/exhibitor/exh-exhibitorgallery-select-filter-display.cfm" } }, template:"#exh-exhibitorgallery-select-filter-display-template", methods:{ selectoption: function(value) { var vObj = this; vObj.$emit('selectoption', value); } }, computed: { content: function() { return { filterPlaceholder: this.displaycontent(this.compincludepath, 'filterPlaceholder') } } } }); </script> <script type="text/x-template" id="noresults-template"> <div> <div v-if="searchterm"> <p>Coming Soon! Check back later for SATELLITE 2025 <span v-html="searchterm" class="b"></span></p> </div> <div v-else> <p>{{content.noResultsFoundForText}} {{searchtype}}.</p> </div> <slot></slot> </div></script> <script> var NoResultsDisplay = Vue.component('noresults-display', { data: function(){ return { compincludepath: "includes/vue/generic/noresults-display.cfm" } }, computed:{ content: function(){ return { yourSearchForText: this.displaycontent(this.compincludepath, 'yourSearchForText'), didNotReturnAnyResultsText: this.displaycontent(this.compincludepath, 'didNotReturnAnyResultsText'), suggestionsText: this.displaycontent(this.compincludepath, 'suggestionsText'), noResultsFoundForText: this.displaycontent(this.compincludepath, 'noResultsFoundForText'), searchSpelledText: this.displaycontent(this.compincludepath, 'searchSpelledText'), tryGeneralSearchText: this.displaycontent(this.compincludepath, 'tryGeneralSearchText'), tryDifferentSearchText: this.displaycontent(this.compincludepath, 'tryDifferentSearchText') }; } }, props: { searchterm: { default: "", type: String }, searchtype: { default: "", type: String } }, template:"#noresults-template", methods: {}, }); </script> <script type="text/x-template" id="breadcrumb-display-template"> <div class="breadcrumbs-wrapper flex-l justify-between-l mt2 mb5" v-html="breadcrumbdisplaycontent"></div></script> <script> var BreadcrumbsDisplay = Vue.component('breadcrumbs-display', { template:"#breadcrumb-display-template", props: ["content"], computed: { breadcrumbdisplaycontent: function(){ if (!this.content){ return "\r\n\t\t­\r\n\t\r\n\t<span>\r\n\t\t\r\n\t</span>\r\n"; } else { return this.content; } } }, methods: { getUpdatedBreadcrumbs: function(){ } } }); </script> <script type="text/x-template" id="backToTopButtonTemplate"> <a href="#" class="btn-primary btn-back_to_top center fixed bottom-2 right-2 animated" v-bind:class="[backToTopButtonShowing ? 'slideInRight': 'slideOutRight']" v-scroll-to=scrollto>↑ {{content.backToTopText}}</a></script> <script> var BackToTopButton = Vue.component("backtotop-button", { template:"#backToTopButtonTemplate", props: { scrollto: { default: "#nav", type: String } }, data: function(){ return { compincludepath: "includes/vue/generic/backtotop-button.cfm", backToTopButtonShowing: false } }, computed:{ content: function(){ return { backToTopText: this.displaycontent(this.compincludepath, 'backToTopText'), }; } }, methods: { toggleBackToTopButton: function(){ var viewport = window.innerHeight, offset = window.pageYOffset; if (offset > viewport) { this.backToTopButtonShowing = true; } else { this.backToTopButtonShowing = false; } } } }); </script> <script type="text/x-template" id="multi-select-template"> <div class="o-multi-select_container" :class="{ 'is-stacked': layout == 'stacked', 'is-inline' : layout == 'inline'}"> <label :class="!filterlabel ? 'is-visually-hidden' : '' " class="typo__label" :for="identity">{{filterlabel}}</label> <multiselect :id="identity" v-model="value" :options="options" :multiple="multiple" :close-on-select="closeonselect" :clear-on-select="clearonselect" :preserve-search="preservesearch" :placeholder="placeholdertext" :label="optionslabelfield.length > 0 ? optionslabelfield : ''" :track-by="trackbyfield.length > 0 ? trackbyfield : ''" :preselect-first="preselectfirst" :show-labels="showlabels" :custom-label="customlabelfunc" :allow-empty="allowempty" :selectLabel="content.selectLabel" :selectGroupLabel="content.selectGroupLabel" :selectedLabel="content.selectedLabel" :deselectLabel="content.deselectLabel" :deselectGroupLabel="content.deselectGroupLabel" > <template slot="selection" slot-scope="{ values, search, isOpen }" v-if="!usetags"> <span class="multiselect__single" v-if="options.length && valuesselectedtext.length && !isOpen">{{ values.length }} {{valuesselectedtext}}</span> </template> </multiselect> <a v-if="typeof(value) == 'object' && value != null && value.length > 1 && showclear" @click="clearAll()" class="flex-shrink-0">Clear Filter</a> </div></script> <style> /*Vue-Multiselect library style overrides - select label*/ .typo__label { font-size: 1rem; white-space: nowrap; } /*Vue-Multiselect library style overrides - select container*/ .multiselect { display: block; margin-left: 0; margin-right: 0; margin-bottom: .5rem; } /*Vue-Multiselect library style overrides - select container media query*/ @media screen and (min-width: 60em) { .multiselect { margin-bottom: 0; margin-right: 1rem; display: inline-block; } } /*Vue-Multiselect library style overrides - down arrow container*/ .multiselect__select { width: 36px; } /*Vue-Multiselect library style overrides - down arrow image and sizing*/ .multiselect__select:before { padding: .5em .8em; width: 100%; max-width: 100%; box-sizing: border-box; border: 1px solid transparent; background-image: url(data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23444444%22%20d%3D%22M9.293%2012.95l.707.707L15.657%208l-1.414-1.414L10%2010.828%205.757%206.586%204.343%208z%22%2F%3E%3C%2Fsvg%3E),linear-gradient(to bottom, #f4f4f4 0%, #f4f4f4 100%); background-repeat: no-repeat, repeat; background-position: right .7em top 50%, 0 0; background-size: 1.250em auto, 100%; top: 8px; right: 0; } /*Vue-Multiselect library style overrides - down arrow image for near-white backgrounds*/ .bg-near-white .multiselect__select:before { background-image: url(data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23444444%22%20d%3D%22M9.293%2012.95l.707.707L15.657%208l-1.414-1.414L10%2010.828%205.757%206.586%204.343%208z%22%2F%3E%3C%2Fsvg%3E),linear-gradient(to bottom, white 0%, white 100%); } /*Vue-Multiselect library style overrides - remove default arrow animation*/ .multiselect--active .multiselect__select { transform: none; } /*Vue-Multiselect library style overrides - select inner option container*/ .multiselect__tags { border: 1px solid transparent; border-radius: .5em; } /*Vue-Multiselect library style overrides - select single option container*/ .multiselect__single { margin-bottom: 0; } /*Vue-Multiselect library style overrides - select dropdown container*/ .multiselect__content-wrapper { border-bottom-left-radius: .5em; border-bottom-right-radius: .5em; } /* Base MYS multi select styles */ .o-multi-select_container { align-items: center; } @media screen and (min-width: 60em) { .o-multi-select_container { display: flex; } } /* Stacked modifier styles */ .o-multi-select_container.is-stacked { flex-direction: column; align-items: flex-start; width: 100%; } /* Stacked modifier styles */ @media screen and (min-width: 30.063em) { .o-multi-select_container.is-stacked { width: 50%; } } /* Stacked modifier styles */ @media screen and (min-width: 60em) { .o-multi-select_container.is-stacked { width: 100%; } } /* Stacked modifier styles */ .o-multi-select_container.is-stacked .typo__label { display: inline-block; white-space: normal; font-style: normal; font-weight: bold; margin-bottom: 0.5rem; } /* Inline modifier styles */ .o-multi-select_container.is-inline .typo__label { display: block; font-size: 1rem; font-style: italic; vertical-align: middle; padding: 0; margin: 0 0.5rem 0.5rem 0; } /* Inline modifier styles */ @media screen and (min-width: 60em) { .o-multi-select_container.is-inline .typo__label { margin-bottom: 0; display: inline-block; } } /*To change colors of selected / un-selected options, target these classes: .multiselect__tag, multiselect__option.multiselect__option--highlight, multiselect__option.multiselect__option--highlight:after*/ </style> <script> var MultiSelect = Vue.component('multi-select', { data: function(){ return { compincludepath: "includes/vue/generic/multi-select.cfm", value: [] } }, props: { initvalue: [Array, String], customlabel: { type: Function }, filterlabel: { type: String, default: '' }, options: { type: Array, default: [] }, multiple: { type: Boolean, default: false }, optionslabelfield: { type: String, default: '' }, trackbyfield: { type: String, default: '' }, preselectfirst: { type: Boolean, default: false }, closeonselect: { type: Boolean, default: true }, clearonselect: { type: Boolean, default: false }, preservesearch: { type: Boolean, default: false }, placeholdertext: { type: String, default: '' }, valuesselectedtext: { type: String, default: 'options selected' }, showlabels: { type: Boolean, default: true }, allowempty: { type: Boolean, default: true }, showclear: { type: Boolean, default: true }, usetags: { type: Boolean, default: false }, identity: { type: String, default: '' }, layout: { type: String, default: 'inline' } }, watch: { initvalue: function() { if(this.value != this.initvalue) { this.value = this.initvalue; } }, value: function() { this.$emit('change-filter-options', this.value); } }, template:"#multi-select-template", mounted: function() { if(this.initvalue.length) { this.value = this.initvalue; } this.setAutocompleteAttr(); }, computed: { content: function(){ return { selectLabel: this.displaycontent(this.compincludepath, 'selectLabel'), selectGroupLabel: this.displaycontent(this.compincludepath, 'selectGroupLabel'), selectedLabel: this.displaycontent(this.compincludepath, 'selectedLabel'), deselectLabel: this.displaycontent(this.compincludepath, 'deselectLabel'), deselectGroupLabel: this.displaycontent(this.compincludepath, 'deselectGroupLabel') }; } }, methods: { clearAll: function() { this.value = []; }, setAutocompleteAttr: function() { // This is to fix a bug in the Vue-multiselect library where the autocomplete attribute is incorrectly set to "nope" var vueMultiSelectInputs = document.querySelectorAll('.multiselect__input'); if (vueMultiSelectInputs) { vueMultiSelectInputs.forEach(function(input) { input.setAttribute('autocomplete', 'off'); }) } }, customlabelfunc: function(value) { // Check if customlabel is bound to a function, if so get name and call it in parent if(this.customlabel) { var func = this.customlabel.name.replace('bound ', ''); // Call parent function with value and identity for dynamic variables // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name return this.$parent[func](value, this.identity); } else { return value; } } } }); </script> <div id="exploreExhibitorGallery" class="l-search mt3" v-cloak> <message-display :messages="messages" :type="messagetype" :showmessage="showmessage" :timeout="20"> </message-display> <div class="search-results-wrapper db flex-l h-auto"> <aside class="l-aside result-match-tally mid-gray ma4 mt2 mb2"> <div class="o-sidebar-filters_wrapper"> <a v-if="showClearAll()" class="btn btn-tertiary mb3 animated fadeIn" @click="resetFilters()">{{content.resetFilters}}</a> <div class="o-product-search_wrapper mb5" > <label class="is-visually-hidden" for="search"> Search By Exhibitor Name</label> <div class="w-50-m w-100-l flex"> <input id="search" class="fm-Input o-product-search_input w-100" type="search" v-model="searchTerm" placeholder=" Search By Exhibitor Name" @keyup.enter="getExhibitors(false,false);"/> <button class="btn-primary o-product-search_button" @click="getExhibitors(false,false);" aria-label="Search Exhibitors" title="Search Exhibitors"> <svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true"><path d="M18 15.66l-4.8-4.766A7.017 7.017 0 0014.308 7.1c0-3.914-3.209-7.1-7.154-7.1S0 3.186 0 7.101c0 3.916 3.21 7.102 7.154 7.102a7.15 7.15 0 003.656-1L15.643 18 18 15.66zM2.666 7.101c0-2.455 2.013-4.453 4.487-4.453 2.475 0 4.489 1.997 4.489 4.453 0 2.456-2.014 4.454-4.489 4.454-2.474 0-4.487-1.998-4.487-4.454z" fill="white" fill-rule="nonzero"/></svg> </button> </div> <a @click="clearSearch" class="o-product-search-button_clear dib mt2 animated fadeIn" v-if="searchTerm.length > 0"> Clear Search</a> </div> <div class="mb5"> <exh-exhibitorgallery-select-filter-display v-if="alphachars.length > 0" ref="alphaFilter" :data="alphachars" :selected="selectedAlpha" :filtertext="' Filter by Alpha'" v-on:selectoption="alphacharselected($event)"> </exh-exhibitorgallery-select-filter-display> </div> <div class="mb5" v-if="searchresults.results['featured'] && searchresults.results['featured'].found > 0"> <h4 class="mt0 mb2">{{content.filterFeatured}}</h4> <label class="fm-Control fm-Checkbox mb3" for="featured_exhibitors"> <input id="featured_exhibitors" type="checkbox" :value="true" @change="getExhibitors(false,false)" v-model="featured"> <span>{{content.featured}}</span> <div class="fm-Control_Indicator"></div> </label> </div> <template v-for="section in searchOrder"> <template v-if="section == 'country' && countries.length > 0"> <div class="mb5"> <multi-select key="countryFilter" ref="countryFilter" identity="countryFilter" :filterlabel="' Filter by ' + countrySearchLabel" :layout="'stacked'" :options="countryArray" :multiple="true" :usetags="true" :placeholdertext="content.filterPlaceholder" :closeonselect="false" :clearonselect="true" :showclear="false" :valuesselectedtext="''" :value="selectedCountry" :initvalue="selectedCountry" v-on:change-filter-options="countryselected($event)"> </multi-select> </div> </template> <template v-if="section == 'state' && states.length > 0"> <div class="mb5"> <multi-select key="stateFilter" ref="stateFilter" identity="stateFilter" :filterlabel="' Filter by ' + stateSearchLabel" :layout="'stacked'" :options="stateArray" :multiple="true" :usetags="true" :placeholdertext="content.filterPlaceholder" :closeonselect="false" :clearonselect="true" :showclear="false" :valuesselectedtext="''" :value="selectedState" :initvalue="selectedState" :customlabel="formatStateFilter" v-on:change-filter-options="stateselected($event)"> </multi-select> </div> </template> <template v-if="section == 'pavilion' && pavilions.length > 0"> <div class="mb5"> <multi-select key="pavilionFilter" ref="pavilionFilter" identity="pavilionFilter" :filterlabel="' Filter by ' + pavilionSearchLabel" :layout="'stacked'" :options="pavilionArray" :multiple="true" :usetags="true" :placeholdertext="content.filterPlaceholder" :closeonselect="false" :clearonselect="true" :showclear="false" :valuesselectedtext="''" :value="selectedPavilion" :initvalue="selectedPavilion" :customlabel="formatPavilionFilter" v-on:change-filter-options="pavilionselected($event)"> </multi-select> </div> </template> <template v-if="section == 'georegion' && georegions.length > 0"> <div class="mb5"> <multi-select key="georegionFilter" ref="georegionFilter" identity="georegionFilter" :filterlabel="getCategoryTypeDisplay('georegion')" :layout="'stacked'" :options="georegionArray" :multiple="true" :usetags="true" :placeholdertext="content.filterPlaceholder" :closeonselect="false" :clearonselect="true" :showclear="false" :valuesselectedtext="''" :value="selectedGeoregion" :initvalue="selectedGeoregion" :customlabel="formatGeoregionFilter" v-on:change-filter-options="georegionselected($event)"> </multi-select> </div> </template> <template v-if="section == 'category' && categories.length > 0"> <div class="mb5"> <multi-select key="categoryFilter" ref="categoryFilter" identity="categoryFilter" :filterlabel="getCategoryTypeDisplay('')" :layout="'stacked'" :options="categoryArray" :multiple="true" :usetags="true" :placeholdertext="content.filterPlaceholder" :closeonselect="false" :clearonselect="true" :showclear="false" :valuesselectedtext="''" :value="selectedCategories" :initvalue="selectedCategories" :customlabel="formatCategoryFilter" v-on:change-filter-options="categoryselected($event)"> </multi-select> </div> </template> </template> </div> </aside> <main id="main-searchresults-display" class="l-main pa4 pt2 pb2 pr5-m pl5-m search-results"> <div class="mb4"> <breadcrumbs-display :content="breadcrumbcontent"></breadcrumbs-display> <hr class="o-PageDivider mt3 mb3 dn-l" /> <section class=""> <div class="bb b--black-10 flex-l justify-between-l items-center mb4 pb3"> <div class="flex flex-wrap items-center"> <h1 class="f1 ma0 mb3 mb0-l normal"> <span v-if="Object.keys(searchresults.results).length > 1" class="db mr3"> <span v-if="(showresultcount == true || showresultcount == 1) && !hideallresults"> {{searchresults.results.exhibitor.hit.length}}<span v-if="searchresults.totalhits > searchresults.results.exhibitor.hit.length"> {{content.ofText}} {{searchresults.totalhits}}</span> </span> <span v-if="searchresults.totalhits == 1">{{content.resultSingular}}</span> <span v-else>{{content.resultPlural}}</span> <span>{{content.forText}} {{searchresultstext}} </span> </span> </h1> <div v-if="searchresults" class="animated ma0 pa3 pl0 pr0 flex justify-between flex-wrap items-center" > <div class="ma0 mb3 mb0-xl" v-if="Object.keys(searchresults.results).length > 1 && !featured && searchresults.results['exhibitor'].found > 0"> <a v-if="searchresults.results['featured'].found > 0" class="btn btn-tertiary color-inherit link underline-hover" v-on:click="logStats('featured',searchresults.results['featured'].found)" :href="'featured-results'" :id="'featured'" v-scroll-to="'#featured-results'" > <span v-html="getSummaryHTML('featured')"></span> </a> <a class="btn btn-tertiary color-inherit link underline-hover" v-on:click="logStats('exhibitor',searchresults.results['exhibitor'].found)" :href="'exhibitor-results'" :id="'exhibitor'" v-scroll-to="'#exhibitor-results'" > <span v-html="getSummaryHTML('exhibitor')"></span> </a> </div> </div> </div> <div class="btn-toggle-view-wrapper"> <span v-for="(displayoption, index) in displayOptions"> <a class="bb-0" href="" v-on:click.stop.prevent="switchDisplay(displayoption.name);" :title="'View results by ' + displayoption.name"> <span :class="[displayoption.name == searchselectedview ? 'is-selected' : '', 'toggle-grid', 'btn-tertiary']"> <svg class="v-mid mr1" width="18" height="18" role="img" aria-hidden="true"> <path v-if="displayoption.name == 'grid'" viewBox="0 0 18 18" d="M4.5 4.5H0V0h4.5v4.5zM11.25 0h-4.5v4.5h4.5V0zM18 0h-4.5v4.5H18V0zM4.5 6.75H0v4.5h4.5v-4.5zm6.75 0h-4.5v4.5h4.5v-4.5zm6.75 0h-4.5v4.5H18v-4.5zM4.5 13.5H0V18h4.5v-4.5zm6.75 0h-4.5V18h4.5v-4.5zm6.75 0h-4.5V18H18v-4.5z" id="toggle-grid"></path> <path v-if="displayoption.name == 'list'" viewBox="0 0 18 18" d="M3 16.5H0v-3h3v3zm0-9H0v3h3v-3zm0-6H0v3h3v-3zm2.25 0v3H18v-3H5.25zm0 9H18v-3H5.25v3zm0 6H18v-3H5.25v3z" id="toggle-list"></path> </svg> <span class="v-mid">{{displayoption.display}}</span> </span> </a> </span> </div> </div> <div v-if="searchresults"> <div class="searchResultWrapper" v-if="Object.keys(searchresults.results).length > 1"> <featured-search-results v-if="!featured && searchresults.results['featured'].found > 0" :searchresults="searchresults" :searchtype="searchtype" :searchsize="searchsize" :searchconfig="tempkeywordsearchconfig" :selectedview="searchselectedview" v-on:load-more-results="getExhibitors(true,true)" v-on:view-all-results="viewAll()" :show="'all'" :showresultcount="showresultcount"> </featured-search-results> <hr v-if="!featured && searchresults.results['featured'].found > 0" class="o-PageDivider" /> <section class=""> <exhibitor-search-results :key="'exhibitor'" :searchresults="searchresults" :searchconfig="tempkeywordsearchconfig" :searchtype="searchtype" :searchsize="searchsize" :selectedview="searchselectedview" :show="'all'" :showresultcount="showresultcount" :displayheader="getHeader()" v-on:load-more-results="getExhibitors(true,false)" v-on:view-all-results="viewAll()" > </exhibitor-search-results> <p v-if="searchresults.results['exhibitor'].found == 0"> No exhibitors could be found. Try removing some of your filters to broaden your search.</p> </section> </div> </div> </section> </div> </main> </div> <backtotop-button ref="backtotopbutton"> </backtotop-button> </div> <style> /* Search input / button */ .o-product-search_input { flex: 1; border-radius: .5rem 0 0 .5rem; margin: 0; } /* Search input / button */ .o-product-search_button { background: var(--color-accent-30) url("/8_0/assets/imgs/icon-search.svg") no-repeat 50% center; border: 0; text-indent: -9999px; border-radius: 0 .5rem .5rem 0; width: 4rem; margin: 0; } /* Search input / button */ .o-product-search_button:hover { cursor: pointer; background-color: var(--color-accent-20); border: 0; } /* Search clear button */ .o-product-search-button_clear:hover { border-bottom: 1px solid transparent; cursor: pointer; } /* Visually hidden utility class modifier */ @media screen and (max-width: 60em) { .is-visually-hidden_medium { clip: rect(0, 0, 0, 0); display: inherit; position: absolute; } } /* Page specific style - multi-select color overrides */ .multiselect__tags { border: 1px solid #e8e8e8; border-radius: 0.5em; background-image: linear-gradient(to bottom, #f4f4f4 0%, #f4f4f4 100%); background-position: right .7em top 50%, 0 0; background-size: 1.250em auto, 100%; } @media screen and (min-width: 60em) { /* Page specific style - Allow sidebar to fix on scroll but prevent it from running into the footer */ .o-sidebar-filters_wrapper { position: sticky; top: 24px; } /* Page specific style - Allow sidebar to be a little wider */ .l-aside { width: 17em; } } </style> <script> var tempkeywordsearchconfig = [{"display":"Exhibitors and Sponsors","active":1,"requireplanner":0,"searchsize":50,"section":"exhibitor"},{"display":"Product Categories","active":1,"requireplanner":0,"searchsize":50,"section":"category"},{"display":"Show Features","active":1,"requireplanner":0,"searchsize":50,"section":"showfeature"},{"display":"Special Offers","active":1,"requireplanner":0,"searchsize":50,"section":"special"},{"display":"Booth, Hall","active":1,"requireplanner":0,"searchsize":50,"section":"booth"},{"display":"Brands","active":1,"requireplanner":0,"searchsize":50,"section":"brand"},{"display":"Pavilion","active":1,"requireplanner":0,"searchsize":50,"section":"pavilion"},{"display":"Points of Interest","active":1,"requireplanner":0,"searchsize":50,"section":"room"},{"display":"Collateral","active":1,"requireplanner":0,"searchsize":50,"section":"collateral"},{"display":"Sessions","active":1,"requireplanner":0,"searchsize":50,"section":"session"},{"display":"Session Speakers","active":1,"requireplanner":0,"searchsize":50,"section":"sessionspeaker"},{"display":"Session Tracks","active":1,"requireplanner":0,"searchsize":50,"section":"sessiontrack"}]; var searchconfig = [{"placeholdertext":"Search by Keyword","isadvanced":0,"displayoptions":"","ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Keyword","element":"keyword","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Exhibitor Name","element":"exhibitorname","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Category","isadvanced":1,"displayoptions":[{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getsearchcategories","display":"Category","element":"category","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Booth","isadvanced":1,"displayoptions":[{"transition":"fade","display":"Grid","active":true,"displayoptioncontentid":0,"default":true,"name":"grid"},{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":false,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"search","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"","display":"Booths","element":"booth","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search By Pavilions","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":1,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getPavilions","display":"Pavilions","element":"pavilion","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Advanced","displayoptions":{},"ismain":1,"isfloor":0,"searchfieldtype":"search","hideslotted":0,"numcolumns":1,"datafunction":"","display":"Advanced Search","element":"advanced","searchsize":50,"type":"search"}]; var geoRegionSearchLabel = ''; var pavilionSearchLabel = ''; var categorySearchLabel = ''; var countrySearchLabel = ''; var stateSearchLabel = ''; var searchOrderArray = []; for (var i = 0; i < tempkeywordsearchconfig.length; i++){ if (tempkeywordsearchconfig[i].section == "exhibitor"){ tempkeywordsearchconfig[i].active = 1; } } for (var i = 0; i < searchconfig.length; i++){ if (searchconfig[i].element == "georegion"){ searchOrderArray.push(searchconfig[i].element); geoRegionSearchLabel = searchconfig[i].display; } if (searchconfig[i].element == "pavilion"){ searchOrderArray.push(searchconfig[i].element); pavilionSearchLabel = searchconfig[i].display; } if (searchconfig[i].element == "category"){ searchOrderArray.push(searchconfig[i].element); categorySearchLabel = searchconfig[i].display; } if (searchconfig[i].element == "country"){ searchOrderArray.push(searchconfig[i].element); countrySearchLabel = searchconfig[i].display; } if (searchconfig[i].element == "state"){ searchOrderArray.push(searchconfig[i].element); stateSearchLabel = searchconfig[i].display; } } var exploreExhibitorGallery = new Vue({ el: '#exploreExhibitorGallery', name: 'exploreExhibitorGalleryTemplate', mixins: [messagedisplayMixin], data: { displayOptions: [{"transition":"fade","display":" Grid","active":true,"displayoptioncontentid":0,"default":true,"name":"grid"},{"transition":"fade","display":" List","active":true,"displayoptioncontentid":0,"default":true,"name":"list"}], searchselectedview: Vue.MYS.settingsConfig.searchsettings.defaultsearchview, hideallresults: Vue.MYS.settingsConfig.searchsettings.hideallresults, selectedsmallScreenOption: '', searchTerm: '', searchresults: { searchtext: "", totalhits: 0, results: {} }, exhibitorsTotal: 0, startIndex: 0, categories: [], georegions: [], alphachars: [], countries: [], states: [], pavilions: [], selectedCategories: [], selectedAlpha: '', selectedCountry: [], selectedState: [], selectedPavilion: [], selectedGeoregion: [], messages: [], messagetype: '', filtered: false, showmessage: false, showresultcount: 0, totalhits: 125, featured: false, breadcrumbcontent: '', searchsize: 50, searchtype:"exhibitorgallery", searchresultstext: 'Exhibitors and Sponsors Alpha List', searchresultheader: '', tempkeywordsearchconfig: tempkeywordsearchconfig, stateSearchLabel: stateSearchLabel, countrySearchLabel: countrySearchLabel, categorySearchLabel: categorySearchLabel, pavilionSearchLabel: pavilionSearchLabel, geoRegionSearchLabel: geoRegionSearchLabel, searchOrder: searchOrderArray }, created: function(){ var vObj = this; var selectedview = vObj.getViewState(vObj.path, "exhsearchpage"); if (selectedview == "grid"){ vObj.searchselectedview = "grid"; } else if (selectedview == "list"){ vObj.searchselectedview = "list"; } // set up unload when user clicks away window.addEventListener('beforeunload', function(event){ vObj.saveScrollPosition(); }); }, mounted: function() { this.getExhAlphaChars(); if(this.searchOrder.includes('country')) { this.getExhCountries(); } if(this.searchOrder.includes('state')) { this.getExhStates(); } if(this.searchOrder.includes('pavilion')) { this.getExhPavilions(); } if(this.searchOrder.includes('georegion')) { this.getExhGeoregions(); } if(this.searchOrder.includes('category')) { this.getExhCategories(); } this.getExhibitors(false,false); var vObj = this; vObj.$nextTick(function() { window.addEventListener("scroll", vObj.$refs.backtotopbutton.toggleBackToTopButton); vObj.$refs.backtotopbutton.$el.classList.add('dn'); // Keep button from flashing on load vObj.$refs.backtotopbutton.toggleBackToTopButton(); }); }, methods: { resetFilters: function() { if(this.searchOrder.includes('country')) { this.selectedCountry = []; this.$refs.countryFilter.value = []; } if(this.searchOrder.includes('state')) { this.selectedState = []; this.$refs.stateFilter.value = []; } if(this.searchOrder.includes('pavilion')) { this.selectedPavilion = []; this.$refs.pavilionFilter.value = []; } if(this.searchOrder.includes('georegion')) { this.selectedGeoregion = []; this.$refs.georegionFilter.value = []; } if(this.searchOrder.includes('category')) { this.selectedCategories = []; this.$refs.categoryFilter.value = []; } this.selectedAlpha = ''; this.$refs.alphaFilter.selectedOption = ''; this.searchTerm = ''; this.featured = false; this.getExhibitors(false,false); }, showClearAll: function() { if( this.selectedAlpha.length > 0 || this.selectedCountry.length > 0 || this.selectedState.length > 0 || this.selectedPavilion.length > 0 || this.selectedGeoregion.length > 0 || this.selectedCategories.length > 0 || this.featured || this.searchTerm.length > 0 ) { return true; } else { false; } }, getHeader: function() { if(this.featured) { return this.content.featured; } }, viewAll: function() { this.searchsize = this.searchresults.totalhits; this.getExhibitors(true,false); }, getSummaryHTML: function(section) { var htmlString = ''; if(section == 'featured') { htmlString = ' Featured'; if((this.showresultcount == true || this.showresultcount == 1) && !this.hideallresults) { htmlString += ' (' + this.searchresults.results['featured'].found +')'; } } else { htmlString = ' All Exhibitors'; if((this.showresultcount == true || this.showresultcount == 1) && !this.hideallresults) { htmlString += ' (' + this.searchresults.results['exhibitor'].found + ')'; } } return htmlString; }, switchDisplay: function(selectedview){ this.searchselectedview = selectedview; this.saveViewState(this.path, "exhsearchpage", selectedview); for (var i = 0; i < this.displayOptions.length; i++){ if (this.displayOptions[i].name == this.searchselectedview){ this.displayOptions[i].default = true; this.displayOptions[i].active = true; } else { this.displayOptions[i].default = false; this.displayOptions[i].active = false; } } }, alphacharselected: function(newValue) { if (this.selectedAlpha != newValue) { this.selectedAlpha = newValue; this.getExhibitors(false,false); } }, countryselected: function(newValue) { if (this.selectedCountry != newValue) { this.selectedCountry = newValue; this.getExhibitors(false,false); } }, stateselected: function(newValue) { if (this.selectedState != newValue) { this.selectedState = newValue; this.getExhibitors(false,false); } }, pavilionselected: function(newValue) { if (this.selectedPavilion != newValue) { this.selectedPavilion = newValue; this.getExhibitors(false,false); } }, categoryselected: function(newValue) { if (this.selectedCategories != newValue) { this.selectedCategories = newValue; this.getExhibitors(false,false); } }, georegionselected: function(newValue) { if (this.selectedGeoregion != newValue) { this.selectedGeoregion = newValue; this.getExhibitors(false,false); } }, toggleSmallscreenOptions: function(option) { if (this.selectedsmallScreenOption === option) { this.selectedsmallScreenOption = ''; } else { this.selectedsmallScreenOption = option; } }, getCategoryTypeDisplay: function(type) { if (type == 'georegion') { return (this.georegions.length == 0 ? '' : ' Filter by '+this.geoRegionSearchLabel); } else { return (this.categories.length == 0 ? '' : ' Filter by '+this.categorySearchLabel); } }, getExhAlphaChars: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=getexhibitoralphachars', function(response){ // success if (response.SUCCESS == true && response.DATA.length > 0){ for(result in response.DATA) { vObj.alphachars.push({'fielddisplay': ''+(response.DATA[result].value == 0 ? '#' : response.DATA[result].value) , 'fieldvalue': ''+response.DATA[result].value}); } } }, function(response){ // error vObj.showMessage("error" , " Error retrieving alpha options"); } ); }, getExhCountries: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=getcountries', function(response){ // success if (response.SUCCESS == true && response.DATA.length > 0){ vObj.countries = response.DATA; } }, function(response){ // error vObj.showMessage("error" , " Error Getting Countries List"); } ); }, getExhStates: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=getstates', function(response){ // success if (response.SUCCESS == true && response.DATA.length > 0){ vObj.states = response.DATA; } }, function(response){ // error vObj.showMessage("error" , " Error Getting States List"); } ); }, getExhPavilions: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=getpavilions', function(response){ // success if (response.SUCCESS == true && response.DATA.length > 0){ vObj.pavilions = response.DATA; } }, function(response){ // error vObj.showMessage("error" , " Error Getting Pavilions List"); } ); }, getExhCategories: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=getsearchcategories&exhibitorgallery=true', function(response){ // success if (response.SUCCESS == true && response.DATA.length > 0){ vObj.categories = response.DATA; } }, function(response){ // error vObj.showMessage("error" , " Error retrieving Categories"); } ); }, getExhGeoregions: function() { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=getsearchgeoregions&exhibitorgallery=true', function(response){ // success if (response.SUCCESS == true && response.DATA.length > 0){ vObj.georegions = response.DATA; } }, function(response){ // error vObj.showMessage("error" , " Error retrieving Georegions"); } ); }, getExhibitors: function(loadMore,featured) { var vObj = this; vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=search&searchtype=exhibitorgallery&searchsize='+vObj.searchsize+(vObj.featured ? '&featured='+vObj.featured : '')+(vObj.selectedAlpha.length > 0 ? '&alpha='+vObj.selectedAlpha : '')+(vObj.selectedCategories.sort().toString().length > 0 ? '&categories='+encodeURIComponent(vObj.selectedCategories.join('~~~~')) : '')+(vObj.selectedCountry.length > 0 ? '&country='+encodeURIComponent(vObj.selectedCountry.join('~~~~')) : '')+(vObj.selectedState.length > 0 ? '&state='+encodeURIComponent(vObj.selectedState.join('~~~~')) : '')+(vObj.selectedPavilion.length > 0 ? '&pavilion='+encodeURIComponent(vObj.selectedPavilion.join('~~~~')) : '')+(vObj.selectedGeoregion.sort().toString().length > 0 ? '&georegion='+encodeURIComponent(vObj.selectedGeoregion.join('~~~~')) : '')+(vObj.searchTerm.length > 0 ? '&search='+encodeURIComponent(vObj.searchTerm) : '')+(loadMore ? '&start='+vObj.searchresults.results.exhibitor.hit.length : ''), function(response){ // success if (response.SUCCESS == true){ if (loadMore) { if(featured) { vObj.searchresults.results.featured.hit = vObj.searchresults.results.featured.hit.concat(response.DATA.results.featured.hit); } else { vObj.searchresults.results.featured.hit = vObj.searchresults.results.featured.hit.concat(response.DATA.results.featured.hit); vObj.searchresults.results.exhibitor.hit = vObj.searchresults.results.exhibitor.hit.concat(response.DATA.results.exhibitor.hit); } } else { vObj.searchresults.results = response.DATA.results; vObj.searchresults.totalhits = response.DATA.totalhits; } } vObj.updateURL(); }, function(response){ // error vObj.showMessage("error" , " Error retrieving Exhibitors"); } ); }, updateURL: function() { var vObj = this; window.history.replaceState(null,null,"?featured="+vObj.featured+(vObj.selectedCategories.length > 0 ? '&categories='+encodeURIComponent(vObj.selectedCategories.join('~~~~')) : '')+(vObj.selectedAlpha.length > 0 ? '&alpha='+vObj.selectedAlpha : '')+(vObj.selectedCountry.length > 0 ? '&country='+encodeURIComponent(vObj.selectedCountry.join('~~~~')) : '')+(vObj.selectedState.length > 0 ? '&state='+encodeURIComponent(vObj.selectedState.join('~~~~')) : '')+(vObj.selectedPavilion.length > 0 ? '&pavilion='+encodeURIComponent(vObj.selectedPavilion.join('~~~~')) : '')+(vObj.selectedGeoregion.sort().toString().length > 0 ? '&georegion='+encodeURIComponent(vObj.selectedGeoregion.join('~~~~')) : '')+(vObj.searchTerm.length > 0 ? '&search='+encodeURIComponent(vObj.searchTerm) : '')); }, clearSearch: function() { this.searchTerm = ''; this.getExhibitors(false,false); }, formatStateFilter: function(value){ var tempArray = this.states.filter(function (e) { if(value == e.fieldvalue) { return e; } }); return tempArray.length > 0 ? tempArray[0].fielddisplay : value; }, formatPavilionFilter: function(value){ return this.pavilions.filter(function (e) { if(value == e.fieldvalue) { return e; } })[0].fielddisplay; }, formatCategoryFilter: function(value){ return this.categories.filter(function (e) { if(value == e.fieldcattype + '|' + e.fieldvalue) { return e; } })[0].fielddisplay; }, formatGeoregionFilter: function(value){ return this.georegions.filter(function (e) { if(value == e.fieldcattype + '|' + e.fieldvalue) { return e; } })[0].fielddisplay; } }, computed: { content: function(){ return { filterFeatured: ' Filter by Featured Exhibitors', featured: ' Featured Exhibitors', resultPlural: ' Results', resultSingular: ' Result', forText: ' for', ofText: ' of', gridText: ' Grid', listText: ' List', filterPlaceholder: ' Show All', resetFilters: ' Clear All Filters', }; }, countryArray: function() { var tempArray = []; if(this.countries.length > 0) { for (i = 0; i < this.countries.length; i++) { if(!tempArray.includes(this.countries[i].fieldvalue)) { tempArray.push(this.countries[i].fieldvalue); } } } return tempArray; }, stateArray: function() { var tempArray = []; if(this.states.length > 0) { for (i = 0; i < this.states.length; i++) { if(!tempArray.includes(this.states[i].fieldvalue)) { tempArray.push(this.states[i].fieldvalue); } } } return tempArray; }, pavilionArray: function() { var tempArray = []; if(this.pavilions.length > 0) { for (i = 0; i < this.pavilions.length; i++) { if(!tempArray.includes(this.pavilions[i].fieldvalue)) { tempArray.push(this.pavilions[i].fieldvalue); } } } return tempArray; }, categoryArray: function() { var tempArray = []; if(this.categories.length > 0) { for (i = 0; i < this.categories.length; i++) { if(!tempArray.includes(this.categories[i].fieldcattype + '|' + this.categories[i].fieldvalue)) { tempArray.push(this.categories[i].fieldcattype + '|' + this.categories[i].fieldvalue); } } } return tempArray; }, georegionArray: function() { var tempArray = []; if(this.georegions.length > 0) { for (i = 0; i < this.georegions.length; i++) { if(!tempArray.includes(this.georegions[i].fieldcattype + '|' + this.georegions[i].fieldvalue)) { tempArray.push(this.georegions[i].fieldcattype + '|' + this.georegions[i].fieldvalue); } } } return tempArray; } } }) </script> <footer class="l-footer bg-light-gray"> <div class="center f7 mid-gray mw9 pa4 pr5-m pl5-m pr6-l pl6-l"> <div id="js-CustomFooter" class="mb3"> </div> <div class="flex-l justify-between-l"> <div class="mb3 mb0-l"> <p class="f7 mb0"> SATELLITE 2025<span class="ml1 mr1">•</span>©2025 All Rights Reserved </p> </div> <div class="mb0-last"> <p class="f7 mb0 tr-l"> <a class="bb-0" href="/8_0/sitemap.cfm"> Sitemap</a> <span class="mr2 ml2 o-50" aria-hidden="true">|</span> <a class="bb-0 is-visually-hidden" aria-hidden="true" href="/8_0/sitemap.xml"> XML Sitemap</a> <span class="mr2 ml2 o-50 is-visually-hidden" aria-hidden="true">|</span> <a class="bb-0" href="/8_0/explore/help.cfm"> Help</a> <span class="mr2 ml2 o-50" aria-hidden="true">|</span> <a class="bb-0" href="http://www.accessintel.com/privacypolicy/" target="_blank"> Privacy Policy</a> </p> </div> </div> </div> </footer> <script type="text/javascript"> /* * Check the dynamic content inside of #js-CustomFooter * This content gets entered through the admin and can be a script or text * If the content is text do nothing * If the content is a script remove the mb3 (margin-bottom) class from the div so there's not extra space */ var customFooter = document.querySelector("#js-CustomFooter"); var reg = new RegExp("<[^>]*script"); // Is the content a script? If so if (reg.test(customFooter.innerHTML)) { customFooter.classList.remove("mb3"); } </script> </body> </html> <script async src="https://www.googletagmanager.com/gtag/js?id=G-N77RQK6L8Y"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-N77RQK6L8Y'); </script> <script> var app2 = new Vue({ el: '#navbar-v2', name: 'navbar-v2', data: function() { return { showModal: false, hasnewrecommendations: false, firsttimemessage: "Click here to view your personalized recommendations based on your activity.", secondtimemessage: "Reminder: You have personalized recommendations waiting for you here.", navDisplayType: '', numberunreadmessages: 0, profileActionsMenuOpen: false, mobileMenuOpen: false, hasHeaderImage: false, hasDropdownsInNav: false, svgArrowsAll: null, dropdownContainerAll: null, navLinks: null, currentWindowWidth: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, themeVersion: 2, isLoggedIntoMyShow: false } }, mounted:function() { var vObj = this; vObj.setupDynamicNavAndHeader(); window.addEventListener('popstate', function(event) { vObj.showModal = false; }); if(vObj.hasSessionStorage()) { if(sessionStorage.getItem("numberunreadmessages")) { this.numberunreadmessages = parseInt(sessionStorage.getItem("numberunreadmessages")); } } this.$root.$on('new-message', function(numberunread) { vObj.numberunreadmessages = numberunread; }) }, computed: { showLogoVisible: function() { return (!this.hasHeaderImage && this.themeVersion === 1) || (this.hasHeaderImage && this.themeVersion === 2 && this.navDisplayType === 'mobile') || (this.isFloorplanPage) ? true : false; }, showInfoVisible: function() { return ((this.themeVersion === 1) || (this.hasHeaderImage && this.themeVersion === 2 && this.navDisplayType === 'mobile') || (this.isFloorplanPage)) && (this.currentWindowWidth >= 630) ? true : false; }, isFloorplanPage: function() { return this.getCurrentURL().includes('/8_0/floorplan/'); } }, methods:{ isTouchDevice: function() { return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); }, openTogglePlannerMenu: function() { this.profileActionsMenuOpen = true; if (this.mobileMenuOpen && this.isLoggedIntoMyShow) { this.mobileMenuOpen = false; this.resetAnimation(this.navLinks); } }, closeTogglePlannerMenu: function() { if (this.mobileMenuOpen) return this.profileActionsMenuOpen = false; }, closePlannerMenu: function() { this.profileActionsMenuOpen = false; }, toggleMobileMenu: function() { this.mobileMenuOpen = !this.mobileMenuOpen; this.closePlannerMenu(); this.animateElements(this.navLinks); if (!this.mobileMenuOpen) { this.resetAnimation(this.navLinks); } }, closeMobileMenu: function() { if (this.mobileMenuOpen) { this.mobileMenuOpen = false; this.resetAnimation(this.navLinks); } }, openModal: function() { this.showModal = !this.showModal; }, closeModal: function() { this.showModal = false; }, toggleProfileActionsMenuCallback: function (event) { var vObj = this; if (event.target.closest('.o-profile-actions_dropdown') || event.target.closest('.btn-avatar') && this.profileActionsMenuOpen === false) { vObj.openTogglePlannerMenu(); } else { vObj.closeTogglePlannerMenu(); document.removeEventListener('click', vObj.toggleProfileActionsMenuCallback); } }, toggleProfileActionsMenu: function () { var vObj = this; document.addEventListener('click', vObj.toggleProfileActionsMenuCallback); }, onResizeChangeNavAndHeader: function() { var vObj = this, showHeaderContainer = document.querySelector('.l-header'), showInfoElement = document.querySelector('.show-info'), windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, showLogoWidth = 200, // This is the widest the show logo can be and there should always be a show logo present so we can use a set width showInfoWidth = showInfoElement ? vObj.getElementOffset(showInfoElement).width : 0, // Get the width of the show info element (show dates, location and optional text) extraNavWidth = (vObj.themeVersion === 1) || (vObj.isFloorplanPage) ? 215 : 100, // Extra padding and spacing in the <nav>, increased on theme 1 and the floorplan since there the show logo is present in the nav windowWidthMinusExtraSpace = windowWidth - showLogoWidth - extraNavWidth - showInfoWidth, // This number is the window with minus the max width of the logo plus the width of the show info div plus extra spacing in and around the <nav> navLinksTotalWidth = 0; // Total width of individual <nav> menu items so a number can be calculated accurately regardless of current nav view type // Update window width in app data{} so it can be used in window size calculations vObj.currentWindowWidth = windowWidth; // Get total width of individual nav items to use to determine which nav type to show for (var i = 0; i < vObj.navLinks.length; i++) { navLinksTotalWidth += vObj.getElementOffset(vObj.navLinks[i]).width; } // To determine nav type to show, compare window width (minus extra space) to nav type switchover point (calculated above) if (navLinksTotalWidth > windowWidthMinusExtraSpace) { // SHOW THE MOBILE NAV VIEW vObj.navDisplayType = 'mobile'; if (vObj.hasHeaderImage) { // Hide header image and display show logo on MOBILE NAV view if (showHeaderContainer) { showHeaderContainer.classList.add('dn'); } } } else { // SHOW THE DESKTOP NAV VIEW vObj.navDisplayType = 'desktop'; if (vObj.hasHeaderImage) { // Hide logo and show header image on DESKTOP NAV VIEW when header image is present if (showHeaderContainer) { showHeaderContainer.classList.remove('dn'); } } } }, setupDynamicNavAndHeader: function() { var vObj = this, dropdownLinks = document.querySelectorAll('.l-dropdown_link'), showHeaderSrc = (document.querySelector('.o-show_header')) ? document.querySelector('.o-show_header').src : ""; // Update navlinks in data {} (Used for calculating total width of first level nav children) vObj.navLinks = document.querySelectorAll('.main-navigation .js-nav_width'); // Check to see if any dropdowns are present by checking all navLinks to see if any contain the class .l-dropdown_link (var dropdownLinks above) and if so set vObj.hasDropdownsInNav = true if (dropdownLinks.length) { vObj.hasDropdownsInNav = true; } // Check to see if show header exists in theme to ensure that JS does not try to hide and show it when onResizeChangeNavAndHeader() runs and if so set vObj.hasHeaderImage = true if (showHeaderSrc.length) { vObj.hasHeaderImage = true; } // Call on page load to ensure offset calculations are correct for when the last nav link begins to wrap. vObj.onResizeChangeNavAndHeader(); // Check window size to determine which nav to show and close the hamburger menu (if open) window.addEventListener('resize', function() { vObj.onResizeChangeNavAndHeader(); vObj.closeMobileMenu(); vObj.closePlannerMenu(); }); // Close nav link dropdowns or planner menu with Escape key document.addEventListener('keydown', function(event){ if (event.key === "Escape" || event.code === "Escape") { vObj.closePlannerMenu(); vObj.handClicksOutsideDropdown(event); } }); // Call toggleNavLinkDropdown() when clicking links with dropdown sub menus to open and close the sub menus is dropdowns are present if (vObj.hasDropdownsInNav) { dropdownLinks.forEach(function(element) { element.addEventListener('click', vObj.toggleNavLinkDropdown); }); } }, toggleNavLinkDropdown: function(event) { var vObj = this, elementClicked = event.target, elementClickedParent = elementClicked.closest('li.l-dropdown_link'), elementClickedParentId = elementClicked.closest('li.l-dropdown_link').getAttribute('id'), dropdownContainerClosest = elementClickedParent.querySelector('ul#' + elementClickedParentId), dropdownLink = elementClickedParent.querySelector('li a'), arrowSpanClosestDown = elementClickedParent.querySelector('span.o-arrow_down'), svgArrowSpanClosestDown = elementClickedParent.querySelector('svg.o-arrow_down_svg'); // Update values in data {} vObj.dropdownContainerAll = document.querySelectorAll('ul.l-nav-dropdown_container'); vObj.svgArrowsAll = document.querySelectorAll('span.o-arrow_down svg.o-arrow_down_svg'); // Prevent default action on these targets so the dropdown menu works as expected, otherwise follow the links within the dropdown menu if (event.target == elementClickedParent || event.target == arrowSpanClosestDown || event.target == dropdownLink || event.target == svgArrowSpanClosestDown) { event.preventDefault(); } // Open only dropdown that is clicked on and only close the appropriate dropdowns thereafter if (dropdownContainerClosest.classList.contains('dn')) { var dropdownContainerAllOpen = document.querySelectorAll('ul.l-nav-dropdown_container'); if (dropdownContainerAllOpen.length > 1) { // Close all dropdowns not clicked on dropdownContainerAllOpen.forEach(function(element) { element.classList.add('dn'); }); // Return dropdown indicator arrows to their original position vObj.svgArrowsAll.forEach(function(element) { element.classList.remove('rotated-up'); element.classList.add('rotated-down'); }); } // Open dropdown clicked on dropdownContainerClosest.classList.remove('dn'); // Close planner menu when opening a dropdown vObj.closePlannerMenu(); } else { // Close dropdown clicked on dropdownContainerClosest.classList.add('dn'); } // Return dropdown indicator arrows to their original position if (svgArrowSpanClosestDown.classList.contains('rotated-up')) { svgArrowSpanClosestDown.classList.remove('rotated-up'); svgArrowSpanClosestDown.classList.add('rotated-down'); } else { svgArrowSpanClosestDown.classList.add('rotated-up'); svgArrowSpanClosestDown.classList.remove('rotated-down'); } // Detect all clicks on the document after toggleNavLinkDropdown() is called document.addEventListener('click', vObj.handClicksOutsideDropdown); }, handClicksOutsideDropdown: function(event) { var vObj = this; // If user clicks outside the dropdown or uses the Escape key, reset dropdowns and remove event listener if (event.key === "Escape" || event.code === "Escape" || !event.target.closest('li.l-dropdown_link')) { if (vObj.hasDropdownsInNav) { vObj.resetDropdowns(); } document.removeEventListener('click', vObj.handClicksOutsideDropdown); } else { return } }, resetDropdowns: function() { var vObj = this; // Close all dropdowns vObj.dropdownContainerAll.forEach(function(element) { element.classList.add('dn'); }); // Also revert all dropdown arrows to the correct rotation vObj.svgArrowsAll.forEach(function(element) { element.classList.remove('rotated-up'); element.classList.add('rotated-down'); }); }, // Animate links into mobile nav dropdown animateElements: function(elementsToAnimate) { elementsToAnimate.forEach(function(element, i) { element.classList.add('animated'); element.classList.add('fadeInUp'); element.style[ 'animationDelay' ] = ( i * 90 ) + 'ms'; }); }, // Reset animation properties on links in mobile nav dropdown set by animateElements() resetAnimation: function(elementsToReset) { elementsToReset.forEach(function(element, i) { element.classList.remove('animated'); element.classList.remove('fadeInUp'); element.style['animationDelay'] = 0 + 'ms'; }); }, // Offset utility function. Pass 'log' (String) as second argument to log returned offsets {} getElementOffset: function(element, log) { var rect = element.getBoundingClientRect(), scrollTop = window.pageYOffset || document.documentElement.scrollTop, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; var offsets = { element: element, rect: rect, top: rect.top, right: rect.right, bottom: rect.top, left: rect.left, topRelative: rect.top + scrollTop, leftRelative: rect.left + scrollLeft, scrollTop: scrollTop, scrollLeft: scrollLeft, height: rect.height, width: rect.width } if ((arguments[1] !== undefined) && (arguments[1].toLowerCase() === 'log')) { console.log(offsets); } return offsets; }, logout: function(){ if(this.hasSessionStorage()) { sessionStorage.removeItem("numberunreadmessages"); } this.$refs.logoutform.submit(); } } }); </script> </body> </html>