{"version":3,"sources":["main.js"],"names":["hostList","init","config","parseConfig","$","$closeBtn","find","$el","setEnv","cb","json","text","JSON","parse","isLocal","window","location","hostname","remove","Modernizr","addTest","document","addEventListener","rootUrl","protocol","host","pathname","attr","setRootUrl","item","svalue","search","match","RegExp","queryString","key","toLowerCase","console","log","addClass","showSingleView","on","renderHostSchedule","getConfig","changeRoute","event","preventDefault","stopPropagation","removeClass","currentTarget","data","path","slug","newUrl","history","replaceState","url","scene","showListView","hosts","template","html","Mustache","hostsSorted","filter","el","active","sort","a","b","firstNameA","firstName","toUpperCase","firstNameB","comparison","items","forEach","rendered","render","append","renderItems","getSorted","$masthead","$hostList","$hostLinks","$hostSingle","$hostProfileWrap","parentOffset","parent","offset","lDims","width","height","getHostData","hasOwnProperty","lastName","upcoming","schedule","findByHostName","$upcoming","Object","keys","length","guideDates","day","moment","format","startDate","tz","airtimezone","clone","add","showname","split","map","word","charAt","slice","join","replace","defaultHtml","type","listHeight","parseInt","css","scroll","top","left","behavior","mastHeight","dims","cDims","adjOffset","Math","round","primaryUrl","boutiqueUrl","secondaryUrl","secondaryBoutiqueUrl","boutique","getBoutique","renderHostProfile","minHeight","maxHeight","setTimeout","off","remoteUrl","dateFormat","timezone","programGuide","Array","getProgramGuide","ajax","done","response","currDate","currDatePlusWeek","each","this","airtime","isSameOrAfter","isBefore","hostnames","name","newEl","stringify","push","date","always","trigger","listGuide","table","groupBy","getByProperty","obj","results","attributes","String","prop","isSameOrBefore","hide","count","splice","ImgLarge","ImgSmall","OfferPrice","OfferPriceLow","OfferPriceHigh","cacheKey","cachedData","sessionStorage","getItem","primaryItems","secondaryItems","set1","dataType","then","resultsets","fail","set2","Deferred","resolve","when","reduce","coll","setItem","error","responseText","from","object","call","prototype","groups","val","hashCode","hash","i","charCodeAt"],"mappings":"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","file":"../js/main.min.4249cb53.js","sourcesContent":["// if (window.location.hostname === \"localhost\") {\n// $(\"body\").addClass(\"local\");\n// $(\"head\").append('');\n// $(\"head\").append('');\n// $(\"body\").append('');\n// $(\"main.content\").wrap('
');\n// $(\"body > .container\")\n// .prepend('
')\n// .after(\n// `
`\n// );\n// }\n\nvar hostList;\n\nvar init = (function() {\n // Load config options from index.aa65e700.html\n var config = parseConfig($(\"#app-config\"), true);\n\n var $hostLinks = $(\".hosts-wrapper a\");\n var $closeBtn = $(\".host-single-container\").find(\".close-single\");\n\n if (typeof Modernizr !== \"undefined\") {\n Modernizr.addTest(\"picture\", \"HTMLPictureElement\" in window);\n }\n\n // set the initial page state when DOM is ready\n document.addEventListener(\"DOMContentLoaded\", setInitialState);\n\n // page functions\n function parseConfig($el, setEnv, cb) {\n var json = $el.text() || \"{}\";\n var config = JSON.parse(json);\n if (typeof setEnv !== \"undefined\" && setEnv)\n config.isLocal = window.location.hostname === \"www.shophq.com\" ? false : true;\n $el.remove();\n if (cb) {\n return cb(config);\n } else {\n return config;\n }\n }\n\n function getConfig() {\n return config;\n }\n\n function setRootUrl() {\n var rootUrl = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;\n $closeBtn.attr(\"href\", rootUrl);\n }\n\n function setInitialState() {\n // set the page's root URL on the profile back button\n setRootUrl();\n\n // check whether a single host profile is requested via `host` parameter\n var hostname = queryString(\"host\") || \"\";\n if (hostname) {\n var key = hostname.toLowerCase();\n console.log(\"loading host profile...\");\n $(\"body\").addClass(\"single\");\n host.showSingleView(key);\n $(window).on(\"programGuide.ready\", function() {\n host.renderHostSchedule(key);\n });\n }\n }\n\n function changeRoute(event) {\n event.preventDefault();\n event.stopPropagation();\n\n $(\"body\").removeClass(\"single\");\n\n var $this = $(event.currentTarget);\n var key = $this.data(\"key\") || \"\";\n var config = init.getConfig();\n var path = window.location.hostname === \"localhost\" ? \"\" : `/p/${config.slug}`;\n var newUrl = `${event.currentTarget.protocol}//${event.currentTarget.host}${path}/${\n event.currentTarget.search\n }`;\n\n history.replaceState({ url: newUrl, scene: key }, null, newUrl);\n if (key) {\n host.showSingleView(key, event);\n } else {\n host.showListView(event);\n }\n }\n\n // get url params\n function queryString(item) {\n var svalue = location.search.match(new RegExp(\"[?&]\" + item + \"=([^&]*)(&?)\", \"i\"));\n return svalue ? svalue[1] : svalue;\n }\n\n return {\n parseConfig: parseConfig,\n getConfig: getConfig,\n changeRoute: changeRoute\n };\n})();\n\nvar hosts = (function() {\n var $el = $(\"#host-list\");\n\n // get host list template\n var template = $(\"#host-list-template\").html() || \"\";\n Mustache.parse(template);\n\n // get inline host data\n hostList = init.parseConfig($(\"#page-config\"), false, function (data) {\n return data.filter(function (el) {\n return el.active;\n });\n });\n\n // get sorted data\n var hostsSorted = hostList.sort(sortByFirstName);\n\n renderItems($el, hostsSorted);\n\n function sortByFirstName(a, b) {\n // Use toUpperCase() to ignore character casing\n var firstNameA = a.firstName.toUpperCase();\n var firstNameB = b.firstName.toUpperCase();\n\n let comparison = 0;\n if (firstNameA > firstNameB) {\n comparison = 1;\n } else if (firstNameA < firstNameB) {\n comparison = -1;\n }\n return comparison;\n }\n\n function sortByLastName(a, b) {\n // Use toUpperCase() to ignore character casing\n var lastNameA = a.lastName.toUpperCase();\n var lastNameB = b.lastName.toUpperCase();\n\n let comparison = 0;\n if (lastNameA > lastNameB) {\n comparison = 1;\n } else if (lastNameA < lastNameB) {\n comparison = -1;\n }\n return comparison;\n }\n\n function renderItems(el, items) {\n if (!template) return;\n\n items.forEach(function(item) {\n var rendered = Mustache.render(template, item);\n el.append(rendered);\n });\n }\n\n function getSorted() {\n return hostsSorted;\n }\n\n return {\n getSorted: getSorted\n };\n})();\n\nvar host = (function() {\n // cache DOM\n var $win = $(window);\n var $masthead = $(\".global-header-navigation, .global-header-navigation-section\");\n var $hostList = $(\".host-list-container\");\n var $hostLinks = $hostList.find(\".host-card a\");\n var $hostSingle = $(\".host-single-container\");\n var $hostProfileWrap = $hostSingle.find(\".host-profile-wrapper\");\n var $closeBtn = $hostSingle.find(\".close-single\");\n var currentTarget;\n var parentOffset = $hostSingle.parent().offset();\n var lDims = {\n width: 0,\n height: 0\n };\n\n // get profile template\n var template = $(\"#host-single-template\").html() || \"\";\n Mustache.parse(template);\n\n // bind events\n $hostLinks.on(\"click\", init.changeRoute);\n $closeBtn.on(\"click\", init.changeRoute);\n\n function setSingleHeight() {\n var listHeight = $hostList.height();\n var singleHeight = parseInt($hostSingle.css(\"min-height\"), 10);\n if (singleHeight !== listHeight) {\n $hostSingle.css(\"min-height\", `${listHeight}px`);\n }\n }\n\n function showSingleView(key, event) {\n if (typeof event !== \"undefined\") {\n event.preventDefault();\n }\n\n if (typeof event !== \"undefined\" && event.type === \"click\") {\n var $el = $(event.currentTarget);\n // var key = $el.data(\"key\");\n } else {\n var $el = $hostLinks.filter(`[data-key=\"${key}\"]`);\n }\n\n setSingleHeight();\n\n window.scroll({\n top: parentOffset.top,\n left: parentOffset.left,\n behavior: \"smooth\"\n });\n\n lDims = {\n width: $hostList.width(),\n height: $hostList.height()\n };\n\n var offset = $el.offset();\n var mastHeight = $masthead.height() || 0;\n var dims = {\n width: $el.width(),\n height: $el.height()\n };\n var cDims = {\n width: $hostSingle.width(),\n height: $hostSingle.height()\n };\n var adjOffset = {\n top: Math.round(offset.top - mastHeight + dims.height / 2),\n left: Math.round(offset.left + dims.width / 2)\n };\n var transformOrigin = {\n left: (adjOffset.left / cDims.width) * 100,\n top: (adjOffset.top / cDims.height) * 100\n };\n\n var hostData = getHostData(key);\n renderHostProfile(hostData);\n\n currentTarget = adjOffset.top;\n\n $hostList.css({\n minHeight: `${cDims.height}px`,\n maxHeight: `${cDims.height}px`\n });\n $hostSingle.css(\"transform-origin\", `${adjOffset.left}px ${adjOffset.top}px`);\n\n $hostSingle.addClass(\"transition-in\");\n\n setTimeout(function() {\n $hostSingle\n .off(\"transitionend\")\n .removeClass(\"transition-in\")\n .addClass(\"open\");\n }, 100);\n\n setTimeout(function() {\n $hostSingle.addClass(\"transition-done\");\n $hostList.addClass(\"obscured\");\n }, 400);\n\n // $hostSingle.addClass(\"transition-in\").on(\"transitionend\", function(event) {\n // $hostSingle\n // .off(\"transitionend\")\n // .removeClass(\"transition-in\")\n // .addClass(\"open\");\n // var delay = parseFloat($hostSingle.css(\"transition-duration\")) * 1000;\n // console.log(`delay: ${delay}`);\n // setTimeout(function() {\n // $hostSingle.addClass(\"transition-done\");\n // $hostList.addClass(\"obscured\");\n // }, delay);\n // });\n }\n\n function showListView(event) {\n event.preventDefault();\n\n if (currentTarget > 500) {\n window.scroll({\n top: currentTarget,\n left: 0,\n behavior: \"smooth\"\n });\n }\n\n $hostList.css({\n minHeight: `${lDims.height}px`,\n maxHeight: `${lDims.height}px`\n });\n $hostList.removeClass(\"obscured\");\n $hostSingle\n .removeClass(\"open transition-done\")\n .addClass(\"transition-out\")\n .on(\"transitionend\", function() {\n $hostSingle.off(\"transitionend\").removeClass(\"transition-out\");\n $hostList.css({\n minHeight: \"\",\n maxHeight: \"\"\n });\n });\n }\n\n function getHostData(key) {\n var host = hostList.filter(el => el.key == key);\n\n // add upcoming if it's not found on object\n if (!host[0].hasOwnProperty(\"upcoming\")) {\n var hostname = `${host[0].firstName.toLowerCase()} ${host[0].lastName.toLowerCase()}`;\n host[0].upcoming = schedule.findByHostName(hostname);\n }\n\n return host[0];\n }\n\n function renderHostProfile(data) {\n // console.table(data);\n\n if (!template) return;\n\n var rendered = Mustache.render(template, data);\n $hostProfileWrap.html(rendered);\n\n // render upcoming schedule\n renderHostSchedule(data.key);\n\n // load and render boutique\n var primaryUrl = data.boutiqueUrl;\n var secondaryUrl = data.secondaryBoutiqueUrl || \"\";\n boutique.getBoutique(data.key, primaryUrl, secondaryUrl);\n }\n\n function renderHostSchedule(key) {\n var data = getHostData(key);\n var $upcoming = $(\"#host-upcoming\");\n\n var defaultHtml = `

Check back later!

`;\n\n if (Object.keys(data.upcoming).length > 0) {\n var guideDates = Object.keys(data.upcoming);\n\n $upcoming.html(\"\");\n\n guideDates.forEach(el => {\n var day = moment(el, \"YYYYMMDD\").format(\"ddd\");\n $upcoming.append(`

${day}

`);\n data.upcoming[el].forEach(el => {\n var startDate = moment.tz(el.airtimezone, \"M/D/YYYY h:mm:ss a z\", \"America/New_York\");\n var endDate = startDate.clone().add(1, \"hour\");\n $upcoming.append(\n `

${startDate.format(\n \"MMM D hA z\"\n )}${titleCase(el.showname)}

`\n );\n });\n });\n } else {\n $upcoming.html(defaultHtml);\n }\n }\n\n function titleCase(str) {\n return str\n .toLowerCase()\n .split(\" \")\n .map(function(word) {\n return word.charAt(0).toUpperCase() + word.slice(1);\n })\n .join(\" \")\n .split(\"-\")\n .map(function(word) {\n return word.charAt(0).toUpperCase() + word.slice(1);\n })\n .join(\"-\")\n .replace(/Tv/g, \"TV\")\n .replace(/hq/g, \"HQ\");\n }\n\n return {\n getHostData: getHostData,\n showSingleView: showSingleView,\n renderHostSchedule: renderHostSchedule,\n showListView: showListView\n };\n})();\n\nvar schedule = (function() {\n var remoteUrl = \"https://www.shophq.com/onair/programguide/ET\";\n // if (init.getConfig().isLocal) remoteUrl = \"http://allorigins.us/get?method=raw&url=\" + encodeURIComponent(remoteUrl) + \"&callback=?\";\n if (init.getConfig().isLocal) remoteUrl = \"https://cors-anywhere.herokuapp.com/\" + remoteUrl;\n var dateFormat = \"M/D/YYYY h:mm:ss a\";\n var timezone = \"America/New_York\";\n var programGuide = new Array();\n\n getProgramGuide();\n $(window).on(\"programGuide.ready\", appendScheduleToHosts);\n\n function getProgramGuide() {\n $.ajax({\n type: \"GET\",\n url: remoteUrl\n })\n .done(function(response) {\n // if (init.getConfig().isLocal) response = response.body;\n var data = $(response).find(\"p[data-hostname]:not([data-hostname=''])\");\n var currDate = moment().tz(\"America/New_York\");\n var currDatePlusWeek = currDate.clone().add(7, \"days\");\n data.each(function() {\n var el = $(this).data();\n var startDate = moment.tz(el.airtime, dateFormat, timezone);\n\n if (startDate.isSameOrAfter(currDate) && startDate.isBefore(currDatePlusWeek)) {\n var hostnames = el.hostname.split(\",\");\n if (hostnames.length > 1) {\n // multiple hosts found, split to separate elements and push to array\n hostnames.forEach(name => {\n var newEl = JSON.parse(JSON.stringify(el));\n newEl.hostname = name;\n programGuide.push(newEl);\n })\n } else {\n // push to array\n programGuide.push(el);\n }\n }\n });\n programGuide.forEach(el => {\n el.airtimezone = moment.tz(el.airtime, dateFormat, timezone).format(`${dateFormat} z`);\n el.date = moment.tz(el.airtime, dateFormat, timezone).format(\"YYYYMMDD\");\n });\n })\n .always(function() {\n $(window).trigger(\"programGuide.ready\");\n // listGuide();\n });\n }\n\n // accepts one property value as an object, e.g. {hostname: \"host name\"}\n function getProgramGuideByProperty(obj) {\n if (!obj) return;\n\n var results = new Array();\n var attributes = new String();\n\n for (var prop in obj) {\n attributes += `[data-${prop}=\"${obj[prop].toLowerCase()}\"]`;\n }\n\n $.ajax({\n type: \"GET\",\n url: remoteUrl\n })\n .done(function(response) {\n var data = $(response).find(`td${attributes}`);\n var currDate = moment().tz(\"America/New_York\");\n var guide = new Array();\n\n data.each(function() {\n var el = $(this).data();\n var startDate = moment.tz(el.airtime, dateFormat, timezone);\n if (currDate.isSameOrBefore(startDate)) {\n results.push($(this).data());\n }\n });\n results.forEach(el => {\n el.airtimezone = moment.tz(el.airtime, dateFormat, timezone).format(`${dateFormat} z`);\n el.date = moment.tz(el.airtime, dateFormat, timezone).format(\"YYYYMMDD\");\n });\n })\n .always(function() {\n $(window).trigger(\"programGuideByProperty.ready\");\n // console.table(results);\n return results;\n });\n }\n\n function listGuide() {\n console.table(programGuide);\n // return programGuide;\n }\n\n function findByHostName(hostname) {\n var guide = programGuide.filter(el => el.hostname == hostname);\n var groupedGuide = guide.groupBy(\"date\");\n\n return groupedGuide;\n }\n\n function appendScheduleToHosts() {\n hostList.forEach(host => {\n host.upcoming =\n schedule.findByHostName(`${host.firstName.toLowerCase()} ${host.lastName.toLowerCase()}`) || \"\";\n });\n }\n\n return {\n listGuide: listGuide,\n findByHostName: findByHostName,\n getByProperty: getProgramGuideByProperty,\n getProgramGuide: getProgramGuide\n };\n})();\n\nvar boutique = (function() {\n var template = $(\"#boutique-template\").html() || \"\";\n\n if (template === \"\") {\n $el.hide();\n console.log(\"boutique template not found\");\n return;\n }\n\n Mustache.parse(template);\n\n function getBoutique(key, primaryUrl, secondaryUrl) {\n var $el = $(\".boutique-module\");\n var itemCount = 12;\n\n if ($el.length === 0) {\n return;\n }\n\n // var remoteUrl = $el.data(\"url\") || \"\";\n // var remoteUrl = primaryUrl;\n\n if (primaryUrl === \"\") {\n $el.hide();\n return;\n }\n // if (secondaryUrl === \"\") {\n // secondaryUrl = \"\";\n // }\n\n var cacheKey = `evine_${window.location.pathname}_boutique-${key}_cached`;\n var cachedData = sessionStorage.getItem(cacheKey);\n // var cachedData = false;\n var items = {};\n var primaryItems = {};\n var secondaryItems = {};\n\n if (cachedData) {\n items = JSON.parse(cachedData);\n console.log(\"rendering cached items...\");\n renderItems($el, items);\n } else {\n var set1 = $.ajax({\n type: \"GET\",\n url: `${primaryUrl}&count=${itemCount}`,\n dataType: \"json\"\n })\n .then(function(response) {\n primaryItems = response.resultsets[1];\n })\n .fail(function() {\n $el.hide();\n console.log(`error retrieving boutique from ${primaryUrl}`);\n });\n\n if (secondaryUrl) {\n var set2 = $.ajax({\n type: \"GET\",\n url: `${secondaryUrl}&count=${itemCount}`,\n dataType: \"json\"\n })\n .done(function(response) {\n secondaryItems = response.resultsets[1];\n // items.results = extraItems.results.reduce(function(coll, item) {\n // coll.push(item);\n // return coll;\n // }, items.results);\n })\n .fail(function() {\n console.log(`error retrieving boutique from ${secondaryUrl}`);\n });\n } else {\n var set2 = $.Deferred().resolve();\n }\n\n $.when(set1, set2).then(\n function() {\n console.log(\"merging item sets...\");\n if (secondaryItems.results) {\n // items.results = [...new Set([...primaryItems.results, ...secondaryItems.results])];\n items.results = secondaryItems.results.reduce(function(coll, item) {\n coll.push(item);\n return coll;\n }, primaryItems.results);\n } else {\n items.results = primaryItems.results;\n }\n if (items.results.length > 0) {\n items.results = items.results.splice(0, itemCount);\n sessionStorage.setItem(cacheKey, JSON.stringify(items));\n console.log(\"rendering response items...\");\n renderItems($el, items);\n } else {\n $el.hide();\n }\n },\n function(error) {\n console.error(error.responseText);\n }\n );\n }\n }\n\n function renderItems(el, items) {\n var count = items.results.length;\n if (count > 8 && count < 12) {\n items.results = items.results.splice(0, 8);\n }\n if (count > 4 && count < 8) {\n items.results = items.results.splice(0, 4);\n }\n\n // use some larger images\n items.ImgLarge = function() {\n return this.ImgSmall.replace(\"140x140\", \"250x250\");\n };\n\n // check for price range\n items.OfferPrice = function() {\n var price;\n if (this.OfferPriceLow === this.OfferPriceHigh) {\n price = \"$\" + this.OfferPriceHigh;\n } else {\n price = \"$\" + this.OfferPriceLow + \" – \" + \"$\" + this.OfferPriceHigh;\n }\n return price;\n };\n\n var rendered = Mustache.render(template, items);\n el.html(rendered);\n }\n\n return {\n getBoutique: getBoutique\n };\n})();\n\n/**\n * @license MIT, GPL, do whatever you want\n * @requires polyfill: Array.prototype.slice fix {@link https://gist.github.com/brettz9/6093105}\n */\nif (!Array.from) {\n Array.from = function(object) {\n \"use strict\";\n return [].slice.call(object);\n };\n}\n\nArray.prototype.groupBy = function(prop) {\n return this.reduce(function(groups, item) {\n var val = item[prop];\n groups[val] = groups[val] || [];\n groups[val].push(item);\n return groups;\n }, {});\n};\n\nString.prototype.hashCode = function() {\n var hash = 0;\n if (this.length == 0) return hash;\n for (i = 0; i < this.length; i++) {\n var char = this.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n};\n"]}