- ID scansione:
- 59f3b751-ab14-4fdd-8796-b1c7659eb6c3Fatto
- URL inviato:
- https://exhibitors.ces.tech/8_0/#/
- Report terminato:
Link · 4 trovati
I link in uscita identificati dalla pagina
Link | Testo |
---|---|
http://www.ces.tech/ | |
https://www.ces.tech/about-ces.aspx | About CES |
https://www.ces.tech/brand | We have updated the Consumer Technology Association (CTA)® and CES logos, marking a significant milestone for our association and the world’s most powerful tech event. Learn more about our new brand. |
http://www.ces.tech/privacy | Privacy Policy |
Variabili JavaScript · 103 trovate
Le variabili JavaScript globali caricate sull'oggetto finestra di una pagina sono variabili dichiarate all'esterno delle funzioni e accessibili da qualsiasi punto del codice nell'ambito corrente
Nome | Tipo |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
tinycolor | function |
parse_query_string | function |
changeLanguage | function |
query | string |
qs | undefined |
picturePolyfill | object |
manualScroll | boolean |
Messaggi di log della console · 0 trovati
Messaggi registrati nella console Web
HTML
Il corpo HTML non elaborato della pagina
<html lang="en"><head><style type="text/css">.tippy-touch{cursor:pointer!important}.tippy-notransition{transition:none!important}.tippy-popper{max-width:350px;-webkit-perspective:700px;perspective:700px;z-index:9999;outline:0;transition-timing-function:cubic-bezier(.165,.84,.44,1);pointer-events:none;line-height:1.4}.tippy-popper[data-html]{max-width:96%;max-width:calc(100% - 20px)}.tippy-popper[x-placement^=top] .tippy-backdrop{border-radius:40% 40% 0 0}.tippy-popper[x-placement^=top] .tippy-roundarrow{bottom:-8px;-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=top] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.tippy-popper[x-placement^=top] .tippy-arrow{border-top:7px solid #333;border-right:7px solid transparent;border-left:7px solid transparent;bottom:-7px;margin:0 6px;-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=top] .tippy-backdrop{-webkit-transform-origin:0 90%;transform-origin:0 90%}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(6) translate(-50%,25%);transform:scale(6) translate(-50%,25%);opacity:1}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(1) translate(-50%,25%);transform:scale(1) translate(-50%,25%);opacity:0}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=visible]{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}.tippy-popper[x-placement^=top] [data-animation=perspective]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=visible]{opacity:1;-webkit-transform:translateY(-10px) rotateX(0);transform:translateY(-10px) rotateX(0)}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:translateY(0) rotateX(90deg);transform:translateY(0) rotateX(90deg)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=visible]{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=visible]{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=visible]{opacity:1;-webkit-transform:translateY(-10px) scale(1);transform:translateY(-10px) scale(1)}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(0) scale(0);transform:translateY(0) scale(0)}.tippy-popper[x-placement^=bottom] .tippy-backdrop{border-radius:0 0 30% 30%}.tippy-popper[x-placement^=bottom] .tippy-roundarrow{top:-8px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.tippy-popper[x-placement^=bottom] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(0);transform:rotate(0)}.tippy-popper[x-placement^=bottom] .tippy-arrow{border-bottom:7px solid #333;border-right:7px solid transparent;border-left:7px solid transparent;top:-7px;margin:0 6px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.tippy-popper[x-placement^=bottom] .tippy-backdrop{-webkit-transform-origin:0 -90%;transform-origin:0 -90%}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(6) translate(-50%,-125%);transform:scale(6) translate(-50%,-125%);opacity:1}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(1) translate(-50%,-125%);transform:scale(1) translate(-50%,-125%);opacity:0}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=visible]{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}.tippy-popper[x-placement^=bottom] [data-animation=perspective]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=visible]{opacity:1;-webkit-transform:translateY(10px) rotateX(0);transform:translateY(10px) rotateX(0)}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:translateY(0) rotateX(-90deg);transform:translateY(0) rotateX(-90deg)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=visible]{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=visible]{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=visible]{opacity:1;-webkit-transform:translateY(10px) scale(1);transform:translateY(10px) scale(1)}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(0) scale(0);transform:translateY(0) scale(0)}.tippy-popper[x-placement^=left] .tippy-backdrop{border-radius:50% 0 0 50%}.tippy-popper[x-placement^=left] .tippy-roundarrow{right:-16px;-webkit-transform-origin:33.33333333% 50%;transform-origin:33.33333333% 50%}.tippy-popper[x-placement^=left] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.tippy-popper[x-placement^=left] .tippy-arrow{border-left:7px solid #333;border-top:7px solid transparent;border-bottom:7px solid transparent;right:-7px;margin:3px 0;-webkit-transform-origin:0 50%;transform-origin:0 50%}.tippy-popper[x-placement^=left] .tippy-backdrop{-webkit-transform-origin:100% 0;transform-origin:100% 0}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(6) translate(40%,-50%);transform:scale(6) translate(40%,-50%);opacity:1}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(1.5) translate(40%,-50%);transform:scale(1.5) translate(40%,-50%);opacity:0}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=visible]{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}.tippy-popper[x-placement^=left] [data-animation=perspective]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=visible]{opacity:1;-webkit-transform:translateX(-10px) rotateY(0);transform:translateX(-10px) rotateY(0)}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:translateX(0) rotateY(-90deg);transform:translateX(0) rotateY(-90deg)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=visible]{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=visible]{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=visible]{opacity:1;-webkit-transform:translateX(-10px) scale(1);transform:translateX(-10px) scale(1)}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(0) scale(0);transform:translateX(0) scale(0)}.tippy-popper[x-placement^=right] .tippy-backdrop{border-radius:0 50% 50% 0}.tippy-popper[x-placement^=right] .tippy-roundarrow{left:-16px;-webkit-transform-origin:66.66666666% 50%;transform-origin:66.66666666% 50%}.tippy-popper[x-placement^=right] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.tippy-popper[x-placement^=right] .tippy-arrow{border-right:7px solid #333;border-top:7px solid transparent;border-bottom:7px solid transparent;left:-7px;margin:3px 0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tippy-popper[x-placement^=right] .tippy-backdrop{-webkit-transform-origin:-100% 0;transform-origin:-100% 0}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(6) translate(-140%,-50%);transform:scale(6) translate(-140%,-50%);opacity:1}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(1.5) translate(-140%,-50%);transform:scale(1.5) translate(-140%,-50%);opacity:0}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=visible]{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.tippy-popper[x-placement^=right] [data-animation=perspective]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=visible]{opacity:1;-webkit-transform:translateX(10px) rotateY(0);transform:translateX(10px) rotateY(0)}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:translateX(0) rotateY(90deg);transform:translateX(0) rotateY(90deg)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=visible]{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=visible]{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=visible]{opacity:1;-webkit-transform:translateX(10px) scale(1);transform:translateX(10px) scale(1)}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(0) scale(0);transform:translateX(0) scale(0)}.tippy-tooltip{position:relative;color:#fff;border-radius:4px;font-size:.9rem;padding:.3rem .6rem;text-align:center;will-change:transform;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#333}.tippy-tooltip[data-size=small]{padding:.2rem .4rem;font-size:.75rem}.tippy-tooltip[data-size=large]{padding:.4rem .8rem;font-size:1rem}.tippy-tooltip[data-animatefill]{overflow:hidden;background-color:transparent}.tippy-tooltip[data-animatefill] .tippy-content{transition:-webkit-clip-path cubic-bezier(.46,.1,.52,.98);transition:clip-path cubic-bezier(.46,.1,.52,.98);transition:clip-path cubic-bezier(.46,.1,.52,.98),-webkit-clip-path cubic-bezier(.46,.1,.52,.98)}.tippy-tooltip[data-interactive],.tippy-tooltip[data-interactive] path{pointer-events:auto}.tippy-tooltip[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.53,2,.36,.85)}.tippy-tooltip[data-inertia][data-state=hidden]{transition-timing-function:ease}.tippy-arrow,.tippy-roundarrow{position:absolute;width:0;height:0}.tippy-roundarrow{width:24px;height:8px;fill:#333;pointer-events:none}.tippy-backdrop{position:absolute;will-change:transform;background-color:#333;border-radius:50%;width:26%;left:50%;top:50%;z-index:-1;transition:all cubic-bezier(.46,.1,.52,.98);-webkit-backface-visibility:hidden;backface-visibility:hidden}.tippy-backdrop:after{content:"";float:left;padding-top:100%}body:not(.tippy-touch) .tippy-tooltip[data-animatefill][data-state=visible] .tippy-content{-webkit-clip-path:ellipse(100% 100% at 50% 50%);clip-path:ellipse(100% 100% at 50% 50%)}body:not(.tippy-touch) .tippy-tooltip[data-animatefill][data-state=hidden] .tippy-content{-webkit-clip-path:ellipse(5% 50% at 50% 50%);clip-path:ellipse(5% 50% at 50% 50%)}body:not(.tippy-touch) .tippy-popper[x-placement=right] .tippy-tooltip[data-animatefill][data-state=visible] .tippy-content{-webkit-clip-path:ellipse(135% 100% at 0 50%);clip-path:ellipse(135% 100% at 0 50%)}body:not(.tippy-touch) .tippy-popper[x-placement=right] .tippy-tooltip[data-animatefill][data-state=hidden] .tippy-content{-webkit-clip-path:ellipse(40% 100% at 0 50%);clip-path:ellipse(40% 100% at 0 50%)}body:not(.tippy-touch) .tippy-popper[x-placement=left] .tippy-tooltip[data-animatefill][data-state=visible] .tippy-content{-webkit-clip-path:ellipse(135% 100% at 100% 50%);clip-path:ellipse(135% 100% at 100% 50%)}body:not(.tippy-touch) .tippy-popper[x-placement=left] .tippy-tooltip[data-animatefill][data-state=hidden] .tippy-content{-webkit-clip-path:ellipse(40% 100% at 100% 50%);clip-path:ellipse(40% 100% at 100% 50%)}@media (max-width:360px){.tippy-popper{max-width:96%;max-width:calc(100% - 20px)}}</style><script src="/mys_shared/js/tinycolor/1.4.1/js/tinycolor.min.js"></script>
<link rel="stylesheet" type="text/css" href="/8_0/assets/css/landing-page.css">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Find Exhibitors and Sessions - CES 2025</title>
<meta name="description" content="Find exhibitors and sessions at CES 2025. Create a free planner to save favorite exhibitors and sessions. Get personalized recommendations based on your interests.">
<meta property="og:url" content="https://exhibitors.ces.tech/8_0/index.cfm">
<meta property="og:type" content="website">
<meta property="og:title" content="Find Exhibitors and Sessions - CES 2025">
<meta property="og:description" content="Find exhibitors and sessions at CES 2025. Create a free planner to save favorite exhibitors and sessions. Get personalized recommendations based on your interests.">
<meta property="og:image" content="">
<meta property="og:site_name" content="CES 2025">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Find Exhibitors and Sessions - CES 2025">
<meta name="twitter:description" content="Find exhibitors and sessions at CES 2025. Create a free planner to save favorite exhibitors and sessions. Get personalized recommendations based on your interests.">
<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=20240926A">
<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(230, 74%, 48%);--color-accent-20: hsl(230, 74%, 58%);--color-accent-30: hsl(230, 74%, 68%);--color-accent-40: hsl(230, 74%, 78%);--color-accent-50: hsl(230, 74%, 88%);--color-brand-10: hsl(235, 100%, 21%);--color-brand-20: hsl(235, 87%, 29%);--color-brand-30: hsl(235, 82%, 33%);--color-brand-40: hsl(235, 76%, 39%);--color-brand-50: hsl(235, 67%, 45%);--color-brand-60: hsl(235, 65%, 55%);--color-brand-70: hsl(235, 74%, 65%);--color-brand-80: hsl(235, 84%, 74%);--color-brand-90: hsl(235, 97%, 85%);--color-brand-100: hsl(235, 75%, 97%);--color-header: hsl(0, 0%, 100%);--color-header-background: hsl(0, 0%, 100%);--color-nav: hsl(0, 0%, 0%);--color-nav-background: hsl(0, 0%, 100%);--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>
/* https://mapyourshow.atlassian.net/browse/CES25-1 */
@font-face {
font-family:'KarbonBold';
font-style:normal;
font-weight:700;
src:url(/mys_shared/CES25/showfiles/fonts/karbon-bold-webfont.woff)
format("woff"),url(/mys_shared/CES25/showfiles/fonts/karbon-bold-webfont.ttf)
format("truetype");
}
@font-face{font-family:'OpenSansBold';
font-style:normal;
font-weight:800;
src:url(/mys_shared/CES25/showfiles/fonts/OpenSans-Bold-webfont.woff)
format("woff"),url(/mys_shared/CES25/showfiles/fonts/OpenSans-Bold-webfont.ttf)
format("truetype");
}
@font-face{
font-family:'OpenSans';
font-style:normal;
font-weight:400;
src:url(/mys_shared/CES25/showfiles/fonts/OpenSans-Regular.woff)
format("woff"),url(/mys_shared/CES25/showfiles/fonts/OpenSans-Regular.ttf)
format("woff2");
}
html, button, input, optgroup, select, textarea{
font-family:'OpenSans',Helvetica,Arial,sans-serif;
}
.font-karbonBold{
font-family:'KarbonBold',Helvetica,Arial,sans-serif;
}
.font-openSansBold{
font-family:'OpenSansBold',Helvetica,Arial,sans-serif;
}
.showroom-header h1,
#myshow h1,
#myshow h2{
color:#000;
font-family:'KarbonBold',Helvetica,Arial,sans-serif
}
.result-heading h2,
.o-HeadingUnderline_Left,
.o-HeadingUnderline_Center,
.showroom-sidebar .flex h3{
color:#000;
font-family:'KarbonBold',Helvetica,Arial,sans-serif;
font-size:1.25rem
}
</style>
<link href="/8_0/assets/js/mys-bundled/index-min.css" rel="stylesheet"><script src="/8_0/assets/js/mys-bundled/index-min.js"></script><style type="text/css">.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme .tippy-arrow{border-top:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme .tippy-roundarrow{width:24px;height:24px;fill:#fff}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme .tippy-arrow{border-bottom:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme .tippy-roundarrow{width:24px;height:24px;fill:#fff}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme .tippy-arrow{border-left:7px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme .tippy-roundarrow{width:24px;height:24px;fill:#fff}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme .tippy-arrow{border-right:7px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme .tippy-roundarrow{width:24px;height:24px;fill:#fff}.tippy-popper .tippy-tooltip.light-theme{color:#26323d;box-shadow:0 0 20px 4px rgba(154,161,177,.15),0 4px 80px -8px rgba(36,40,47,.25),0 4px 4px -2px rgba(91,94,105,.15);background-color:#fff}.tippy-popper .tippy-tooltip.light-theme .tippy-backdrop{background-color:#fff}.tippy-popper .tippy-tooltip.light-theme[data-animatefill]{background-color:transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.translucent-theme .tippy-arrow{border-top:7px solid rgba(0,0,0,.7);border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.translucent-theme .tippy-roundarrow{width:24px;height:24px;fill:rgba(0,0,0,.7)}.tippy-popper[x-placement^=bottom] .tippy-tooltip.translucent-theme .tippy-arrow{border-bottom:7px solid rgba(0,0,0,.7);border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.translucent-theme .tippy-roundarrow{width:24px;height:24px;fill:rgba(0,0,0,.7)}.tippy-popper[x-placement^=left] .tippy-tooltip.translucent-theme .tippy-arrow{border-left:7px solid rgba(0,0,0,.7);border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.translucent-theme .tippy-roundarrow{width:24px;height:24px;fill:rgba(0,0,0,.7)}.tippy-popper[x-placement^=right] .tippy-tooltip.translucent-theme .tippy-arrow{border-right:7px solid rgba(0,0,0,.7);border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.translucent-theme .tippy-roundarrow{width:24px;height:24px;fill:rgba(0,0,0,.7)}.tippy-popper .tippy-tooltip.translucent-theme,.tippy-popper .tippy-tooltip.translucent-theme .tippy-backdrop{background-color:rgba(0,0,0,.7)}.tippy-popper .tippy-tooltip.translucent-theme[data-animatefill]{background-color:transparent}.tippy-tooltip.gradient-theme,.tippy-tooltip.gradient-theme:after{background:linear-gradient(45deg,#8c61f5,#ff9cad);font-weight:700}.tippy-tooltip.gradient-theme:after{position:absolute;left:0;top:5px;content:"";width:100%;height:100%;-webkit-filter:blur(12px) brightness(1.2);filter:blur(12px) brightness(1.2);opacity:.8;z-index:-1}</style>
<script>
/*Vue.mixin({
data: function() {
return {
get searchcontent() {
return {"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\\search\\booth-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-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\\booth-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\\booth-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadLegend":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Legend","APP_VERSION":"8_0","SECTION":"tableHeadLegend"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Exhibitors in Booths","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-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\\booth-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\\booth-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"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\\search\\showfeature-search-results-display.cfm":{"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadMatchingExhibitors":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Matching","APP_VERSION":"8_0","SECTION":"tableHeadMatchingExhibitors"}],"tableHeadPavilion":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Pavilion","APP_VERSION":"8_0","SECTION":"tableHeadPavilion"}],"tableHeadPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"tableHeadPlanner"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Show Features","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}]},"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 Exhibitors","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\\search\\category-search-results-display.cfm":{"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadMatchingExhibitors":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Matching","APP_VERSION":"8_0","SECTION":"tableHeadMatchingExhibitors"}],"countSuffixSingular":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"countSuffixSingular"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"countSuffixPlural":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"countSuffixPlural"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Product Categories","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadCategory":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Category","APP_VERSION":"8_0","SECTION":"tableHeadCategory"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}]},"includes\\vue\\search\\keyword-search-form_v2.cfm":{"advancedSearchButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Advanced Search","APP_VERSION":"8_0","SECTION":"advancedSearchButtonText"}],"loadingoptionstext":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingoptionstext"}],"recentSearchesHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Recent Searches","APP_VERSION":"8_0","SECTION":"recentSearchesHeader"}],"searchOptionsHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Show Results For","APP_VERSION":"8_0","SECTION":"searchOptionsHeader"}]},"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\\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\\search\\advanced-search-form.cfm":{"exhibitorMeetsAllConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Exhibitors <strong>That Must Match All</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"exhibitorMeetsAllConditionsPreText"}],"advancedsearch_display_option_keyword":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Keyword","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_keyword"}],"addCondition":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Add Search Item","APP_VERSION":"8_0","SECTION":"addCondition"}],"advancedsearch_display_option_exhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_exhibitor"}],"advancedsearch_display_option_2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Search by Event Type","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_2"}],"advancedsearch_display_option_country":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Country","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_country"}],"advancedsearch_display_option_state":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"State","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_state"}],"advancedsearch_display_option_showfeature":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Show Feature","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_showfeature"}],"meetsAllConditionsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Meets All Conditions","APP_VERSION":"8_0","SECTION":"meetsAllConditionsText"}],"advancedsearch_display_option_exhibitorname":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Exhibitor Name","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_exhibitorname"}],"advancedsearch_display_option_pavilion":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Pavilion","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_pavilion"}],"meetsAtLeastOneConditionText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Meets At Least One Condition","APP_VERSION":"8_0","SECTION":"meetsAtLeastOneConditionText"}],"sessionMeetsAllConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Sessions <strong>That Must Match All</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"sessionMeetsAllConditionsPreText"}],"'advancedsearch_display_option_2'":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Event Type","APP_VERSION":"8_0","SECTION":"'advancedsearch_display_option_2'"}],"advancedsearch_display_option_sessioneventtype":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Type","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessioneventtype"}],"advancedsearch_display_option_sessionsearch":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionsearch"}],"isText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"IS","APP_VERSION":"8_0","SECTION":"isText"}],"advancedsearch_display_option_guestappearances":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Scheduled Event","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_guestappearances"}],"advancedsearch_display_option_subshow":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Subshow","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_subshow"}],"chooseSearchItemText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Choose a Search Item","APP_VERSION":"8_0","SECTION":"chooseSearchItemText"}],"advancedsearch_display_option_georegion":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"GeoRegion","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_georegion"}],"advancedsearch_display_option_sessionkeyword":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Keyword","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionkeyword"}],"advancedsearch_display_option_sessionspeakers":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Speaker","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionspeakers"}],"searchForText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Search for","APP_VERSION":"8_0","SECTION":"searchForText"}],"exhibitorsOption":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"exhibitorsOption"}],"advancedsearch_display_option_sessionsponsor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Sponsor","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionsponsor"}],"isNotText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Is Not","APP_VERSION":"8_0","SECTION":"isNotText"}],"advancedsearch_display_option_sessionlevels":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Level","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionlevels"}],"advancedsearch_display_option_sessiontype":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Type","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessiontype"}],"orOptionsTippyTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Results must match at least one of the conditions added to this section in order to be returned.","APP_VERSION":"8_0","SECTION":"orOptionsTippyTitle"}],"containsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Contains","APP_VERSION":"8_0","SECTION":"containsText"}],"advancedSearchSubmitButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Search","APP_VERSION":"8_0","SECTION":"advancedSearchSubmitButton"}],"advancedsearch_display_option_educationunits":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Education Unit","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_educationunits"}],"backToSearchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Back to Search","APP_VERSION":"8_0","SECTION":"backToSearchText"}],"tooManyConditionsWarning":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"You have reached the maximum amount of advanced search conditions.","APP_VERSION":"8_0","SECTION":"tooManyConditionsWarning"}],"showOrHideText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Show or hide Advanced Search","APP_VERSION":"8_0","SECTION":"showOrHideText"}],"advancedsearch_display_option_sessiondate":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Date","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessiondate"}],"andOptionsTippyTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Results must match all conditions added in this section in order to be returned.","APP_VERSION":"8_0","SECTION":"andOptionsTippyTitle"}],"exhibitorMeetsAnyConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Exhibitors <strong>That Match Any</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"exhibitorMeetsAnyConditionsPreText"}],"advancedsearch_display_option_collateral":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Collateral","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_collateral"}],"advancedsearch_display_option_tradename":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Tradename","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_tradename"}],"advancedSearchHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Advanced Search","APP_VERSION":"8_0","SECTION":"advancedSearchHeader"}],"advancedsearch_display_option_booth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_booth"}],"advancedsearch_display_option_conferences":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Conference","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_conferences"}],"sessionMeetsAnyConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Sessions <strong>That Match Any</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"sessionMeetsAnyConditionsPreText"}],"clearAllSearchItems":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Clear All Search Items","APP_VERSION":"8_0","SECTION":"clearAllSearchItems"}],"sessionsOption":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Sessions","APP_VERSION":"8_0","SECTION":"sessionsOption"}],"advancedsearch_display_option_sessiontrack":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Track","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessiontrack"}],"advancedsearch_display_option_categories":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Category","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_categories"}],"advancedsearch_display_option_audience":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Audience","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_audience"}]},"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 Exhibitors","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\\search\\search-results-summary-display.cfm":{"relatedsearchesheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Related Searches","APP_VERSION":"8_0","SECTION":"relatedsearchesheader"}],"recommendedexhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Recommended","APP_VERSION":"8_0","SECTION":"recommendedexhibitorsheader"}],"onDemandLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"On Demand","APP_VERSION":"8_0","SECTION":"onDemandLabel"}],"loadingoptionstext":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingoptionstext"}],"sessionsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Sessions","APP_VERSION":"8_0","SECTION":"sessionsheader"}],"allexhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"All Exhibitors","APP_VERSION":"8_0","SECTION":"allexhibitorsheader"}],"featuredexhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Featured","APP_VERSION":"8_0","SECTION":"featuredexhibitorsheader"}],"exhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"exhibitorsheader"}]},"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\\search\\collateral-search-results-display.cfm":{"subtitleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\collateral-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"subtitleHeader"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\collateral-search-results-display.cfm","TEXT":"Collateral","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"titleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\collateral-search-results-display.cfm","TEXT":"Title","APP_VERSION":"8_0","SECTION":"titleHeader"}]},"includes\\vue\\search\\guestappearances-search-results-display.cfm":{"subtitleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"subtitleHeader"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"displayGuestName":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Scheduled Event Name","APP_VERSION":"8_0","SECTION":"displayGuestName"}],"displayDate":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Date","APP_VERSION":"8_0","SECTION":"displayDate"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Scheduled Events","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"displayBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"displayBooth"}],"titleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Scheduled Event","APP_VERSION":"8_0","SECTION":"titleHeader"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"displayDescription":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Description","APP_VERSION":"8_0","SECTION":"displayDescription"}],"displayExhName":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Exhibitor Name","APP_VERSION":"8_0","SECTION":"displayExhName"}]},"includes\\vue\\search\\requireplanner-search-results-display.cfm":{"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\requireplanner-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"requirePlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\requireplanner-search-results-display.cfm","TEXT":"My Show Planner","APP_VERSION":"8_0","SECTION":"requirePlannerText"}]},"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\\generic\\show-highlights-display.cfm":{"showLessButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Show Less","APP_VERSION":"8_0","SECTION":"showLessButton"}],"showAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Show All","APP_VERSION":"8_0","SECTION":"showAllButton"}],"header":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Product Spotlight","APP_VERSION":"8_0","SECTION":"header"}],"visitUsAtBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Visit us at Booth","APP_VERSION":"8_0","SECTION":"visitUsAtBooth"}]},"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\\search\\generic-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-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\\generic-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\\generic-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-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\\generic-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"addToPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"addToPlanner"}],"viewAllFeaturedButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"includes\\vue\\search\\search-results-display.cfm":{"onDemandSessionLabelSingular":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"On Demand Session","APP_VERSION":"8_0","SECTION":"onDemandSessionLabelSingular"}],"listText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"List","APP_VERSION":"8_0","SECTION":"listText"}],"resultPlural":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Results","APP_VERSION":"8_0","SECTION":"resultPlural"}],"gridText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Grid","APP_VERSION":"8_0","SECTION":"gridText"}],"forText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"for","APP_VERSION":"8_0","SECTION":"forText"}],"onDemandSessionLabelPlural":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"On Demand Sessions","APP_VERSION":"8_0","SECTION":"onDemandSessionLabelPlural"}],"relatedSearchesText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Related Searches","APP_VERSION":"8_0","SECTION":"relatedSearchesText"}],"resultSingular":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Result","APP_VERSION":"8_0","SECTION":"resultSingular"}]},"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\\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"}]}};
}
}
}
});*/
const searchcontent =
{"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\\search\\booth-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-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\\booth-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\\booth-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadLegend":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Legend","APP_VERSION":"8_0","SECTION":"tableHeadLegend"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Exhibitors in Booths","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\booth-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\\booth-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\\booth-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"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\\search\\showfeature-search-results-display.cfm":{"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadMatchingExhibitors":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Matching","APP_VERSION":"8_0","SECTION":"tableHeadMatchingExhibitors"}],"tableHeadPavilion":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Pavilion","APP_VERSION":"8_0","SECTION":"tableHeadPavilion"}],"tableHeadPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"tableHeadPlanner"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Show Features","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\showfeature-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}]},"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 Exhibitors","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\\search\\category-search-results-display.cfm":{"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"tableHeadMatchingExhibitors":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Matching","APP_VERSION":"8_0","SECTION":"tableHeadMatchingExhibitors"}],"countSuffixSingular":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"countSuffixSingular"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"countSuffixPlural":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"countSuffixPlural"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Product Categories","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"tableHeadCategory":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Category","APP_VERSION":"8_0","SECTION":"tableHeadCategory"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\category-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}]},"includes\\vue\\search\\keyword-search-form_v2.cfm":{"advancedSearchButtonText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Advanced Search","APP_VERSION":"8_0","SECTION":"advancedSearchButtonText"}],"loadingoptionstext":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingoptionstext"}],"recentSearchesHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Recent Searches","APP_VERSION":"8_0","SECTION":"recentSearchesHeader"}],"searchOptionsHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\keyword-search-form_v2.cfm","TEXT":"Show Results For","APP_VERSION":"8_0","SECTION":"searchOptionsHeader"}]},"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\\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\\search\\advanced-search-form.cfm":{"exhibitorMeetsAllConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Exhibitors <strong>That Must Match All</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"exhibitorMeetsAllConditionsPreText"}],"advancedsearch_display_option_keyword":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Keyword","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_keyword"}],"addCondition":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Add Search Item","APP_VERSION":"8_0","SECTION":"addCondition"}],"advancedsearch_display_option_exhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_exhibitor"}],"advancedsearch_display_option_2":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Search by Event Type","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_2"}],"advancedsearch_display_option_country":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Country","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_country"}],"advancedsearch_display_option_state":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"State","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_state"}],"advancedsearch_display_option_showfeature":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Show Feature","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_showfeature"}],"meetsAllConditionsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Meets All Conditions","APP_VERSION":"8_0","SECTION":"meetsAllConditionsText"}],"advancedsearch_display_option_exhibitorname":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Exhibitor Name","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_exhibitorname"}],"advancedsearch_display_option_pavilion":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Pavilion","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_pavilion"}],"meetsAtLeastOneConditionText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Meets At Least One Condition","APP_VERSION":"8_0","SECTION":"meetsAtLeastOneConditionText"}],"sessionMeetsAllConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Sessions <strong>That Must Match All</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"sessionMeetsAllConditionsPreText"}],"'advancedsearch_display_option_2'":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Event Type","APP_VERSION":"8_0","SECTION":"'advancedsearch_display_option_2'"}],"advancedsearch_display_option_sessioneventtype":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Type","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessioneventtype"}],"advancedsearch_display_option_sessionsearch":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionsearch"}],"isText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"IS","APP_VERSION":"8_0","SECTION":"isText"}],"advancedsearch_display_option_guestappearances":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Scheduled Event","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_guestappearances"}],"advancedsearch_display_option_subshow":[{"CONTAINSVAR":0,"LANGUAGECODE":"EN","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Subshow","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_subshow"}],"chooseSearchItemText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Choose a Search Item","APP_VERSION":"8_0","SECTION":"chooseSearchItemText"}],"advancedsearch_display_option_georegion":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"GeoRegion","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_georegion"}],"advancedsearch_display_option_sessionkeyword":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Keyword","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionkeyword"}],"advancedsearch_display_option_sessionspeakers":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Speaker","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionspeakers"}],"searchForText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Search for","APP_VERSION":"8_0","SECTION":"searchForText"}],"exhibitorsOption":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"exhibitorsOption"}],"advancedsearch_display_option_sessionsponsor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Sponsor","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionsponsor"}],"isNotText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Is Not","APP_VERSION":"8_0","SECTION":"isNotText"}],"advancedsearch_display_option_sessionlevels":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Level","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessionlevels"}],"advancedsearch_display_option_sessiontype":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Type","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessiontype"}],"orOptionsTippyTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Results must match at least one of the conditions added to this section in order to be returned.","APP_VERSION":"8_0","SECTION":"orOptionsTippyTitle"}],"containsText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Contains","APP_VERSION":"8_0","SECTION":"containsText"}],"advancedSearchSubmitButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Search","APP_VERSION":"8_0","SECTION":"advancedSearchSubmitButton"}],"advancedsearch_display_option_educationunits":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Education Unit","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_educationunits"}],"backToSearchText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Back to Search","APP_VERSION":"8_0","SECTION":"backToSearchText"}],"tooManyConditionsWarning":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"You have reached the maximum amount of advanced search conditions.","APP_VERSION":"8_0","SECTION":"tooManyConditionsWarning"}],"showOrHideText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Show or hide Advanced Search","APP_VERSION":"8_0","SECTION":"showOrHideText"}],"advancedsearch_display_option_sessiondate":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Date","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessiondate"}],"andOptionsTippyTitle":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Results must match all conditions added in this section in order to be returned.","APP_VERSION":"8_0","SECTION":"andOptionsTippyTitle"}],"exhibitorMeetsAnyConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Exhibitors <strong>That Match Any</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"exhibitorMeetsAnyConditionsPreText"}],"advancedsearch_display_option_collateral":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Collateral","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_collateral"}],"advancedsearch_display_option_tradename":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Tradename","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_tradename"}],"advancedSearchHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Advanced Search","APP_VERSION":"8_0","SECTION":"advancedSearchHeader"}],"advancedsearch_display_option_booth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_booth"}],"advancedsearch_display_option_conferences":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Conference","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_conferences"}],"sessionMeetsAnyConditionsPreText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Find Sessions <strong>That Match Any</strong> of the Following Items","APP_VERSION":"8_0","SECTION":"sessionMeetsAnyConditionsPreText"}],"clearAllSearchItems":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Clear All Search Items","APP_VERSION":"8_0","SECTION":"clearAllSearchItems"}],"sessionsOption":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Sessions","APP_VERSION":"8_0","SECTION":"sessionsOption"}],"advancedsearch_display_option_sessiontrack":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Session Track","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_sessiontrack"}],"advancedsearch_display_option_categories":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Category","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_categories"}],"advancedsearch_display_option_audience":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\advanced-search-form.cfm","TEXT":"Audience","APP_VERSION":"8_0","SECTION":"advancedsearch_display_option_audience"}]},"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 Exhibitors","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\\search\\search-results-summary-display.cfm":{"relatedsearchesheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Related Searches","APP_VERSION":"8_0","SECTION":"relatedsearchesheader"}],"recommendedexhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Recommended","APP_VERSION":"8_0","SECTION":"recommendedexhibitorsheader"}],"onDemandLabel":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"On Demand","APP_VERSION":"8_0","SECTION":"onDemandLabel"}],"loadingoptionstext":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Loading...","APP_VERSION":"8_0","SECTION":"loadingoptionstext"}],"sessionsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Sessions","APP_VERSION":"8_0","SECTION":"sessionsheader"}],"allexhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"All Exhibitors","APP_VERSION":"8_0","SECTION":"allexhibitorsheader"}],"featuredexhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Featured","APP_VERSION":"8_0","SECTION":"featuredexhibitorsheader"}],"exhibitorsheader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-summary-display.cfm","TEXT":"Exhibitors","APP_VERSION":"8_0","SECTION":"exhibitorsheader"}]},"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\\search\\collateral-search-results-display.cfm":{"subtitleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\collateral-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"subtitleHeader"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\collateral-search-results-display.cfm","TEXT":"Collateral","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"titleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\collateral-search-results-display.cfm","TEXT":"Title","APP_VERSION":"8_0","SECTION":"titleHeader"}]},"includes\\vue\\search\\guestappearances-search-results-display.cfm":{"subtitleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"subtitleHeader"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllButton"}],"displayGuestName":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Scheduled Event Name","APP_VERSION":"8_0","SECTION":"displayGuestName"}],"displayDate":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Date","APP_VERSION":"8_0","SECTION":"displayDate"}],"displayResultHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Scheduled Events","APP_VERSION":"8_0","SECTION":"displayResultHeader"}],"displayBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"displayBooth"}],"titleHeader":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Scheduled Event","APP_VERSION":"8_0","SECTION":"titleHeader"}],"loadMoreResults":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"displayDescription":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Description","APP_VERSION":"8_0","SECTION":"displayDescription"}],"displayExhName":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\guestappearances-search-results-display.cfm","TEXT":"Exhibitor Name","APP_VERSION":"8_0","SECTION":"displayExhName"}]},"includes\\vue\\search\\requireplanner-search-results-display.cfm":{"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\requireplanner-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"requirePlannerText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\requireplanner-search-results-display.cfm","TEXT":"My Show Planner","APP_VERSION":"8_0","SECTION":"requirePlannerText"}]},"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\\generic\\show-highlights-display.cfm":{"showLessButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Show Less","APP_VERSION":"8_0","SECTION":"showLessButton"}],"showAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Show All","APP_VERSION":"8_0","SECTION":"showAllButton"}],"header":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Product Spotlight","APP_VERSION":"8_0","SECTION":"header"}],"visitUsAtBooth":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\generic\\show-highlights-display.cfm","TEXT":"Visit us at Booth","APP_VERSION":"8_0","SECTION":"visitUsAtBooth"}]},"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\\search\\generic-search-results-display.cfm":{"tableHeadSummary":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"Summary","APP_VERSION":"8_0","SECTION":"tableHeadSummary"}],"viewAllButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-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\\generic-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\\generic-search-results-display.cfm","TEXT":"Booth","APP_VERSION":"8_0","SECTION":"tableHeadBooth"}],"of":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"of","APP_VERSION":"8_0","SECTION":"of"}],"tableHeadExhibitor":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"Exhibitor","APP_VERSION":"8_0","SECTION":"tableHeadExhibitor"}],"viewOnFloorplan":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-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\\generic-search-results-display.cfm","TEXT":"Load More Results","APP_VERSION":"8_0","SECTION":"loadMoreResults"}],"addToPlanner":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"Add to Planner","APP_VERSION":"8_0","SECTION":"addToPlanner"}],"viewAllFeaturedButton":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\generic-search-results-display.cfm","TEXT":"See All Results","APP_VERSION":"8_0","SECTION":"viewAllFeaturedButton"}]},"includes\\vue\\search\\search-results-display.cfm":{"onDemandSessionLabelSingular":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"On Demand Session","APP_VERSION":"8_0","SECTION":"onDemandSessionLabelSingular"}],"listText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"List","APP_VERSION":"8_0","SECTION":"listText"}],"resultPlural":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Results","APP_VERSION":"8_0","SECTION":"resultPlural"}],"gridText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Grid","APP_VERSION":"8_0","SECTION":"gridText"}],"forText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"for","APP_VERSION":"8_0","SECTION":"forText"}],"onDemandSessionLabelPlural":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"On Demand Sessions","APP_VERSION":"8_0","SECTION":"onDemandSessionLabelPlural"}],"relatedSearchesText":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Related Searches","APP_VERSION":"8_0","SECTION":"relatedSearchesText"}],"resultSingular":[{"CONTAINSVAR":0,"LANGUAGECODE":"en","STYLE":"","DISPLAYORDER":1,"PAGE":"includes\\vue\\search\\search-results-display.cfm","TEXT":"Result","APP_VERSION":"8_0","SECTION":"resultSingular"}]},"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\\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"}]}};
;
</script>
<style type="text/css">[responsive-image] > img, [data-responsive-image] {overflow: hidden; padding: 0; } [responsive-image] > img, [data-responsive-image] > img {width: 100%;}
@keyframes element-queries { 0% { visibility: inherit; } }
#landingGrid .grid-2-c {animation: 0.1s element-queries;}
#landingGrid .grid-2-c > .resize-sensor {min-width: 0px;}
#landingGrid .grid-2-d {animation: 0.1s element-queries;}
#landingGrid .grid-2-d > .resize-sensor {min-width: 1px;}
#landingGrid .grid-3-c {animation: 0.1s element-queries;}
#landingGrid .grid-3-c > .resize-sensor {min-width: 2px;}
#landingGrid .grid-3-d {animation: 0.1s element-queries;}
#landingGrid .grid-3-d > .resize-sensor {min-width: 3px;}
#landingGrid .grid-3-e {animation: 0.1s element-queries;}
#landingGrid .grid-3-e > .resize-sensor {min-width: 4px;}
#landingGrid .grid-3-f {animation: 0.1s element-queries;}
#landingGrid .grid-3-f > .resize-sensor {min-width: 5px;}
#landingGrid .grid-4-c {animation: 0.1s element-queries;}
#landingGrid .grid-4-c > .resize-sensor {min-width: 6px;}
#landingGrid .grid-4-d {animation: 0.1s element-queries;}
#landingGrid .grid-4-d > .resize-sensor {min-width: 7px;}
#landingGrid .grid-4-e {animation: 0.1s element-queries;}
#landingGrid .grid-4-e > .resize-sensor {min-width: 8px;}
#landingGrid .grid-4-f {animation: 0.1s element-queries;}
#landingGrid .grid-4-f > .resize-sensor {min-width: 9px;}
#landingGrid .grid-4-g {animation: 0.1s element-queries;}
#landingGrid .grid-4-g > .resize-sensor {min-width: 10px;}
#landingGrid .grid-4-h {animation: 0.1s element-queries;}
#landingGrid .grid-4-h > .resize-sensor {min-width: 11px;}
#landingGrid .grid-5-b {animation: 0.1s element-queries;}
#landingGrid .grid-5-b > .resize-sensor {min-width: 12px;}
#landingGrid .grid-5-c {animation: 0.1s element-queries;}
#landingGrid .grid-5-c > .resize-sensor {min-width: 13px;}
#landingGrid .grid-5-d {animation: 0.1s element-queries;}
#landingGrid .grid-5-d > .resize-sensor {min-width: 14px;}
#landingGrid .grid-5-e {animation: 0.1s element-queries;}
#landingGrid .grid-5-e > .resize-sensor {min-width: 15px;}
#landingGrid .grid-5-f {animation: 0.1s element-queries;}
#landingGrid .grid-5-f > .resize-sensor {min-width: 16px;}
#landingGrid .grid-5-g {animation: 0.1s element-queries;}
#landingGrid .grid-5-g > .resize-sensor {min-width: 17px;}
#landingGrid .grid-6-a {animation: 0.1s element-queries;}
#landingGrid .grid-6-a > .resize-sensor {min-width: 18px;}
#landingGrid .grid-6-d {animation: 0.1s element-queries;}
#landingGrid .grid-6-d > .resize-sensor {min-width: 19px;}
#landingGrid .grid-6-e {animation: 0.1s element-queries;}
#landingGrid .grid-6-e > .resize-sensor {min-width: 20px;}
#landingGrid .grid-6-f {animation: 0.1s element-queries;}
#landingGrid .grid-6-f > .resize-sensor {min-width: 21px;}
#landingGrid .grid-6-g {animation: 0.1s element-queries;}
#landingGrid .grid-6-g > .resize-sensor {min-width: 22px;}
#landingGrid .landing-search_tile {animation: 0.1s element-queries;}
#landingGrid .landing-search_tile > .resize-sensor {min-width: 23px;}</style></head>
<body class="l-wrapper theme_1">
<header class="mys-directory-header l-header dn" id="js-navigation">
<div class="center mw9">
<a href="http://www.ces.tech/">
</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="icon-recommendation
bb-0
dib" href="#" style="position:absolute; right:0; top:12px;" aria-label="View your recommendations"
v-if="recommendationsactive"
v-on:click.stop.prevent="handleClick();"
v-bind="getBindings()">
<svg class="dib
moon-gray" width="21" height="24" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true"><path d="M10.88 0C10 0 9.28.6 8.8 1.52c-3.88.92-5.48 4.4-5.48 8.56v3.8c0 1.72-1.68 3.8-2.52 3.8v1.28H21v-1.28c-.84 0-2.52-2.08-2.52-3.8v-3.8c0-4.16-1.6-7.64-5.48-8.56C12.48.6 11.76 0 10.88 0zm-3.8 20.2c0 2.08 1.68 3.8 3.8 3.8s3.8-1.68 3.8-3.8h-7.6z" fill-rule="nonzero"></path></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 (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(){
var vObj = this;
vObj.startRecommendationTip();
});
}
},
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"
});
vObj.intro.start();
if (vObj.getBindingsReturnObj["data-intro"] == vObj.firsttimemessage){
vObj.intro.oncomplete(function(){
localStorage.setItem('vts_recommendation_first_message_shown', 'true');
});
vObj.intro.onexit(function(){
localStorage.setItem('vts_recommendation_first_message_shown', 'true');
});
} else if (vObj.getBindingsReturnObj["data-intro"] == vObj.secondtimemessage) {
vObj.intro.oncomplete(function(){
localStorage.setItem('vts_recommendation_second_message_shown', 'true');
});
vObj.intro.onexit(function(){
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 = [];
Vue.MYS.trackcss = {"Deloitte: The Content Revolution - Harnessing Tech for Growth and Personalization":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"Monks: AI Now - Innovation and Impact in Intelligent Automation":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"AARP: AgeTech Summit":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"Keynotes":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"Deloitte: Navigating New Heights in AI - Insights from CEOs to Skydivers":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"IPG: The New Gold Rush: Are AI-fueled Machines Transforming Connections?":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"Connectivity Standards Alliance: Driving Innovation: Building the Foundation and Future of the IoT":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"Research Summit":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"},"Intel: Advancing AI Everywhere for Everyone":{"textcolorhex":"#b2b2b2","backgroundcolorhex":"#b2b2b2"}};
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":"Pacific Time (US & Canada); Tijuana","showtimezone":false},"spotlightsettings":{"spotlightcount":3},"exhibitorsettings":{"sendemail":["disabled"]},"numconcurrentmeetings":5,"schedulepage":{"topsection":"disabled","rotatetop":[],"searchtypes":["Sessions","Guest Appearances","Live Events"],"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":{"seatcountrestriction":false,"showresources":"default"},"searchsettings":{"hidechildsessions":false,"hideoriginaltimes":false,"defaultsearchview":"grid","hidesessionlocations":false,"hidesessiontimes":false,"myshowincludesessionexhibitors":false,"hideallresults":true}};
Vue.MYS.useExhSubVersion2 = true;
Vue.MYS.exhSubVersion = 02;
Vue.MYS.sessionSubVersion = 02;
Vue.MYS.validRooms = ["Exhibit Space Selection - S219","VIP Lunch - S221","Member Lounge - S222","CTA Meetings - S223","Press Conferences - S224","Press Conferences - S225","Show Services - S226","Show Services - S227","Media Lounge - S228","S229","S231","S232","S233"];
Vue.MYS.validHalls = ["OO","OOO","NN","RR","HH","N","A","E","B","L","D","C","I","Q","M","X","H","Y","J","K","U","GG","Z","UU","CC","SS","DD","II","AA","BB","JJ","KK","PP","QQ","P","YY","ZZ","O"];
Vue.MYS.altregid = "";
Vue.MYS.regtype = "";
Vue.MYS.genericKey = "production/ces25";
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() + (-480 + 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 "CES25";
},
get showidlowercase() {
return ("CES25").toLowerCase();
},
get thispageurl(){
var temppath = "/8_0/index.cfm" ;
if (temppath === this.path2approot + '/index.cfm'){
return this.path2approot
} else {
return temppath;
}
},
get path2approot(){
return "/8_0"
},
get httphost(){
return "https://exhibitors.ces.tech"
},
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","prnewswire","Sessions","Surveying"]
},
get hasexhicons(){
return false
},
get hasnetworking(){
return false
},
get legendcontent(){
return {"COLUMNS":["ICONID","ICONFILE","DISPLAYID","TYPE","COLUMNNAME","DATESTART","DAYSPAN","DISPLAYTEXT","USEFORNEWEXHIBITORFILTER","USEFORGREENFILTER"],"DATA":[]}
},
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 -480;
},
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 !== '' && hideimg != true
&& 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="icon.iconfile" :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
}
},
computed: {
content: function(){
return {
seeText: this.displaycontent(this.compincludepath, 'seeText')
};
},
boothlist: function(){
if (this.booths){
return this.booths.join(", ");
} else {
return "";
}
},
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);
},
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
&& 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="icon.iconfile" :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" data-hasmyshow="true" class="nav--wrapper_outer"><form action="/8_0/login/logout.cfm" method="post" id="logoutformmys" style="display: none;"><input type="hidden" name="logouttoken" value="13156B4E4605C9159211C5002D481F5A73A1836A"> <input type="submit" value="Logout"></form> <div class="nav--wrapper_inner wrapper is-mobile"><div class="show-logo"><a href="http://www.ces.tech/" class="dim"><img src="/mys_shared/CES25/CES25_Custom_logo.png?breakcache=A60B0B02-02EF-3EEE-4BD6B84F429DB34E" srcset="/mys_shared/CES25/[email protected]?breakcache=A60B0B03-AB53-D27F-F11E683457F64FAD 2x" width="200" height="70" alt="CES 2025 logo" class="logo"></a> <ul class="show-info list"><li class="show-date">
Jan. 7-10, 2025
</li> <li class="show-location">Las Vegas, NV</li></ul></div> <nav id="nav" aria-label="Primary" class="navigation--wrapper l-nav"><button id="js-toggle-nav" aria-expanded="false" aria-controls="js-nav" aria-haspopup="true" class="btn-toggle btn-tertiary o-mobile-menu_button" style=""><span class="hamburger__text"> Menu</span> <span aria-hidden="true" id="js-toggle-icon" class="hamburger"><span class="hamburger__inner"></span></span></button> <button alt="Log In or Create a Free Planner" class="btn-avatar btn-reset" style=""><a class="bb-0"><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"></path></svg></a> <!----> <!----></button> <span id="js-profile-actions_dropdown" class="o-profile-actions_dropdown dn"><!----></span> <ul id="js-nav" class="main-navigation is-visually-hidden"><li id="link-C654AC68-B5AB-F05D-80F637EC5815E305"><a href="https://www.ces.tech/about-ces.aspx" target="_blank" class="link js-nav_width"><span class="link_hover">About CES</span></a></li> <li id="link-myshowavatar" class=""><button aria-controls="js-profile-actions_dropdown" alt="Log In or Create a Free Planner" class="o-nav_avatar_button link"><a href="/8_0/login/login.cfm" class="link_hover dib js-nav_width">
My Show Planner
</a> <span class="o-profile-image_wrapper" style="display: none;"><!----></span> <!----> <a class="dim dib bb-0 b is-visually-hidden-nav-item"><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"></path></svg></a></button> <span id="js-profile-actions_dropdown" class="o-profile-actions_dropdown dn"><div class="o-profile-actions_dropdown_spacer"></div> <!----></span></li> <li id="link-featuredexhibitors"><a href="/8_0/explore/featured-exhibitors.cfm?nav=1" target="" class="link js-nav_width"><span class="link_hover">Featured Exhibitors</span></a></li></ul> <div id="rec-modal" rectype="exhibitor"><!----> <!----></div></nav></div></div>
<style>
#landingGrid {
--shortcut-text-justify: flex-end;
--shortcut-text-align: left;
--shortcut-font-size: 1.25rem;
--shortcut-font-weight: 700;
--shortcut-height: 300px;
}
.landing-shortcut.is-inline {
--shortcut-bg-color: hsla(196, 75%, 97%, 0.5);
}
.search-main {
--style-search-background: hsl(0, 0%, 60%);
--color-searchMainButton-background: hsl(163, 47%, 61%);
padding: var(--search-background-size-large);
background-image: none;
}
</style>
<main id="search" class="l-main bg-white"><!----> <!----> <!----> <!----> <!----> <!----> <section class="search-landing-wrapper exhibitor--landing flow"><h1 class="is-visually-hidden">Find Exhibitors and Sessions</h1> <section class="center flow mb5 mw9 pr5-m pl5-m pr6-l pl6-l"><div id="landingGrid"><div name="grid" class="grid-landing-page grid-3-c overlay__solid--dark grid-container" max-width="850px" style="position: relative;"><div data-block-key="0" title="" class="landing-search_tile grid-item grid-item-1" style="background-color: rgb(255, 255, 255); position: relative;"><div><form id="landing-search_form_tile_1" autocomplete="off" role="search"><div role="search" class="landing-search"><h2 class="f1">Search the Show</h2> <section class="landing-search_types"><fieldset class="landing-search_types_columns_wrapper"><legend class="is-visually-hidden">Search Types</legend> <div class="landing-search_types_columns"><label for="keyword" class="fm-Control fm-Radio">Keyword
<input type="radio" id="keyword" name="search-types" value="keyword"> <div class="fm-Control_Indicator"></div></label><label for="exhibitorname" class="fm-Control fm-Radio">Exhibitor Name
<input type="radio" id="exhibitorname" name="search-types" value="exhibitorname"> <div class="fm-Control_Indicator"></div></label><label for="category" class="fm-Control fm-Radio">Category
<input type="radio" id="category" name="search-types" value="category"> <div class="fm-Control_Indicator"></div></label></div> <div class="landing-search_types_columns"><label for="state" class="fm-Control fm-Radio">State/Province
<input type="radio" id="state" name="search-types" value="state"> <div class="fm-Control_Indicator"></div></label><label for="country" class="fm-Control fm-Radio">Country
<input type="radio" id="country" name="search-types" value="country"> <div class="fm-Control_Indicator"></div></label><label for="venue" class="fm-Control fm-Radio">Venue
<input type="radio" id="venue" name="search-types" value="venue"> <div class="fm-Control_Indicator"></div></label></div></fieldset></section> <div class="landing-search_lower_half"><section class="landing-search_input_wrapper"><label for="search-main" class="is-visually-hidden">Search by Keyword</label> <input autocomplete="off" type="search" id="search-main" maxlength="1500" placeholder="Search by Keyword" class="landing-search_input"></section> <section class="landing-search_button_wrapper"><a href="/8_0/explore/exhibitor-gallery.cfm" class="btn btn-reset btn-advanced-search">Advanced Search</a> <button class="btn btn-primary btn-search_landing"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="btn-search_landing_icon"><path d="M24 20.8804L17.5997 14.5265C18.5682 13.0118 19.0807 11.2576 19.0774 9.46762C19.0783 4.24835 14.7986 0 9.54 0C4.27886 0 0 4.24836 0 9.46846C0 14.6894 4.27886 18.9369 9.53914 18.9369C11.3203 18.9369 12.9849 18.4498 14.4137 17.603L20.8577 24L24 20.8804ZM3.55457 9.46846C3.55457 6.19524 6.23914 3.52988 9.53743 3.52988C12.8374 3.52988 15.522 6.19439 15.522 9.46846C15.522 12.7434 12.8374 15.4079 9.53743 15.4079C6.23914 15.4079 3.55457 12.7434 3.55457 9.46846Z" fill="white"></path></svg> <span class="btn-search_landing_text">Search</span></button></section></div></div></form></div><div dir="ltr" class="resize-sensor" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div class="resize-sensor-expand" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div style="position: absolute; left: 0px; top: 0px; transition: all 0s ease 0s; width: 360px; height: 472px;"></div></div><div class="resize-sensor-shrink" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div style="position: absolute; left: 0px; top: 0px; transition: all 0s ease 0s; width: 200%; height: 200%;"></div></div></div></div><div data-block-key="1" title="" class="overlay__link grid-item grid-item-2" style="background-color: white;"><a href="/8_0/explore/exhibitor-gallery.cfm" target="" title=""><!----> <p class="ma0 title">Exhibitor Directory</p> <img src="https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9jZXMyNS9sYW5kaW5nL2ltYWdlcy9EN0ZGMzExRi05RDUxLTcwQjktMDYzQTQ2M0QzNkVFM0RDRC5qcGciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjgwMCwiaGVpZ2h0Ijo2NTAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==" loading="lazy" aria-hidden="true" alt=""></a></div><div data-block-key="2" title="" class="overlay__link grid-item grid-item-3" style="background-color: white;"><a href="https://www.ces.tech/brand" target="_blank" title=""><!----> <p class="ma0 title">About CES</p> <img src="https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9jZXMyNS9sYW5kaW5nL2ltYWdlcy9EODA0QjJGMi1EOEI1LTJDODEtRTVCMDk4MDk4QTY2NjhFRC5qcGciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjgwMCwiaGVpZ2h0Ijo2NTAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==" loading="lazy" aria-hidden="true" alt=""></a></div><div dir="ltr" class="resize-sensor" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div class="resize-sensor-expand" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div style="position: absolute; left: 0px; top: 0px; transition: all 0s ease 0s; width: 740px; height: 802px;"></div></div><div class="resize-sensor-shrink" style="pointer-events: none; position: absolute; inset: 0px; overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;"><div style="position: absolute; left: 0px; top: 0px; transition: all 0s ease 0s; width: 200%; height: 200%;"></div></div></div></div></div> <article class="landing-shortcut is-inline" style="background: linear-gradient(to top, rgba(242, 250, 253, 0.5), rgba(242, 250, 253, 0.5)), url("https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtYXNzZXRzIiwia2V5IjoidnRzL2ltZy90aWxlLXRleHR1cmVzL3RleHR1cmUtNS5wbmciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjYwMCwiaGVpZ2h0Ijo2MDAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==") repeat;"><h3 class="landing-shortcut-heading">An Announcement from CTA</h3> <ul class="landing-shortcut-list"><li class="landing-shortcut-item"><a href="https://www.ces.tech/brand" target="_blank">We have updated the Consumer Technology Association (CTA)® and CES logos, marking a significant milestone for our association and the world’s most powerful tech event. Learn more about our new brand.</a></li></ul></article> <section id="product-preview"><div class="result-heading mb3 pb2"><h2 class="js-ResultHeader dib ma0 normal"><span class="f3 ttu">Product Spotlight</span></h2> <!----></div> <div class="o-ProductPreview flex-xl flex-wrap-xl mb0-last"><div class="o-ProductPreview_Item flex-column-m flex-m w-third-xl mb5 mb0-xl"><a href="/8_0/exhibitor/exhibitor-details.cfm?exhid=0013A00001eXqrVQAS" title="Learn more about dSPACE - Cybersecurity Testing" class="bb-0 dim mr4"><img src="/8_0/assets/imgs/grey.gif" class="js-lazy ba b--black-10 mb2 mb0-l v-lazy-image" width="250" height="174" data-alternativethumbnail="/mys_shared/ces25/showfeatures/0013A00001eXqrVQAS/,/8_0/assets/imgs/error-broken-image.png" data-alternativemediafile="/mys_shared/ces25/showfeatures/0013A00001eXqrVQAS/croppedimage_ORDKLJQZ.jpeg,/8_0/assets/imgs/error-broken-image.png" onerror="imageLoadError(this, this.getAttribute('data-alternativeThumbnail').split(/,/), this.getAttribute('data-alternativeMediaFile').split(/,/))" alt="dSPACE - Cybersecurity Testing"></a> <div class="pr5-l pr6-xl"><a href="/8_0/exhibitor/exhibitor-details.cfm?exhid=0013A00001eXqrVQAS" class="color-inherit"><h3 class="f3 mt0 mb2">Cybersecurity Testing</h3> <p class="f5 mt0"><strong>dSPACE</strong></p></a> <div class="o-DynamicContent f5 lh-copy mt1 mb3">We partnered with PlaxidityX to provide the ability to conduct functional testing, vulnerability scanning, fuzz testing and/or penetration t...</div> <span>
Visit us at Booth:
<span><a title="See dSPACE at Booth 4500 on the floorplan" href="/8_0/floorplan_link.cfm?exhid=0013A00001eXqrVQAS&booth=4500&show_id=CES25" class="f5 ma0">4500</a><!----></span> <!----></span></div></div><div class="o-ProductPreview_Item flex-column-m flex-m w-third-xl mb5 mb0-xl"><a href="/8_0/exhibitor/exhibitor-details.cfm?exhid=0013A00001VMwW6QAL" title="Learn more about Quest Global - Semiconductor Capabilties Overview" class="bb-0 dim mr4"><img src="/8_0/assets/imgs/grey.gif" class="js-lazy ba b--black-10 mb2 mb0-l v-lazy-image" width="250" height="174" data-alternativethumbnail="/mys_shared/ces25/showfeatures/0013A00001VMwW6QAL/croppedimage_thumbnail_QZLGZBXK.png,/8_0/assets/imgs/error-broken-image.png" data-alternativemediafile="/mys_shared/ces25/showfeatures/0013A00001VMwW6QAL/40Semicon-Vertical-OverviewF-1731504960319.mp4,/8_0/assets/imgs/error-broken-image.png" onerror="imageLoadError(this, this.getAttribute('data-alternativeThumbnail').split(/,/), this.getAttribute('data-alternativeMediaFile').split(/,/))" alt="Quest Global - Semiconductor Capabilties Overview"></a> <div class="pr5-l pr6-xl"><a href="/8_0/exhibitor/exhibitor-details.cfm?exhid=0013A00001VMwW6QAL" class="color-inherit"><h3 class="f3 mt0 mb2">Semiconductor Capabilties Overview</h3> <p class="f5 mt0"><strong>Quest Global</strong></p></a> <div class="o-DynamicContent f5 lh-copy mt1 mb3">Semiconductor Capabilties Overview</div> <span>
Visit us at Booth:
<span><a title="See Quest Global at Booth Westgate Hospitality Suites on the floorplan" href="/8_0/floorplan_link.cfm?exhid=0013A00001VMwW6QAL&booth=Westgate Hospitality Suites&show_id=CES25" class="f5 ma0">Westgate Hospitality Suites</a><!----></span> <!----></span></div></div></div></section></section></section></main>
<script type="text/x-template" id="noresults-template"> <div>
<div v-if="searchterm">
<p>{{content.yourSearchForText}} <strong>{{searchterm}}</strong>
{{content.didNotReturnAnyResultsText}}.</p>
<p><em>{{content.suggestionsText}}:</em></p>
<ul>
<li>{{content.searchSpelledText}}</li>
<li>{{content.tryGeneralSearchText}}</li>
<li>{{content.tryDifferentSearchText}}</li>
</ul>
</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="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>
var searchconfig = [{"placeholdertext":"Search by Keyword","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":"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":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":"getsearchcategories","display":"Category","element":"category","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by State/Province","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":"getStates","display":"State/Province","element":"state","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search Exhibitors by Country","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":"getCountries","display":"Country","element":"country","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Venue","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":0,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getexhibitorvenue","display":"Venue","element":"venue","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":[{"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":"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":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":"getsearchcategories","display":"Category","element":"category","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by State/Province","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":"getStates","display":"State/Province","element":"state","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search Exhibitors by Country","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":"getCountries","display":"Country","element":"country","searchsize":50,"icon":"","type":"search"},{"placeholdertext":"Search by Venue","isadvanced":0,"displayoptions":[{"display":"Grid","active":true,"default":true,"name":"grid"},{"display":"List","active":true,"default":true,"name":"list"}],"ismain":1,"requireplanner":0,"isfloor":0,"searchfieldtype":"select","featuredsearchsize":"","hideslotted":0,"resultspage":"","numcolumns":1,"datafunction":"getexhibitorvenue","display":"Venue","element":"venue","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","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":1,"searchsize":50,"section":"showfeature"},{"display":"Booth, Hall","active":1,"requireplanner":0,"searchsize":50,"section":"booth"},{"display":"Collateral","active":1,"requireplanner":0,"searchsize":50,"section":"collateral"},{"display":"Exhibitor Scheduled Events","active":1,"requireplanner":1,"searchsize":50,"section":"guestappearances"}];
var relatedsearchesconfig = {};
var MAXRECENTSEARCHES = 5;
var advancedsearchoptions = {
exhibitor: ["booth","category","country","exhibitor","exhibitorname","georegion","pavilion","state","tradename","venue"],
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>
// 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="requireplanner-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">{{content.displayResultHeader}}</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>
</div>
<div>
<em>
Create or Log in to <a v-bind:href="path2approot + '/login/login.cfm?redirect_to=' + customURIEncode(displaySearchURL(searchtype, searchtext, show))">{{content.requirePlannerText}}</a> to view these results
</em>
</div>
</section></script>
<script>
var requireplannerSearchResults = Vue.component('requireplanner-search-results', {
data: function(){
return {
compincludepath: "includes/vue/search/requireplanner-search-results-display.cfm",
contentIncludePath: ("includes/vue/search/-search-results-display.cfm").replace("-search", this.$vnode.key+"-search"),
sectionid: this.$vnode.key+"-results",
hideallresults: Vue.MYS.settingsConfig.searchsettings.hideallresults
// startindex: 0 // used for staggered transition
};
},
props: ["searchresults", "searchconfig", "searchsize","showresultcount", "show", "searchtype", "searchtext"],
template:"#requireplanner-search-results-template",
computed: {
content: function() {
return {
displayResultHeader: this.displaycontent(this.contentIncludePath, 'displayResultHeader'),
requirePlannerText: this.displaycontent(this.compincludepath, 'requirePlannerText'),
of: this.displaycontent(this.compincludepath, 'of')
};
},
resultsection: function() {
return this.$vnode.key;
}
}
});
</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="search-results-summary-template"> <div class="results-match-tally_wrapper" ref="resultsTallyBox">
<div class="results-match-tally" v-bind:class="{ 'is-fixed': isFixed }" v-if="getDisplayArray().length > 1">
<fieldset id="filterByTrack" class="bn
mb4
pa0
mb0-last">
<ul class="ma0
list
text" v-if="hasresults && !searching ">
<li class="mb0
w-100"
v-for="(ksc,index) in getDisplayArray()"
v-if="(ksc.count > 0)">
<a class="color-inherit
link
pa1
underline-hover"
v-on:click="logStats(ksc.searchsection,ksc.count)"
v-bind:href="ksc.section + '-results'"
v-bind:id="ksc.section"
v-scroll-to="'#' + ksc.section + '-results'"
v-bind:class="{'is-selected': scrolledToSection == ksc.section, 'parent': ksc.parent, 'b': ksc.parent, 'ml0': ksc.parent, 'lastchild': (ksc.parent == false && getDisplayArray()[index+1] && getDisplayArray()[index+1].parent == true || ksc.parent == true && getDisplayArray()[index+1] && getDisplayArray()[index+1].parent == true) || ksc.parent == true && index == getDisplayArray().length-1 }">
<span v-html="ksc.label"></span>
<span v-if="(showresultcount == true || showresultcount == 1) && !hideallresults" v-html="ksc.countdisplay"></span>
</a>
</li>
</ul>
</fieldset>
<transition name="fade">
<loading-display v-if="searching"></loading-display>
</transition>
</div>
</div></script>
<script>
var SearchResultsSummaryDisplay = Vue.component('search-results-summary-display', {
mixins: [fixElementMixin, scrollHighlightMixin, searchDisplayMixin],
data: function(){
return {
compincludepath: "includes/vue/search/search-results-summary-display.cfm",
isFixed: false,
scrolledToSection: '',
hideallresults: Vue.MYS.settingsConfig.searchsettings.hideallresults,
hidesessiontimes: Vue.MYS.settingsConfig.searchsettings.hidesessiontimes
}
},
props: ["searchresults", "searchconfig", "keywordsearchconfig", "recommendedexhibitors", "recommendedsearches", "showresultcount", "show", "searching", "searchtype", "searchtext", "searchMainContentHeight", "showadvancedsearch"],
template:"#search-results-summary-template",
methods: {
logStats: function(section, countdisplay){
var vObj = this;
var searchtype = vObj.searchtype;
var searchtext = vObj.searchtext;
var searchcount = countdisplay;
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?&action=misc&function=searchstats&styp=' + section + '&stext=' + searchtext + '&c=' + searchcount, // ajaxGet() defined in _global-mixin
function(response){ // success
vObj.loading = false;
},
function(response){ // error
}); // end ajaxGet
},
shouldShow: function(section){
if ((this.show == section) || (this.show == "all")) {
return true;
} else {
return false;
}
},
getDisplayArray: function(){
var returnArray = []
, indent = ""
, conf
, searchnames = {};
if (this.searchtype == "keyword" || this.searchtype == "sessionkeyword"){
for (var i = 0; i < this.keywordsearchconfig.length; i++){
var ksc = this.keywordsearchconfig[i];
if (searchnames[ksc.section]){
continue;
} else{
searchnames[ksc.section] = true;
}
// need to inject recommended searches at the right point
/*if ((i == 0) && (this.recommendedsearches.results.length > 0)){
returnArray.push({
parent: true,
label: this.content["relatedsearchesheader"],
count: this.recommendedsearches.results.length,
countdisplay: "",
section: "recommendedsearches"
});
}*/
if (ksc.section in this.searchresults.results && "found" in this.searchresults.results[ksc.section] && this.searchresults.results[ksc.section].found > 0) {
var label, count, countdisplay, section, featuredCount = 0;
if (ksc.section == "exhibitor"){ // want to push featured right below total exhibitor count
returnArray.push({
parent: true,
label: ksc.display,
count: this.searchresults.results[ksc.section].found + this.recommendedExhibitorsCount,
countdisplay: "",
section: "allexhibitors",
searchsection: ksc.section
});
if ('featured' in this.searchresults.results) {
returnArray.push({
parent: false,
label: indent + this.content["featuredexhibitorsheader"],
count: this.searchresults.results["featured"].found,
countdisplay: this.searchresults.results["featured"].found,
section: "featured",
searchsection: ksc.section
});
featuredCount = this.searchresults.results["featured"].found;
}
returnArray.push({
parent: false,
label: indent + this.content["allexhibitorsheader"],
count: this.searchresults.results[ksc.section].found,
countdisplay: this.searchresults.results[ksc.section].found,
section: ksc.section,
searchsection: ksc.section
});
returnArray.push({
parent: false,
label: indent + this.content["recommendedexhibitorsheader"],
count: this.recommendedexhibitors.results.length,
countdisplay: this.recommendedExhibitorsCount,
section: "recommended",
searchsection: ksc.section
});
} else if (ksc.section == "category"){
returnArray.push({
parent: true,
label: ksc.display,
count: this.searchresults.results[ksc.section].found,
countdisplay: this.searchresults.results[ksc.section].found,
section: ksc.section,
searchsection: ksc.section
});
} else if (ksc.section == "session"){
returnArray.push({
parent: true,
label: ksc.display,
count: this.searchresults.results[ksc.section].found,
countdisplay: this.searchresults.results[ksc.section].found,
section: ksc.section,
searchsection: ksc.section
});
// now get the unique days
if(!this.hidesessiontimes) {
var uniqueDays = this.getUniqueSessionDays('session');
var hasOnDemand = false;
for (var ud = 0; ud < uniqueDays.length; ud++)
{
var tempdate = this.toDate(uniqueDays[ud]);
var displaydate = this.formatSessionDay(tempdate)+ ", " + this.formatSessionMonth(tempdate) + " " + tempdate.getDate();
if (this.toDate(tempdate).getFullYear() > 2000 ) {
var labeltext = displaydate;
} else {
if (hasOnDemand) continue;
var labeltext = this.content["onDemandLabel"];
hasOnDemand = true;
}
returnArray.push({
parent: false,
label: labeltext,
count: this.searchresults.results[ksc.section].found,
countdisplay: "",
section: "dateheader" + ud,
searchsection: ksc.section
});
}
}
}
else {
returnArray.push({
parent: true,
label: ksc.display,
count: this.searchresults.results[ksc.section].found,
countdisplay: this.searchresults.results[ksc.section].found,
section: ksc.section,
searchsection: ksc.section
});
}
}
} // end for
}
// if theres's session results and they are the only set of results... typically for quickilst
else if ("session" in this.searchresults.results && Object.keys(this.searchresults.results).length == 1){
returnArray.push({
parent: true,
label: this.content["sessionsheader"],
count: this.searchresults.results["session"].found,
countdisplay: this.searchresults.results["session"].found,
section: currentelement,
searchsection: "session"
});
// now get the unique days
if(!this.hidesessiontimes) {
var uniqueDays = this.getUniqueSessionDays('session');
var hasOnDemand = false;
for (var ud = 0; ud < uniqueDays.length; ud++){
var tempdate = this.toDate(uniqueDays[ud]);
var displaydate = this.formatSessionDay(tempdate)+ ", " + this.formatSessionMonth(tempdate) + " " + tempdate.getDate();
if (this.toDate(tempdate).getFullYear() > 2000 ) {
var labeltext = displaydate;
} else {
if (hasOnDemand) continue;
var labeltext = this.content["onDemandLabel"];
hasOnDemand = true;
}
returnArray.push({
parent: false,
label: labeltext,
count: this.searchresults.results["session"].found,
countdisplay: "",
section: "dateheader" + ud,
searchsection: "session"
});
}
}
}
// if no exhibitor search is set up but there's exhibitor results then just display that
else if (("exhibitor" in this.searchresults.results && Object.keys(this.searchresults.results).length == 1) || ("exhibitor" in this.searchresults.results && "featured" in this.searchresults.results && Object.keys(this.searchresults.results).length == 2)){
returnArray.push({
parent: true,
label: this.content["exhibitorsheader"],
count: this.searchresults.results["exhibitor"].found,
countdisplay: "",
section: "allexhibitors",
searchsection: "exhibitor"
});
if ('featured' in this.searchresults.results) {
returnArray.push({
parent: false,
label: indent + this.content["featuredexhibitorsheader"],
count: this.searchresults.results["featured"].found,
countdisplay: this.searchresults.results["featured"].found,
section: "featured",
searchsection: "exhibitor"
});
featuredCount = this.searchresults.results["featured"].found;
}
returnArray.push({
parent: false,
label: indent + this.content["allexhibitorsheader"],
count: this.searchresults.results["exhibitor"].found,
countdisplay: this.searchresults.results["exhibitor"].found,
section: "exhibitor",
searchsection: "exhibitor"
});
}
else {
var displayedExhibitorSection = false;
for (var i = 0; i < this.searchconfig.length; i++){
if (this.searchconfig[i].element.startsWith("exhibitor") && "exhibitor" in this.searchresults.results && !displayedExhibitorSection){
var exhibitordisplay = this.searchconfig[i].display;
returnArray.push({
parent: true,
label: exhibitordisplay,
count: this.searchresults.results["exhibitor"].found,
countdisplay: "",
section: "allexhibitors",
searchsection: this.searchconfig[i].element
});
if ('featured' in this.searchresults.results) {
returnArray.push({
parent: false,
label: indent + this.content["featuredexhibitorsheader"],
count: this.searchresults.results["featured"].found,
countdisplay: this.searchresults.results["featured"].found,
section: "featured",
searchsection: this.searchconfig[i].element
});
featuredCount = this.searchresults.results["featured"].found;
}
returnArray.push({
parent: false,
label: indent + this.content["allexhibitorsheader"],
count: this.searchresults.results["exhibitor"].found,
countdisplay: this.searchresults.results["exhibitor"].found,
section: "exhibitor",
searchsection: this.searchconfig[i].element
});
displayedExhibitorSection = true;
} else {
var currentelement = this.searchconfig[i].element;
if (currentelement == "sessionsearch"){
currentelement = "session";
}
if (currentelement in this.searchresults.results) {
returnArray.push({
parent: true,
label: this.content.sessionsheader,
count: this.searchresults.results[currentelement].found,
countdisplay: this.searchresults.results[currentelement].found,
section: currentelement,
searchsection: currentelement
});
if (currentelement == "session"){
// now get the unique days
if(!this.hidesessiontimes) {
var uniqueDays = this.getUniqueSessionDays('session');
for (var ud = 0; ud < uniqueDays.length; ud++){
var tempdate = this.toDate(uniqueDays[ud]);
var displaydate = this.formatSessionDay(tempdate)+ ", " + this.formatSessionMonth(tempdate) + " " + tempdate.getDate();
returnArray.push({
parent: false,
label: displaydate,
count: this.searchresults.results[currentelement].found,
countdisplay: "",
section: "dateheader" + ud,
searchsection: currentelement
});
}
}
}
}
}
} // end for
} // end else
return returnArray;
}
},
mounted: function(){
var vObj = this;
vObj.$nextTick(function(){
if (vObj.$refs.resultsTallyBox) {
vObj.fixElementOnScrollTrackObserver('.search-main', '.l-nav');
vObj.highlightSectionsOnScrollObserver('.results-match-tally li a', '.results-section_wrapper');
}
});
},
watch: {
showadvancedsearch: function(){
var vObj = this;
vObj.$nextTick(function(){
if (vObj.$refs.resultsTallyBox) {
vObj.destroyScrollObserver();
vObj.fixElementOnScrollTrackObserver('.search-main', '.l-nav');
vObj.highlightSectionsOnScrollObserver('.results-match-tally li a', '.results-section_wrapper');
}
});
}
},
computed: {
content: function(){
return {
loadingoptionstext: this.displaycontent(this.compincludepath, 'loadingoptionstext'),
allexhibitorsheader: this.displaycontent(this.compincludepath, 'allexhibitorsheader'),
exhibitorsheader: this.displaycontent(this.compincludepath, 'exhibitorsheader'),
featuredexhibitorsheader: this.displaycontent(this.compincludepath, 'featuredexhibitorsheader'),
relatedsearchesheader: this.displaycontent(this.compincludepath, 'relatedsearchesheader'),
recommendedexhibitorsheader: this.displaycontent(this.compincludepath, 'recommendedexhibitorsheader'),
sessionsheader: this.displaycontent(this.compincludepath, 'recommendedexhibitorsheader'),
onDemandLabel: this.displaycontent(this.compincludepath, 'onDemandLabel')
};
},
hasresults: function(){
return (this.searchresults.totalhits > 0);
},
recommendedExhibitorsCount: function(){
var count = 0;
for (var i = 0; i < this.recommendedexhibitors.results.length; i++){
if (Object.keys(this.recommendedexhibitors.results[i].MYS).length !== 0){
count++;
}
}
return count;
},
totalhits: function(){
var value = 0;
if (!isNaN(this.searchresults.totalhits)) {
value += this.searchresults.totalhits;
}
if (!isNaN(this.recommendedexhibitors.results.length)){
value += this.recommendedexhibitors.results.length;
}
if (isNaN(value)){
return "...";
} else {
return value;
}
}
}
});
</script>
<script type="text/x-template" id="category-result-card-template"> <li class="js-Card card
br3
dib
float
pa3"
v-on:click.capture="scrollToTop();goToURL(catSubSearchURL(categoryid));">
<div class="card-Details
mb2">
<div class="flex-Title
mb0
mr3">
<h3 class="card-Title
break-word
f2
mb2 mt0">{{category}}</h3>
<p class="card-Subtitle
f5
ma0
muted" v-if="categoryresultcount > 0">{{categoryresultcount}}
<span v-if="categoryresultcount == 1">
{{countsuffixsingular}}
</span>
<span v-else>
{{countsuffixplural}}
</span>
</p>
</div>
</div>
</li></script>
<script>
var CategoryResultCard = Vue.component('category-result-card', {
data: function(){
return {
menuvisible: false
}
},
props: ["category", "categorydisplay", "categoryresultcount", "parentcategoryid", "categoryid", "searchtext", "searchtype", "bannermediafile", "bannermediafile2x", "bannerexhid", "bannerexhname", "bannerid", "countsuffixsingular", "countsuffixplural", "type", "searchsection", "hidetype", "viewallresult", "bannerhref"],
template:"#category-result-card-template",
methods: {
catSubSearchURL: function(categoryid){
var path2approotnew = this.path2approot;
if (this.thispageurl == this.path2approot + "/sessions/index.cfm"){
path2approotnew += "/sessions"
}
if (this.parentcategoryid){
return path2approotnew + "/#/searchtype/" + this.searchtype + "/search/" + this.parentcategoryid + "/show/cat-" + this.searchsection + "|" + encodeURIComponent(categoryid);
} else {
return path2approotnew + "/#/searchtype/" + this.searchtype + "/search/" + this.searchtext + "/show/cat-" + this.searchsection + "|" + encodeURIComponent(categoryid);
}
}
}
});
</script>
<script type="text/x-template" id="category-result-tr-template"> <tr v-bind:class="{'js-List':true, 'js-viewAllResultRow': viewallresult, 'b': viewallresult}">
<td v-if="!hidetype"><a class="bb-0
color-inherit
db
w-100" v-bind:href="catSubSearchURL(categoryid)" v-on:click="scrollToTop();" v-if="type">{{type}}</a></td>
<td class="">
<h3 class="card-Title
break-word
f5
ma0
normal">
<a v-bind:class="{'bb-0':true,
'color-inherit':true,
'db':true,
'w-100':true, 'b': viewallresult}" v-bind:href="catSubSearchURL(categoryid)" v-on:click="scrollToTop();">{{category}}</a>
</h3>
</td>
<td class="card-Subtitle
is-hidden_small
">
<p class="card-Subtitle
f5
ma0
muted" v-if="categoryresultcount > 0">
{{categoryresultcount}}
<span v-if="categoryresultcount == 1">
{{countsuffixsingular}}
</span>
<span v-else>
{{countsuffixplural}}
</span>
</p>
</td>
<td class="tr">
<a v-bind:href="exhURL(selectedbanner.exhid, selectedbanner.exhname)" v-if="selectedbanner && selectedbanner.mediafile && selectedbanner.exhid" v-on:click="logBannerClick()" :target="linktarget" class="bb-0">
<v-lazy-image
v-bind:src="displayBannerURL(selectedbanner.mediafile)"
v-bind:srcset="displayBannerURL(selectedbanner.mediafile) + ', ' + displayBannerURL(selectedbanner.mediafile2x)"
v-bind:alt="selectedbanner.exhname + '-' +
categorydisplay + ' Sponsor'"
:srcPlaceholder="path2approot + '/assets/imgs/grey.gif'"
v-on:intersect="logBannerView()"/>
</a>
<v-lazy-image
v-if="selectedbanner && selectedbanner.mediafile && !selectedbanner.exhid"
v-bind:src="displayBannerURL(selectedbanner.mediafile)"
v-bind:srcset="displayBannerURL(selectedbanner.mediafile) + ', ' + displayBannerURL(selectedbanner.mediafile2x)"
v-bind:alt="selectedbanner.exhname + '-' +
categorydisplay + ' Sponsor'"
:srcPlaceholder="path2approot + '/assets/imgs/grey.gif'"
v-on:intersect="logBannerView()" />
</td>
</tr></script>
<script>
var CategoryResultTr = Vue.component('category-result-tr', {
data: function(){
return {
menuvisible: false,
randomSeed: 0
}
},
props: ["category", "categorydisplay", "categoryresultcount", "parentcategoryid", "categoryid", "searchtext", "searchtype", "countsuffixsingular", "countsuffixplural", "type", "searchsection", "hidetype", "viewallresult", "bannerarray"],
template:"#category-result-tr-template",
created: function(){
this.randomSeed = Math.random();
},
computed: {
linktarget: function(){
if (this.bannerhref == "internal"){
return "";
} else {
return "_blank";
}
},
selectedbanner: function(){
var arrayLength = 0;
var selectedArrayElement;
var returnObj = {};
if (this.bannerarray && this.bannerarray.constructor === Array) {
arrayLength = this.bannerarray.length;
selectedArrayElement = Math.floor(this.randomSeed * arrayLength);
returnObj = this.bannerarray[selectedArrayElement];
}
// now create @2x value
if (returnObj && "mediafile" in returnObj && returnObj.mediafile){
var indexOfDot = returnObj.mediafile.lastIndexOf('.');
returnObj["mediafile"] = encodeURI(returnObj.mediafile);
returnObj["mediafile2x"] = encodeURI(returnObj.mediafile.substring(0, indexOfDot-1) + "@2x." + returnObj.mediafile.substring(indexOfDot+1, returnObj.mediafile.length));
}
return returnObj;
}
},
methods: {
catSubSearchURL: function(categoryid){
var path2approotnew = this.path2approot;
if (this.thispageurl == this.path2approot + "/sessions/index.cfm"){
path2approotnew += "/sessions"
}
if (this.parentcategoryid){
return path2approotnew + "/#/searchtype/" + this.searchtype + "/search/" + this.parentcategoryid + "/show/cat-" + this.searchsection + "|" + encodeURIComponent(categoryid);
} else {
return path2approotnew + "/#/searchtype/" + this.searchtype + "/search/" + this.searchtext + "/show/cat-" + this.searchsection + "|" + encodeURIComponent(categoryid);
}
},
exhURL: function(exhid, exhname) {
if (this.selectedbanner.bannerhref == "internal"){
return this.getExhibitorURL(exhid, exhname);
} else {
return this.selectedbanner.bannerhref;
}
},
logBannerView: function(){
this.logStats("Banner View", "" ,this.categoryid, this.selectedbanner.bannerid );
},
logBannerClick: function(){
this.logStats("Banner Click", "" , this.categoryid, this.selectedbanner.bannerid );
}
}
});
</script>
<script>
var printMixin = {
data: function(){
return {}
},
methods: {
idsIsPrinting: function(){
return window.idsIsPrinting;
}
}
};
</script>
<script type="text/x-template" id="category-result-list-template"> <li class="js-Card
card
ba0
br0
db
pa3" v-on:click.capture="goToURL(catSubSearchURL(categoryid));">
<div v-if="intersected || idsIsPrinting">
<div class="card-Details
items-center">
<div class="flex-Thumb
thumb-Border
mr3
pa2">
<a v-bind:href="exhURL(selectedbanner.exhid, selectedbanner.exhname)" v-if="selectedbanner && selectedbanner.mediafile && selectedbanner.exhid" v-on:click="logBannerClick()" :target="linktarget">
<v-lazy-image
v-bind:src="displayBannerURL(selectedbanner.mediafile)"
v-bind:srcset="displayBannerURL(selectedbanner.mediafile) + ', ' + displayBannerURL(selectedbanner.mediafile2x)"
alt="selectedbanner.exhname + '-' +
categorydisplay + ' Sponsor'"
:srcPlaceholder="path2approot + '/assets/imgs/grey.gif'"
style="max-width: 65px;"
v-on:intersect="logBannerView()"
/>
</a>
<v-lazy-image
v-if="selectedbanner && selectedbanner.mediafile && !selectedbanner.exhid"
v-bind:src="displayBannerURL(selectedbanner.mediafile)"
v-bind:srcset="displayBannerURL(selectedbanner.mediafile) + ', ' + displayBannerURL(selectedbanner.mediafile2x)"
alt="selectedbanner.exhname + '-' +
categorydisplay + ' Sponsor'"
:srcPlaceholder="path2approot + '/assets/imgs/grey.gif'"
style="max-width: 65px;"
v-on:intersect="logBannerView()" />
</div>
<div class="flex-Title
mb0
mr3">
<h3 class="card-Title
break-word
f3
mb1
mt0">
<a class="bb-0" v-bind:href="catSubSearchURL(categoryid)">{{category}}</a>
</h3>
</div>
</div>
</div>
<div v-if="!intersected"> </div>
</li></script>
<script>
var CategoryResultList = Vue.component('category-result-list', CategoryResultTr.extend({
name: "category-result-list",
data: function(){
return {
menuvisible: false,
intersected: false,
}
},
props: ["category", "categorydisplay", "categoryresultcount", "parentcategoryid", "categoryid", "searchtext", "searchtype", "bannermediafile", "bannermediafile2x", "bannerexhid", "bannerexhname", "bannerid", "searchsection", "viewallresult", "bannerhref"],
template:"#category-result-list-template",
mixins: [printMixin],
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();
}
}));
</script>
<script type="text/x-template" id="category-search-results-template"> <section class="results-section_wrapper
mb6" id="category-results">
<div class="result-heading
mb0
pb4" v-if="showresultheader || showviewallbutton || showdisplayoptions">
<h2 class="db
dib-l
f3
ma0
mb3
mb0-l
normal" v-if="showresultheader">
<span class="ttu">
{{sectionheaderdisplay}}
</span>
<span class="f5
mr3
muted
normal"
v-if="showresultcount">
(
<span v-if="searchresults.results.category.hit.length < searchresults.results.category.found">
{{searchresults.results.category.hit.length}} {{content.of}}
</span>
{{searchresults.results.category.found}}
)
</span>
</h2>
<span class="dib" v-if="showviewallbutton">
<a class="btn-tertiary
btn-tertiary_small" href="" v-on:click.stop.prevent="scrollToTop(); $emit('view-all-results', 'category');">
{{content.viewAllButton}}
</a>
</span>
<div class="btn-toggle-view-wrapper" v-if="showdisplayoptions">
<span v-for="(displayoption, index) in displayoptions">
<a class="toggle-grid
btn-tertiary" href=""
v-on:click.stop.prevent="switchDisplay(displayoption.name);"
v-bind:class="[isSelected(displayoption.name) ? 'is-selected' : '']">
<svg class="v-mid
mr2" width="24" height="24" role="img" aria-hidden="true">
<path viewBox="0 0 24 24" d="M4 22H0v-4h4v4zm0-12H0v4h4v-4zm0-8H0v4h4V2zm3 0v4h17V2H7zm0 12h17v-4H7v4zm0 8h17v-4H7v4z" id="toggle-list"></path>
</svg>
<span class="v-mid">{{displayoption.display}}</span>
</a>
</span>
</div>
</div>
<transition-group name="staggered-fade" appear
tag="ul"
id="category-result-card"
class="cards"
v-if="tempSelectedView == 'grid'"
v-bind:css="false"
v-on:before-enter="beforeEnterStaggered"
v-on:enter="enterStaggered"s
v-on:leave="leaveStaggered">
<category-result-card v-for="(result, index) in searchresults.results.category.hit"
v-bind:data-index="index"
v-bind:data-totalitemcount="searchresults.results.category.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="result.id"
v-bind:category="result.fields.category_t"
v-bind:categorydisplay="result.fields.categorydisplay_t"
v-bind:categoryresultcount="getExhibitorCount(result)"
v-bind:parentcategoryid="result.fields.categoryparentid_l"
v-bind:categoryid="result.fields.categoryid_l"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:viewallresult="result.fields.viewallresult">
</category-result-card>
</transition-group>
<div id="category-result-list" class="results-list-view
toggle-list-view" v-if="tempSelectedView == 'list' && $mq != 'medium' && $mq != 'large'">
<table id="category-result-list-table" class="results-table" cellpadding="0" cellspacing="0">
<thead>
<th style="width:0px;"> </th>
<th class="tl">{{content.tableHeadCategory}}</th>
<th class="tl">{{content.tableHeadMatchingExhibitors}}</th>
<th class="" style="max-width: 320px; width: 320px;"></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">
<category-result-tr v-for="(result, index) in searchresults.results.category.hit"
v-bind:data-index="index - startindex"
v-bind:data-totalitemcount="searchresults.results.category.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="result.id"
v-bind:category="result.fields.category_t"
v-bind:categorydisplay="result.fields.categorydisplay_t"
v-bind:categoryresultcount="getExhibitorCount(result)"
v-bind:categoryid="result.fields.categoryid_l"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:countsuffixsingular="content.countSuffixSingular"
v-bind:countsuffixplural="content.countSuffixPlural"
v-bind:bannerarray="getBannerArray(result.fields.banners_l)"
:searchsection="'category'"
v-bind:viewallresult="result.fields.viewallresult">
</category-result-tr>
</transition-group>
</table>
</div>
<div id="category-result-list-small" class="results-list-view
toggle-list-view" v-if="tempSelectedView == '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">
<category-result-list v-for="(result, index) in searchresults.results.category.hit"
v-bind:data-index="index - startindex"
v-bind:data-totalitemcount="searchresults.results.category.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="result.id"
v-bind:category="result.fields.category_t"
v-bind:categorydisplay="result.fields.categorydisplay_t"
v-bind:categoryresultcount="getExhibitorCount(result)"
v-bind:categoryid="result.fields.categoryid_l"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:bannerarray="getBannerArray(result.fields.banners_l)"
:searchsection="'category'"
v-bind:viewallresult="result.fields.viewallresult">
</category-result-list>
</transition-group>
</div>
<div class="o-BorderBehind
pa0
pt3
pb3
tc" v-if="searchresults.results.category.hit.length < searchresults.results.category.found">
<span><a class="btn-secondary" v-on:click.stop.prevent="loadMore();">{{content.loadMoreResults}}</a></span>
</div>
</section></script>
<script>
var CategorySearchResults = Vue.component('category-search-results', {
data: function(){
return {
resultsection: "category",
compincludepath: "includes/vue/search/category-search-results-display.cfm",
tempSelectedView: 'list',
startindex: 0 // used for staggered transition
}
},
mixins: [staggeredTransitionsMixin, searchDisplayMixin],
props: ["searchresults", "searchtext", "searchtype", "searchsize"],
template:"#category-search-results-template",
methods: {
loadMore: function(){
this.startindex = this.searchresults.results['category'].hit.length;
this.$emit('load-more-results', 'category');
},
getCategoryID: function(id){ // gets the categoryid from the cloudsearch id so 4310-Category-IMTS18 gets you 4310
return (id.replace("-Category-" + this.showid.toUpperCase(), ""));
},
getExhibitorCount: function(resultObj){
var exhidfield = "exhid_t";
if (this.requireboothsfordisplay){
exhidfield = "exhid_with_booth_t";
}
if (exhidfield in resultObj.fields){
return resultObj.fields[exhidfield].split(", ").length;
} else {
return 0;
}
},
getBannerArray: 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;
}
},
computed: {
content: function(){
return {
viewAllButton: this.displaycontent(this.compincludepath, 'viewAllButton'),
displayResultHeader: this.displaycontent(this.compincludepath, 'displayResultHeader'),
tableHeadCategory: this.displaycontent(this.compincludepath, 'tableHeadCategory'),
tableHeadMatchingExhibitors: this.displaycontent(this.compincludepath, 'tableHeadMatchingExhibitors'),
loadMoreResults: this.displaycontent(this.compincludepath, 'loadMoreResults'),
countSuffixPlural: this.displaycontent(this.compincludepath, 'countSuffixPlural'),
countSuffixSingular: this.displaycontent(this.compincludepath, 'countSuffixSingular'),
of: this.displaycontent(this.compincludepath, 'of')
};
},
showresultheader: function(){
return Object.keys(this.searchresults.results).length > 1 && this.searchresults.results.category.found > 0 ;
},
showviewallbutton: function(){
return this.searchresults.results.category.hit.length < this.searchresults.results.category.found;
},
showdisplayoptions: function(){
return this.displayoptions.length > 1;
}
}
});
</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="icon.iconfile" :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 v-if="!intersected" colspan="5">
<a v-bind:href="exhURL()">{{exhname}}</a>
</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
}
},
computed: {
content: function(){
return {
seeText: this.displaycontent(this.compincludepath, 'seeText')
};
},
boothlist: function(){
if (this.booths){
return this.booths.join(", ");
} else {
return "";
}
},
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(", ");
},
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-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 !== ''
"
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 == ''
" 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="icon.iconfile" :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
}
},
computed: {
content: function(){
return {
seeText: this.displaycontent(this.compincludepath, 'seeText')
};
},
boothlist: function(){
if (this.booths){
return this.booths.join(", ");
} else {
return "";
}
},
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);
},
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
}
},
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;
}
},
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++) {
divHTML += "<div class='flex items-center mt2 mb2'>" + "<img class='mw3 mr3' src='" + this.httphost + this.legendcontent.DATA[i][1] + "' 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="showfeature-result-card-template"> <li class="js-Card
card
br3
dib
float
relative" v-on:click.self="goToURL(featureURL());">
<div class="card-Details
flex-column
mb2" v-on:click.self="goToURL(featureURL());">
<div class="gallery" v-on:click.self="goToURL(featureURL());">
<a v-bind:class="['bb-0']" onclick="onsiteBigPictureOpen(event);">
<v-lazy-image
v-if="showfeaturethumbnail"
v-bind:src="showfeaturethumbnail"
v-bind:data-bp="showfeaturethumbnail"
v-bind:vidsrc="showfeaturemediafile"
v-bind:data-caption="exhname"
v-bind:alt="exhname"
v-bind:title="exhname"
:srcplaceholder="path2approot + '/assets/imgs/error-broken-image.png'"
:onError="'this.onerror=null;this.src=\'' + path2approot + '/assets/imgs/error-broken-image.png\''"
class="flex-Thumb_full_width
mr3
w-100" />
</a>
</div>
<toggle-favorite
:type="'showfeature'"
v-bind:keys="showfeatureid"
v-bind:addedtoplanner="addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
absolute>
</toggle-favorite>
<div class="flex-Title
mb0
mr3
pa3">
<h3 class="card-Title
break-word
f3
mb2
mt0">
<a class="bb-0" v-bind:href="featureURL()">{{showfeaturetitledisplay}}</a>
</h3>
<p class="card-Subtitle
f5
ma0
muted" v-if="exhname">
<a class="bb-0" v-bind:href="featureURL()">{{exhname}}</a>
</p>
<p class="card-Subtitle
f5
ma0
muted" v-if="dateadded">
{{content.dateheader}}: {{formatSessionMonth(toDate(dateadded))}} {{toDate(dateadded).getDate()}} {{toDate(dateadded).getFullYear()}}
</p>
</div>
</div>
</li></script>
<style>
#bp_caption button.bp-x {
display: none;
}
</style>
<script>
var ShowFeatureResultCard = Vue.component('showfeature-result-card', {
data: function(){
return {
menuvisible: false
}
},
props: ["showfeaturethumbnail", "showfeaturecategory", "showfeaturetitle", "showfeaturemediafile", "showfeaturetext", "exhid", "exhname", "showfeatureid", "addedtoplanner", "dateadded"],
template:"#showfeature-result-card-template",
methods: {
toggleMenu: function(){
this.menuvisible = !this.menuvisible;
},
openBigPictureLightbox: function(event){
event.preventDefault();
var sourceHref = event.target.closest('a').getAttribute('href'),
sourceType = event.target.closest('a').getAttribute('href').match(/\.[0-9a-z]+$/i)[0];
if ((sourceType === '.jpg') || (sourceType === '.png') || (sourceType === '.gif')) {
BigPicture({
el: event.target,
gallery: '.myshow_gallery',
vidSrc: event.target.getAttribute('vidsrc')
});
} else if (sourceType === '.mp4') {
BigPicture({
el: event.target,
vidSrc: event.target.getAttribute('vidsrc')
});
}
},
featureURL: function(){
return this.getExhibitorURL(this.exhid, this.exhname) + '&featureid=' + this.showfeatureid;
}
},
computed:{
content: function(){
return {
dateheader: this.displaycontent(this.compincludepath, 'dateheader') + "Date Added"
};
},
showfeaturetitledisplay: function(){
if (this.showfeaturetitle.length > 140){
return (this.showfeaturetitle.substring(0, 140) + "...");
} else {
return this.showfeaturetitle;
}
}
}
});
</script>
<script type="text/x-template" id="showfeature-result-card-template-v2"> <li class="js-Card
card
br3
dib
float
relative" v-on:click.self="goToURL(featureURL());">
<div class="card-Details
flex-column
mb2" v-on:click.self="goToURL(featureURL());">
<div class="gallery" v-on:click.self="goToURL(featureURL());">
<a v-bind:class="['bb-0']" @click="openBigPictureLightbox($event);">
<v-lazy-image
v-if="showfeaturethumbnail"
v-bind:src="showfeaturethumbnail"
v-bind:data-bp="showfeaturemediafile"
v-bind:vidsrc="showfeaturemediafile"
v-bind:data-caption="exhname"
v-bind:alt="exhname"
v-bind:title="exhname"
v-bind:data-alternativeThumbnail="'/mys_shared/'+showidlowercase+'/showfeatures/'+exhid+'/'+thumbnailFileName+','+path2approot + '/assets/imgs/error-broken-image.png'"
v-bind:data-alternativeMediaFile="'/mys_shared/'+showidlowercase+'/showfeatures/'+exhid+'/'+mediaFileName+','+path2approot + '/assets/imgs/error-broken-image.png'"
:srcPlaceholder="path2approot + '/assets/imgs/error-broken-image.png'"
:onError="'imageLoadError(this, this.getAttribute(\'data-alternativeThumbnail\').split(/,/), this.getAttribute(\'data-alternativeMediaFile\').split(/,/))'"
class="flex-Thumb_full_width
mr3
w-100" />
</a>
</div>
<toggle-favorite
:type="'showfeature'"
v-bind:keys="getFeatureID()"
v-bind:exhid="exhid"
v-bind:addedtoplanner="addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
absolute>
</toggle-favorite>
<div class="flex-Title
mb0
mr3
pa3">
<h3 class="card-Title
break-word
f3
mb2
mt0">
<a class="bb-0" v-bind:href="featureURL()">{{showfeaturetitledisplay}}</a>
</h3>
<p class="card-Subtitle
f5
ma0
muted" v-if="exhname">
<a class="bb-0" v-bind:href="featureURL()">{{exhname}}</a>
</p>
<p class="card-Subtitle
f5
ma0
muted" v-if="dateadded">
{{content.dateheader}}: {{formatSessionMonth(toDate(dateadded))}} {{toDate(dateadded).getDate()}} {{toDate(dateadded).getFullYear()}}
</p>
</div>
</div>
</li></script>
<style>
#bp_caption button.bp-x {
display: none;
}
/* Fix for transparent PNG product images */
#bp_container img {
background: #ccc;
}
#showfeature-result-card-v2 .button-addtoplanner {
right: 0.5rem;
top: 0.5rem;
background-color: var(--color-neutral-100);
}
#showfeature-result-card-v2 .button-addtoplanner:hover {
background-color: var(--color-neutral-80);
}
#showfeature-result-card-v2 .card-Details {
align-items: stretch;
}
</style>
<script>
var ShowFeatureResultCard2 = Vue.component('showfeature-result-card-v2', {
data: function(){
return {
menuvisible: false
}
},
props: ["showfeaturethumbnail", "showfeaturethumbnailfile", "showfeaturecategory", "showfeaturetitle", "showfeaturemediafile", "showfeaturetext", "exhid", "exhname", "showfeatureid", "addedtoplanner", "dateadded"],
template:"#showfeature-result-card-template-v2",
methods: {
toggleMenu: function(){
this.menuvisible = !this.menuvisible;
},
openBigPictureLightbox: function(event){
event.preventDefault();
var sourceHref = event.target.closest('img').getAttribute('data-bp'),
sourceType = event.target.closest('img').getAttribute('data-bp').match(/\.[0-9a-z]+$/i)[0];
if ((sourceType === '.jpg') || (sourceType === '.png') || (sourceType === '.gif') || (sourceType === '.jpeg')) {
BigPicture({
el: event.target,
gallery: '.myshow_gallery',
imgSrc: sourceHref
});
} else if (sourceType === '.mp4') {
BigPicture({
el: event.target,
vidSrc: sourceHref
});
}
},
featureURL: function(){
var exhURL = this.getExhibitorURL(this.exhid, this.exhname);
return exhURL + (exhURL.indexOf('?') != -1 ? '&' : '?') + 'featureid=' + this.getFeatureID();
},
getFeatureID: function(){
return (this.showfeatureid.indexOf('-') != -1 ? this.showfeatureid.substr(0, this.showfeatureid.indexOf('-')) : this.showfeatureid);
}
},
computed:{
content: function(){
return {
dateheader: this.displaycontent(this.compincludepath, 'dateheader') + "Date Added"
};
},
showfeaturetitledisplay: function(){
if (this.showfeaturetitle.length > 140){
return (this.showfeaturetitle.substring(0, 140) + "...");
} else {
return this.showfeaturetitle;
}
},
mediaFileName: function() {
return (this.showfeaturemediafile).split('/').pop();
},
thumbnailFileName: function() {
if(this.showfeaturethumbnailfile) {
return (this.showfeaturethumbnailfile).split('/').pop();
} else {
return this.showfeaturethumbnailfile;
}
}
}
});
function imageLoadError(element, thumbList, mediaList) {
var image = new Image();
image.onload = function() {
element.setAttribute('data-bp', mediaList.shift());
element.src = this.src;
}
image.onerror = function() {
if (thumbList.length) {
imageLoadError(element, thumbList, mediaList);
}
}
image.src = thumbList.shift();
}
</script>
<script type="text/x-template" id="showfeature-search-results-template"> <section class="results-section_wrapper
mb6" id="showfeature-results">
<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.showfeature.found > 0">
<span class="ttu">
{{content.displayResultHeader}}
</span>
<span class="f5
mr3
muted
normal" v-if="showresultcount">
(
<span v-if="searchresults.results.showfeature.hit.length < searchresults.results.showfeature.found">
{{searchresults.results.showfeature.hit.length}} {{content.of}}
</span>
{{searchresults.results.showfeature.found}}
)
</span>
</h2>
<span class="dib" v-if="searchresults.results.showfeature.hit.length < searchresults.results.showfeature.found">
<a class="btn-tertiary
btn-tertiary_small" v-on:click.stop.prevent="scrollToTop(); $emit('view-all-results', 'showfeature');">
{{content.viewAllButton}}
</a>
</span>
</div>
<ul :id="getCardComponentName()" class="cards exh-show-features myshow_gallery">
<component v-for="(result, index) in searchresults.results.showfeature.hit" :is="getCardComponentName()"
:key="index"
v-bind:data-index="index - startindex"
v-bind:showfeatureid="getShowFeatureID(result.id)"
v-bind:showfeaturethumbnail="showFeaturePath(result.fields.exhid_l, result.fields.showfeaturethumbnail_l, 'thumb', result.fields.showfeaturemediafile_l, result.fields.showfeaturetype_l)"
v-bind:showfeaturethumbnailfile="result.fields.showfeaturethumbnail_l"
v-bind:showfeaturemediafile="showFeaturePath(result.fields.exhid_l, result.fields.showfeaturemediafile_l, 'media', '', result.fields.showfeaturetype_l)"
v-bind:showfeaturecategory="result.fields.showfeaturecategory_l"
v-bind:showfeaturetitle="result.fields.showfeaturetitle_t"
v-bind:showfeaturetext="result.fields.showfeaturetext_t"
v-bind:exhid="result.fields.exhid_l"
v-bind:exhname="result.fields.exhname_t"
v-bind:dateadded="result.fields.dateadded_d"
v-bind:addedtoplanner="result.MYS.addedtoplanner">
</component>
</ul>
<div class="o-BorderBehind
pa0
pt3
pb3
tc" v-if="searchresults.results.showfeature.hit.length < searchresults.results.showfeature.found">
<span><a class="btn-secondary" v-on:click.stop.prevent="loadMore();">{{content.loadMoreResults}}</a></span>
</div>
</section></script>
<script>
var ShowFeatureSearchResults = Vue.component('showfeature-search-results', {
data: function(){
return {
resultsection: "showfeature",
compincludepath: "includes/vue/search/showfeature-search-results-display.cfm",
startindex: 0,// used for staggered transition
useExhSubVersion2: Vue.MYS.useExhSubVersion2
}
},
mixins: [staggeredTransitionsMixin, searchDisplayMixin],
props: ["searchresults"],
template:"#showfeature-search-results-template",
mounted: function(){
var vObj = this;
},
computed: {
content: function(){
return {
viewAllButton: this.displaycontent(this.compincludepath, 'viewAllButton'),
displayResultHeader: this.displaycontent(this.compincludepath, 'displayResultHeader'),
tableHeadPavilion: this.displaycontent(this.compincludepath, 'tableHeadPavilion'),
tableHeadPlanner: this.displaycontent(this.compincludepath, 'tableHeadPlanner'),
tableHeadMatchingExhibitors: this.displaycontent(this.compincludepath, 'tableHeadMatchingExhibitors'),
loadMoreResults: this.displaycontent(this.compincludepath, 'loadMoreResults'),
of: this.displaycontent(this.compincludepath, 'of')
};
}
},
methods: {
loadMore: function(){
this.startindex = this.searchresults.results['showfeature'].hit.length;
this.$emit('load-more-results', 'showfeature');
},
showFeaturePath: function(exhid, file, type, mediaFile, featuretype){
if (this.useExhSubVersion2) {
var showID = this.showidlowercase;
var path2approot = this.path2approot;
var thumbFileToUse = '';
if (type == "thumb" && mediaFile && isNaN(featuretype) && featuretype.toLowerCase() != "video") {
thumbFileToUse = mediaFile;
} else if (type=="thumb" && mediaFile && featuretype < 6) {
thumbFileToUse = mediaFile;
} else if (type=="thumb" && file) {
thumbFileToUse = file;
}
if (thumbFileToUse.length > 0) {
thumbFileToUse = encodeURIComponent(thumbFileToUse).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
});
var pathConfig = {};
pathConfig.bucket = 'mys-showfiles';
pathConfig.key = "production/"+this.showidlowercase+"/show_features/"+exhid.toString().toLowerCase()+"/"+thumbFileToUse;
pathConfig.edits = {};
pathConfig.edits.resize = {};
pathConfig.edits.resize.height = 200;
pathConfig.edits.resize.width = 234;
pathConfig.edits.resize.fit = 'cover';
pathConfig.edits.resize.quality = 70;
return ('https://d3fv3oe83qat1b.cloudfront.net/' + btoa(JSON.stringify(pathConfig)));
} else if (file) {
return ("https://mys-showfiles.s3.amazonaws.com/production/"+this.showidlowercase+"/show_features/"+exhid.toString().toLowerCase()+"/"+file);
} else {
return (this.path2approot + '/assets/imgs/feature-text-only.png');
}
} else if (file){
return '/mys_shared/' + this.showid + '/showfeatures/' + exhid + '/' + file;
} else {
return this.path2approot + '/assets/imgs/feature-text-only.png';
}
},
getShowFeatureID: function(idtext){
var returntext = idtext
returntext = idtext.replace("-ShowFeature-" + this.showid, "");
returntext = returntext.replace("-ShowFeatures-" + this.showid, "")
return returntext;
},
getCardComponentName: function(){
if (Vue.MYS.useExhSubVersion2) {
return "showfeature-result-card-v2";
} else {
return "showfeature-result-card";
}
}
}
});
</script>
<script>
var BoothSearchResults = Vue.component('booth-search-results', ExhibitorSearchResults.extend({
data: function(){
return {
compincludepath: "includes/vue/search/booth-search-results-display.cfm",
headerdisplay: this.sectionheaderdisplay,
sectionid: "booth-results",
displaycardtype: "featured-result-card",
ulclass: "exh-featured",
viewallsection: "booth",
startindex: 0
}
},
props: ["searchresults","searchtext", "searchtype"],
template:"#exhibitor-search-results-template",
mounted: function(){
this.headerdisplay = this.sectionheaderdisplay;
},
computed: {
resultsection: function(){
return "booth";
},
content: function(){
return {
displayResultHeader: this.headerdisplay,
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="generic-result-tr-template"> <tr class="js-List">
<td v-if="intersected">
<h3 class="card-Title
break-word
dib
f5
ma0
normal">
<a @click.prevent="goToURLGeneric(url)" class="bb-0
color-inherit
b" v-bind:href="url">{{title}}</a>
</h3>
<p v-if="computedsummary" class="card-Desc
f6
lh-copy
mb0
muted">
<a class="bb-0
color-inherit" v-bind:href="url" @click.prevent="goToURLGeneric(url)">{{ computedsummary }}</a>
</p>
</td>
<td class="card-Subtitle" v-if="intersected">
<a class="bb-0
color-inherit" v-bind:href="computedsubtitleurl"
@click.prevent="goToURLGeneric(computedsubtitleurl)"><span>{{subtitle}}</span></a>
</td>
<td v-if="intersected">
<toggle-favorite
:type="type"
v-if="showtogglefavorite"
v-bind:keys="favoritekey"
v-bind:exhid="exhid"
v-bind:addedtoplanner="addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
:ref="type + '-' + favoritekey">
</toggle-favorite>
</td>
<td v-if="!intersected" colspan="3">
<a v-bind:href="url">{{title}}</a>
</td>
</tr></script>
<script>
var GenericResultTr = Vue.component('generic-result-tr', {
template:"#generic-result-tr-template",
props: {
title:{
type: [String,Number],
default: ""
},
subtitle:{
type: [String,Number],
default: ""
},
url:{
type: String,
default: ""
},
subtitleurl:{
type: String,
default: ""
},
exhid:{
type: [String, Number],
default: ""
},
summary:{
type: String,
default: ""
},
imgurl:{
type: String,
default: ""
},
videourl: {
type: String,
default: ""
},
addedtoplanner:{
type: [String, Boolean],
default: ""
},
type:{
type: String,
default: ""
},
favoritekey:{
type: [String,Number],
default: ""
},
showtogglefavorite: {
type: Boolean,
default: true
}
},
data: function(){
return {
menuvisible: false,
toggleVisible: false,
intersected: false,
observer: null
}
},
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 "";
}
},
computedsummary: function(){
return this.createSummary(this.summary,200)
},
computedsubtitleurl: function(){
if (this.subtitleurl){
return this.subtitleurl;
} else {
return this.url;
}
}
},
methods: {
toggleMenu: function(){
this.menuvisible = !this.menuvisible;
},
goToURLGeneric: function(url){
var eventObj = {
clickedurl: this.url,
exhid: this.exhid,
title: this.title,
type: this.type,
subtitle: this.subtitle,
favoritekey: this.favoritekey
};
this.$emit('url-clicked', eventObj);
if (!this.addedtoplanner && this.type == 'collateral' && this.regemail != '')
{
setTimeout(function(scope) {
scope.$refs[scope.type + '-' + scope.favoritekey].toggleAddToPlanner();
}, 500, this);
}
// If this is collateral and a video link, then open a new tab
if(this.type == 'collateral' && this.videourl != "" && this.videourl != null) {
this.goToURL(this.url,true);
} else {
this.goToURL(this.url);
}
}
}
});
</script>
<script type="text/x-template" id="generic-result-list-template"> <li class="js-Card
card
ba0
br0
db
pa3" >
<div v-if="intersected">
<div class="card-Details">
<div class="flex-Title
mb0
mr3">
<p class="card-Desc
f5
lh-copy
ma0
muted">
<a class="bb-0
color-inherit" v-bind:href="computedsubtitleurl" @click.prevent="goToURLGeneric(computedsubtitleurl)">{{ subtitle }}</a>
</p>
<h3 class="card-Title
break-word
f2
mb2
mt0">
<a class="bb-0
color-inherit" v-bind:href="url" @click.prevent="goToURLGeneric(url)">{{title}}</a>
</h3>
<p class="card-Subtitle
f5
ma0
muted">
{{computedsummary}}
</p>
</div>
<toggle-favorite
:type="type"
v-if="showtogglefavorite"
v-bind:keys="favoritekey"
v-bind:exhid="exhid"
v-bind:addedtoplanner="addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
:ref="type + '-' + favoritekey">
</toggle-favorite>
</div>
</div>
<a v-if="!intersected" v-bind:href="url">{{title}}</a>
</li></script>
<script>
var GenericResultList = Vue.component('generic-result-list', {
data: function(){
return {
menuvisible: false,
toggleVisible: false,
intersected: false,
observer: null
}
},
props: {
title:{
type: [String, Number],
default: ""
},
subtitle:{
type: [String, Number],
default: ""
},
url:{
type: String,
default: ""
},
subtitleurl:{
type: String,
default: ""
},
exhid:{
type: [String, Number],
default: ""
},
summary:{
type: [String, Number],
default: ""
},
imgurl:{
type: String,
default: ""
},
videourl:{
type: String,
default: ""
},
addedtoplanner:{
type: [String, Boolean],
default: ""
},
type:{
type: [String, Number],
default: ""
},
favoritekey:{
type: [String, Number],
default: ""
},
showtogglefavorite: {
type: Boolean,
default: true
}
},
template:"#generic-result-list-template",
methods: {
catSubSearchURL: function(categoryid){
return this.path2approot + "/#/searchtype/" + this.searchtype + "/search/" + this.searchtext + "/show/cat-category|" + categoryid;
},
goToURLGeneric: function(url){
var eventObj = {
clickedurl: this.url,
exhid: this.exhid,
title: this.title,
type: this.type,
subtitle: this.subtitle,
favoritekey: this.favoritekey
};
this.$emit('url-clicked', eventObj);
if (!this.addedtoplanner && this.type == 'collateral' && this.regemail != '')
{
setTimeout(function(scope) {
scope.$refs[scope.type + '-' + scope.favoritekey].toggleAddToPlanner();
}, 500, this);
}
// If this is collateral and a video link, then open a new tab
if (this.type == 'collateral' && this.videourl != "" && this.videourl != null) {
this.goToURL(url,true);
} else {
this.goToURL(url);
}
}
},
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 "";
}
},
computedsummary: function(){
return this.createSummary(this.summary,200)
},
computedsubtitleurl: function(){
if (this.subtitleurl){
return this.subtitleurl;
} else {
return this.url;
}
}
}
});
</script>
<script type="text/x-template" id="generic-result-card-template"> <li class="js-Card card
br3
dib
float
pa3" v-on:click.self="goToURLGeneric(url)">
<div class="card-Details
mb2" v-on:click.self="goToURLGeneric(url)" v-if="intersected">
<v-lazy-image v-on:click.self="goToURLGeneric(url)" v-bind:src="imgurl" v-if="hasimgurl" class="flex-Thumb
mr3
w-100"
v-bind:alt="title"
:srcplaceholder="path2approot + '/assets/imgs/grey.gif'"
:onError="'this.onerror=null;this.src=\'' + path2approot + '/assets/imgs/error-broken-image.png\''"/>
<div v-on:click.self="goToURLGeneric(url)" class="flex-Title
mb0
mr3">
<h3 class="card-Title
break-word
f2
mb1
mt0" v-on:click.self="goToURLGeneric(url)">{{title}}</h3>
<p class="card-Subtitle
f5
ma0
muted" v-on:click.self="goToURLGeneric(url)">
<span v-on:click.self="goToURLGeneric()">{{subtitle}}</span>
</p>
</div>
<toggle-favorite
:type="type"
v-if="showtogglefavorite"
v-bind:keys="favoritekey"
v-bind:exhid="exhid"
v-bind:addedtoplanner="addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)">
</toggle-favorite>
</div>
<p v-on:click.self="goToURL(url)" class="card-Desc
f5
lh-copy
ma0
muted" v-if="intersected">
<slot></slot>
</p>
<a v-if="!intersected" v-bind:href="url">{{title}}</a>
</li></script>
<script>
var GenericResultCard = Vue.component('generic-result-card', {
template:"#generic-result-card-template",
props: {
title:{
type: String,
default: ""
},
subtitle:{
type: String,
default: ""
},
url:{
type: String,
default: ""
},
exhid:{
type: [String, Number],
default: ""
},
summary:{
type: String,
default: ""
},
imgurl:{
type: String,
default: ""
},
addedtoplanner:{
type: [String, Boolean],
default: ""
},
type:{
type: String,
default: ""
},
favoritekey:{
type: [String, Number],
default: ""
},
showtogglefavorite: {
type: Boolean,
default: true
}
},
data: function(){
return {
menuvisible: false,
intersected: false,
observer: null
}
},
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: {
hasimgurl: function(){
return (this.imgurl);
}
},
methods: {
toggleMenu: function(){
this.menuvisible = !this.menuvisible;
},
goToURLGeneric: function(url){
var eventObj = {
clickedurl: url,
exhid: this.exhid,
title: this.title,
type: this.type,
subtitle: this.subtitle,
favoritekey: this.favoritekey
};
this.$emit('url-clicked', eventObj);
this.goToURL(url);
}
}
});
</script>
<script type="text/x-template" id="generic-result-card-template2"> <li class="js-Card card
br3
dib
float
relative">
<div class="card-Details
flex-column
mb2">
<div class="gallery">
<a v-bind:class="['bb-0']" v-bind:href="imgurl" v-on:click="openBigPictureLightbox">
<v-lazy-image
v-bind:src="imgurl"
v-bind:data-bp="imgurl"
v-bind:vidsrc="imgurl"
v-if="hasimgurl" class="flex-Thumb_full_width
mr3
w-100" v-bind:data-caption="title" v-bind:alt="title" v-bind:title="title"/>
</a>
</div>
<toggle-favorite
:type="'product'"
v-bind:keys="itemkey"
v-bind:exhid="exhid"
v-bind:addedtoplanner="addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
absolute>
</toggle-favorite>
<div class="flex-Title
mb0
mr3
pa3">
<h3 class="card-Title
break-word
f2
mb2
mt0">
<a class="bb-0" v-bind:href="url">{{title}}</a>
</h3>
<p class="card-Subtitle
f5
ma0
muted">
<a class="bb-0" v-bind:href="url">{{subtitle}}</a>
</p>
</div>
</div>
</li></script>
<script>
var GenericResultCard = Vue.component('generic-result-card2', {
template:"#generic-result-card-template2",
props: ["title", "subtitle", "url", "summary", "imgurl", "addedtoplanner", "itemkey", "exhid"],
data: function(){
return {
menuvisible: false
}
},
computed: {
hasimgurl: function(){
return (this.imgurl);
}
},
methods: {
toggleMenu: function(){
this.menuvisible = !this.menuvisible;
},
openBigPictureLightbox: function(event){
event.preventDefault();
var sourceHref = event.target.closest('a').getAttribute('href'),
sourceType = event.target.closest('a').getAttribute('href').match(/\.[0-9a-z]+$/i)[0];
if ((sourceType === '.jpg') || (sourceType === '.png') || (sourceType === '.gif')) {
BigPicture({
el: event.target,
gallery: '.myshow_gallery',
vidSrc: event.target.getAttribute('vidsrc')
});
} else if (sourceType === '.mp4') {
BigPicture({
el: event.target,
vidSrc: event.target.getAttribute('vidsrc')
});
}
}
}
});
</script>
<script type="text/x-template" id="generic-search-results-template"> <section class="results-section_wrapper
mb6"
v-bind:id="sectionid"
v-if="!searching">
<div class="result-heading
flex-l
items-end-l
mb3
pb2
justify-between-l" v-if="(searchresults.found > 0) && (showheader == true || showheader == 1)">
<h2 class="f3
ma0
mb4
mb0-l
normal">
<span class="ttu">
{{resultsheader}}
</span>
<span class="f5
mr3
muted
normal"
v-if="showresultcount">
(
<span v-if="searchresults.hit.length < searchresults.found">
{{searchresults.hit.length}} {{content.of}}
</span>
{{searchresults.found}}
)
</span>
</h2>
<div class="btn-toggle-view-wrapper"
v-if="activedisplayoptions.length > 1">
<span v-for="(displayoption, index) in activedisplayoptions">
<a class="toggle-grid
btn-tertiary" href=""
v-on:click.stop.prevent="$emit('switch-display', displayoption.name)"
v-bind:class="[isSelected(displayoption.name) ? 'is-selected' : '']">
<svg class="v-mid
mr2" width="24" height="24" role="img" aria-hidden="true">
<path viewBox="0 0 24 24" d="M4 22H0v-4h4v4zm0-12H0v4h4v-4zm0-8H0v4h4V2zm3 0v4h17V2H7zm0 12h17v-4H7v4zm0 8h17v-4H7v4z" id="toggle-list"></path>
</svg>
<span class="v-mid">{{displayoption.display}}</span>
</a>
</span>
</div>
</div>
<slot name="filter"></slot>
<transition-group name="staggered-fade" appear
tag="ul"
id="generic-result-card"
class="cards myshow_gallery"
v-bind:class="ulclass"
v-if="selectedview == 'grid' && searchresults.hit.length"
v-bind:css="false"
v-on:before-enter="beforeEnterStaggered"
v-on:enter="enterStaggered"
v-on:leave="leaveStaggered">
<component v-for="(result, index) in searchresults.hit"
v-bind:is="thisdisplaycardtype"
v-bind:favoritekey="result[keyname]"
v-bind:type="type"
v-bind:data-index="index"
v-bind:data-totalitemcount="searchresults.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="'generic_c'+index"
v-bind:title="result.title"
v-bind:subtitle="result.subtitle"
v-bind:subtitleurl="result.subtitleurl"
v-bind:url="result.url"
v-bind:summary="result.summary"
v-bind:imgurl="result.imgurl"
v-bind:videourl="result.videourl"
v-bind:exhid="result.exhid"
v-bind:showtogglefavorite="showtogglefavorite"
v-bind:addedtoplanner="result.addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
v-on:url-clicked="$emit('url-clicked', $event)">
{{createSummary(result.summary, 1000)}}
</component>
</transition-group>
<div id="generic-result-list" class="results-list-view
toggle-list-view" v-if="selectedview == 'list' && $mq != 'medium' && $mq != 'large'">
<table id="generic-result-list-table" class="results-table" cellpadding="0" cellspacing="0">
<thead>
<th class="tl">
<a href="#"
v-if="showsorting"
:title="sort.column == 0 ? ('Sort' + headeroptions.titleheader + ' ' + (sort.asc ? 'Z-A' : 'A-Z')) : 'Sort By' + headeroptions.titleheader"
@click="changeSort(0)"
class="flex
items-center"
>
<span class="mr1">{{headeroptions.titleheader}}</span>
<span v-if="sort.column == 0" class="f3">
<span v-if="sort.asc" class="relative
o-arrow-sort_up"></span>
<span v-else class="relative
o-arrow-sort_down"></span>
</span>
</a>
<span v-else>{{headeroptions.titleheader}}</span>
</th>
<th class="tl">
<a href="#"
v-if="showsorting"
:title="sort.column == 1 ? ('Sort' + headeroptions.subtitleheader
+ ' ' + (sort.asc ? 'Z-A' : 'A-Z'))
: 'Sort By' + headeroptions.subtitleheader"
@click="changeSort(1)"
class="flex
items-center"
>
<span class="mr1">{{headeroptions.subtitleheader}}</span>
<span v-if="sort.column == 1" class="f3">
<span v-if="sort.asc" class="relative
o-arrow-sort_up"></span>
<span v-else class="relative
o-arrow-sort_down"></span>
</span>
</a>
<span v-else>{{headeroptions.subtitleheader}}</span>
</th>
<th class="centered
tc" style="min-width: 90px;"><span v-if="hasmyshow">{{content.addToPlanner}}</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">
<generic-result-tr v-for="(result, index) in searchresults.hit"
v-bind:favoritekey="result[keyname]"
v-bind:type="type"
v-bind:data-index="index"
v-bind:data-totalitemcount="searchresults.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="'generic_tr'+index"
v-bind:title="result.title"
v-bind:subtitle="result.subtitle"
v-bind:subtitleurl="result.subtitleurl"
v-bind:url="result.url"
v-bind:summary="result.summary"
v-bind:imgurl="result.imgurl"
v-bind:videourl="result.videourl"
v-bind:exhid="result.exhid"
v-bind:showtogglefavorite="showtogglefavorite"
v-bind:addedtoplanner="result.addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
v-on:url-clicked="$emit('url-clicked', $event)">
</generic-result-tr>
</transition-group>
</table>
</div>
<div id="generic-result-list-small" 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">
<generic-result-list v-for="(result, index) in searchresults.hit"
v-bind:favoritekey="result[keyname]"
v-bind:type="type"
v-bind:data-index="index"
v-bind:data-totalitemcount="searchresults.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="'genericlist'+index"
v-bind:title="result.title"
v-bind:subtitle="result.subtitle"
v-bind:subtitleurl="result.subtitleurl"
v-bind:url="result.url"
v-bind:summary="result.summary"
v-bind:imgurl="result.imgurl"
v-bind:videourl="result.videourl"
v-bind:exhid="result.exhid"
v-bind:showtogglefavorite="showtogglefavorite"
v-bind:addedtoplanner="result.addedtoplanner"
v-on:toggle-favorite="$emit('toggle-favorite', $event)"
v-on:url-clicked="$emit('url-clicked', $event)">
</generic-result-list>
</transition-group>
</div>
<div class="o-BorderBehind
pa0
pt3
pb3
tc" v-if="searchresults.hit.length < searchresults.found">
<span><a class="btn-secondary" v-on:click.stop.prevent="loadMore()">{{content.loadMoreResults}}</a></span>
</div>
</section></script>
<script>
var GenericSearchResults = Vue.component('generic-search-results', {
data: function(){
return {
compincludepath: "includes/vue/search/generic-search-results-display.cfm",
defaultdisplaycardtype: "generic-result-card",
ulclass: "exh-featured",
sort: {
column: 0,
asc: true
}
}
},
mixins: [staggeredTransitionsMixin, searchDisplayMixin],
props: ["searchresults","resultsheader", "sortoptions", "headeroptions", "searching", "type", "headerdisplay", "sectionid", "displaycardtype", "keyname", "searchsize", "showtogglefavorite", "showsorting"],
template:"#generic-search-results-template",
computed: {
content: function(){
return {
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'),
addToPlanner: this.displaycontent(this.compincludepath, 'addToPlanner'),
of: this.displaycontent(this.compincludepath, 'of')
};
},
thisdisplaycardtype: function(){
return ((this.displaycardtype) ? this.displaycardtype : this.defaultdisplaycardtype)
}
},
mounted: function(){
var vObj = this;
var sortObj = vObj.getViewState(vObj.thispageurl, this.type+"genericsort");
if (sortObj["column"] == 0 || sortObj["column"] == 1){
vObj.sort["column"] = sortObj["column"];
}
if (typeof sortObj["asc"] === "boolean"){
vObj.sort["asc"] = sortObj["asc"];
}
vObj.$emit('change-sort', vObj.sort);
},
methods: {
loadMore: function(){
this.$emit('load-more-results');
},
isSelected: function(selectedview){
return (this.selectedview == selectedview);
},
changeSort: function(column){
this.sort["column"] = column;
this.sort["asc"] = !this.sort["asc"];
this.saveViewState(this.thispageurl, this.type+"genericsort", this.sort);
this.$emit('change-sort', this.sort);
}
}
});
</script>
<script>
var collateralMixin = {
data: function(){
return {}
},
methods: {
formatCollateralResults: function(resultObj){
var returnObj = resultObj;
if (resultObj && "hit" in resultObj) {
// check if all the press type names are the same
var showpressnamesubheader = false;
for (var i = 0; i < resultObj.hit.length-1; i++){
if ("typename_t" in resultObj.hit[i].fields && "typename_t" in resultObj.hit[i+1].fields && resultObj.hit[i].fields["typename_t"] !== resultObj.hit[i+1].fields["typename_t"]) {
showpressnamesubheader = true;
break;
}
}
for (var i = 0; i < resultObj.hit.length; i++){
resultObj.hit[i]["imgurl"] = '';
resultObj.hit[i]["releasedate"] = '';
resultObj.hit[i]["summary"] = '';
resultObj.hit[i]["url"] = this.path2approot + '/explore/collateral_redirect.cfm?CollateralID=' + resultObj.hit[i].fields["releaseid_l"];
if ("typename_t" in resultObj.hit[i].fields && showpressnamesubheader){
resultObj.hit[i]["summary"] = resultObj.hit[i].fields["typename_t"];
}
if ("exhid_t" in resultObj.hit[i].fields) {
resultObj.hit[i]["exhid"] = resultObj.hit[i].fields["exhid_t"];
}
if ("releaseid_l" in resultObj.hit[i].fields) {
resultObj.hit[i]["releaseid"] = resultObj.hit[i].fields["releaseid_l"];
}
if ("exhname_t" in resultObj.hit[i].fields) {
resultObj.hit[i]["subtitle"] = resultObj.hit[i].fields["exhname_t"];
}
if ("exhid_t" in resultObj.hit[i].fields) {
resultObj.hit[i]["subtitleurl"] = this.getExhibitorURL(resultObj.hit[i].fields["exhid_t"], resultObj.hit[i].fields["exhname_t"]);
}
if ("title_t" in resultObj.hit[i].fields) {
resultObj.hit[i]["title"] = resultObj.hit[i].fields["title_t"];
}
if ("videourl_t" in resultObj.hit[i].fields) {
resultObj.hit[i]["videourl"] = resultObj.hit[i].fields["videourl_t"];
}
if ("MYS" in resultObj.hit[i] && "addedtoplanner" in resultObj.hit[i]["MYS"] && resultObj.hit[i]["MYS"]["addedtoplanner"]) {
resultObj.hit[i]["addedtoplanner"] = true;
} else {
resultObj.hit[i]["addedtoplanner"] = false;
}
}
}
return returnObj;
}
}
};
</script>
<script type="text/x-template" id="collateral-search-results-template"> <generic-search-results
:type="'collateral'"
:keyname="'releaseid'"
v-bind:type="type"
v-bind:resultsheader="sectionheaderdisplay"
v-bind:searchresults="formatCollateralResults(searchresults.results.collateral)"
v-bind:headeroptions="headeroptions"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:displayoptions="[]"
v-bind:showheader="showheader"
v-bind:showresultcount="showresultcount"
v-bind:sectionid="sectionid"
v-bind:selectedview="cselectedview"
v-on:view-all-results="$emit('view-all-results', $event);"
v-on:load-more-results="$emit('load-more-results', 'collateral');"
v-on:url-clicked="urlClicked($event)">
</generic-search-results></script>
<script>
var CollateralSearchResults = Vue.component('collateral-search-results', {
data: function(){
return {
resultsection: "collateral",
compincludepath: "includes/vue/search/collateral-search-results-display.cfm",
sectionid: "collateral-results",
type:"collateral",
cselectedview: 'list'
}
},
computed:
{
headeroptions: function()
{
return {
titleheader: this.displaycontent(this.compincludepath, 'titleHeader'),
subtitleheader: this.displaycontent(this.compincludepath, 'subtitleHeader')
}
},
content: function(){
return {
displayResultHeader: this.displaycontent(this.compincludepath, 'displayResultHeader')
};
}
},
mixins: [ searchDisplayMixin,collateralMixin], // defined in /includes/generic/_searchDisplayMixin.cfm
props: ["searchresults"],
template:"#collateral-search-results-template",
methods: {
urlClicked: function(event){
var urlString = (event.clickedurl+'').toLowerCase()
, exhid = event.exhid
, releaseid = event.favoritekey;
if (urlString.indexOf("collateral_redirect.cfm") < 0) {
this.logStats('URL Link', '', releaseid, urlString, 'Collateral');
}
}
}
});
</script>
<script type="text/x-template" id="guestappearances-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()">
<div class="flex-Thumb
mr3" v-on:click.self="handleClick()">
<a v-bind:href="exhURL(imgexhid)" v-if="imgurl" class="bb-0">
<v-lazy-image
v-bind:src="imgurl"
v-bind:srcset="imgurl"
v-bind:alt="name"
:srcplaceholder="path2approot + '/assets/imgs/grey.gif'"
:onError="'this.onerror=null;this.srcset=\'\';this.src=\'' + path2approot + '/assets/imgs/1x1.gif\''"
class="mw-100"/>
</a>
</div>
<div class="flex-Title
mb0
mr3" v-on:click.self="handleClick()">
<p class="card-Desc
f5
ma0
b muted
mb1" v-on:click.self="handleClick()">
{{name}}
</p>
<h3 class="card-Title
break-word
f2
mb2
mt0" v-on:click.self="handleClick()">
<a class="bb-0" v-bind:href="exhURL(imgexhid)">
{{guesttitle}}
</a>
</h3>
<p class="card-Desc
f5
ma0
muted
mb2
i" v-on:click.self="handleClick()">
<span v-if="date && date !== '1900-01-01T00:00:00Z' && starttime && endtime">
{{formatSessionDay(date)}} {{formatSessionMonth(date)}} {{toDate(date).getDate()}}, {{formatSessionTime(starttime)}} - {{formatSessionTime(endtime)}}<span v-if="showtimezone"> {{timezonelabel}}</span>
</span>
<span v-if="(!date || date =='1900-01-01T00:00:00Z') && starttime && endtime">
{{formatDateRange(starttime, endtime)}}<span v-if="showtimezone"> {{timezonelabel}}</span>
</span>
</p>
<p class="f5
ma0
mb2">
<a v-on:click="urlClicked(booth)" :href="booth" v-if="isBoothLink" class="bb-0">Event Link</a>
<span v-else>{{booth}}</span>
</p>
<p class="card-Desc
f5
ma0
muted" v-on:click.self="handleClick()">
<span v-html="summary"></span>
</p>
<p class="card-Desc
f5
ma0
muted" v-if="guestappearancesresultcount > 0" v-on:click.self="handleClick()">{{guestappearancesresultcount}}
<span v-if="guestappearancesresultcount == 1">
{{countsuffixsingular}}
</span>
<span v-else>
{{countsuffixplural}}
</span>
</p>
</div>
</div>
</li></script>
<script>
var guestappearancesResultCard = Vue.component('guestappearances-result-card',
{
name: 'guestappearances-result-card',
data: function(){
return {
menuvisible: false,
showtimezone: Vue.MYS.settingsConfig.timesettings.showtimezone,
timezonelabel: Vue.MYS.settingsConfig.timesettings.timezonelabel
}
},
props:
[
"guest", "title", "name", "guestappearancesresultcount", "booth", "guestappearancesid", "date", "description", "imgurl", "imgexhid", "viewallresult", "countsuffixsingular", "countsuffixplural", "guestappearances", "exhid", "exhname", "starttime", "endtime"
],
template:"#guestappearances-result-card-template",
methods:
{
exhURL: function(imgexhid)
{
return this.getExhibitorURL(this.exhid, this.exhname);
},
handleClick: function()
{
this.goToURL(this.getExhibitorURL(this.exhid, this.exhname));
},
formatDateRange: function(starttime, endtime){
var returnString = "";
starttime = new Date(starttime);
endtime = new Date(endtime);
if (!isNaN(Date.parse(starttime)) && !isNaN(Date.parse(endtime)))
{
if (this.formatSessionDate(starttime) == this.formatSessionDate(endtime)) {
returnString = this.formatSessionDate(starttime) + " " + this.formatSessionTime(starttime) + " - " + this.formatSessionTime(endtime);
} else {
returnString = this.formatSessionDate(starttime) + " " + this.formatSessionTime(starttime) + " - " + this.formatSessionDate(endtime) + " " + this.formatSessionTime(endtime)
}
}
return returnString;
},
urlClicked: function(url){
var urlString = (url+'').toLowerCase();
if (urlString.includes('http')) {
this.logStats('URL Link', '', this.exhid, urlString, 'Scheduled Event Link');
}
}
},
computed:
{
guesttitle: function()
{
return this.guest ? this.guest : this.title;
},
isBoothLink: function(){
if (Vue.MYS.isValidURL(this.booth)){
return true;
} else {
return false;
}
},
summary: function()
{
return this.createSummary(this.description, 200);
}
}
});
</script>
<script type="text/x-template" id="guestappearances-result-tr-template"> <tr v-bind:class="{'js-List':true, 'js-viewAllResultRow': viewallresult, 'b': viewallresult}" class="justify-between">
<td class="is-hidden_small">
<span>
<div class="mr3
w-100
flex-Thumb
thumb-Border" v-if="imgurl">
<a v-bind:href="exhURL(imgexhid)">
<v-lazy-image
v-bind:src="imgurl"
v-bind:srcset="imgurl"
v-bind:alt="name"
:srcplaceholder="path2approot + '/assets/imgs/grey.gif'"
:onError="'this.onerror=null;this.srcset=\'\';this.src=\'' + path2approot + '/assets/imgs/1x1.gif\''"
class="mw-100"/>
</a>
</div>
</span>
</td>
<td class="">
<h3 class="break-word
f5
ma0
b">
{{guesttitle}}
</h3>
</td>
<td class="">
<h3 class="card-Title
break-word
f5
ma0
normal">
<a class="bb-0
color-inherit" v-bind:href="exhURL(exhid)">
<span class="b">
{{name}}
</span>
</a>
</h3>
</td>
<td class="">
<h3 class="card-Subtitle
break-word
f6
ma0
normal">
<a v-on:click="urlClicked(booth)" :href="booth" v-if="isBoothLink" class="bb-0
color-inherit">Event Link</a>
<span v-else>{{booth}}</span>
</h3>
</td>
<td class="">
<h3 class="card-Subtitle
break-word
f6
ma0
normal">
<span v-if="date && date !== '1900-01-01T00:00:00Z' && starttime && endtime">
{{date}}, {{starttime}} - {{endtime}}<span v-if="showtimezone"> {{timezonelabel}}</span>
</span>
<span v-if="(!date || date =='1900-01-01T00:00:00Z') && starttime && endtime">
{{formatDateRange(starttime, endtime)}}<span v-if="showtimezone"> {{timezonelabel}}</span>
</span>
</h3>
</td>
<td class="">
<h3 class="card-Desc f6
break-word
ma0
normal">
{{description}}
</h3>
</td>
<td class="card-Subtitle
is-hidden_small">
<p class="card-Subtitle
f5
ma0
muted" v-if="guestappearancesresultcount > 0">
{{guestappearancesresultcount}}
<span v-if="guestappearancesresultcount == 1">
{{countsuffixsingular}}
</span>
<span v-else>
{{countsuffixplural}}
</span>
</p>
</td>
</tr></script>
<script>
var guestappearancesResultTr = Vue.component('guestappearances-result-tr', guestappearancesResultCard.extend(
{
name: 'guestappearances-result-tr',
data: function()
{
return {
menuvisible: false,
showtimezone: Vue.MYS.settingsConfig.timesettings.showtimezone,
timezonelabel: Vue.MYS.settingsConfig.timesettings.timezonelabel
}
},
props:
[
"guest", "title", "name", "guestappearancesresultcount", "booth", "guestappearancesid", "date", "description", "imgurl", "imgexhid", "viewallresult", "countsuffixsingular", "countsuffixplural", "guestappearances", "starttime", "endtime", "exhid", "exhname", "displayGuestName", "displayExhName", "displayBooth", "displayDate", "displayDescription"
],
template:"#guestappearances-result-tr-template"
}));
</script>
<script type="text/x-template" id="guestappearances-result-list-template"> <li class="js-Card
card
ba0
br0
db
pa3" v-on:click.capture="goToURL(exhURL(exhid));">
<div class="card-Details">
<div class="flex-Title
mb0
mr3">
<h3 class="card-Title
break-word
f3
mb1
mt0">
{{guesttitle}}
</h3>
<p class="card-Title
break-word
f3
mb1
mt0">
<span>
<a v-bind:href="exhURL(exhid)" class="color-inherit">
{{name}}
</a>
</span>
</p>
<p class="card-Subtitle
break-word
f3
mb1
mt0">
<a v-on:click="urlClicked(booth)" :href="booth" v-if="isBoothLink" class="bb-0
color-inherit">Event Link</a>
<span v-else>{{booth}}</span>
</p>
<p class="card-Subtitle
break-word
f3
mb1
mt0">
<span v-if="date && date !== '1900-01-01T00:00:00Z' && starttime && endtime">
{{date}}, {{starttime}} - {{endtime}}<span v-if="showtimezone"> {{timezonelabel}}</span>
</span>
<span v-if="(!date || date =='1900-01-01T00:00:00Z') && starttime && endtime">
{{formatDateRange(starttime, endtime)}}<span v-if="showtimezone"> {{timezonelabel}}</span>
</span>
</p>
<p class="card-Subtitle
break-word
f3
mb1
mt0">
{{description}}
</p>
</div>
</div>
</li></script>
<script>
var guestappearancesResultList = Vue.component('guestappearances-result-list', guestappearancesResultCard.extend(
{
name: 'guestappearances-result-list',
data: function()
{
return {
menuvisible: false,
showtimezone: Vue.MYS.settingsConfig.timesettings.showtimezone,
timezonelabel: Vue.MYS.settingsConfig.timesettings.timezonelabel
}
},
props:
[
"guest", "title", "name", "guestappearancesresultcount", "booth", "guestappearancesid", "date", "description", "imgurl", "imgexhid", "viewallresult", "countsuffixsingular", "countsuffixplural", "guestappearances", "starttime", "endtime", "exhid", "exhname", "displayGuestName", "displayExhName", "displayBooth", "displayDate", "displayDescription"
],
template:"#guestappearances-result-list-template"
}));
</script>
<script type="text/x-template" id="guestappearances-search-results-template"> <section class="results-section_wrapper
mb6" id="guestappearances-results">
<div class="result-heading
mb0
pb4" v-if="showresultheader || showviewallbutton || showdisplayoptions">
<h2 class="db
dib-l
f3
ma0
mb3
mb0-l
normal" v-if="showresultheader">
<span class="ttu">
{{sectionheaderdisplay}}
</span>
<span class="f5
mr3
muted
normal"
v-if="showresultcount">
(
<span v-if="searchresults.results.guestappearances.hit.length < searchresults.results.guestappearances.found">
{{searchresults.results.guestappearances.hit.length}} {{content.of}}
</span>
{{searchresults.results.guestappearances.found}}
)
</span>
</h2>
<span class="dib" v-if="showviewallbutton">
<a class="btn-tertiary
btn-tertiary_small" href="" v-on:click.stop.prevent="scrollToTop(); $emit('view-all-results', 'guestappearances');">
{{content.viewAllButton}}
</a>
</span>
</div>
<transition-group name="staggered-fade" appear
tag="ul"
id="guestappearances-result-card"
class="cards"
v-if="selectedview == 'grid'"
v-bind:css="false"
v-on:before-enter="beforeEnterStaggered"
v-on:enter="enterStaggered"
v-on:leave="leaveStaggered">
<guestappearances-result-card v-for="(result, index) in searchresults.results.guestappearances.hit"
v-bind:data-index="index"
v-bind:data-totalitemcount="searchresults.results.guestappearances.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="'guestappearancescard'+index"
v-bind:exhid="result.fields.exhid_t"
v-bind:exhname="result.fields.exhname_t"
v-bind:title="result.fields.title_t"
v-bind:name="result.fields.exhname_t"
v-bind:date="result.fields.date_d"
v-bind:starttime="result.fields.starttime_t"
v-bind:endtime="result.fields.endtime_t"
v-bind:description="result.fields.description_t"
v-bind:booth="result.fields.booth_t"
v-bind:imgurl="getGuestAppearancesImgURL(result.fields.mediafile_t, result.fields.imgurl)"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:addedtoplanner="result.addedtoplanner"
v-bind:viewallresult="result.viewallresult">
</guestappearances-result-card>
</transition-group>
<div id="guestappearances-result-list" class="results-list-view
toggle-list-view" v-if="selectedview == 'list' && $mq != 'medium' && $mq != 'large'">
<table id="guestappearances-result-list-table" class="results-table" cellpadding="0" cellspacing="0">
<thead >
<th class="tl"> </th>
<th class="tl">{{content.displayGuestName}}</th>
<th class="tl">{{content.displayExhName}}</th>
<th class="tl">{{content.displayBooth}}</th>
<th class="tl">{{content.displayDate}}</th>
<th class="tl">{{content.displayDescription}}</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">
<guestappearances-result-tr v-for="(result, index) in searchresults.results.guestappearances.hit"
v-bind:data-index="index - startindex"
v-bind:data-totalitemcount="searchresults.results.guestappearances.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="index"
v-bind:exhid="result.fields.exhid_t"
v-bind:exhname="result.fields.exhname_t"
v-bind:title="result.fields.title_t"
v-bind:name="result.fields.exhname_t"
v-bind:date="result.fields.date_d"
v-bind:starttime="result.fields.starttime_t"
v-bind:endtime="result.fields.endtime_t"
v-bind:description="result.fields.description_t"
v-bind:booth="result.fields.booth_t"
v-bind:imgurl="getGuestAppearancesImgURL(result.fields.mediafile_t, result.fields.imgurl)"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:countsuffixsingular="content.countSuffixSingular"
v-bind:countsuffixplural="content.countSuffixPlural"
v-bind:addedtoplanner="result.addedtoplanner"
:searchsection="'guestappearances'"
v-bind:viewallresult="result.viewallresult">
</guestappearances-result-tr>
</transition-group>
</table>
</div>
<div id="guestappearances-result-list-small" 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">
<guestappearances-result-list v-for="(result, index) in searchresults.results.guestappearances.hit"
v-bind:data-index="index - startindex"
v-bind:data-totalitemcount="searchresults.results.guestappearances.hit.length"
v-bind:data-searchsize="searchsize"
v-bind:key="result.fields.appearanceid_l"
v-bind:exhid="result.fields.exhid_t"
v-bind:exhname="result.fields.exhname_t"
v-bind:title="result.fields.title"
v-bind:name="result.fields.exhname_t"
v-bind:date="result.fields.date_d"
v-bind:starttime="result.fields.starttime_t"
v-bind:endtime="result.fields.endtime_t"
v-bind:description="result.fields.description_t"
v-bind:booth="result.fields.booth_t"
v-bind:imgurl="getGuestAppearancesImgURL(result.fields.mediafile_t, result.fields.imgurl)"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
:searchsection="'guestappearances'"
v-bind:addedtoplanner="result.addedtoplanner"
v-bind:viewallresult="result.viewallresult">
</guestappearances-result-list>
</transition-group>
</div>
<div class="o-BorderBehind
pa0
pt3
pb3
tc" v-if="searchresults.results.guestappearances.hit.length < searchresults.results.guestappearances.found">
<span><a class="btn-secondary" v-on:click.stop.prevent="loadMore();">{{content.loadMoreResults}}</a></span>
</div>
</section></script>
<script>
var guestappearancesSearchResults = Vue.component('guestappearances-search-results', {
data: function(){
return {
resultsection: "guestappearances",
compincludepath: "includes/vue/search/guestappearances-search-results-display.cfm",
startindex: 0 // used for staggered transition
}
},
mixins: [staggeredTransitionsMixin, searchDisplayMixin],
props: ["searchresults", "searchtext", "searchtype", "searchsize", "displayGuestName", "displayExhName", "displayBooth", "displayDate", "displayDescription"],
template:"#guestappearances-search-results-template",
methods: {
loadMore: function(){
this.startindex = this.searchresults.results['guestappearances'].hit.length;
this.$emit('load-more-results', 'guestappearances');
},
getguestappearancesID: function(id){
return (id.replace("-guestappearances-" + this.showid.toUpperCase(), ""));
},
getGuestAppearancesImgURL: function(img, imgurl){
if (imgurl) {
return imgurl;
} else if (img){
return '/mys_shared/' + this.showid + '/events/' + img;
} else {
return '';
}
},
formatDateString: function(mydate){
if (mydate){
return this.formatSessionDate(mydate)
} else {
return "";
}
}
},
computed: {
content: function(){
return {
viewAllButton: this.displaycontent(this.compincludepath, 'viewAllButton'),
displayResultHeader: this.displaycontent(this.compincludepath, 'displayResultHeader'),
loadMoreResults: this.displaycontent(this.compincludepath, 'loadMoreResults'),
countSuffixPlural: this.displaycontent(this.compincludepath, 'countSuffixPlural'),
countSuffixSingular: this.displaycontent(this.compincludepath, 'countSuffixSingular'),
of: this.displaycontent(this.compincludepath, 'of'),
displayGuestName: this.displaycontent(this.compincludepath, 'displayGuestName'),
displayExhName: this.displaycontent(this.compincludepath, 'displayExhName'),
displayBooth: this.displaycontent(this.compincludepath, 'displayBooth'),
displayDate: this.displaycontent(this.compincludepath, 'displayDate'),
displayDescription: this.displaycontent(this.compincludepath, 'displayDescription')
};
},
showresultheader: function(){
return Object.keys(this.searchresults.results).length > 1 && this.searchresults.results.guestappearances.found > 0 ;
},
showviewallbutton: function(){
return this.searchresults.results.guestappearances.hit.length < this.searchresults.results.guestappearances.found;
},
showdisplayoptions: function(){
return this.displayoptions.length > 1;
}
}
});
</script>
<script type="text/x-template" id="search-results-template"> <div class="search-results-wrapper
db
flex-l
h-auto">
<aside class="l-aside
result-match-tally
mid-gray
ma4
mt2
mb2" v-if="shouldShowSidebar()">
<search-results-summary-display
v-bind:searchresults="searchresults"
v-bind:recommendedexhibitors="recommendedexhibitors"
v-bind:recommendedsearches="recommendedsearches"
v-bind:searchconfig="searchconfig"
v-bind:keywordsearchconfig="keywordsearchconfig"
v-bind:show="show"
v-bind:searching="searching"
v-bind:searchtype="searchtype"
v-bind:search="searchtext"
v-bind:searchtext="searchtext"
v-bind:showresultcount="showresultcount"
v-bind:showadvancedsearch="showadvancedsearch"
>
</search-results-summary-display>
</aside>
<main class="l-main
search-results
pa4
pt2
pb2
pr5-m
pl5-m " id="main-searchresults-display">
<loading-display v-if="searching"></loading-display>
<div class="mb6" v-if="showsearchresults">
<slot name="top"></slot>
<slot v-if="showsearchresults"></slot>
<transition name="fade">
<section class="mb6" id="recommendedsearches-results" v-if="recommendedsearches.results.length > 0">
<div class="result-heading
mb4
pb2">
<h2 class="f3
ma0
normal
ttu">
{{content.relatedSearchesText}}
<a class="dib
ml2
v-mid" href="./view-rec-details.cfm?" target="_blank" title="View related searches"
v-bind:href="'view-rec-details.cfm?rectype=searches&search=' + searchtext + '&searchtype=' + searchconfig[selectedsearchindex].element">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" role="img" aria-hidden="true"><path fill="#1B69B8" d="M12.015 7c4.751 0 8.063 3.012 9.504 4.636-1.401 1.837-4.713 5.364-9.504 5.364-4.42 0-7.93-3.536-9.478-5.407 1.493-1.647 4.817-4.593 9.478-4.593zm0-2c-7.569 0-12.015 6.551-12.015 6.551s4.835 7.449 12.015 7.449c7.733 0 11.985-7.449 11.985-7.449s-4.291-6.551-11.985-6.551zm-.015 3c-2.21 0-4 1.791-4 4s1.79 4 4 4c2.209 0 4-1.791 4-4s-1.791-4-4-4zm-.004 3.999c-.564.564-1.479.564-2.044 0s-.565-1.48 0-2.044c.564-.564 1.479-.564 2.044 0s.565 1.479 0 2.044z"></path></svg>
</a>
</h2>
</div>
<span v-for="i in 5" v-if="validRecommendation(i-1)">
<a class="btn-tertiary
pointer
mb2"
v-bind:href="displaySearchURL(recommendedsearches.results[i-1].MYS.searchtype, recommendedsearches.results[i-1].MYS.search, show)"
v-on:click.self="logRelated(displaySearchURL(recommendedsearches.results[i-1].MYS.searchtype, recommendedsearches.results[i-1].MYS.search, show))">{{recommendedsearches.results[i-1].MYS.search}}
</a>
</span>
</section>
</transition>
<h1 class="f1
mb4
mt0"
v-html="resultsheader"
v-if="showheader">
</h1>
<div class="bb
b--black-10
flex-l
justify-between-l
mb4
mb6-l
pb3">
<h1 class="f1
ma0
mb3
mb0-l
normal">
<span>
<span v-if="(showresultcount == true || showresultcount == 1) && !hideallresults">
{{totalhits()}}
</span>
<span v-if="totalhits() == 1">{{content.resultSingular}}</span>
<span v-else>{{content.resultPlural}}</span>
<span v-if="searchresultstext || searchresultheader">{{content.forText}}
<span v-if="searchresultheader">
<span v-html="searchresultheader"></span><span v-if="searchresultstext">:<strong> “{{searchresultstext}}”</strong>
</span>
</span>
<strong v-else>{{searchresultstext}}</strong>
</span>
</span>
</h1>
<div v-if="getValidDisplayOptions().length > 1" class="btn-toggle-view-wrapper">
<span v-for="(displayoption, index) in getValidDisplayOptions()">
<a class="bb-0" href=""
v-on:click.stop.prevent="switchDisplay(displayoption.name);" v-bind:title="'View results by ' + displayoption.name">
<span v-bind:class="[isSelected(displayoption.name) ? '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>
<slot name="filter"></slot>
<slot name="sort"></slot>
<div class="searchResultWrapper" v-for="(section, index) in getDisplaySections()">
<section id="allexhibitors-results" v-if="(section == 'exhibitor')"></section>
<featured-search-results
v-if="((section == 'exhibitor') && ('featured' in searchresults.results) && (searchresults.results.featured.found > 0) && section)"
v-bind:searchresults="searchresults"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:show="show"
v-bind:searchconfig="searchconfig"
v-bind:searching="searching"
v-bind:displayoptions="getSectionDisplayOptions(section)"
v-bind:showheader="showheader"
v-bind:showresultcount="showresultcount"
v-bind:selectedview="searchselectedview"
v-bind:searchsize="searchsize"
v-bind:floorplanresultsurl="getFloorplanLink()"
v-on:load-more-results="$emit('load-more-results', $event);"
v-on:view-all-results="$emit('view-all-results', $event);">
</featured-search-results>
<hr class="o-PageDivider" v-if="((section == 'exhibitor') && ('featured' in searchresults.results) && (searchresults.results.featured.found > 0) && section)" />
<section class="">
<component
:key="section"
v-bind:is="getComponentType(section, hasmyshow, regemail)"
v-bind:recommendedresults="recommendedexhibitors"
v-bind:searchresults="searchresults"
v-bind:searchtext="searchtext"
v-bind:searchtype="searchtype"
v-bind:show="show"
v-bind:searchconfig="searchconfig"
v-bind:keywordsearchconfig="keywordsearchconfig"
v-bind:displayoptions="getSectionDisplayOptions(section)"
v-bind:showheader="showheader"
v-bind:showresultcount="showresultcount"
v-bind:selectedview="searchselectedview"
v-bind:searchsize="searchsize"
v-bind:floorplanresultsurl="getFloorplanLink()"
v-on:load-more-results="$emit('load-more-results', $event);"
v-on:view-all-results="$emit('view-all-results', $event);">
</component>
<hr class="o-PageDivider"
/>
</section>
</div>
</div>
<div v-if="noresults">
<slot name="top"></slot>
<slot></slot>
<noresults-display
v-bind:searchterm="noresultstext"
v-bind:searchtype="searchtype">
</noresults-display>
</div>
<backtotop-button ref="backtotopbutton">
</backtotop-button>
</main>
</div></script>
<script>
var SearchResultsDisplay = Vue.component('search-results-display', {
data: function(){
return {
compincludepath: "includes/vue/search/search-results-display.cfm",
backToTopButtonShowing: false,
tempDisplayOptions: [{"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,
hidesessiontimes: Vue.MYS.settingsConfig.searchsettings.hidesessiontimes,
path: this.path2approot
}
},
mixins: [searchDisplayMixin],
props: ["searchresults", "recommendedsearches", "recommendedexhibitors","selectedsearchindex", "searchconfig", "keywordsearchconfig", "recommendedexhibitorsconfig", "relatedsearchesconfig", "searching", "show", "searchtext", "searchtype", "resultsheader", "displayoptions", "showheader", "showresultcount", "showsidebar", "searchsize", "searchMainContentHeight", "searchresultheader", "showadvancedsearch"],
template:"#search-results-template",
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(){
window.addEventListener("scroll", this.$refs.backtotopbutton.toggleBackToTopButton);
this.$refs.backtotopbutton.$el.classList.add('dn'); // Keep button from flashing on load
this.$refs.backtotopbutton.toggleBackToTopButton();
},
watch: {
searchresults: function(){
this.$forceUpdate();
},
showsearchresults: function(x){
var offsetHeight = document.getElementById('main-searchresults-display').offsetHeight;
var scrollp = this.getScrollPosition();
// document.getElementById('main-searchresults-display').style.minHeight = offsetHeight + "px";
// kind of a hack, since we don't exactly where to scroll yet lets just check if teh scroll position is even a little bit.
// If it is, just show any results we have. We need to do setTimeout because of the delay rendering from Vue
if (scrollp > 10){
setTimeout(function(){
var x = document.getElementsByClassName("js-Card");
for (var i = 0; i < x.length; i++) {
x[i].style.opacity = 1;
}
var x = document.getElementsByClassName("js-List");
for (var i = 0; i < x.length; i++) {
x[i].style.opacity = 1;
}
}, 550);
}
// if we are showing results, check to see if scrollPosition is stored and if it is scroll there after results are on the page
// We need to do setTimeout because of the delay rendering from Vue
if (x){
if (this.hasSessionStorage() && sessionStorage.getItem("scrollPosition") && sessionStorage.getItem("scrollURL") && sessionStorage.getItem("scrollURL") === this.getCurrentURL()){
var scrollPos = sessionStorage.getItem("scrollPosition");
if (!isNaN(scrollPos)){
setTimeout(function(){
window.scrollTo(0, scrollPos); // values are x,y-offset
sessionStorage.removeItem("scrollPosition");
}, 550);
}
}
}
}
},
methods: {
logRelated: function(url){
// log function(useraction, useractiontype, actionvalue, altvalue)
this.logStats("Related Search Click", "", encodeURIComponent(url), "");
},
shouldShowSidebar: function(){
var returnvalue = false;
var sectioncount = 0;
var sessionDayCount = this.getUniqueSessionDays('session').length;
// for (var i = 0; i < this.searchresults.results.length; i++){
for (key in this.searchresults.results){
var result = this.searchresults.results[key];
if ("found" in result && result.found > 0){
sectioncount++;
}
}
if (sessionDayCount > 1 && !this.hidesessiontimes){
sectioncount += sessionDayCount;
}
if (typeof this.showsidebar === "boolean"){
return this.showsidebar;
}
else if (sectioncount > 1){
return true;
} else {
return false;
}
},
// okay this is a little bit of a hack... we got rid of the ability to switch views on each individual section, so we will just bind the appropriate display config as needed
getSectionDisplayOptions: function(section){
var tempReturn = [];
switch (section){
case "session":
case "exhibitor":
case "guestappearances":
tempReturn = [{"transition":"fade","display":this.content.gridText,"active":true,"displayoptioncontentid":0,"default":true,"name":"grid"},{"transition":"fade","display":this.content.listText,"active":true,"displayoptioncontentid":0,"default":true,"name":"list"}];
break;
default:
tempReturn = [{"transition":"fade","display":"List","active":true,"displayoptioncontentid":0,"default":true,"name":"list"}];
break;
}
return tempReturn;
},
// now that we have the global section switcher and not the one at the top of the page we need a way of only getting options that are valid. So if
// my searchresults only contains product categories (which are list only) then we only return list as the options
getValidDisplayOptions: function(){
var searchResultsKeys = []; // array of search results names ['exhibitor', 'collateral', 'showfeature']
var returnDisplayOptions = []; // return array
var returnDisplayOptionNames = {}; // this will be a structure of the names of sections that will be going back {'grid':true, 'list':true}
// get search result sections
if ("results" in this.searchresults){
// searchResultsKeys = Object.keys(this.searchresults.results);
for (resultkey in this.searchresults.results){
if ("found" in this.searchresults.results[resultkey] && this.searchresults.results[resultkey].found > 0){
searchResultsKeys.push(resultkey);
}
}
}
// loop over search result sections and add to return as needed
for (var i = 0; i < searchResultsKeys.length; i++){
var section = searchResultsKeys[i];
var currentDisplayOption = this.getSectionDisplayOptions(section);
// for the current section we are on, only add if its not in our returnDisplayOptionNames struct
for (var j = 0; j < currentDisplayOption.length; j++){
if (!(currentDisplayOption[j].name in returnDisplayOptionNames)){
returnDisplayOptions.push(currentDisplayOption[j]);
}
returnDisplayOptionNames[currentDisplayOption[j].name] = true;
}
}
return returnDisplayOptions;
},
getDisplaySections: function(){
var returnArray = [];
for (key in this.searchresults.results){
if ((key in this.searchresults.results) && (this.searchresults.results[key].found > 0) && key != "featured") {
returnArray.push(key);
}
}
return returnArray;
},
isSelected: function(selectedview2){
return (this.searchselectedview == selectedview2);
},
switchDisplay: function(selectedview){
this.searchselectedview = selectedview;
// var selectedview = vObj.getViewState(vObj.path, "exhsearchpage");
this.saveViewState(this.path, "exhsearchpage", selectedview);
for (var i = 0; i < this.tempDisplayOptions.length; i++){
if (this.tempDisplayOptions[i].name == this.searchselectedview){
this.tempDisplayOptions[i].default=true;
this.tempDisplayOptions[i].active=true;
} else {
this.tempDisplayOptions[i].default=false;
this.tempDisplayOptions[i].active=false;
}
}
},
validRecommendation: function(index){
return ((this.recommendedsearches.results.length > 0) && (this.recommendedsearches.results[index]) && ('MYS' in this.recommendedsearches.results[index]));
},
getComponentType: function(name, hasmyshow, regemail){
var type = "";
for (var i = 0; i < keywordsearchconfig.length; i++) {
if (keywordsearchconfig[i]['section'].toLowerCase() == name && keywordsearchconfig[i]['requireplanner'] == 1 && hasmyshow && regemail.length == 0) {
return "requireplanner-search-results";
}
}
switch(name){
case "exhibitor":
type = "exhibitor-search-results";
break;
case "category":
type = "category-search-results";
break;
case "showfeature":
type = "showfeature-search-results";
break;
case "collateral":
type = "collateral-search-results";
break;
case "session":
type = "session-search-results";
break;
case "pavilion":
type = "pavilion-search-results";
break;
case "tradename":
type = "tradename-search-results";
break;
case "booth":
type = "booth-search-results";
break;
case "participatingexhibitors":
type = "participatingexhibitors-search-results";
break;
default:
type = name + "-search-results";
break;
}
return type;
},
totalhits: function(){
var value = 0;
if (!isNaN(this.searchresults.totalhits)) {
value += this.searchresults.totalhits;
}
if (!isNaN(this.recommendedexhibitors.results.length)){
value += this.recommendedexhibitors.results.length;
}
if (isNaN(value)){
return "...";
} else {
return value;
}
},
getFloorplanSearchParameters: function(){
var returnObj = {
st: "",
sv: ""
};
if (this.show.lastIndexOf("cat-", 0) === 0){
// use custom encode uri compoennt in global mixin
var showsearchtype = decodeURIComponent(this.customURIEncode(this.show)).replace("cat-", "").replace(/\|[A-z0-9]+/g, "");
var showsearchval = decodeURIComponent(this.customURIEncode(this.show)).replace("cat-", "").replace(/[A-z0-9]+\|/g, "");
returnObj.sv = showsearchval;
switch(showsearchtype){
case "category":
case "countries":
case "exhibitorcategoriesparents":
returnObj.st = "category"
if(showsearchval.slice(0,6) == "999999"){
returnObj.sv = showsearchval.slice(6,showsearchval.length);
}
break;
case "pavilion":
returnObj.st = "pavilion"
break;
}
} else {
returnObj.sv = this.searchtext;
switch (this.searchtype){
case "exhibitor":
case "keyword":
returnObj.st = "keyword";
break;
case "pavilion":
returnObj.st = "pavilion";
returnObj.sv = this.searchtext;
if ("selectvalues" in this.searchconfig[this.selectedsearchindex]){
for (var i = 0; i < this.searchconfig[this.selectedsearchindex].selectvalues.length; i++){
if (this.searchconfig[this.selectedsearchindex].selectvalues[i].fieldvalue == this.searchtext){
returnObj.sv = this.searchconfig[this.selectedsearchindex].selectvalues[i].fieldvalue;
break;
}
}
}
break;
case "category":
returnObj.st = "category";
returnObj.sv = this.searchtext;
break;
case "state":
returnObj.st = "state";
break;
case "country":
case "countries":
returnObj.st = "country";
break;
case "booth":
returnObj.st = "booth";
break;
case "exhibitoralpha":
returnObj.st = "exhibitor";
returnObj.sv = (this.searchtext == "0") ? "#" : this.searchtext;
break;
case "featuredexhibitors":
returnObj.st = "featuredexhibitors";
returnObj.sv = "";
break;
case "newexhibitors":
returnObj.st = "newexhibitors";
returnObj.sv = "";
break;
case "meetings":
returnObj.st = "meetings";
returnObj.sv = "";
break;
case "exhibitorname":
returnObj.st = "exhibitorname";
returnObj.sv = this.searchtext;
break;
case "subshow":
returnObj.st = "subshow";
break;
}
}
return returnObj;
},
getFloorplanLink: function(){
var searchtype = this.getFloorplanSearchParameters().st;
if(searchtype == 'category' && this.getFloorplanSearchParameters().sv.substring(0,6) == '999999'){
var searchvalue = this.getFloorplanSearchParameters().sv.substring(6);
}else{
var searchvalue = this.getFloorplanSearchParameters().sv;
}
if (searchtype){
return this.path2approot + "/floorplan/index.cfm?st=" + encodeURIComponent(searchtype) + "&sv=" + encodeURIComponent(searchvalue);
} else {
return "";
}
}
},
computed: {
shouldShowExhibitorHeader: function(){
return (('exhibitor' in this.searchresults.results) && (this.searchresults.results.exhibitor.found > 0) && (this.show == "all"));
},
shouldShowCategoryHeader: function(){
return (('category' in this.searchresults.results) && (this.searchresults.results.category.found > 0) && (this.show == "all"));
},
showRecommendedSearches: function(){
if ((this.recommendedsearches) && ("results" in this.recommendedsearches) && (this.recommendedsearches.results.length > 0)){
return true;
} else {
return false;
}
},
showsearchresults: function(){
return (this.searchresults.totalhits > 0 || this.recommendedexhibitors.results.length > 0) && !this.searching;
},
noresultstext: function(){
if (this.searchtext == "1900-01-01T00:00:00Z" && (this.searchtype == "sessiondate" || this.searchtype == "sessionfulllist")) {
return this.content.onDemandSessionLabelPlural;
} else if (this.searchresults.searchtext){
return this.searchresults.searchtext;
} else if (this.searchresultheader){
return this.searchresultheader;
} else {
return "";
}
},
noresults: function(){
// TODO :: STEPHEN :: Make sure this is the right way to make sure we have no results
//return (("totalhits" in this.searchresults && this.searchresults.totalhits == 0 && this.searchresults.searchtext.length > 0) ) ? true : false ;
return (("totalhits" in this.searchresults && this.searchresults.totalhits == 0 && !this.searching) ) ? true : false ;
},
content: function(){
return {
resultPlural: this.displaycontent(this.compincludepath, 'resultPlural'),
resultSingular: this.displaycontent(this.compincludepath, 'resultSingular'),
forText: this.displaycontent(this.compincludepath, 'forText'),
gridText: this.displaycontent(this.compincludepath, 'gridText'),
listText: this.displaycontent(this.compincludepath, 'listText'),
relatedSearchesText: this.displaycontent(this.compincludepath, 'relatedSearchesText'),
onDemandSessionLabelSingular: this.displaycontent(this.compincludepath, 'onDemandSessionLabelSingular'),
onDemandSessionLabelPlural: this.displaycontent(this.compincludepath, 'onDemandSessionLabelPlural')
};
},
searchresultstext: function() {
if (this.searchtext == "1900-01-01T00:00:00Z" && (this.searchtype == "sessiondate" || this.searchtype == "sessionfulllist")) {
return (this.searchresults.totalhits > 1 ? this.content.onDemandSessionLabelPlural : this.content.onDemandSessionLabelSingular);
} else {
return this.searchresults.searchtext;
}
}
}
});
</script>
<script type="text/x-template" id="show-highlights-template"> <section id="product-preview" v-if="highlightdata && highlightdata.length > 0 && highlightcount > 0">
<div class="result-heading
mb3
pb2">
<h2 class="js-ResultHeader
dib ma0
normal">
<span class="f3
ttu">{{content.header}}</span>
</h2>
<a class="btn-tertiary
dib
ml2
pointer" v-if="highlightdata.length > highlightcount" v-on:click.stop.prevent="toggleProductPreviews">
<span v-if="!showall">{{content.showallbutton}}</span>
<span v-if="showall">{{content.showlessbutton}}</span>
</a>
</div>
<div class="o-ProductPreview
flex-xl
flex-wrap-xl
mb0-last " >
<div class="o-ProductPreview_Item
flex-column-m
flex-m
w-third-xl
mb5
mb0-xl"
v-if="(index < highlightcount && !showall) || (showall)"
v-for="(featured, index) in highlightdata">
<a class="bb-0
dim
mr4" v-bind:href="getExhibitorURL(featured.exhid, featured.exhname)" v-on:click="logClickStat(featured.exhid, featured.featureid)" :title="'Learn more about ' + featured.exhname + ' ' + '-' + ' ' + featured.featuretitle">
<v-lazy-image
width="250"
height="174"
class="js-lazy
ba
b--black-10
mb2
mb0-l"
:srcPlaceholder="path2approot + '/assets/imgs/grey.gif'"
v-bind:src="getFeaturePath(featured.featuretype, featured.thumbnail, featured.mediafile, featured.exhid)"
v-bind:data-alternativeThumbnail="'/mys_shared/'+showidlowercase+'/showfeatures/'+featured.exhid+'/'+featured.thumbnail+','+path2approot + '/assets/imgs/error-broken-image.png'"
v-bind:data-alternativeMediaFile="'/mys_shared/'+showidlowercase+'/showfeatures/'+featured.exhid+'/'+featured.mediafile+','+path2approot + '/assets/imgs/error-broken-image.png'"
:onError="'imageLoadError(this, this.getAttribute(\'data-alternativeThumbnail\').split(/,/), this.getAttribute(\'data-alternativeMediaFile\').split(/,/))'"
:alt="featured.exhname + ' ' + '-' + ' ' + featured.featuretitle"
/>
</a>
<div class="pr5-l
pr6-xl">
<a class="color-inherit" v-bind:href="getExhibitorURL(featured.exhid, featured.exhname)" v-on:click="logClickStat(featured.exhid, featured.featureid)">
<h3 class="f3
mt0
mb2">{{featured.featuretitle}}</h3>
<p class="f5
mt0"><strong>{{featured.exhname}}</strong></p>
</a>
<div class="o-DynamicContent
f5
lh-copy
mt1
mb3" v-html="createSummary(featured.featuretext, 140)"></div>
<span v-if="featured.bootharray && featured.bootharray.length && showbooths">
{{content.visitUsAtBooth}}:
<span v-for="i in numOfBoothsToShow(featured.bootharray.length)">
<a v-if="floorplanactive && validHalls.includes(featured.hallids[i-1])" class="f5
ma0" :title="'See' + ' ' + featured.exhname + ' at ' + 'Booth ' + featured.boothdisplayarray[i-1] + ' on the floorplan'" :href="path2approot + '/floorplan_link.cfm?exhid=' + featured.exhid + '&booth=' + featured.boothdisplayarray[i-1] + '&show_id=' + showid">{{ featured.boothdisplayarray[i-1] }}</a><span v-else >{{ featured.boothdisplayarray[i-1] }}</span><span class="bb-0" v-if="i+1 <= numOfBoothsToShow(featured.bootharray.length)">, </span>
</span>
<span v-if="featured.bootharray.length > maxshowbooths" class="bb-0">
+ {{featured.bootharray.length - maxshowbooths}} more
</span>
</span>
</div>
</div>
</div>
</section></script>
<script>
var ShowHighlightsDisplay = Vue.component('show-highlights', {
template:"#show-highlights-template",
props: {
logonload:{
type: Boolean,
required: false,
default: false
},
highlightdata: {
type: Array,
required: false,
default: []
},
content: {
type: Object,
required: false,
default: {}
}
},
data: function(){
return {
showall:false,
highlightcount: Vue.MYS.settingsConfig.spotlightsettings.spotlightcount,
useExhSubVersion2: Vue.MYS.useExhSubVersion2,
validHalls: Vue.MYS.validHalls
}
},
mounted: function(){
/*var featureids = [];
var vObj = this;
// if its not a search then log
if (!(vObj.$route && "params" in vObj.$route && "searchtype" in vObj.$route.params && vObj.$route.params.searchtype)) {
for (var i = 0; i < vObj.highlightdata.length; i++){
featureids.push(vObj.highlightdata[i].featureid);
}
vObj.logStats(featureids);
}*/
},
watch: {
highlightdata: function(newData, oldData){
// if the data changes (from load) then we want to log it
if (newData.length > 0 && oldData.length == 0){
var featureids = [];
var vObj = this;
var limitLogNumber = (vObj.highlightdata.length < vObj.highlightcount ) ? vObj.highlightdata.length : vObj.highlightcount;
// if its not a search then log
if (!(vObj.$route && "params" in vObj.$route && "searchtype" in vObj.$route.params && vObj.$route.params.searchtype)) {
for (var i = 0; i < limitLogNumber; i++){
featureids.push(vObj.highlightdata[i].featureid);
if (i > vObj.highlightcount){
break;
}
}
vObj.logStatsFeatures(featureids);
}
}
}
},
created: function(){
},
methods: {
getSummary: function(){
// createSummary: function(htmldescription, maxLength)
// return
},
toggleProductPreviews: function(){
//this.showall = true;
this.showall = !this.showall;
var featureids = [];
for (var i = this.highlightcount; i < this.highlightdata.length; i++){
featureids.push(this.highlightdata[i].featureid);
}
this.logStatsFeatures(featureids);
},
logStatsFeatures: function(featureids){
var vObj = this;
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=misc&function=logShowFeatureViews&hiddenFeatureIDs=' + featureids.join(","), // ajaxGet() defined in _global-mixin
function(response){ // success
vObj.loading = false;
},
function(response){ // error
}); // end ajaxGet
},
logClickStat: function(exhid, featureid){
this.logStats('Show Highlight', 'Click', exhid, featureid);
},
numOfBoothsToShow: function (boothLength){
return (this.maxshowbooths == 0 ? boothLength : (this.maxshowbooths > boothLength ? boothLength : this.maxshowbooths));
},
getFeaturePath(featuretype, thumbnail, mediafile, exhid) {
if (this.useExhSubVersion2)
{
var showID = this.showidlowercase;
var path2approot = this.path2approot;
var pathConfig = {};
pathConfig.bucket = 'mys-showfiles';
pathConfig.key = "production/"+this.showidlowercase+"/show_features/"+exhid.toString().toLowerCase()+"/"+(thumbnail ? thumbnail : mediafile);
pathConfig.edits = {};
pathConfig.edits.resize = {};
pathConfig.edits.resize.height = 174;
pathConfig.edits.resize.width = 250;
pathConfig.edits.resize.fit = 'cover';
pathConfig.edits.resize.quality = 70;
return ('https://d3fv3oe83qat1b.cloudfront.net/' + btoa(JSON.stringify(pathConfig)));
}
else if (thumbnail)
{
return '/mys_shared/' + this.showid + '/showfeatures/' + exhid + '/' + thumbnail;
}
else
{
return this.path2approot + '/assets/imgs/error-broken-image.png';
}
}
}
});
function imageLoadError(element, thumbList, mediaList) {
var image = new Image();
image.onload = function() {
element.setAttribute('data-bp', mediaList.shift());
element.src = this.src;
}
image.onerror = function() {
if (thumbList.length) {
imageLoadError(element, thumbList, mediaList);
}
}
image.src = thumbList.shift();
}
</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="advanced-search-form-template"> <form action="" id="jq-advancedSearchForm" ref="mainSearchForm" class="search-main
content-center
flex
justify-center
pa1
pt6-m
pr3-m
pb6-m
pl3-m">
<div class="search-main-wrapper
br3
pa4
w-100
w-two-thirds-l
has-focus">
<a class="dib
pointer
mb4" v-on:click.stop.prevent="$emit('hide-advanced-search');">< {{content.backToSearchText}}</a>
<a class="bb
b--black-10
dim
flex
items-center
justify-between
ma0
mb3
pb2
pointer
w-100" href="/8_0/explore/exhibitor-gallery.cfm" role="tab" :title="content.showOrHideText">
<h3 class="ma0
ttu">{{content.advancedSearchHeader}}</h3>
<svg class="ml2
v-mid" width="24" height="24" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
<path v-if="!collapsed" d="M0 12c0 6.627 5.373 12 12 12s12-5.373 12-12S18.627 0 12 0 0 5.373 0 12zm19 1.218L17.25 15 12 9.75 6.75 15 5 13.218l7-6.968 7 6.968z" fill="#888" fill-rule="nonzero"/>
<path v-else d="M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12s5.373 12 12 12 12-5.373 12-12zM5 10.782L6.75 9 12 14.25 17.25 9 19 10.782l-7 6.968-7-6.968z" fill="#888" fill-rule="nonzero"/>
</svg>
</a>
<transition name="fadeHeight" mode="out-in">
<div v-show="!collapsed" >
<fieldset id="sortSearch" class="bn
bb
b--black-10
ma0
pa0
pb4" v-if="hasexhibitorsearchesadvanced && hassessionsearchesadvanced">
<p class="b
db
dib-l
mb2
mb0-l
ma0
mr2
pa0
v-mid">{{content.searchForText}}:</p>
<div class="db
dib-l
mb2
mb0-l
ml3
ml0-l
mr3"
v-if="hasexhibitorsearchesadvanced">
<input type="radio" name="sort-search" id="exhibitors-sortform" class="mr1
v-mid" value="exhibitors" v-bind:checked="returnValue == 'exhibitors'"
v-on:click="updateReturnValue($event)"
ref="returnvalue">
<label for="exhibitors-sortform" class="pointer
v-mid lh-copy">{{content.exhibitorsOption}}</label>
</div>
<div class="db
dib-l
mb2
mb0-l
ml3
ml0-l
mr3"
v-if="hassessionsearchesadvanced">
<input type="radio" name="sort-search" id="sessions-sortform" class="mr1
v-mid" value="sessions" v-bind:checked="returnValue == 'sessions'"
v-on:click="updateReturnValue($event)"
ref="returnvalue">
<label for="sessions-sortform" class="pointer
v-mid lh-copy">{{content.sessionsOption}}</label>
</div>
</fieldset>
<input type="hidden" name="sort-search" v-bind:value="returnValue"
v-if="(hasexhibitorsearchesadvanced && !hassessionsearchesadvanced) || (!hasexhibitorsearchesadvanced && hassessionsearchesadvanced)" />
<div id="sortSearch" class="bg-near-white
br3
mb4
pa3">
<h3 class="f4
ma0
mb2
normal">
<span v-if="returnValue == 'exhibitors'" v-html="content.exhibitorMeetsAllConditionsPreText"></span>
<span v-if="returnValue == 'sessions'" v-html="content.sessionMeetsAllConditionsPreText"></span>
</h3>
<div class="flex
flex-column
flex-row-l
items-center-l" v-for="(andoption, index) in andSearchOptionsArray">
<select class="fm-Select
mw6" name="searchtype" v-model="andoption.searchtype" v-on:change="updateSearchType($event, index, 'and')" v-bind:ref="'andsearchtype'+index">
<option value="">{{content.chooseSearchItemText}}</option>
<option v-for="(item, index) in filteredsearchconfig" v-bind:value="item.element" >{{ item.display }}</option>
</select>
<input type="hidden" name="operator" v-model="andoption.operator" />
<div class="mw6-l
w-100">
<input type="text" name="searchvalue"
class="fm-Input
w-100"
v-bind:value="andoption.searchvalue"
v-if="getSearchConfigByType(andoption.searchtype).searchfieldtype != 'select'"
v-on:keyup="updateSearchValue($event, index, 'and')"
v-on:click="updateSearchValue($event, index, 'and')"
:placeholder="getSearchConfigByType(andoption.searchtype).placeholdertext"
:key="'andinputsearchvalue'+index"
/>
<v-select
vs--single
vs-searchable
vs--open
label="fielddisplay"
v-bind:value="getSelectDisplayValue(andoption.searchvalue, andoption.searchtype)"
v-if="getSearchConfigByType(andoption.searchtype).searchfieldtype == 'select'"
@input="updateSearchValue($event, index, 'and')"
:placeholder="getSearchConfigByType(andoption.searchtype).placeholdertext"
:disabled="selectoptionsvalues[andoption.searchtype] && selectoptionsvalues[andoption.searchtype].length <= 0"
:options="selectoptionsvalues[andoption.searchtype]">
</v-select>
</div>
<a class="bb-0
dim
mt3
mt0-l
ml3-l
pointer" v-on:click.stop.prevent="removeCondition(index, 'and')" title="Remove this search item">
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
<g transform="translate(-952 -21)" fill="none" fill-rule="evenodd"><circle fill="rgba(255,255,255,0)" cx="967" cy="36" r="15"/>
<path fill="#767676" fill-rule="nonzero" d="M975 41.94l-5.953-5.954L975 30.041 972.94 28l-5.95 5.948L961.044 28 959 30.044l5.953 5.96L959 41.956 961.044 44l5.965-5.958L972.96 44z"/></g>
</svg>
</a>
</div>
<a class="btn-ghost
mt2" v-on:click.stop.prevent="addCondition('and')">
<div class="flex
items-center">
<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true"><path d="M10 0C4.478 0 0 4.478 0 10c0 5.523 4.478 10 10 10 5.523 0 10-4.477 10-10 0-5.522-4.477-10-10-10zm5 10.833h-4.167V15H9.167v-4.167H5V9.167h4.167V5h1.666v4.167H15v1.666z" fill-rule="nonzero"/></svg>
<p class="f5
ma0
ml2">{{content.addCondition}}</p>
</div>
</a>
</div>
<div class="bg-near-white
br3
mb4
pa3">
<h3 class="f4
ma0
mb2
normal">
<span v-if="returnValue == 'exhibitors'" v-html="content.exhibitorMeetsAnyConditionsPreText"></span>
<span v-if="returnValue == 'sessions'" v-html="content.sessionMeetsAnyConditionsPreText"></span>
</h3>
<div class="flex
flex-column
flex-row-l
items-center-l" v-for="(oroption, index) in orSearchOptionsArray">
<select class="fm-Select
mw6-l
w-100" name="searchtype" v-model="oroption.searchtype" v-on:change="updateSearchType($event, index, 'or')" v-bind:ref="'orsearchtype'+index" style="display:inline;">
<option value="">{{content.chooseSearchItemText}}</option>
<option v-for="(item, index) in filteredsearchconfig" v-bind:value="item.element" >{{ item.display }}</option>
</select>
<input type="hidden" name="operator" v-model="oroption.operator" />
<div class="mw6-l
w-100">
<input type="text" name="searchvalue"
class="fm-Input
w-100"
v-bind:value="oroption.searchvalue"
v-if="getSearchConfigByType(oroption.searchtype).searchfieldtype != 'select'"
v-on:keyup="updateSearchValue($event, index, 'or')"
v-on:click="updateSearchValue($event, index, 'or')"
:placeholder="getSearchConfigByType(oroption.searchtype).placeholdertext"
/>
<v-select vs--single
vs-searchable
vs--open
label="fielddisplay"
v-bind:value="getSelectDisplayValue(oroption.searchvalue, oroption.searchtype)"
v-if="getSearchConfigByType(oroption.searchtype).searchfieldtype == 'select'"
@input="updateSearchValue($event, index, 'or')"
:placeholder="getSearchConfigByType(oroption.searchtype).placeholdertext"
:disabled="selectoptionsvalues[oroption.searchtype] && selectoptionsvalues[oroption.searchtype].length <= 0"
:options="selectoptionsvalues[oroption.searchtype]"
>
</v-select>
</div>
<a class="bb-0
dim
mt3
mt0-l
ml3-l
pointer" v-on:click.stop.prevent="removeCondition(index, 'or')" title="Remove This Search Item">
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true">
<g transform="translate(-952 -21)" fill="none" fill-rule="evenodd"><circle fill="rgba(255,255,255,0)" cx="967" cy="36" r="15"/>
<path fill="#767676" fill-rule="nonzero" d="M975 41.94l-5.953-5.954L975 30.041 972.94 28l-5.95 5.948L961.044 28 959 30.044l5.953 5.96L959 41.956 961.044 44l5.965-5.958L972.96 44z"/></g>
</svg>
</a>
</div>
<a class="btn-ghost
mt2" v-on:click.stop.prevent="addCondition('or')">
<div class="flex
items-center">
<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true"><path d="M10 0C4.478 0 0 4.478 0 10c0 5.523 4.478 10 10 10 5.523 0 10-4.477 10-10 0-5.522-4.477-10-10-10zm5 10.833h-4.167V15H9.167v-4.167H5V9.167h4.167V5h1.666v4.167H15v1.666z" fill-rule="nonzero"/></svg>
<p class="f5
ma0
ml2">{{content.addCondition}}</p>
</div>
</a>
</div>
<div>
<input type="button" :value="content.advancedSearchSubmitButton"
v-on:click.prevent=" $emit('perform-search', searchtext); $emit('toggle-collapsed', true);"
:disabled="!hassearchoptions"
:class="[!hassearchoptions ? 'is-disabled' : '', 'btn-primary', 'mb3']" />
<a class="btn-tertiary
mb3" v-on:click.prevent="clearAllSearchItems()">{{content.clearAllSearchItems}}</a>
</div>
</div>
</transition>
</div>
</form></script>
<script>
var AdvancedSearchForm = Vue.component('advanced-search-form', {
data: function(){
return {
advancedsearchtype: "and", // "and" or "or"
compincludepath: "includes/vue/search/advanced-search-form.cfm",
searchBoxSelected: false,
timeoutid: null,
selectsearchtext: "", // since we cant use v-model on a prop, we dont care that selectsearchtext is so we'll use v-model on that
mousedoversearchoptions:false,
selectoptionsvalues: {},
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"
}
},
template:"#advanced-search-form-template",
mixins: [searchDisplayMixin, messagedisplayMixin],
props: ["searchconfig", "selectedsearchindex", "searchtext", "recentsearches", "recommendedsearches", "searchperformed", "show", "searchgroup", "selectedselectoptions", "showadvancedsearch", "hasexhibitorsearches", "hassessionsearches", "andsearchoptions", "orsearchoptions", "collapsed", "searching"],
mounted: function(){
var vObj = this;
var searchStruct = this.convertSearchTextStringToSearchStruct(vObj.searchtext);
for (var i = 0; i < vObj.andSearchOptionsArray.length; i++){
if (('andsearchtype'+i in vObj.$refs) && (vObj.$refs['andsearchtype'+i].length > 0)){
vObj.updateSearchType({ target: vObj.$refs['andsearchtype'+i][0] }, i, 'and');
}
}
for (var i = 0; i < vObj.orSearchOptionsArray.length; i++){
if (('orsearchtype'+i in vObj.$refs) && (vObj.$refs['orsearchtype'+i].length > 0)){
vObj.updateSearchType({ target: vObj.$refs['orsearchtype'+i][0] }, i, 'or');
}
}
},
computed: {
content: function(){
return {
chooseSearchItemText: this.displaycontent(this.compincludepath, 'chooseSearchItemText'),
backToSearchText: this.displaycontent(this.compincludepath, 'backToSearchText'),
advancedSearchHeader: this.displaycontent(this.compincludepath, 'advancedSearchHeader'),
showOrHideText: this.displaycontent(this.compincludepath, 'showOrHideText'),
searchForText: this.displaycontent(this.compincludepath, 'searchForText'),
exhibitorsOption: this.displaycontent(this.compincludepath, 'exhibitorsOption'),
sessionsOption: this.displaycontent(this.compincludepath, 'sessionsOption'),
meetsAllConditionsText: this.displaycontent(this.compincludepath, 'meetsAllConditionsText'),
addCondition: this.displaycontent(this.compincludepath, 'addCondition'),
meetsAtLeastOneConditionText: this.displaycontent(this.compincludepath, 'meetsAtLeastOneConditionText'),
clearAllSearchItems: this.displaycontent(this.compincludepath, 'clearAllSearchItems'),
isText: this.displaycontent(this.compincludepath, 'isText'),
containsText: this.displaycontent(this.compincludepath, 'containsText'),
isNotText: this.displaycontent(this.compincludepath, 'isNotText'),
advancedSearchSubmitButton: this.displaycontent(this.compincludepath, 'advancedSearchSubmitButton'),
tooManyConditionsWarning: this.displaycontent(this.compincludepath, 'tooManyConditionsWarning'),
exhibitorMeetsAllConditionsPreText: this.displaycontent(this.compincludepath, 'exhibitorMeetsAllConditionsPreText'),
exhibitorMeetsAnyConditionsPreText: this.displaycontent(this.compincludepath, 'exhibitorMeetsAnyConditionsPreText'),
sessionMeetsAllConditionsPreText: this.displaycontent(this.compincludepath, 'sessionMeetsAllConditionsPreText'),
sessionMeetsAnyConditionsPreText: this.displaycontent(this.compincludepath, 'sessionMeetsAnyConditionsPreText'),
andOptionsTippyTitle: this.displaycontent(this.compincludepath, 'andOptionsTippyTitle'),
orOptionsTippyTitle: this.displaycontent(this.compincludepath, 'andOptionsTippyTitle')
};
},
hassearchoptions: function() {
var returnVal = true;
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
if (searchStruct["andArray"].length == 0 && searchStruct["orArray"].length == 0) { returnVal = false; }
for (var i = 0; i < searchStruct["andArray"].length; i++){
var tempItem = searchStruct["andArray"][i];
if (!tempItem.searchtype || !tempItem.searchvalue || !tempItem.operator){
returnVal = false;
break;
}
}
for (var i = 0; i < searchStruct["orArray"].length; i++){
var tempItem = searchStruct["orArray"][i];
if (!tempItem.searchtype || !tempItem.searchvalue || !tempItem.operator){
returnVal = false;
break;
}
}
if (!searchStruct["return"]){
returnVal = false;
}
return returnVal;
},
hasexhibitorsearchesadvanced: function(){
var returnValue = false;
if (this.hasexhibitorsearches){
for (var i = 0; i < this.searchconfig.length; i++){
if (this.searchconfig[i].type == "search" && this.searchconfig[i].element != "advanced"){
returnValue = true;
break;
}
}
} else {
returnValue = false;
}
return returnValue;
},
hassessionsearchesadvanced: function(){
var returnValue = false;
if (this.hassessionsearches){
for (var i = 0; i < this.searchconfig.length; i++){
if (this.searchconfig[i].type == "sessionsearch" && this.searchconfig[i].element != "advanced"){
returnValue = true;
break;
}
}
} else {
returnValue = false;
}
return returnValue;
},
andSearchOptionsArray: function(){
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
return searchStruct["andArray"];
},
orSearchOptionsArray: function(){
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
return searchStruct["orArray"];
},
returnValue: function(){
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
if (this.hasexhibitorsearchesadvanced && this.hassessionsearchesadvanced){
var defaultReturnValue = "exhibitors";
} else if (this.hassessionsearchesadvanced && !this.hasexhibitorsearchesadvanced){
var defaultReturnValue = "sessions";
} else {
var defaultReturnValue = "exhibitors";
}
return (searchStruct["return"]) ? searchStruct["return"] : defaultReturnValue;
},
filteredsearchconfig: function(){
var vObj = this;
var returnArray = [];
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
var tempSearchConfig = vObj.searchconfig;
// look
for (var i = 0; i < tempSearchConfig.length; i++){
var found = false;
var searchconfigsection = tempSearchConfig[i].element;
var advancedsearchdisplay = vObj.displaycontent(vObj.compincludepath, 'advancedsearch_display_option_2' + searchconfigsection);
if (advancedsearchdisplay){
tempSearchConfig[i].display = advancedsearchdisplay;
}
if (!found) {
if (searchStruct["return"] == "exhibitors" && tempSearchConfig[i].type == "search" && tempSearchConfig[i].isadvanced){
returnArray.push(tempSearchConfig[i]);
} else if (searchStruct["return"] == "sessions" && tempSearchConfig[i].type == "sessionsearch" && tempSearchConfig[i].isadvanced) {
returnArray.push(tempSearchConfig[i]);
}
}
}
return returnArray;
}
},
methods: {
getSelectDisplayValue: function(searchvalue, searchtype){
var returnVal = "";
if (this.selectoptionsvalues[searchtype]){
for (var i = 0; i < this.selectoptionsvalues[searchtype].length; i++){
if (searchtype == 'pavilion' && this.selectoptionsvalues[searchtype][i].fielddisplay == searchvalue) {
returnVal = this.selectoptionsvalues[searchtype][i].fielddisplay;
break;
} else if (this.selectoptionsvalues[searchtype][i].fieldvalue == searchvalue){
returnVal = this.selectoptionsvalues[searchtype][i].fielddisplay;
break;
}
}
}
return returnVal;
},
addCondition: function(type){
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
var currentArgCount = searchStruct["andArray"].length + searchStruct["orArray"].length;
if (currentArgCount < this.advancedsearchmaxparameters){
if (type == "and"){
searchStruct["andArray"].push({
searchtype: "",
operator: "is",
searchvalue: ""
});
} else if (type == "or"){
searchStruct["orArray"].push({
searchtype: "",
operator: "is",
searchvalue: ""
});
}
} else {
this.showMessage("error", this.content.tooManyConditionsWarning);
}
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
removeCondition: function(index, type){
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
if (type == "and"){
searchStruct["andArray"].splice(index, 1);
} else if (type == "or"){
searchStruct["orArray"].splice(index, 1);
}
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
convertSearchTextStringToSearchStruct: function(searchtext){
var returnStruct = {
andArray: [],
orArray: [],
return: ""
};
searchtext = searchtext.trim();
// and array - find and part of string, replace ;, and 'and:' text and turn into an array
var andMatch = searchtext.match(/and:.+;(?=or:.)/g);
var andString = (andMatch) ? andMatch[0].replace(";","").replace("and:","") : "";
var andArray = (andString === "") ? [] : andString.split("~~~~~");
for (var i = 0; i < andArray.length; i++){
var andValueArray = andArray[i].split("|");
var andStruct = {
searchtype: andValueArray[0],
operator: andValueArray[1],
searchvalue: andValueArray[2]
};
andArray[i] = andStruct;
}
// or array - find or part of string, replace ;, and 'or:' text and turn into an array
var orMatch = searchtext.match(/or:.+;(?=.)/g);
var orString = (orMatch) ? orMatch[0].replace(";","").replace("or:","") : "";
var orArray = (orString === "") ? [] : orString.split("~~~~~");
for (var i = 0; i < orArray.length; i++){
var orValueArray = orArray[i].split("|");
var orStruct = {
searchtype: orValueArray[0],
operator: orValueArray[1],
searchvalue: orValueArray[2]
};
orArray[i] = orStruct;
}
// return value
var returnMatch = searchtext.match(/return:.+;/g)
if (this.hasexhibitorsearchesadvanced){
var defaultReturnValue = "exhibitors";
} else if (this.hassessionsearchesadvanced){
var defaultReturnValue = "sessions";
} else {
var defaultReturnValue = "exhibitors";
}
var returnString =(returnMatch) ? returnMatch[0].replace(";","").replace("return:", "") : defaultReturnValue;
returnStruct["andArray"] = andArray;
returnStruct["orArray"] = orArray;
returnStruct["return"] = returnString;
return returnStruct;
},
convertSearchStructToString: function(searchStruct){
var andString = "", orString = "", returnValueString = "";
// and string
var tempArray = [];
for (var i = 0; i < searchStruct["andArray"].length; i++){
tempArray.push(searchStruct["andArray"][i]["searchtype"] + "|" + searchStruct["andArray"][i]["operator"] + "|" + searchStruct["andArray"][i]["searchvalue"]);
}
andString = "and:" + tempArray.join("~~~~~") + ";";
// or string
var tempArray = [];
for (var i = 0; i < searchStruct["orArray"].length; i++){
tempArray.push(searchStruct["orArray"][i]["searchtype"] + "|" + searchStruct["orArray"][i]["operator"] + "|" + searchStruct["orArray"][i]["searchvalue"]);
}
orString = "or:" + tempArray.join("~~~~~") + ";";
// returnValue string
returnValueString = "return:" + searchStruct["return"] + ";"
return andString + orString + returnValueString;
},
updateSearchType: function(event, index, type) {
var vObj = this;
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
var searchtype = event.target.options[event.target.selectedIndex].value;
if (type == "and") {
if (searchStruct["andArray"][index]["searchtype"] && (searchStruct["andArray"][index]["searchtype"] != searchtype)){
searchStruct["andArray"][index]["searchvalue"] = "";
}
searchStruct["andArray"][index]["searchtype"] = searchtype;
if (searchStruct["andArray"][index]["operator"] == ""){
searchStruct["andArray"][index]["operator"] = "is";
}
} else if (type == "or") {
if (searchStruct["orArray"][index]["searchtype"] && (searchStruct["orArray"][index]["searchtype"] != searchtype)){
searchStruct["orArray"][index]["searchvalue"] = "";
}
searchStruct["orArray"][index]["searchtype"] = searchtype;
if (searchStruct["orArray"][index]["operator"] == ""){
searchStruct["orArray"][index]["operator"] = "is";
}
}
for (var i = 0; i < this.searchconfig.length; i++){
var datafunction = vObj.searchconfig[i].datafunction;
var element = vObj.searchconfig[i].element;
var isSelect = (vObj.searchconfig[i].searchfieldtype == "select") ? true : false;
var hasSearchValues = (( element in vObj.selectoptionsvalues) && (vObj.selectoptionsvalues[element].length > 0)) ? true : false;
var extraAjaxParams = "";
if (datafunction.toLowerCase() == "getsearchcategories" || datafunction.toLowerCase() == "getsearchgeoregions"){
extraAjaxParams = "&GetChildren=true";
}
if ((element == searchtype) && (!hasSearchValues) && isSelect){
vObj.selectoptionsvalues[element] = [{fielddisplay: "Loading...", fieldvalue: ""}];
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=' + datafunction + extraAjaxParams, // ajaxGet() defined in _global-mixin
function(response){ // success
vObj.selectoptionsvalues[element] = [{fielddisplay: "", fieldvalue: ""}].concat(response["DATA"]);
// Vue is weird with selects and updating the deplay when option values are added dynamically. This is to force an update of the
// computed values after this change
var oldsearchtext = vObj.searchtext;
vObj.$emit('input', vObj.searchtext + " ");
setTimeout(function(){
vObj.$emit('input', oldsearchtext);
vObj.$forceUpdate();
}, 100);
},
function(response){ // error
vObj.error = true;
vObj.selectoptionsvalues[element] = [];
vObj.showMessage("error", "Error loading values");
vObj.$forceUpdate();
}); // end ajaxGet
break;
}
}
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
updateOperator: function(event, index, type) {
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
var arrayKey = "andArray";
if (type == "or"){ arrayKey = "orArray"; }
searchStruct[arrayKey][index]["operator"] = event.target.options[event.target.selectedIndex].value;
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
updateSearchValue: function(value, index, type){
var vObj = this;
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
var arrayKey = "andArray";
if (type == "or"){ arrayKey = "orArray"; }
if (value && "target" in value){
searchStruct[arrayKey][index]["searchvalue"] = value.target.value;
} else if ("fieldvalue" in value){
if (searchStruct[arrayKey][index]["searchtype"] == 'pavilion') {
searchStruct[arrayKey][index]["searchvalue"] = value.fieldaltvalue;
} else {
searchStruct[arrayKey][index]["searchvalue"] = value.fieldvalue;
}
}
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
updateReturnValue: function(event){ console.log(event);
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
if (searchStruct["return"] !== event.target.value) {
searchStruct["return"] = event.target.value;
searchStruct["andArray"] = [];
searchStruct["orArray"] = [];
}
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
formatMultiSelectOptions: function(selectoption){
if (selectoption && selectoption.constructor === Array){
var returnArray = [];
for (var i = 0; i < selectoption.length; i++){
returnArray.push({
name: selectoption[i].fielddisplay,
language: selectoption[i].fieldvalue
});
}
return returnArray;
} else {
return [];
}
},
clearAllSearchItems: function(){
var searchStruct = this.convertSearchTextStringToSearchStruct(this.searchtext);
searchStruct["andArray"] = [];
searchStruct["orArray"] = []; console.log("searchStruct", searchStruct);
var textreturn = this.convertSearchStructToString(searchStruct);
this.$emit('input', textreturn);
},
toggleSearchOptions: function(){
this.$emit('toggle-collapsed', !this.collapsed);
}
}
});
</script>
<style>
.fadeHeight-enter-active,
.fadeHeight-leave-active {
transition: all 0.4s;
/*max-height: 230px;*/
max-height: 500px;
}
.fadeHeight-enter,
.fadeHeight-leave-to
{
opacity: 0;
max-height: 0px;
}
</style>
<script type="text/x-template" id="keyword-search-form_v2-template"> <div>
<form v-if="istile" :id="'landing-search_form_tile_'+searchdisplaytype"
v-on:submit.prevent=" $emit('perform-search', searchtext); setBlur();"
autocomplete="off"
role="search">
<div v-if="searchdisplaytype == '1'" class="landing-search" role="search">
<h2 class="f1">{{title}}</h2>
<section class="landing-search_types">
<fieldset class="landing-search_types_columns_wrapper">
<legend class="is-visually-hidden">Search Types</legend>
<div class="landing-search_types_columns">
<template v-for="(item, index) in validsearchconfig.slice(0, Math.ceil(validsearchconfig.length/2))">
<label v-if="item != 'locked'" :for="item.element" class="fm-Control fm-Radio">{{item.display}}
<input type="radio" :id="item.element" name="search-types" :value="item.element" v-on:click.stop=" $emit('select-search', index); selectsearchtext = ''; setFocus();" :checked="(selectedsearchindex === index) ? true : ''">
<div class="fm-Control_Indicator"></div>
</label>
</template>
</div>
<div v-if="validsearchconfig.length > 1" class="landing-search_types_columns">
<template v-for="(item, index) in validsearchconfig.slice(Math.ceil(validsearchconfig.length/2), validsearchconfig.length)">
<label v-if="item != 'locked'" :for="item.element" class="fm-Control fm-Radio">{{item.display}}
<input type="radio" :id="item.element" name="search-types" :value="item.element" v-on:click.stop=" $emit('select-search', (index+Math.ceil(validsearchconfig.length/2))); selectsearchtext = ''; setFocus();" :checked="(selectedsearchindex === (index+Math.ceil(validsearchconfig.length/2)) ? true : '')">
<div class="fm-Control_Indicator"></div>
</label>
</template>
</div>
</fieldset>
</section>
<div class="landing-search_lower_half">
<section class="landing-search_input_wrapper">
<label for="search-main" class="is-visually-hidden">{{placeholdertext}}</label>
<input v-if="searchconfig[selectedsearchindex].searchfieldtype === 'search'" ref="search" autocomplete="off" type="search" id="search-main" class="landing-search_input" maxlength="1500"
v-on:input="$emit('input', $event.target.value)"
:value="searchtext"
:placeholder="placeholdertext">
<select v-else-if="searchconfig[selectedsearchindex].searchfieldtype === 'select'" id="search-main-form-select" class="fm-Select
search-main-form-select
ma0
mr2
landing-search_input" ref="select" name="input2"
v-on:change="$emit('select', $event.target.value); $emit('perform-search', $event.target.value); setBlur();"
v-model="selectsearchtext"
v-on:click.stop.prevent="toggleSearchOptions(); "
@focus="searchBoxFocus();">
<option value=""
selected="selected" v-if="'selectvalues' in searchconfig[selectedsearchindex]">
{{selectplaceholdertext}}
</option>
<option v-for="selectvalue in selectedselectoptions"
:value="selectvalue.fieldvalue">
{{selectvalue.fielddisplay}}
</option>
</select>
</section>
<section class="landing-search_button_wrapper">
<a class="btn btn-reset btn-advanced-search" href="/8_0/explore/exhibitor-gallery.cfm">{{content.advancedSearchButtonText}}</a>
<button class="btn btn-primary btn-search_landing">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="btn-search_landing_icon">
<path d="M24 20.8804L17.5997 14.5265C18.5682 13.0118 19.0807 11.2576 19.0774 9.46762C19.0783 4.24835 14.7986 0 9.54 0C4.27886 0 0 4.24836 0 9.46846C0 14.6894 4.27886 18.9369 9.53914 18.9369C11.3203 18.9369 12.9849 18.4498 14.4137 17.603L20.8577 24L24 20.8804ZM3.55457 9.46846C3.55457 6.19524 6.23914 3.52988 9.53743 3.52988C12.8374 3.52988 15.522 6.19439 15.522 9.46846C15.522 12.7434 12.8374 15.4079 9.53743 15.4079C6.23914 15.4079 3.55457 12.7434 3.55457 9.46846Z" fill="white"/>
</svg>
<span class="btn-search_landing_text">Search</span>
</button>
</section>
</div>
</div>
<div v-else-if="searchdisplaytype == '2'" class="landing-search" role="search">
<h2 class="f1">{{title}}</h2>
<section class="landing-search_types_select">
<select id="searches" class="fm-Select" @change="selectSearchDropdown($event)">
<template v-for="(item, index) in validsearchconfig">
<option v-if="item != 'locked'" :id="item.element" :value="item.element" :selected="(selectedsearchindex === index) ? true : ''">{{item.display}}</option>
</template>
</select>
</section>
<div class="landing-search_lower_half">
<section class="landing-search_input_wrapper">
<label for="search-main" class="is-visually-hidden">{{placeholdertext}}</label>
<input v-if="searchconfig[selectedsearchindex].searchfieldtype === 'search'" ref="search" autocomplete="off" type="search" id="search-main" class="landing-search_input" maxlength="1500"
v-on:input="$emit('input', $event.target.value)"
:value="searchtext"
:placeholder="placeholdertext">
<select v-else-if="searchconfig[selectedsearchindex].searchfieldtype === 'select'" id="search-main-form-select" class="fm-Select
search-main-form-select
ma0
mr2
landing-search_input" ref="select" name="input2"
v-on:change="$emit('select', $event.target.value); $emit('perform-search', $event.target.value); setBlur();"
v-model="selectsearchtext"
v-on:click.stop.prevent="toggleSearchOptions(); "
@focus="searchBoxFocus();">
<option value=""
selected="selected" v-if="'selectvalues' in searchconfig[selectedsearchindex]">
{{selectplaceholdertext}}
</option>
<option v-for="selectvalue in selectedselectoptions"
:value="selectvalue.fieldvalue">
{{selectvalue.fielddisplay}}
</option>
</select>
</section>
<section class="landing-search_button_wrapper">
<a class="btn btn-reset btn-advanced-search" href="/8_0/explore/exhibitor-gallery.cfm">{{content.advancedSearchButtonText}}</a>
<button class="btn btn-primary btn-search_landing">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="btn-search_landing_icon">
<path d="M24 20.8804L17.5997 14.5265C18.5682 13.0118 19.0807 11.2576 19.0774 9.46762C19.0783 4.24835 14.7986 0 9.54 0C4.27886 0 0 4.24836 0 9.46846C0 14.6894 4.27886 18.9369 9.53914 18.9369C11.3203 18.9369 12.9849 18.4498 14.4137 17.603L20.8577 24L24 20.8804ZM3.55457 9.46846C3.55457 6.19524 6.23914 3.52988 9.53743 3.52988C12.8374 3.52988 15.522 6.19439 15.522 9.46846C15.522 12.7434 12.8374 15.4079 9.53743 15.4079C6.23914 15.4079 3.55457 12.7434 3.55457 9.46846Z" fill="white"/>
</svg>
<span class="btn-search_landing_text">Search</span>
</button>
</section>
</div>
</div>
</form>
<form v-else :id="'landing-search_form'+(searchdisplaytype == '1' ? '_3' : searchdisplaytype == '2' ? '' : '_2')" ref="mainSearchForm" class="search-main pa1 pt6-m pr3-m pb6-m pl3-m"
v-on:submit.prevent=" $emit('perform-search', searchtext); setBlur();"
autocomplete="off"
role="search">
<div v-if="searchdisplaytype == '2'" class="landing-search search-main-wrapper br3 pa4 w-100 center" role="search" style="background-color: white;">
<section class="landing-search_types">
<fieldset class="landing-search_types_columns_wrapper">
<legend class="is-visually-hidden">Search Types</legend>
<div v-for="(item, index) in validsearchconfig">
<label v-if="item != 'locked'" :for="item.element" class="fm-Control fm-Radio">{{item.display}}
<input type="radio" :id="item.element" name="search-types" :value="item.element" v-on:click.stop=" $emit('select-search', index); selectsearchtext = ''; setFocus(); " :checked="(selectedsearchindex === index) ? true : ''">
<div class="fm-Control_Indicator"></div>
</label>
</div>
</fieldset>
</section>
<div class="landing-search_lower_half">
<section class="landing-search_input_wrapper">
<label for="search-main" class="is-visually-hidden">{{placeholdertext}}</label>
<input v-if="searchconfig[selectedsearchindex].searchfieldtype === 'search'" ref="search" autocomplete="off" type="search" id="search-main" class="landing-search_input" maxlength="1500"
v-on:input="$emit('input', $event.target.value)"
:value="searchtext"
:placeholder="placeholdertext" >
<select v-if="searchconfig[selectedsearchindex].searchfieldtype === 'select'" id="search-main-form-select" class="fm-Select
search-main-form-select
ma0
mr2" ref="select" name="input2"
v-on:change="$emit('select', $event.target.value); $emit('perform-search', $event.target.value); setBlur();"
v-model="selectsearchtext"
v-on:click.stop.prevent="toggleSearchOptions(); "
@focus="searchBoxFocus();">
<option value=""
selected="selected" v-if="'selectvalues' in searchconfig[selectedsearchindex]">
{{selectplaceholdertext}}
</option>
<option v-for="selectvalue in selectedselectoptions"
:value="selectvalue.fieldvalue">
{{selectvalue.fielddisplay}}
</option>
</select>
</section>
<section class="landing-search_button_wrapper">
<a class="btn btn-reset btn-advanced-search" href="/8_0/explore/exhibitor-gallery.cfm">{{content.advancedSearchButtonText}}</a>
<button class="btn btn-primary btn-search_landing">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="btn-search_landing_icon">
<path d="M24 20.8804L17.5997 14.5265C18.5682 13.0118 19.0807 11.2576 19.0774 9.46762C19.0783 4.24835 14.7986 0 9.54 0C4.27886 0 0 4.24836 0 9.46846C0 14.6894 4.27886 18.9369 9.53914 18.9369C11.3203 18.9369 12.9849 18.4498 14.4137 17.603L20.8577 24L24 20.8804ZM3.55457 9.46846C3.55457 6.19524 6.23914 3.52988 9.53743 3.52988C12.8374 3.52988 15.522 6.19439 15.522 9.46846C15.522 12.7434 12.8374 15.4079 9.53743 15.4079C6.23914 15.4079 3.55457 12.7434 3.55457 9.46846Z" fill="white"></path>
</svg>
<span class="btn-search_landing_text">Search</span>
</button>
</section>
</div>
</div>
<div v-else-if="searchdisplaytype == '3'" class="landing-search search-main-wrapper w-100 center" role="search" style="background-color: white;">
<section class="landing-search_types_select">
<select id="searches" class="fm-Select" @change="selectSearchDropdown($event)">
<template v-for="(item, index) in validsearchconfig">
<option v-if="item != 'locked'" :id="item.element" :value="item.element" :selected="(selectedsearchindex === index) ? true : ''">{{item.display}}</option>
</template>
</select>
</section>
<div class="landing-search_lower_half">
<section class="landing-search_input_wrapper">
<label for="search-main" class="is-visually-hidden">{{placeholdertext}}</label>
<input v-if="searchconfig[selectedsearchindex].searchfieldtype === 'search'" ref="search" autocomplete="off" type="search" id="search-main" class="landing-search_input" maxlength="1500"
v-on:input="$emit('input', $event.target.value)"
:value="searchtext"
:placeholder="placeholdertext" >
<select v-else-if="searchconfig[selectedsearchindex].searchfieldtype === 'select'" id="search-main-form-select" class="fm-Select
search-main-form-select
ma0
mr2
landing-search_input" ref="select" name="input2"
v-on:change="$emit('select', $event.target.value); $emit('perform-search', $event.target.value); setBlur();"
v-model="selectsearchtext"
v-on:click.stop.prevent="toggleSearchOptions(); "
@focus="searchBoxFocus();">
<option value=""
selected="selected" v-if="'selectvalues' in searchconfig[selectedsearchindex]">
{{selectplaceholdertext}}
</option>
<option v-for="selectvalue in selectedselectoptions"
:value="selectvalue.fieldvalue">
{{selectvalue.fielddisplay}}
</option>
</select>
</section>
<section class="landing-search_button_wrapper">
<a class="btn btn-reset btn-advanced-search" href="/8_0/explore/exhibitor-gallery.cfm">{{content.advancedSearchButtonText}}</a>
<button class="btn btn-primary btn-search_landing">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="btn-search_landing_icon">
<path d="M24 20.8804L17.5997 14.5265C18.5682 13.0118 19.0807 11.2576 19.0774 9.46762C19.0783 4.24835 14.7986 0 9.54 0C4.27886 0 0 4.24836 0 9.46846C0 14.6894 4.27886 18.9369 9.53914 18.9369C11.3203 18.9369 12.9849 18.4498 14.4137 17.603L20.8577 24L24 20.8804ZM3.55457 9.46846C3.55457 6.19524 6.23914 3.52988 9.53743 3.52988C12.8374 3.52988 15.522 6.19439 15.522 9.46846C15.522 12.7434 12.8374 15.4079 9.53743 15.4079C6.23914 15.4079 3.55457 12.7434 3.55457 9.46846Z" fill="white"/>
</svg>
<span class="btn-search_landing_text">Search</span>
</button>
</section>
</div>
</div>
<div v-else-if="searchdisplaytype == '1'" class="landing-search search-main-wrapper br3 pa4 w-100 center" role="search" style="background-color: white;">
<section class="landing-search_types">
<button type="button" v-for="(item, index) in validsearchconfig" :value="item.element" class="btn btn-reset" v-on:click.stop.prevent="$emit('select-search', index); selectsearchtext = ''; setFocus();">{{item.display}}</button>
</section>
<div class="landing-search_lower_half">
<section class="landing-search_input_wrapper">
<label for="search-main" class="is-visually-hidden">{{placeholdertext}}</label>
<input v-if="searchconfig[selectedsearchindex].searchfieldtype === 'search'" ref="search" autocomplete="off" type="search" id="search-main" class="landing-search_input" maxlength="1500"
v-on:input="$emit('input', $event.target.value)"
:value="searchtext"
:placeholder="placeholdertext" >
<select v-if="searchconfig[selectedsearchindex].searchfieldtype === 'select'" id="search-main-form-select" class="fm-Select
search-main-form-select
ma0
mr2" ref="select" name="input2"
v-on:change="$emit('select', $event.target.value); $emit('perform-search', $event.target.value); setBlur();"
v-model="selectsearchtext"
v-on:click.stop.prevent="toggleSearchOptions(); "
@focus="searchBoxFocus();">
<option value=""
selected="selected" v-if="'selectvalues' in searchconfig[selectedsearchindex]">
{{selectplaceholdertext}}
</option>
<option v-for="selectvalue in selectedselectoptions"
:value="selectvalue.fieldvalue">
{{selectvalue.fielddisplay}}
</option>
</select>
</section>
<section class="landing-search_button_wrapper">
<a class="btn btn-reset btn-advanced-search" href="/8_0/explore/exhibitor-gallery.cfm">{{content.advancedSearchButtonText}}</a>
<button class="btn btn-primary btn-search_landing">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="btn-search_landing_icon">
<path d="M24 20.8804L17.5997 14.5265C18.5682 13.0118 19.0807 11.2576 19.0774 9.46762C19.0783 4.24835 14.7986 0 9.54 0C4.27886 0 0 4.24836 0 9.46846C0 14.6894 4.27886 18.9369 9.53914 18.9369C11.3203 18.9369 12.9849 18.4498 14.4137 17.603L20.8577 24L24 20.8804ZM3.55457 9.46846C3.55457 6.19524 6.23914 3.52988 9.53743 3.52988C12.8374 3.52988 15.522 6.19439 15.522 9.46846C15.522 12.7434 12.8374 15.4079 9.53743 15.4079C6.23914 15.4079 3.55457 12.7434 3.55457 9.46846Z" fill="white"/>
</svg>
<span class="btn-search_landing_text">Search</span>
</button>
</section>
</div>
</div>
<div v-else class="search-main-wrapper
br3
pa4
w-100
w-two-thirds-l
"
v-bind:class="[showSearchOptions ? 'has-focus' : '']"
v-click-outside="clickOutside">
<div class="search-main-form
flex
flex-wrap
relative" role="search">
<label class="is-visually-hidden" for="search-main-form-input">{{placeholdertext}}</label>
<input id="search-main-form-input" class="search-main-form-input
ma0" type="search" name="input2" ref="search" autocomplete="off"
v-bind:value="searchtext"
v-on:input="$emit('input', $event.target.value)"
v-bind:placeholder="placeholdertext"
v-if="searchconfig[selectedsearchindex].searchfieldtype === 'search'"
@focus="searchBoxFocus();"
@blur="searchBoxBlur();"
maxlength="1500" />
<label class="is-visually-hidden" for="search-main-form-select">{{placeholdertext}}</label>
<select id="search-main-form-select" class="fm-Select
search-main-form-select
ma0
mr2" ref="select" name="input2"
v-if="searchconfig[selectedsearchindex].searchfieldtype === 'select'"
v-on:change="$emit('select', $event.target.value); $emit('perform-search', $event.target.value); setBlur();"
v-model="selectsearchtext"
v-on:click.stop.prevent="toggleSearchOptions(); "
@focus="searchBoxFocus();">
<option value=""
selected="selected" v-if="'selectvalues' in searchconfig[selectedsearchindex]">
{{selectplaceholdertext}}
</option>
<option v-for="selectvalue in selectedselectoptions"
:value="selectvalue.fieldvalue">
{{selectvalue.fielddisplay}}
</option>
</select>
<input class="search-main-btn
ma0
pointer
w3
w4-m" type="submit" value="Submit" />
<div class="db
ma0
mt3
ma0-l
ml3-l
flex-l
items-center
w-100
w-auto-l">
<a class="link
pointer" v-on:click.stop.prevent="$emit('show-advanced-search');" v-if="searchBoxSelected">{{content.advancedSearchButtonText}}</a>
</div>
</div>
<div class="search-main-advanced
pa3" v-if="showSearchOptions">
<div class="mb0-last">
<h3 class="f5
mb0
mt2
pb2
normal
ttu
tracked">{{content.searchOptionsHeader}}</h3>
<span v-for="(item, index) in validsearchconfig">
<a v-if="item != 'locked'" class="btn-tertiary
btn-tertiary_small
mb2
pointer"
href=""
v-on:click.stop.prevent=" $emit('select-search', index); selectsearchtext = ''; setFocus(); "
v-bind:class="[(selectedsearchindex === index) ? 'is-selected' : '']">
{{ item.display }}
</a>
</span>
</div>
<div class="mb0
mb0-last" v-if="hasRecentSearches">
<h3 class="f5
mb0
mt4
pb2
normal
ttu
tracked">{{content.recentSearchesHeader}}</h3>
<a v-for="(item,index) in recentsearches"
v-on:click.stop.prevent="$emit('recent-search', item.search, item.searchtype); "
v-html="item.searchdisplay"
class="btn-tertiary
btn-tertiary_small
mb2
pointer">
{{item.searchdisplay}}
</a>
</div>
</div>
</div>
</form>
</div></script>
<script>
var keywordSearchFormV2 = Vue.component('keyword-search-form_v2', {
data: function(){
return {
compincludepath: "includes/vue/search/keyword-search-form_v2.cfm",
searchBoxSelected: false,
timeoutid: null,
selectsearchtext: "", // since we cant use v-model on a prop, we dont care that selectsearchtext is so we'll use v-model on that
mousedoversearchoptions:false
}
},
mixins: [searchDisplayMixin],
props: ["searchconfig", "selectedsearchindex", "searchtext", "recentsearches", "recommendedsearches", "searchperformed", "show", "searchgroup", "selectedselectoptions", "showadvancedsearch", "searchdisplaytype", "istile", "title"],
template:"#keyword-search-form_v2-template",
watch: {
selectsearchtext: function(val){
this.$refs.select.blur();
this.$refs.select.focus();
},
selectedsearchindex: function(val){
if (this.searchconfig[this.selectedsearchindex].searchfieldtype === 'select'){
this.setFocus();
}
},
selectedselectoptions: function(val){
// this.setBlur();
}
},
mounted: function(){
var vObj = this;
setTimeout(function(){
if (vObj.$refs.search){
vObj.$refs.search.value = vObj.searchtext;
}
else if (vObj.$refs.select){
// this is kind of a hack... doing this to select the appropiate select box after select options have loaded
vObj.selectsearchtext = vObj.searchtext;
}
}, 500);
},
methods: {
clickOutside: function(){
this.searchBoxBlur();
this.mousedoversearchoptions = false;
},
validRecommendation: function(index){
return ((this.recommendedsearches.results.length > 0) && (this.recommendedsearches.results[index]) && ('MYS' in this.recommendedsearches.results[index]));
},
setFocus: function(){
var obj = this;
setTimeout(function(){
if (obj.selectedSearchType == "search"){ // if its a search field focus and make sure we clear out the id of the timeout
obj.$refs.search.focus();
obj.clearTimeout();
} else if (obj.selectedSearchType == "select"){
obj.$refs.select.focus();
obj.clearTimeout();
}
obj.searchBoxSelected = true;
}, 50);
},
toggleSearchOptions: function(){
if (this.mousedoversearchoptions){
} else if (!this.mousedoversearchoptions && (window.innerWidth < 480)){
this.$refs.select.blur();
this.mousedoversearchoptions = true;
}
},
setBlur: function(){
if (this.$refs.search){
this.$refs.search.blur();
}
else if (this.$refs.select){
this.$refs.select.blur();
}
this.clearTimeout();
this.searchBoxSelected = false;
},
searchBoxFocus: function(){
this.clearTimeout();
this.searchBoxSelected = true;
},
searchBoxBlur: function(){
var self = this;
this.clearTimeout();
self.timeoutid = setTimeout(function(){
self.searchBoxSelected = false;
}, 200); // was 500
},
shouldDisplaySearchType: function(index){
var showsearchtype = false;
for (var i = 0; i < this.recentsearches.length; i++){
if ((i != index) && (this.recentsearches[i].search == this.recentsearches[index].search) && (this.recentsearches[i].searchtype != this.recentsearches[index].searchtype)) {
showsearchtype = true;
break;
}
}
return showsearchtype;
},
getSearchTypeDisplay: function(searchtype){
var returntypedisplay = searchtype;
for (var i = 0; i < this.searchconfig.length; i++){
if (this.searchconfig[i].element === searchtype){
returntypedisplay = this.searchconfig[i].display;
break;
}
}
return returntypedisplay;
},
recentSearchDisplay: function(index){
var returntext = "";
returntext = this.recentsearches[index].searchdisplay;
for (var i = 0; i < this.recentsearches.length; i++){
if ((i != index) && (this.recentsearches[i].search == this.recentsearches[index].search) && (this.recentsearches[i].searchtype != this.recentsearches[index].searchtype)) {
returntext += "<div style='font-size:0.65em;'>" + this.recentsearches[i].searchtype + "</div>";
break;
}
}
return returntext;
},
clearTimeout: function(){
if (this.timeoutid){ clearTimeout(this.timeoutid); }
},
selectSearchDropdown: function(event) {
console.log(event);
this.$emit('select-search', event.target.selectedIndex); this.selectsearchtext = ''; this.setFocus();
}
},
computed: {
validsearchconfig: function(){
var returnArray = [];
for (var i = 0; i < this.searchconfig.length; i++){
if (this.searchconfig[i].element != "advanced") {
if (this.searchconfig[i].requireplanner == 0 || (this.searchconfig[i].requireplanner == 1 && this.hasmyshow && this.regemail.length > 0)) {
returnArray.push(this.searchconfig[i]);
} else {
returnArray.push('locked');
}
}
}
return returnArray;
},
content: function(){
return {
loadingoptionstext: this.displaycontent(this.compincludepath, 'loadingOptionsText'),
searchOptionsHeader: this.displaycontent(this.compincludepath, 'searchOptionsHeader'),
recentSearchesHeader: this.displaycontent(this.compincludepath, 'recentSearchesHeader'),
advancedSearchButtonText: this.displaycontent(this.compincludepath, 'advancedSearchButtonText')
};
},
showSearchOptions: function(){
return (this.searchBoxSelected || this.mousedoversearchoptions);
},
selectedSearchType: function(){
return this.searchconfig[this.selectedsearchindex].searchfieldtype;
},
hasRecentSearches: function(){
return (this.recentsearches && this.recentsearches.length > 0);
},
placeholdertext: function(){
return this.searchconfig[this.selectedsearchindex].placeholdertext;
},
selectplaceholdertext: function(){
if ("selectvalues" in this.searchconfig[this.selectedsearchindex]){
return this.placeholdertext;
} else {
return this.content["loadingoptionstext"];
}
}
}
});
</script>
<script type="text/x-template" id="landing-tile-template"> <component :is="(showLink ? 'a' : 'span')" :href="(showLink ? href : false)" :target="(showLink ? tile.vtsurl_target : false)" :title="(ispreview ? '' : title)" v-on:click="(!ispreview ? logStats(logvalue, '', tile.displaytitle, tile.vtsurl) : null)">
<template v-if="tiletype == 6">
<div v-if="icon.length > 0 && icon.indexOf('cloudfront') == -1" class="tile-icon_container" v-html="icon"></div>
<div v-else-if="icon.length > 0 && icon.indexOf('cloudfront') > -1" class="tile-icon_container custom-icon" :style="{ 'background-image': 'url('+icon+')', 'background-size': 'cover', width: '4em', height: '4em'}"></div>
</template>
<p class="ma0 title">{{(tiletype == 6 && ('hidelabel' in tile) && tile.hidelabel == true ? '' : (ispreview ? tile[previewlanguagevariable] : tile.displaytitle))}}</p>
<img v-if="'imageurl' in tile && tile.imageurl.length > 0" :src="tile.imageurl" loading="lazy" aria-hidden="true" alt="" />
</component></script>
<script>
var landingTileDisplay = Vue.component('landing-tile', {
template:"#landing-tile-template",
props: ["tile", "href", "title", "tiletype", "icon", "ispreview", "previewlanguagevariable", "logvalue"],
data: function(){
return {
compincludepath: "includes/vue/landing/landing-tile.cfm"
}
},
computed: {
showLink: function() {
if (this.ispreview || this.href.length == 0) {
return false;
}
return true;
}
}
});
</script>
<script type="text/x-template" id="landing-tile-extra-template"> <article
class="landing-shortcut"
:style="[backgroundcolor.length > 0 && imageurl.length > 0 ? {'background': 'linear-gradient(to top, '+texturecolor+','+texturecolor+'), url('+imageurl+') repeat', height: '100%', width: '100%'} : {'background-color': (backgroundcolor.length > 0 ? backgroundcolor : 'white'), height: '100%', width: '100%'}]">
<h3 class="landing-shortcut-heading">{{displaytitle}}</h3>
<ul class="landing-shortcut-list">
<li v-for="(link, i) in shortcuts" class="landing-shortcut-item">
<template v-if="ispreview">
{{link[previewlanguagevariable]}}
</template>
<a v-else :href="link.vtsurl" :target="link.vtsurl_target" v-on:click="logStats(logvalue, '', link.displaytitle, link.vtsurl)">{{link.displaytitle}}</a>
</li>
</ul>
</article></script>
<script>
var landingTileExtraDisplay = Vue.component('landing-tile-extra', {
props: ["imageurl", "backgroundcolor", "previewlanguagevariable", "ispreview", "texturecolor", "shortcuts", "displaytitle", "logvalue"],
data: function(){
return {
compincludepath: "includes/vue/landing/landing-tile-extra.cfm"
}
},
template:"#landing-tile-extra-template"
});
</script>
<script type="text/x-template" id="landing-extra-template"> <article
class="landing-shortcut is-inline"
:style="[backgroundcolor.length > 0 && imageurl.length > 0 ? {'background': 'linear-gradient(to top, '+texturecolor+','+texturecolor+'), url('+imageurl+') repeat'} : {'background-color': (backgroundcolor.length > 0 ? backgroundcolor : 'white')}]">
<h3 class="landing-shortcut-heading">{{title}}</h3>
<ul class="landing-shortcut-list">
<li v-for="(link, n) in shortcuts" class="landing-shortcut-item">
<a v-if="!ispreview" :href="link.vtsurl" :target="link.vtsurl_target" v-on:click="logStats(logvalue, '', link.displaytitle, link.vtsurl)">{{link.displaytitle}}</a>
<template v-else>
{{link[previewlanguagevariable]}}
</template>
</li>
</ul>
</article></script>
<script>
var landingExtraDisplay = Vue.component('landing-extra', {
props: ["imageurl", "backgroundcolor", "texturecolor", "title", "shortcuts", "ispreview", "previewlanguagevariable", "logvalue"],
data: function(){
return {
compincludepath: "includes/vue/landing/landing-extra.cfm"
}
},
template:"#landing-extra-template"
});
</script>
<div id="js-Vue-GlobalMessageDisiplay"><!----></div>
<script>
var v8messageapp = new Vue({
el: '#js-Vue-GlobalMessageDisiplay',
name: 'MessageDisplay',
data: {
mymessages: [],
myshowmessage: false,
mymessagetype: "hidden"
},
mixins: [messagedisplayMixin], // messagedisplayMixin is declared in \includes\vue\generic\message-display.cfm
mounted: function(){
if (this.myshowmessage){
this.showMessage(this.mymessagetype, this.mymessages);
}
}
});
</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">
CES 2025<span class="ml1 mr1">•</span>©2024 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.ces.tech/privacy" 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>
<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: 'desktop',
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: 1,
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>
<script>
// https://stackoverflow.com/questions/47678395/is-it-possible-to-use-vue-router-without-a-component-in-vue-2?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
var router = new VueRouter({
routes: [
{ path: '/searchtype/:searchtype/search/:search/show/:show' },
{ path: '/searchtype/:searchtype/search/:search/' }
]
});
var app = new Vue({
el: '#search',
name: 'SearchLanding',
router: router,
mixins: [searchMixin, messagedisplayMixin], // see /includes/vue/generic/_global-mixin.cfm for definition
data: {
resultsheadercontent: "Results for “ {{SEARCHTEXT}} ”",
breadcrumbtitle: "Search Results",
fadeOutRecommendation: false,
toggleProductPreview: false,
searchsearchtype: "",
globalsearchtype: "exhibitor",
showhighlightscontent: {"showlessbutton":"Show Less","showallbutton":"Show All","header":"Product Spotlight","visitUsAtBooth":"Visit us at Booth"},
showhighlightsfeatured: [],
searchresultheader: "",
showadvancedsearch:false,
advancedsearchcollapsed:false,
advancedsearchtextholder: "",
startingimage: 0,
activeimage: 0,
rotationtime: 0,
numberimages: 0,
rotationtype: 'inorder',
bannerdata: [],
imagesused: [],
hasSearchBar: false,
previewLanguageVariable: '',
quicklistData: [
{
backgroundcolor: 'hsl(0, 100%, 100%)',
imageurl: '',
type: 'search',
displaytitle: 'Search the Show',
requireplanner: 0,
vtsurl: '',
vtsurl_target: '',
icon: '',
hidelabel: ''
}
,
{
backgroundcolor: '',
imageurl: 'https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9jZXMyNS9sYW5kaW5nL2ltYWdlcy9EN0ZGMzExRi05RDUxLTcwQjktMDYzQTQ2M0QzNkVFM0RDRC5qcGciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjgwMCwiaGVpZ2h0Ijo2NTAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==',
type: 'core',
displaytitle: 'Exhibitor Directory',
requireplanner: 0,
vtsurl: '/8_0/explore/exhibitor-gallery.cfm',
vtsurl_target: '',
icon: '',
hidelabel: '0'
}
,
{
backgroundcolor: '',
imageurl: 'https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtc2hvd2ZpbGVzIiwia2V5Ijoic3RhZ2luZy9jZXMyNS9sYW5kaW5nL2ltYWdlcy9EODA0QjJGMi1EOEI1LTJDODEtRTVCMDk4MDk4QTY2NjhFRC5qcGciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjgwMCwiaGVpZ2h0Ijo2NTAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==',
type: 'link',
displaytitle: 'About CES',
requireplanner: 0,
vtsurl: 'https://www.ces.tech/brand',
vtsurl_target: '_blank',
icon: '',
hidelabel: '0'
}
],
shortcutData: {
backgroundcolor: 'hsla(196, 75%, 97%, 0.5)',
imageurl: 'https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtYXNzZXRzIiwia2V5IjoidnRzL2ltZy90aWxlLXRleHR1cmVzL3RleHR1cmUtNS5wbmciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjYwMCwiaGVpZ2h0Ijo2MDAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==',
displaytitle: 'An Announcement from CTA',
type: 'extra',
links: [
{
type: 'link',
displaytitle: 'We have updated the Consumer Technology Association (CTA)® and CES logos, marking a significant milestone for our association and the world’s most powerful tech event. Learn more about our new brand.',
vtsurl: 'https://www.ces.tech/brand',
requireplanner: 0,
vtsurl_target: '_blank'
}
]
},
searchDisplayType: '1',
searchBarDisplayType: '2',
checkRequirePlanner: 'YES',
extraQuicklinksImage: 'https://d3fv3oe83qat1b.cloudfront.net/eyJidWNrZXQiOiJteXMtYXNzZXRzIiwia2V5IjoidnRzL2ltZy90aWxlLXRleHR1cmVzL3RleHR1cmUtNS5wbmciLCJlZGl0cyI6eyJyZXNpemUiOnsid2lkdGgiOjYwMCwiaGVpZ2h0Ijo2MDAsImZpdCI6ImNvdmVyIiwicXVhbGl0eSI6IjcwIn19fQ==',
extraQuicklinksColor: 'hsla(196, 75%, 97%, 0.5)',
tileType: 1,
isPreview: false,
useV2KeywordSearch: true
},
watch: { // our event handler when URL changes
'$route': function(to, from) {
this.updateURLStringAlt();
if (typeof to.params.search != 'undefined'){
this.searchtext = to.params.search+"";
} else {
this.searchtext = "";
}
if (typeof to.params.searchtype != 'undefined' && to.params.searchtype !== "advanced"){
this.setSelectedIndexByType(to.params.searchtype);
} else if (typeof to.params.searchtype != 'undefined' && to.params.searchtype == "advanced"){
this.setSelectedIndexByType("advanced");
this.showadvancedsearch = true;
} else {
this.selectedsearchindex = 0;
}
if ("show" in to.params){
this.show = to.params.show;
}
if ((this.isSearchValid()) && (this.searchtext)) {
this.onSelectSearch(this.selectedsearchindex, false);
this.performSearch(); // call search
}
else if (this.searchtext && !this.isSearchValid()){
this.showSearchTextError();
}
else {
this.resetAll();
}
}
},
mounted: function()
{
// lets remove index.cfm from url bar if there
var path = window.location.pathname;
var vObj = this;
var currentRoute = vObj.$router.currentRoute; // the current route we are on
var hash = window.location.hash;
// 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);
}
if (this.path2approot + '/index.cfm' === path){
var newpath = path.replace("/index.cfm", "/" + hash);
window.history.replaceState( null, null, newpath );
} else if (this.path2approot + '/index.cfm/' === path){
var newpath = path.replace("/index.cfm/", "/" + hash);
window.history.replaceState( null, null, newpath );
}
// vObj.updateURLStringAlt();
if (currentRoute.params.search) { this.searchtext = currentRoute.params.search+""; }
if ((currentRoute.params.searchtype) && (currentRoute.params.searchtype !== "advanced")) {
this.setSelectedIndexByType(currentRoute.params.searchtype);
} else if ((currentRoute.params.searchtype) && (currentRoute.params.searchtype == "advanced")) {
this.setSelectedIndexByType("advanced");
this.showadvancedsearch = true;
}
if (currentRoute.params.show){ this.show = currentRoute.params.show; }
// if we have search text, set the search type and do a search
if (this.isSearchValid() && this.searchtext && this.show == "all") {
this.onSelectSearch(this.selectedsearchindex, false);
this.advancedsearchcollapsed = true;
this.performSearch();
}
else if (this.searchtext && !this.isSearchValid()){
this.showSearchTextError();
}
else if (this.show != "all"){
this.onSelectSearch(this.selectedsearchindex, false);
this.advancedsearchcollapsed = true;
this.performSearch();
} else {
this.onSelectSearch(this.selectedsearchindex, false);
}
// recent searches
this.getRecentSearches();
this.getFeaturedExhibitorsForRibbon();
},
computed: {
resultsheader: function(){
var tempDisplay = "";
for (var i = 0; i < this.searchconfig.length; i++){
if (this.searchconfig[i].element == this.show){
tempDisplay = this.searchconfig[i].display + " ";
}
}
return tempDisplay + this.resultsheadercontent.replace("{{SEARCHTEXT}}", this.searchresults.searchtext);
}, searching2: function(){
return (this.searchajaxcount > 0);
}
},
methods: {
cycleImages: function(iteration)
{
if(iteration >= this.numberimages)
{
this.activeimage = this.imagesused[iteration % this.numberimages];
}
else if(this.rotationtype == 'inorder')
{
if(this.activeimage + 1 == this.numberimages)
{
this.activeimage = 0;
}
else
{
this.activeimage++;
}
this.imagesused.push(this.activeimage);
}
else if(this.rotationtype == 'random')
{
// need to randomize the active image if it hasn't already been used
while(this.imagesused.indexOf(this.activeimage) > -1)
{
this.activeimage = Math.floor(Math.random() * this.numberimages);
}
this.imagesused.push(this.activeimage);
}
// If the current iteration of calling this function is less than the number of images loaded up, keep logging
if(iteration < this.numberimages)
{
this.logStats('Banner View', '', 'IDSSearch', this.bannerdata[this.activeimage].bannerid);
}
setTimeout(this.cycleImages, this.rotationtime * 1000, iteration + 1);
},
isSearchValid: function(){
var isvalid = true;
if (this.searchtext.trim() == ""){
isvalid = false;
}
else if (this.searchconfig[this.selectedsearchindex].searchfieldtype == "search" && this.searchtext.trim().length < 2){
isvalid = false;
}
return isvalid;
},
showSearchTextError: function(){
this.showMessage("error", "Search requires 2 characters minimum.");
},
// Allows product previews to be toggled to show all instead of the max of 3 by default
toggleProductPreviews: function() {
this.toggleProductPreview = !this.toggleProductPreview;
},
onSelectSearch: function (index, clearSearchValues) {
var datafunction
, vObj = this;
clearSearchValues = (clearSearchValues !== undefined) ? clearSearchValues : true;
if (clearSearchValues) {
vObj.searchtext = "";
// check if index is integer otherwise try and set by name
if (index === parseInt(index, 10)){
vObj.selectedsearchindex = index;
} else {
vObj.setSelectedIndexByType(index);
}
vObj.show = "all";
}
for (var i = 0; i < vObj.searchconfig.length; i++) {
// if the selected search type is select, lets get the values and populate the select box
if ((vObj.searchconfig[i].element === vObj.searchconfig[vObj.selectedsearchindex].element) && (vObj.searchconfig[i].searchfieldtype == 'select')){
var datafunction = vObj.searchconfig[i].datafunction;
var hasSearchValues = ((vObj.searchconfig[vObj.selectedsearchindex].selectvalues) && (vObj.searchconfig[vObj.selectedsearchindex].selectvalues.length > 0)) ? true : false;
if (!hasSearchValues && datafunction){
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=getsearchoptions&function=' + datafunction, // ajaxGet() defined in _global-mixin
function(response){ // success
vObj.searchconfig[vObj.selectedsearchindex]["selectvalues"] = response["DATA"];
vObj.selectedselectoptions = response["DATA"];
},
function(response){ // error
vObj.error = true;
vObj.searchconfig[vObj.selectedsearchindex]["selectvalues"] = ["Error loading values"];
vObj.showMessage("error", "Error loading values");
}); // end ajaxGet
} else if (hasSearchValues){
vObj.selectedselectoptions = vObj.searchconfig[vObj.selectedsearchindex].selectvalues;
}
break;
} else {
vObj.selectedselectoptions = [];
}
}
},
onSearch: function(searchText) {
var action = "search"
, search = this.searchtext = searchText+""
, searchtype = this.searchconfig[this.selectedsearchindex].element
, show = this.show = "all";
search = this.customURIEncode(search);
searchtype = this.customURIEncode(searchtype);
// update URL
if (!this.isSearchValid()) {
this.showSearchTextError();
}
else if (search && searchtype){
router.push({ path: '/searchtype/' + searchtype + '/search/' + search + '/show/' + show});
}
// this.performSearch();
}, // end onSearch
performSearch: function(callback){
var action = "search"
, search = this.customURIEncode(this.searchtext+"".trim())
, searchtype = this.customURIEncode(this.searchconfig[this.selectedsearchindex].element)
, searchsize = this.searchsize
, show = this.customURIEncode(this.show+"".trim())
, vObj = this;
if (search && searchtype){
vObj.clearLazyLoadSearchCounts();
vObj.searchperformed = true;
vObj.clearSearchResults();
vObj.resetErrors();
vObj.searching = true;
vObj.searchajaxcount++;
// save search to recent
// function(globalsearchtype, searchtype, search, searchdisplay)
// 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
var selectedSearchConfigDisplay = vObj.searchconfig[vObj.selectedsearchindex].display;
if (vObj.showadvancedsearch){
selectedSearchConfigDisplay = "Advanced Search";
}
vObj.searchajaxcount--;
vObj.searching = false;
vObj.searchsearchtype = vObj.searchtype;
vObj.searchresults["searchtext"] = response["DATA"].searchtext+""; // set results
vObj.searchresults["totalhits"] = response["DATA"].totalhits;
vObj.searchresults["results"] = response["DATA"].results;
vObj.searchresultheader = selectedSearchConfigDisplay;
// update the search header
if (vObj.searchconfig[vObj.selectedsearchindex].searchfieldtype == "select"){
vObj.searchresultheader = "";
} else {
vObj.searchresultheader = selectedSearchConfigDisplay;
}
// recent search text
var recentsearchtext = selectedSearchConfigDisplay + ": " + vObj.searchresults["searchtext"];
vObj.saveRecentSearch("exhibitor", searchtype, search, recentsearchtext);
vObj.getRecentSearches();
if (("ismain" in vObj.relatedsearchesconfig) && (vObj.relatedsearchesconfig.ismain == 1)) {
vObj.recommededSearches();
}
// update breadcrumb
var breadcrumbRequest = [];
if (show.lastIndexOf("cat-", 0) === 0){ // https://stackoverflow.com/questions/646628/how-to-check-if-a-string-startswith-another-string
breadcrumbRequest = [{
title: vObj.breadcrumbtitle,
titlepage: 'index.cfm',
titlesection: 'breadcrumbTitle',
scriptname: vObj.path2approot + "/#/searchtype/" + searchtype + "/search/" + search + "/show/all",
querystring: "",
resetto: "resetforvue"
},/*{
title: vObj.breadcrumbtitle,
scriptname: vObj.path2approot + "/#/searchtype/" + searchtype + "/search/" + search + "/show/" + show.replace("cat-", "").replace(/\|[A-z0-9]+/g, ""),
querystring: "",
resetto: ""
},*/{
title: vObj.searchresults["searchtext"] + " Results",
scriptname: vObj.path2approot + "/#/searchtype/" + searchtype + "/search/" + search + "/show/" + show,
querystring: "",
resetto: ""
}];
}
else if (show != "all"){
breadcrumbRequest = [{
title: vObj.breadcrumbtitle,
titlepage: 'index.cfm',
titlesection: 'breadcrumbTitle',
scriptname: vObj.path2approot + "/#/searchtype/" + searchtype + "/search/" + search + "/show/all",
querystring: "",
resetto: "resetforvue"
},{
title: vObj.searchresults["searchtext"] + " Results",
scriptname: vObj.path2approot + "/#/searchtype/" + searchtype + "/search/" + search + "/show/" + show,
querystring: "",
resetto: ""
}];
}
else {
breadcrumbRequest = [{
title: vObj.breadcrumbtitle,
titlepage: 'index.cfm',
titlesection: 'breadcrumbTitle',
scriptname: vObj.path2approot + "/#/searchtype/" + searchtype + "/search/" + search + "/show/all",
querystring: "",
resetto: "resetforvue"
}];
}
var response = vObj.updateBreadcrumb(breadcrumbRequest);
if (callback !== undefined){
callback();
}
},
function(response){ // error
vObj.showMessage("error", "Error performing search");
vObj.searchajaxcount--;
vObj.searching = false;
vObj.error = true;
}); // end ajaxGet
} else {
this.searchresults["results"] = {};
}
},
recommededSearches: function(){
var action = "recommended"
, search = this.customURIEncode(this.searchtext+"")
, searchtype = this.customURIEncode(this.searchconfig[this.selectedsearchindex].element)
, vObj = this
, returntype = "searches";
vObj.searchajaxcount++;
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=' + action + "&search=" + search + "&searchtype=" + searchtype +"&searchsize="
+ vObj.relatedsearchesconfig.searchsize + '&returntype=' + returntype, // ajaxGet() defined in _global-mixin
function(response){ // success
vObj.searchajaxcount--;
vObj.searching = false;
vObj.recommendedsearches["results"] = response["DATA"].results.searches.buckets;
},
function(response){ // error
vObj.showMessage("error", "Error getting related searches");
vObj.searchajaxcount--;
vObj.searching = false;
vObj.error = true;
}); // end ajaxGet
},
recentSearch: function(searchtext, searchtype){
this.setSelectedIndexByType(searchtype);
if (searchtype == "advanced"){
this.advancedsearchcollapsed = false;
this.showAdvancedSearch();
}
this.onSearch(decodeURIComponent(searchtext));
},
viewAllResults: function(searchsection){
var search = this.customURIEncode(this.searchtext+"")
, searchtype = this.customURIEncode(this.searchconfig[this.selectedsearchindex].element)
, show = this.show = searchsection;
router.push({ path: '/searchtype/' + searchtype + '/search/' + search + '/show/' + searchsection });
},
getSearchURL: function(){
return this.path2approot + "/#/searchtype/" + this.searchtype + "/search/" + this.searchtext;
},
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;
},
loadMoreResults: function(searchsection){
var start = -1;
var vObj = this;
var search = vObj.searchtext+"";
var searchtype = this.customURIEncode(vObj.searchconfig[this.selectedsearchindex].element)
var show = vObj.show;
start = vObj.searchresults["results"][searchsection]["start"];
start += vObj.searchresults["results"][searchsection]["hit"].length;
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=search' + "&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 getting more results");
vObj.searchajaxcount--;
vObj.searching = false;
vObj.error = true;
}); // end ajaxGet
},
getFeaturedExhibitorsForRibbon: function(){
var vObj = this;
// in order to "cache" the featuredexhibitors for ribbon we store in session if necessary. If they went to the exhibitor page and came back let's pull the cached results
if (vObj.hasSessionStorage() && sessionStorage.getItem("accessedexhibitorpage") && sessionStorage.getItem("featuredexhibitorsforribbon")){
vObj.showhighlightsfeatured = JSON.parse(sessionStorage.getItem("featuredexhibitorsforribbon"));
sessionStorage.removeItem("accessedexhibitorpage");
} else {
vObj.ajaxGet(vObj.path2approot + '/ajax/remote-proxy.cfm?action=misc&function=featuredexhibitorsforribbon', // ajaxGet() defined in _global-mixin
function(response){ // success
vObj.showhighlightsfeatured = response["DATA"];
if (vObj.hasSessionStorage()){
sessionStorage.setItem("featuredexhibitorsforribbon", JSON.stringify(response["DATA"]));
}
},
function(response){ // error
vObj.showMessage("error", "Error getting featured exhibitors");
vObj.error = true;
}); // end ajaxGet
}
},
showAdvancedSearch: function(){
var vObj = this;
if (vObj.advancedsearchtextholder){
vObj.searchtext = vObj.advancedsearchtextholder;
vObj.advancedsearchtextholder = "";
}
vObj.showadvancedsearch = true;
vObj.setSelectedIndexByType("advanced");
},
hideAdvancedSearch: function(){
var vObj = this;
vObj.showadvancedsearch = false;
if (vObj.searchtext){
vObj.advancedsearchtextholder = vObj.searchtext;
vObj.searchtext = "";
}
vObj.selectedsearchindex = 0;
setTimeout(function(){
vObj.$refs.keywordSearchForm.setFocus();
}, 100);
},
setCollapsed: function(event){
this.advancedsearchcollapsed = event;
},
getTextureColor: function(color){
var adjustedColor = tinycolor(color);
return adjustedColor.toHslString();
}
}
});
</script>
</body></html>