{"version":3,"file":"bogart/build/js/bogart.combined.js","mappings":"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","sources":["webpack://tcm-digital/./node_modules/blueimp-md5/js/md5.js","webpack://tcm-digital/webpack/bootstrap","webpack://tcm-digital/webpack/runtime/compat get default export","webpack://tcm-digital/webpack/runtime/define property getters","webpack://tcm-digital/webpack/runtime/hasOwnProperty shorthand","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchCarousel.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/global/WatchModal.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchlistPage.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/global/Watchlist.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchPlayer.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchTiles.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/bogart.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/introAnimation.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/global/Auth.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/global/GlobalHeader.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchArchive.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchCollections.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchEssentials.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchFilters.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchMoreText.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchSettings.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/global/WatchTime.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/global/WatchUtils.js","webpack://tcm-digital/./docroot/themes/custom/bogart/js/components/WatchAnalytics.js"],"sourcesContent":["/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/* global define */\n\n/* eslint-disable strict */\n\n;(function ($) {\n 'use strict'\n\n /**\n * Add integers, wrapping at 2^32.\n * This uses 16-bit operations internally to work around bugs in interpreters.\n *\n * @param {number} x First integer\n * @param {number} y Second integer\n * @returns {number} Sum\n */\n function safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff)\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n return (msw << 16) | (lsw & 0xffff)\n }\n\n /**\n * Bitwise rotate a 32-bit number to the left.\n *\n * @param {number} num 32-bit number\n * @param {number} cnt Rotation count\n * @returns {number} Rotated number\n */\n function bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt))\n }\n\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} q q\n * @param {number} a a\n * @param {number} b b\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n }\n\n /**\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n *\n * @param {Array} x Array of little-endian words\n * @param {number} len Bit length\n * @returns {Array} MD5 Array\n */\n function binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32\n x[(((len + 64) >>> 9) << 4) + 14] = len\n\n var i\n var olda\n var oldb\n var oldc\n var oldd\n var a = 1732584193\n var b = -271733879\n var c = -1732584194\n var d = 271733878\n\n for (i = 0; i < x.length; i += 16) {\n olda = a\n oldb = b\n oldc = c\n oldd = d\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936)\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063)\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)\n b = md5gg(b, c, d, a, x[i], 20, -373897302)\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558)\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)\n d = md5hh(d, a, b, c, x[i], 11, -358537222)\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844)\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n a = safeAdd(a, olda)\n b = safeAdd(b, oldb)\n c = safeAdd(c, oldc)\n d = safeAdd(d, oldd)\n }\n return [a, b, c, d]\n }\n\n /**\n * Convert an array of little-endian words to a string\n *\n * @param {Array} input MD5 Array\n * @returns {string} MD5 string\n */\n function binl2rstr(input) {\n var i\n var output = ''\n var length32 = input.length * 32\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff)\n }\n return output\n }\n\n /**\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n *\n * @param {string} input Raw input string\n * @returns {Array} Array of little-endian words\n */\n function rstr2binl(input) {\n var i\n var output = []\n output[(input.length >> 2) - 1] = undefined\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0\n }\n var length8 = input.length * 8\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32\n }\n return output\n }\n\n /**\n * Calculate the MD5 of a raw string\n *\n * @param {string} s Input string\n * @returns {string} Raw MD5 string\n */\n function rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n }\n\n /**\n * Calculates the HMAC-MD5 of a key and some data (raw strings)\n *\n * @param {string} key HMAC key\n * @param {string} data Raw input string\n * @returns {string} Raw MD5 string\n */\n function rstrHMACMD5(key, data) {\n var i\n var bkey = rstr2binl(key)\n var ipad = []\n var opad = []\n var hash\n ipad[15] = opad[15] = undefined\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8)\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636\n opad[i] = bkey[i] ^ 0x5c5c5c5c\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n }\n\n /**\n * Convert a raw string to a hex string\n *\n * @param {string} input Raw input string\n * @returns {string} Hex encoded string\n */\n function rstr2hex(input) {\n var hexTab = '0123456789abcdef'\n var output = ''\n var x\n var i\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i)\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)\n }\n return output\n }\n\n /**\n * Encode a string as UTF-8\n *\n * @param {string} input Input string\n * @returns {string} UTF8 string\n */\n function str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input))\n }\n\n /**\n * Encodes input string as raw MD5 string\n *\n * @param {string} s Input string\n * @returns {string} Raw MD5 string\n */\n function rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s))\n }\n /**\n * Encodes input string as Hex encoded string\n *\n * @param {string} s Input string\n * @returns {string} Hex encoded string\n */\n function hexMD5(s) {\n return rstr2hex(rawMD5(s))\n }\n /**\n * Calculates the raw HMAC-MD5 for the given key and data\n *\n * @param {string} k HMAC key\n * @param {string} d Input string\n * @returns {string} Raw MD5 string\n */\n function rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n }\n /**\n * Calculates the Hex encoded HMAC-MD5 for the given key and data\n *\n * @param {string} k HMAC key\n * @param {string} d Input string\n * @returns {string} Raw MD5 string\n */\n function hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d))\n }\n\n /**\n * Calculates MD5 value for a given string.\n * If a key is provided, calculates the HMAC-MD5 value.\n * Returns a Hex encoded string unless the raw argument is given.\n *\n * @param {string} string Input string\n * @param {string} [key] HMAC key\n * @param {boolean} [raw] Raw output switch\n * @returns {string} MD5 output\n */\n function md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string)\n }\n return rawMD5(string)\n }\n if (!raw) {\n return hexHMACMD5(key, string)\n }\n return rawHMACMD5(key, string)\n }\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return md5\n })\n } else if (typeof module === 'object' && module.exports) {\n module.exports = md5\n } else {\n $.md5 = md5\n }\n})(this)\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * Initializes watch carousel\n */\nexport default class WatchCarousel {\n /**\n * Attach common page events and initialize miscellaneous components\n */\n\n static initialize() {\n\n // WATCH CAROUSEL COMPONENT\n $('.watch-home-carousel').slick({\n autoplay: true,\n autoplaySpeed: 6000,\n arrows: false,\n cssEase: 'ease',\n dots: true,\n dotsClass: 'watch-slick-dots',\n infinite: true,\n speed: 300,\n slidesToShow: 1,\n swipe: true\n });\n // // WATCH COLLECTIONS CAROUSELS called in WatchCollections\n // $(\".watch-collections-carousel\").slick({\n // accessibility: false,\n // dots: true,\n // infinite: false,\n // });\n }\n}\n","/**\n * WatchModal.js is used for ALL modals, this includes video players, carousel modals and simple copy modals\n * It is called before WatchTiles.js and all VOD modifications should happen in that file.\n */\nexport default class WatchModal {\n\n /**\n * Runs when an instance of the class is created\n * @param data\n * @param options\n */\n constructor(data, options) {\n // Initialize modal\n this.modal_template =\n `
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
`;\n\n // If options is not passed in, create defaults\n options = options || {onOpen: null, onClose: null};\n\n // Add custom events if they exist\n if (options.onOpen !== null)\n this.custom_open_callback = options.onOpen.bind(this);\n\n if (options.onClose !== null)\n this.custom_close_callback = options.onClose.bind(this);\n\n // Initialize other defaults and default event listeners\n this.modal_selector = '#modal-overlay';\n this.modal_open_class = 'modal-open';\n this.modal_close_selector = '.modal-overlay__close-button';\n this.modal_sidebar_close_selector = '.modal-overlay__content__sidebar__close-button';\n this.modal_player_close_selector = '.watch__player__return';\n this.data = data;\n this.is_open = false;\n\n this._setupEventListeners();\n }\n\n /**\n * Opens the modal\n */\n open() {\n // check if there is an already present modal on the page and close it if so\n if ($(`body > ${this.modal_selector}`).length) {\n this.close();\n }\n\n // append the modal to the body and pass in template\n $('body').addClass(this.modal_open_class).append(this.modal_template);\n\n // if player modal type, inject player into modal and hide default close button\n if ( this.data.type === 'player' ) {\n $('.modal-overlay__content__main--player').append(this.data.template);\n $(this.modal_close_selector).hide();\n }\n\n // if sidebar modal type, inject sidebar and toggleable content\n else if ( this.data.type === 'sidebar' ) {\n $('.modal-overlay__content__sidebar').append(this.data.sidebarTemplate);\n $('.modal-overlay__content__main').append(this.data.toggleTemplate);\n // add close button to sidebar\n $('.modal-overlay__content__sidebar').append('');\n $(this.modal_close_selector).hide();\n } else if ( this.data.type === 'text' ) {\n $('.modal-overlay__content__main--text').append(this.data.fullText);\n }\n\n this.is_open = true;\n const element = document.querySelector('.slick-initialized');\n if (element) {\n console.log('slick-initialized!!');\n element.focus();\n element.click();\n }\n\n // Additional custom onOpen callbacks are mainliy for video player, are found on WatchTiles.js\n if ( typeof this.custom_open_callback === \"function\") {\n this.custom_open_callback(this.data);\n }\n };\n\n\n // Closes modal\n close() {\n\n // remove modal\n $(this.modal_selector).detach();\n $('body').removeClass(this.modal_open_class);\n\n this.is_open = false;\n\n // Additional custom onOpen callbacks are mainliy for video player, are found on WatchTiles.js\n if (typeof window.player !== \"undefined\") {\n\n this.custom_close_callback(this.data);\n }\n\n }\n\n /**\n * Returns TRUE if the current instance of the modal is open.\n */\n getIsOpen() {\n return this.is_open;\n }\n\n /**\n * Sets up event listeners for modal\n * @private\n */\n _setupEventListeners(){\n\n $(document).on('click', `${this.modal_close_selector}, ${this.modal_player_close_selector}, ${this.modal_sidebar_close_selector}`, (e) => {\n\n this.close();\n // this.modal_close_selector.off()\n\n\n });\n }\n}\n","export default class WatchlistPage {\n\n static initialize(watchlist, UrlPathname, apiURL2) {\n\n // IE 11 Array.from fix\n let editWatchlistBtn = document.querySelector('.watch-button.watch-button--scalable');\n // console.table(editWatchlistBtn)\n editWatchlistBtn.addEventListener('click', editVOD)\n\n // Production steps of ECMA-262, Edition 6, 22.1.2.1\n if (!Array.from) {\n Array.from = (function () {\n var toStr = Object.prototype.toString;\n var isCallable = function (fn) {\n return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\n };\n var toInteger = function (value) {\n var number = Number(value);\n if (isNaN(number)) { return 0; }\n if (number === 0 || !isFinite(number)) { return number; }\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\n };\n var maxSafeInteger = Math.pow(2, 53) - 1;\n var toLength = function (value) {\n var len = toInteger(value);\n return Math.min(Math.max(len, 0), maxSafeInteger);\n };\n\n // The length property of the from method is 1.\n return function from(arrayLike/*, mapFn, thisArg */) {\n // 1. Let C be the this value.\n var C = this;\n\n // 2. Let items be ToObject(arrayLike).\n var items = Object(arrayLike);\n\n // 3. ReturnIfAbrupt(items).\n if (arrayLike == null) {\n throw new TypeError('Array.from requires an array-like object - not null or undefined');\n }\n\n // 4. If mapfn is undefined, then let mapping be false.\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\n var T;\n if (typeof mapFn !== 'undefined') {\n // 5. else\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\n if (!isCallable(mapFn)) {\n throw new TypeError('Array.from: when provided, the second argument must be a function');\n }\n\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\n if (arguments.length > 2) {\n T = arguments[2];\n }\n }\n\n // 10. Let lenValue be Get(items, \"length\").\n // 11. Let len be ToLength(lenValue).\n var len = toLength(items.length);\n\n // 13. If IsConstructor(C) is true, then\n // 13. a. Let A be the result of calling the [[Construct]] internal method\n // of C with an argument list containing the single item len.\n // 14. a. Else, Let A be ArrayCreate(len).\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\n\n // 16. Let k be 0.\n var k = 0;\n // 17. Repeat, while k < len… (also steps a - h)\n var kValue;\n while (k < len) {\n kValue = items[k];\n if (mapFn) {\n A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\n } else {\n A[k] = kValue;\n }\n k += 1;\n }\n // 18. Let putStatus be Put(A, \"length\", len, true).\n A.length = len;\n // 20. Return A.\n return A;\n };\n }());\n }\n\n /* -------------------- OS + Browser detector --------------------*/\n var Browser = \"\";\n var OS = \"\";\n (function (window) {\n {\n var unknown = '-';\n\n // screen\n\n\n // browser\n var nVer = navigator.appVersion;\n var nAgt = navigator.userAgent;\n var browser = navigator.appName;\n var version = '' + parseFloat(navigator.appVersion);\n var majorVersion = parseInt(navigator.appVersion, 10);\n var nameOffset, verOffset, ix;\n\n // Opera\n if ((verOffset = nAgt.indexOf('Opera')) != -1) {\n browser = 'Opera';\n version = nAgt.substring(verOffset + 6);\n if ((verOffset = nAgt.indexOf('Version')) != -1) {\n version = nAgt.substring(verOffset + 8);\n }\n }\n // Opera Next\n if ((verOffset = nAgt.indexOf('OPR')) != -1) {\n browser = 'Opera';\n version = nAgt.substring(verOffset + 4);\n }\n // Edge\n else if ((verOffset = nAgt.indexOf('Edge')) != -1) {\n browser = 'Microsoft Edge';\n version = nAgt.substring(verOffset + 5);\n }\n // MSIE\n else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {\n browser = 'Microsoft Internet Explorer';\n version = nAgt.substring(verOffset + 5);\n }\n // Chrome\n else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {\n browser = 'Chrome';\n version = nAgt.substring(verOffset + 7);\n }\n // Safari\n else if ((verOffset = nAgt.indexOf('Safari')) != -1) {\n browser = 'Safari';\n version = nAgt.substring(verOffset + 7);\n if ((verOffset = nAgt.indexOf('Version')) != -1) {\n version = nAgt.substring(verOffset + 8);\n }\n }\n // Firefox\n else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {\n browser = 'Firefox';\n version = nAgt.substring(verOffset + 8);\n }\n // MSIE 11+\n else if (nAgt.indexOf('Trident/') != -1) {\n browser = 'Microsoft Internet Explorer';\n version = nAgt.substring(nAgt.indexOf('rv:') + 3);\n }\n // Other browsers\n else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {\n browser = nAgt.substring(nameOffset, verOffset);\n version = nAgt.substring(verOffset + 1);\n if (browser.toLowerCase() == browser.toUpperCase()) {\n browser = navigator.appName;\n }\n }\n // trim the version string\n if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);\n if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);\n if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);\n\n majorVersion = parseInt('' + version, 10);\n if (isNaN(majorVersion)) {\n version = '' + parseFloat(navigator.appVersion);\n majorVersion = parseInt(navigator.appVersion, 10);\n }\n\n // mobile version\n var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);\n\n // cookie\n var cookieEnabled = (navigator.cookieEnabled) ? true : false;\n\n if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {\n document.cookie = 'testcookie';\n cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;\n }\n\n // system\n var os = unknown;\n var clientStrings = [\n {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},\n {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},\n {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},\n {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},\n {s:'Windows Vista', r:/Windows NT 6.0/},\n {s:'Windows Server 2003', r:/Windows NT 5.2/},\n {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},\n {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},\n {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},\n {s:'Windows 98', r:/(Windows 98|Win98)/},\n {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},\n {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},\n {s:'Windows CE', r:/Windows CE/},\n {s:'Windows 3.11', r:/Win16/},\n {s:'Android', r:/Android/},\n {s:'Open BSD', r:/OpenBSD/},\n {s:'Sun OS', r:/SunOS/},\n {s:'Linux', r:/(Linux|X11)/},\n {s:'iOS', r:/(iPhone|iPad|iPod)/},\n {s:'Mac OS X', r:/Mac OS X/},\n {s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},\n {s:'QNX', r:/QNX/},\n {s:'UNIX', r:/UNIX/},\n {s:'BeOS', r:/BeOS/},\n {s:'OS/2', r:/OS\\/2/},\n {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/}\n ];\n for (var id in clientStrings) {\n var cs = clientStrings[id];\n if (cs.r.test(nAgt)) {\n os = cs.s;\n break;\n }\n }\n\n var osVersion = unknown;\n\n if (/Windows/.test(os)) {\n osVersion = /Windows (.*)/.exec(os)[1];\n os = 'Windows';\n }\n\n switch (os) {\n case 'Mac OS X':\n osVersion = /Mac OS X ([\\.\\_\\d]+)/.exec(nAgt)[1];\n break;\n\n case 'Android':\n osVersion = /Android ([\\.\\_\\d]+)/.exec(nAgt)[1];\n break;\n\n case 'iOS':\n osVersion = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(nVer);\n osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);\n break;\n }\n\n // flash (you'll need to include swfobject)\n /* script src=\"//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js\" */\n var flashVersion = 'no check';\n if (typeof swfobject != 'undefined') {\n var fv = swfobject.getFlashPlayerVersion();\n if (fv.major > 0) {\n flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release;\n }\n else {\n flashVersion = unknown;\n }\n }\n }\n\n window.jscd = {\n browser: browser,\n browserVersion: version,\n browserMajorVersion: majorVersion,\n mobile: mobile,\n os: os,\n osVersion: osVersion,\n cookies: cookieEnabled,\n flashVersion: flashVersion\n };\n Browser = window.jscd.browser +' '+ window.jscd.browserMajorVersion;\n OS = window.jscd.os +' '+ window.jscd.osVersion + '\\n'\n\n\n }(this));\n\n $(\".watch-footer__wrap\").show();\n let VODUrl = \"\"\n let editable = false\n let watchListItems;\n let currentUrl = window.location.origin;\n // Grab edit watchlist btn and add evLister to it.\n\n // Set dev/prod variables based off url:\n let envVars = window.location.hostname;\n let apiURL, s3Pool, s3Bucket, akamaiPre\n switch (envVars) {\n case \"localhost.tcm.com\":\n case \"tcm.dd\":\n apiURL = \"https://qa-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\"\n s3Bucket = \"tcm-develop-www\"\n akamaiPre = \"https://dev-images.tcm.com/\"\n break;\n case \"dev.tcm.com\":\n case \"dev-www.tcm.com\":\n case \"dev-admin.tcm.com\":\n apiURL = \"https://dev-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\"\n s3Bucket = \"tcm-develop-www\"\n akamaiPre = \"https://dev-images.tcm.com/\"\n break;\n case \"qa.tcm.com\":\n case \"qa-www.tcm.com\":\n case \"qa-admin.tcm.com\":\n apiURL = \"https://qa-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\"\n s3Bucket = \"tcm-qa-www\"\n akamaiPre = \"https://qa-images.tcm.com/\"\n break;\n case \"staging.tcm.com\":\n case \"staging-www.tcm.com\":\n case \"staging-admin.tcm.com\":\n apiURL = \"https://staging-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\"\n s3Bucket = \"tcm-stage-www\"\n akamaiPre = \"https://staging-images.tcm.com/\"\n break;\n default:\n apiURL = \"https://tcmws.tcm.com\";\n s3Pool = \"us-east-1:30cf1fd4-ac22-4a68-b1e5-05d5f33a12a5\"\n s3Bucket = \"tcm-prod-www\"\n akamaiPre = \"https://prod-images.tcm.com/\"\n }\n\n let arrayForLoop = watchlist.domWatchlistModifiers.watchlistArray;\n $('.watch-tiles__wrap.after-watch-filters').empty()\n if(!arrayForLoop[0] == ''){\n // loop and print to page all watchlist divs\n\n for (var i = 0; i < arrayForLoop.length; i++) {\n $.ajax({\n url: apiURL + \"/tcmws/titles/\" + arrayForLoop[i].contentId,\n type: \"GET\",\n headers: {\n \"accept\": \"application/json;odata=verbose\",\n },\n success: function(data) {\n var data = data.tcm.title;\n if(data.imageProfiles.length < 1){\n data.image = \"https://prod-images.tcm.com/v5cache/TCM/Images/watchtcm/WatchTCM_Placeholder_Films.png\"\n }\n else{\n // Find the correct thumbmnail image from array\n $.each(data.imageProfiles, function(index, item) {\n if (item.usage === \"tabletMovieDetail\") {\n data.image= item.url;\n\n }\n });\n }\n // format runtime minutes into readable format 1h 23m\n data.runtimeMinutes = runtimeConversion(data.runtimeMinutes)\n // if no PG rating set to null\n // data.mpaaRating = data.mpaaRating? data.mpaaRating : ''\n var a = data.titleId;\n var b = moment(data.vod.expiryDate, 'YYYY-MMM-DD HH:mm ').valueOf();\n var c = moment(data.vod.publishedDate , 'YYYY-MMM-DD HH:mm ').valueOf();\n var d = data.name;\n var e = data.releaseYear;\n var f = data.runtimeMinutes\n var g = data.genre\n var h = data.mpaaRating\n var i = data.movieDescription\n var j = data.image\n var k = data.genres[0]\n var l = daysUntilExp(b)\n var m = data.vod.available\n var MovieMeta = `${data.releaseYear} .\n ${data.runtimeMinutes} .\n ${k}.\n ${h} `\n\n GetVod(a,b,c,d,e,f,g,h,i,j,k,data.vod.mediaId);\n function GetVod(a,b,c,d,e,f,g,h,i,j,k,x){\n j = (j === undefined) ? '' : 'https:'+j.substring(j.indexOf('//'));\n if (OS.indexOf(\"Windows 7\") >= 0) {\n if (Browser.indexOf(\"Microsoft Internet Explorer 11\") >= 0) {\n //alert(\"Windows 7 - IE 11\")\n //watch-button--IE\n $('.watch-tiles__wrap.after-watch-filters').append(`\n `\n );\n\n }\n else{\n $('.watch-tiles__wrap.after-watch-filters').append(`\n `\n );\n }\n }\n else{\n $('.watch-tiles__wrap.after-watch-filters').append(`\n `\n );\n }\n }\n },\n error: function(error) {\n console.log('------Error from WatchlistPage.js line 26 - Top api call fail-----\\n' + error);\n }\n })\n }\n }else{\n\n $(\"#moveAlong\").show();\n }\n alphabetSoup();\n\n // Set Tiles up for VOD deletion from Watchlist page && from cookie\n function editVOD(){\n\n // grab all vod tiles on watchlist page\n let tileOverlay = document.querySelectorAll('.stretchy-content');\n // find all buttons within the array\n let watchListRemoveBtn = Array.from(document.querySelectorAll('.remove-watchlist-item'))\n // add eventListener to buttons\n // watchListRemoveBtn = watchListRemoveBtn.forEach(btn => btn.addEventListener('click', deleteVOD))\n // update both nav bubble elements .. desktop + mobile\n //domWatchlistModifiers.watchlistNumbers.forEach(ele => ele.innerHTML = watchlistSpan)\n //console.log(typeof domWatchlistModifiers)\n for (var i = 0; i < watchListRemoveBtn.length; i++) {\n watchListRemoveBtn[i].addEventListener('click', deleteVOD)\n }\n // // modify all VOD's\n for (var i = 0; i < tileOverlay.length; i++) {\n tileOverlay[i].classList.toggle('watchlist-remove')\n var button = Array.from(tileOverlay[i].getElementsByTagName('button'))\n button[0].classList.toggle('hidden');\n }\n // toggle editable btn\n editable = editable? false : true;\n }\n\n // if isExpired = true, fun() is being called because VOD is expired.\n // Otherwise deletion is called from Edit WatchList Btn\n function deleteVOD () {\n\n // if vod is expired use expiredVod value, otherwise ID from mouse event\n let movId = this.dataset.id;\n // set a boolean if VOD been removed from ngtv data\n console.log('To be deleted from watchlist page: ' + movId )\n let vodDeleted = watchlist.modWatchlist(movId)\n console.log('after deletion back on WLPage.js vod should be true: ' + vodDeleted)\n // check boolean then remove tile from dom.\n if (vodDeleted){\n let tileToRemove = document.querySelector('.tile'+ movId)\n tileToRemove.parentNode.removeChild(tileToRemove)\n }\n }\n\n\n\n // Takes in movie length as string, parses to number, converts to hr & min, concats to string\n function runtimeConversion(runtime){\n // some runtimes come in as 117 - 118 .. really stupid ... filters out excess\n if(runtime.length > 3){\n runtime = runtime.split('-')\n runtime = runtime[0]\n }\n runtime = (Math.floor( parseInt(runtime) / 60) + 'h ' + ((parseInt(runtime) % 60) + 'm'));\n return runtime\n }\n\n\n\n // creates an expiration coundown that displays on bottom of tile\n function daysUntilExp(expireDate){\n expireDate = new Date(expireDate)\n let today = new Date()\n var sup = Math.round((expireDate-today)/(1000*60*60*24));\n // console.log(`Today = ${today}\\nExp date = ${expireDate}\\nDays until exp = ${sup} ` )\n return sup\n }\n\n\n\n function alphabetSoup(){\n var $divs = $(\".watch-tile\");\n var numericallyOrderedDivs = $divs.sort(function (a, b) {\n return $(a).find(\"h2\").text() > $(b).find(\"h2\").text();\n });\n $(\".watch-tiles__wrap\").html(numericallyOrderedDivs);\n }\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./docroot/themes/custom/bogart/js/components/WatchlistPage.js\n","//import WatchPlayer from '../components/WatchPlayer';\nimport WatchlistPage from '../components/WatchlistPage';\nexport default class Watchlist {\n\n /**\n * Pull in users watchlist if user is authenticated.\n */\n static initialize(watchlist, currentURL ) {\n const Player = TOP.Player;\n let ngtvTokenRefreshRate = 20000;\n let ngtvTokenRequestUrl;\n let ngtvToken = false;\n let deleteSuccess;\n const appId = drupalSettings.top_appid || '';\n\n console.log('-------------')\n console.log('watchlist - local: ' + window.localEnv)\n console.log('watchlist - dev qa or staging: ' + window.testEnv)\n console.log('watchlist - prod: ' + window.prodEnv)\n\n // Dictates Prod vs. test env for Token Service\n let ngtvVar = 'token.ngtv.io';\n if(window.localEnv || window.testEnv){\n ngtvVar = 'ite.token.ngtv.io'\n }\n\n watchlist = {\n // create obj to store count, btn and elements\n domWatchlistModifiers: {\n watchlistCount: undefined, // how many in array / int\n watchlistArray: undefined, // full array of watchlist\n addSubtractMovie: undefined, // dom element added to btn + / -\n currentId: (currentURL.split('/'))[3], // video id of page / string\n watchlistDomBubble: document.querySelectorAll('a[data-drupal-link-system-path=\"watchtcm/watchlist\"]'), // dom elements / watchlist count bubbles\n isCurrentPageInList: undefined, // boolean\n url: (currentURL.split('/'))[2], // page name from url, used to check if you're on titles page / string\n ifTitlesPageVodTitle: undefined, // if on titles page grab .. title Title\n ifTitlesPageVodImg: undefined, // if on titles page grab .. title Img\n ifTitlesPageVodYear: undefined, // if on titles page grab .. title Year\n ifTitlesPageVodPub: undefined, // if on titles page grab .. title Publish Date\n ifTitlesPageVodExp: undefined // if on titles page grab .. title Expiration Date\n },\n readWatchList: async function(){\n window.auth.prepare()\n .then(async () => {\n let Getauth = await startAuthFlow()\n return Getauth\n })\n\n // Start up the auth process\n async function startAuthFlow() {\n auth\n .prepare()\n .then((context) => {\n window.adobeToken = context;\n adobeToken = context;\n auth\n .fetchAuthContext()\n .then((isAuthenticated) => {\n console.log(`authenticatedState = ${isAuthenticated.authenticatedState}`);\n if (isAuthenticated.authenticatedState !== 'unauthenticated') {\n window.userAuth = true;\n authorize();\n } else {\n auth.login().then(authorize);\n }\n })\n .catch((error) => {\n console.error('Auth fetchAuthContext failed: ', error);\n });\n })\n .catch((error) => console.error('Auth prepare failed: ', error));\n }\n\n const authorize = () => {\n auth\n .authorize({ channel: 'TCM' })\n .then(async ({ channel, token }) => {\n window.authToken = token;\n let newNgtvToken = await getNgtvToken();\n return newNgtvToken;\n })\n .then(() => {\n getWatchlist();\n })\n .catch((error) => console.error('Authorization failed: ', error));\n };\n\n /* -------------------- getNgtvToken() --------------------*/\n async function getNgtvToken() {\n ngtvTokenRequestUrl = `https://${ngtvVar}/token/token_ngtv?format=json&appId=${appId}&accessTokenType=${Player.auth.AuthTokenType.Adobe}&accessToken=${encodeURIComponent(window.authToken)}`;\n // console.log('[getNgtvPlayer] - url: '+ngtvTokenRequestUrl)\n if (!ngtvToken) {\n // get the initial NGTV token \n $.ajax({\n async: false, url: ngtvTokenRequestUrl, method: 'GET',\n }).done((data) => {\n ngtvToken = data;\n ngtvTokenRefreshRate = (parseInt(ngtvToken.auth.token_ttl) - 60000);\n console.log('-----------\\nWatchlist.js first token() refresh rate: ' + ngtvTokenRefreshRate);\n return ngtvToken;\n });\n } else {\n // refresh NGTV token\n $.ajax({\n method: 'GET', async: true, url: ngtvTokenRequestUrl, headers: {\n 'Content-Type': 'application/x-www-form-urlencoded', 'app-id': appId,\n }, body: {\n accessTokenType: 'turner', accessToken: ngtvToken,\n },\n }).done((data) => {\n ngtvToken = data;\n ngtvTokenRefreshRate = (parseInt(ngtvToken.auth.token_ttl) - 60000);\n console.log('-----------\\nWatchlist.js token() refreshed at rate: ' + ngtvTokenRefreshRate);\n return ngtvToken;\n }).error((data) => {\n console.log('refresh NGTV token() ERROR -----------\\n' + data);\n });\n }\n return ngtvToken;\n } \n\n /* -------------------- getWatchlist() --------------------*/\n function getWatchlist(){\n // console.log(\"https://sbp.ngtv.io/v2/getContent?format=json&ngt=\" + ngtvToken.auth.ngtv_token + \"&appId=\" + appId);\n // grab all NGTV data ajax()\n $.ajax({\n async: false,\n url: \"https://sbp.ngtv.io/v2/getContent?format=json&ngt=\" + ngtvToken.auth.ngtv_token + \"&appId=\" + appId\n }).done(function(data){\n // save only favorities to watchlist array\n watchlist.domWatchlistModifiers.watchlistArray = data.documents.filter( vod => vod.seriesId == 'favorites')\n // only init watchlist page if you're on that page\n if(currentURL == '/watchtcm/watchlist'){\n WatchlistPage.initialize(window.watchlist);\n }\n\n }).error((data) => console.log('getWatchlist() error: ' + data\n )).then( () =>{\n // filter out expired\n let todaysDate = Date.now();\n watchlist.domWatchlistModifiers.watchlistArray = watchlist.domWatchlistModifiers.watchlistArray.filter( (vod) => {\n // if expired remove from NGTV db\n if(todaysDate > vod.metadata.expiration){\n $.ajax({\n async: false,\n url: \"https://sbp.ngtv.io/v2/removeContent?format=json&ngt=\" + ngtvToken.auth.ngtv_token + \"&contentId=\" +vod.contentId +\"&appId=\" + appId,\n\n }).then( () => {\n console.log(\"a title found in your watchlist has expired: \" + vod.metatdata.title + \"\\nTitleID: \"+ contentId + \"it's been removed\")\n }).error( console.log('ajax failure to remove expired vod'))\n // if vod in flight return to\n }else{\n return vod;\n }\n });\n\n }).then( () => {\n // update count value\n watchlist.domWatchlistModifiers.watchlistCount = watchlist.domWatchlistModifiers.watchlistArray.length;\n // is current viewable FILMS PAGE in FAVORITES list?\n watchlist.domWatchlistModifiers.isCurrentPageInList = watchlist.domWatchlistModifiers.watchlistArray.some( (vod) => vod.contentId == watchlist.domWatchlistModifiers.currentId )\n watchlist.updateDom();\n //console.log('at end of readWatchList()')\n //console.table(domWatchlistModifiers)\n });\n }\n },\n\n /* -------------------- modWatchlist() --------------------*/\n modWatchlist: function(importedVodId){\n\n\n // if called from a watchlist page importedVodId will = string ..\n // and vod will be in WL\n if(typeof importedVodId == 'string'){\n console.log('passed in from WL Page: '+ importedVodId +'\\nTypeof: ' + typeof importedVodId)\n watchlist.domWatchlistModifiers.isCurrentPageInList = true;\n watchlist.domWatchlistModifiers.currentId = importedVodId;\n }\n\n // is current title page in watchlist\n if(watchlist.domWatchlistModifiers.isCurrentPageInList){\n console.log('Current Page is in WL. \\nisCurrentPageInList value is set to: ' + watchlist.domWatchlistModifiers.isCurrentPageInList )\n\n // loop through list, find and remove current vod from WL\n watchlist.domWatchlistModifiers.watchlistArray.map( (vod, index) => {\n\n // if current page ID = current VOD ID in watchlist\n console.log('looping currently on: ' +vod.metadata.title )\n if(vod.contentId == watchlist.domWatchlistModifiers.currentId){\n console.log('vod found in loop! ' +vod.metadata.title )\n vod.metadata.favorite = (vod.metadata.favorite ? null : true);\n vod.seriesId = (vod.seriesId ? null : 'favorites');\n // console.log('before ajax')\n // console.table(vod)\n $.ajax({\n async: false,\n url: \"https://sbp.ngtv.io/v2/setContent?format=json&ngt=\" +ngtvToken.auth.ngtv_token + \"&appId=\" +appId ,\n data: JSON.stringify(vod),\n method: \"POST\",\n traditional: true,\n contentType: \"application/json; charset=utf-8\"\n }).done( (data) => {\n console.log('if current page ID ----------')\n\n // current page is No Longer in array\n //watchlist.domWatchlistModifiers.watchlistArray.pop(sbpBody)\n\n // remove from local array\n // console.table(watchlist.domWatchlistModifiers.watchlistArray)\n console.log('Ajax return should be deleting ' + index)\n delete watchlist.domWatchlistModifiers.watchlistArray[index]\n // update values\n watchlist.domWatchlistModifiers.watchlistCount -= 1;\n watchlist.domWatchlistModifiers.isCurrentPageInList = false;\n watchlist.domWatchlistModifiers.addSubtractMovie = '+';\n console.log('After AJAx:\\nremoved from NGTV watchlist '+ data.success +\n '\\nisCurrentPageInList: '+ watchlist.domWatchlistModifiers.isCurrentPageInList +\n '\\naddSubtractMovie: '+ watchlist.domWatchlistModifiers.addSubtractMovie +\n '\\nCount: '+ watchlist.domWatchlistModifiers.watchlistCount);\n //domWatchlistModifiers.isCurrentPageInList = (domWatchlistModifiers.isCurrentPageInList? false: true)\n return deleteSuccess = true;\n }).error( (data) => {\n console.log('moWatchlist() ajax fail: ' + data)\n deleteSuccess = false;\n });\n } // end map\n }); // end if\n\n // current title page is NOT in watchlist\n }else{\n console.log('Current page is NOT in WL \\nisCurrentPageInList value is set to: ' + watchlist.domWatchlistModifiers.isCurrentPageInList )\n\n let sbpBody = {\n contentId: watchlist.domWatchlistModifiers.currentId,\n metadata: {\n expiration: parseInt(watchlist.domWatchlistModifiers.ifTitlesPageVodExp),\n favorite: true,\n id: watchlist.domWatchlistModifiers.currentId,\n image: watchlist.domWatchlistModifiers.ifTitlesPageVodImg,\n position: 0,\n title: watchlist.domWatchlistModifiers.ifTitlesPageVodTitle,\n updated: parseInt(watchlist.domWatchlistModifiers.ifTitlesPageVodPub),\n year: parseInt(watchlist.domWatchlistModifiers.ifTitlesPageVodYear)\n },\n seriesId:'favorites'\n };\n console.log('before ajax send --------------')\n\n\n $.ajax({\n async: false,\n url: \"https://sbp.ngtv.io/v2/setContent?format=json&ngt=\" +ngtvToken.auth.ngtv_token + \"&appId=\" +appId ,\n data: JSON.stringify(sbpBody),\n method: \"POST\",\n traditional: true,\n contentType: \"application/json; charset=utf-8\"\n }).done( (data) => {\n console.log('if current page ID ----------')\n\n // push to array locally\n watchlist.domWatchlistModifiers.watchlistArray.push(sbpBody)\n // update values\n if( window.userProvider != \"Dish\"){\n watchlist.domWatchlistModifiers.watchlistCount += 1;\n watchlist.domWatchlistModifiers.addSubtractMovie = '- ';\n console.log('After AJAx:\\nadded to NGTV watchlist and dom '+ data.success +\n '\\nisCurrentPageInList: '+ watchlist.domWatchlistModifiers.isCurrentPageInList +\n '\\naddSubtractMovie: '+ watchlist.domWatchlistModifiers.addSubtractMovie +\n '\\nCount: '+ watchlist.domWatchlistModifiers.watchlistCount);\n\n }\n watchlist.domWatchlistModifiers.isCurrentPageInList = true;\n return deleteSuccess = true;\n }).error( (data) => {\n console.log('moWatchlist() ajax fail: ' + data)\n deleteSuccess = false\n })\n }\n watchlist.updateDom()\n return deleteSuccess\n },\n\n /* -------------------- updateDom() --------------------*/\n updateDom: function(){\n\n // if watchlist count undefined || blank set watchlistCount to 0\n if (watchlist.domWatchlistModifiers.watchlistCount == undefined || watchlist.domWatchlistModifiers.watchlistCount == ''){\n watchlist.domWatchlistModifiers.watchlistCount = 0;\n }\n var watchlistSpan = `watchlist${watchlist.domWatchlistModifiers.watchlistCount}`\n // update both nav bubble elements .. desktop + mobile\n // domWatchlistModifiers.watchlistDomBubble.forEach(ele => ele.innerHTML = watchlistSpan)\n for (var i = 0; i < watchlist.domWatchlistModifiers.watchlistDomBubble.length; i++) {\n watchlist.domWatchlistModifiers.watchlistDomBubble[i].innerHTML = watchlistSpan\n }\n\n // if current page is titles page, update watchtlist btn + grab vod info from DOM.\n if (watchlist.domWatchlistModifiers.url == 'titles'){\n // attach listener to watchlist button\n watchlist.domWatchlistModifiers.modifyWatchlistBtn = document.querySelector('#watchListMod')\n watchlist.domWatchlistModifiers.modifyWatchlistBtn.addEventListener('click', watchlist.modWatchlist )\n\n // grab vod info from page for use if/when users adds vod to WL\n watchlist.domWatchlistModifiers.ifTitlesPageVodTitle = document.getElementById('MovieName').innerHTML;\n watchlist.domWatchlistModifiers.ifTitlesPageVodImg = document.getElementById('ProfileImage').getAttribute('data-watchlistimg')\n watchlist.domWatchlistModifiers.ifTitlesPageVodExp = parseInt(document.getElementById('expired').getAttribute('data-expiry'))\n watchlist.domWatchlistModifiers.ifTitlesPageVodPub = parseInt(document.getElementById('expired').getAttribute('data-published'))\n watchlist.domWatchlistModifiers.ifTitlesPageVodYear = document.getElementById('ReleaseYear') ? parseInt(document.getElementById('ReleaseYear').innerHTML) : '';\n\n // add - value to watchlist button\n if(watchlist.domWatchlistModifiers.isCurrentPageInList){\n // display intercept\n if (window.userProvider == \"Dish\"){\n $('#mvpd-intercept').css('display',' block');\n var providerImg = document.getElementById(\"mvpd-logo\");\n providerImg.setAttribute(\"src\", \"https://cvp1.cdn.turner.com/xslo/tve/assets/\" + window.userProvider + \"_black.png?w=85&h=28\");\n providerImg.setAttribute(\"alt\", window.userProviderDisplayName);\n }else{\n watchlist.domWatchlistModifiers.addSubtractMovie = '- ';\n }\n //watchlist.domWatchlistModifiers.isCurrentPageInList = true\n // add + value to watchlist button\n }else{\n watchlist.domWatchlistModifiers.addSubtractMovie = '+ ';\n //watchlist.domWatchlistModifiers.isCurrentPageInList = false\n }\n // update update Watchtlist Btn\n watchlist.domWatchlistModifiers.modifyWatchlistBtn.innerHTML = `${watchlist.domWatchlistModifiers.addSubtractMovie} WATCHLIST`\n }\n console.log('\\nAfter updateDOM =========' +\n '\\nisCurrentPageInList: '+ watchlist.domWatchlistModifiers.isCurrentPageInList +\n '\\naddSubtractMovie: '+ watchlist.domWatchlistModifiers.addSubtractMovie +\n '\\nCount: '+ watchlist.domWatchlistModifiers.watchlistCount);\n }\n\n }\n // have to seperate out the dom elements that arent global.\n watchlist.readWatchList()\n return window.watchlist = watchlist\n } // close initalize()\n} // close Watchlist\n","import WatchModal from '../global/WatchModal';\nconst { AuthConfigBuilder } = TOP.Auth.builder;\nconst { PlayerConfigBuilder } = TOP.Player;\nconst { ContentEntryBuilder } = TOP.Player;\nconst Player = TOP.Player;\nconst Auth = TOP.Auth;\nconst mvpdConfigURL = new URL('https://tvem.cdn.turner.com/v2/getConfig');\nmvpdConfigURL.searchParams.set('brand', 'TCM');\nmvpdConfigURL.searchParams.set('platform', 'web');\nmvpdConfigURL.searchParams.set('country', 'US');\nconst appId = drupalSettings.top_appid || '';\nconst softwareStatement = drupalSettings.top_software_statement || '';\nconst companyIdVOD = drupalSettings.top_companyid_vod || '';\nconst companyIdLive = drupalSettings.top_companyid_live || '';\nconst customerkey = drupalSettings.top_customerkey || '';\n\nexport default class WatchPlayer {\n static async initialize(inputData) {\n let usprivacy;\n const topVersion = TOP.Player.Version.toString();\n const video_metadata = {};\n let adobeToken = {};\n let ngtvVar = 'token.ngtv.io';\n let position = 0;\n let ngtvTokenRefreshRate = 200000;\n let ngtvToken, ngtvTokenRequestUrl, vodMeta;\n\n if (window?.localEnv || window?.testEnv) {\n ngtvVar = 'ite.token.ngtv.io';\n }\n \n document.cookie.split(';').forEach((item) => {\n if (item.indexOf('usprivacy=') > 0) {\n usprivacy = item.split('=')[1];\n }\n });\n\n const player = Player.create();\n\n const mediaEvents = {\n playerReady: \"Player_Ready\",\n adStarted: \"Ad_Creative_Started\",\n adFinished: \"Ad_Finished\",\n mediaStarted: \"Media_Started\",\n mediaBufferingStarted: \"Media_Buffering_Started\",\n mediaBufferingFinished: \"Media_Buffering_Finished\",\n mediaPaused: \"Media_Paused\",\n mediaResumed: \"Media_Resumed\",\n mediaFinished: \"Media_Finished\",\n contentCompleted: \"Content_Completed\",\n };\n\n let convivaOptions = {\n customerKey: customerkey,\n applicationName: 'ApplicationName configured',\n touchstoneUrl: '//cws.conviva.com',\n assetName: '',\n };\n\n // Configure the player instance\n const setupConfig = PlayerConfigBuilder.forSetup()\n .withContainer(document.getElementById('watch__player__video'))\n .withConviva(convivaOptions)\n .withMetadata({\n appId,\n serviceWorkerPath: './player-service-worker.js',\n })\n .build();\n\n player.events.listen({\n playerReady: function(result) {\n if (inputData.videoType === 'CLIP') {\n this.play(inputData.mediaId);\n } else {\n startAuthFlow();\n }\n },\n contentSetup: function(result) {\n const playhead = result.time;\n video_metadata.playerid = 'top-2';\n video_metadata.content_duration = playhead;\n },\n adCreativeStarted: function(result) {\n video_metadata.ad_duration = ''; //player.model().adDuration(); //ad length in second\n video_metadata.ad_type = ''; //player.model().adType().toString(); //preroll, midroll, postroll\n },\n mediaStarted: function(result) {\n const playhead = result.time;\n if (inputData.feed !== 'WEST' && inputData.feed !== 'EAST') {\n video_metadata.content_duration = playhead;\n } else {\n video_metadata.content_duration = 0;\n }\n },\n mediaPaused: function(result) {\n const playhead = result.time;\n if (inputData.feed === 'VOD') {\n position = Math.round(playhead);\n storePlayHead(false);\n }\n video_metadata.paused = true;\n trackTOPEvent('video-pause', result, video_metadata);\n },\n mediaStopped: function(result) {\n const playhead = result.time;\n if (inputData.feed === 'VOD') {\n position = Math.round(playhead);\n storePlayHead(false);\n }\n },\n mediaResumed: function(result) {\n video_metadata.paused = false;\n trackTOPEvent('video-pause', result, video_metadata);\n },\n mediaTimeChanged: function(result) {\n const playhead = result.time;\n window.timeProgressed = playhead;\n },\n contentCompleted: function(result) {\n if (inputData.feed === 'VOD') {\n position = '0';\n storePlayHead(true);\n }\n trackTOPEvent(\"video-complete\", result, video_metadata);\n player.exitFullscreen();\n }\n })\n\n player.events.listen(function(type, result) {\n const eventMapper = (ev) => mediaEvents[ev] || \"\";\n if (eventMapper(type) != \"\") {\n if (\"trackTOPEvent\" in window && trackTOPEvent) {\n trackTOPEvent(eventMapper(type), result, video_metadata)\n }\n }\n });\n \n // Initialize the player\n player.setup(setupConfig);\n \n // startAuthFlow();\n const auth = window.auth;\n\n // Start up the auth process\n async function startAuthFlow() {\n auth\n .prepare()\n .then((context) => {\n window.adobeToken = context;\n adobeToken = context;\n auth\n .fetchAuthContext()\n .then((isAuthenticated) => {\n // console.log(`authenticatedState = ${isAuthenticated.authenticatedState}`);\n if (isAuthenticated.authenticatedState !== 'unauthenticated') {\n window.userAuth = true;\n authorize();\n } else {\n auth.login().then(authorize);\n }\n })\n .catch((error) => {\n console.error('Auth fetchAuthContext failed: ', error);\n });\n })\n .catch((error) => console.error('Auth prepare failed: ', error));\n }\n\n function popUp(message) {\n if (message) {\n const popUpMessage = '
There was a problem accessing this content...

' + message + '
';\n let inputData = {\n type: 'text',\n fullText: popUpMessage\n };\n const modal = new WatchModal(inputData);\n modal.open(inputData);\n return;\n }\n }\n\n const authorize = () => {\n auth\n .authorize({ channel: 'TCM' })\n .then(async ({ channel, token }) => {\n window.authToken = token;\n if (inputData.feed === 'VOD') {\n let newNgtvToken = await getNgtvToken();\n return newNgtvToken;\n }\n })\n .then(async newNgtvToken => {\n if (inputData.feed === 'VOD') {\n assignPlayHead();\n }\n }).then(() => playContent(window.authToken), error => {\n popUp(error.message);\n })\n .catch((error) => console.error('Authorization failed: ', error));\n };\n\n async function getNgtvToken() {\n // for production\n ngtvTokenRequestUrl = `https://${ngtvVar}/token/token_ngtv?format=json&appId=${appId}&accessTokenType=${Player.auth.AuthTokenType.Adobe}&accessToken=${encodeURIComponent(window.authToken)}`;\n // console.log('[getNgtvPlayer] - url: '+ngtvTokenRequestUrl)\n if (!ngtvToken) {\n // get the initial NGTV token \n $.ajax({\n async: false, url: ngtvTokenRequestUrl, method: 'GET',\n }).done((data) => {\n ngtvToken = data;\n ngtvTokenRefreshRate = 200000;\n return ngtvToken;\n });\n } else {\n // refresh NGTV token\n $.ajax({\n method: 'GET', async: true, url: ngtvTokenRequestUrl, headers: {\n 'Content-Type': 'application/x-www-form-urlencoded', 'app-id': appId,\n }, body: {\n accessTokenType: 'turner', accessToken: ngtvToken,\n },\n }).done((data) => {\n ngtvToken = data;\n ngtvTokenRefreshRate = 200000;\n return ngtvToken;\n }).error((data) => {\n console.log('refresh NGTV token() ERROR -----------\\n' + data);\n });\n }\n return ngtvToken;\n }\n\n setInterval(getNgtvToken, ngtvTokenRefreshRate);\n\n function storePlayHead(vodCompleted) {\n let sbpUrl = `https://sbp.ngtv.io/v2/setContent?format=json&ngt=${ngtvToken.auth.ngtv_token}&appId=${appId}`;\n // console.log('[]WatchPlayer[] - storePlayHead() url:' + sbpUrl);\n let sbpBody;\n if (vodCompleted) {\n sbpBody = {\n contentId: inputData.titleId, metadata: {\n id: inputData.titleId, position: 0,\n },\n };\n } else {\n sbpBody = {\n contentId: inputData.titleId, metadata: {\n expiration: parseInt(inputData.expiry),\n favorite: (vodMeta.metadata.favorite ? vodMeta.metadata.favorite : null),\n id: inputData.titleId,\n image: (vodMeta.metadata.image ? vodMeta.metadata.image : null),\n position: position,\n title: inputData.title,\n updated: parseInt(inputData.publish),\n year: parseInt(inputData.releaseYear),\n }, seriesId: (vodMeta.seriesId ? vodMeta.seriesId : null),\n };\n }\n $.ajax({\n async: true,\n url: sbpUrl,\n data: JSON.stringify(sbpBody),\n method: 'POST',\n traditional: true,\n contentType: 'application/json; charset=utf-8',\n headers: {\n 'Content-Length': sbpBody.length,\n },\n }).done((data) => {\n // console.log('[]WatchPlayer[] - stored? ' + data.success);\n }).error((data) => console.log(data));\n }\n\n async function assignPlayHead() {\n const sbpUrl = `https://sbp.ngtv.io/v2/getContent?format=json&ngt=${ngtvToken.auth.ngtv_token}&appId=${appId}&contentId=${inputData.titleId}`;\n //var sbpUrl = sbpHost + \"getContent?ngt=\" + ngtvToken.auth.ngtv_token + \"&appId=\" + appId + \"&contentId=\" + inputData.titleId;\n // console.log('[]WatchPlayer[] - assignPlayHead() ' + sbpUrl);\n $.ajax({\n async: true, url: sbpUrl,\n }).done(data => {\n // if vod hasn't been played yet set to zero\n vodMeta = data?.documents?.[0];\n // console.log('[]WatchPlayer[] - successful AJAX assignPlayHead()');\n if (data?.documents?.[0] === undefined) {\n // console.log('[]WatchPlayer[] - vod hasnt been played =============');\n data.documents[0] = {\n contentId: inputData.titleId, metadata: {\n id: inputData.titleId, position: 0,\n },\n };\n vodMeta = data?.documents?.[0];\n } else {\n position = data?.documents?.[0]?.metadata?.position;\n }\n return position;\n }).error((data) => console.log(data));\n return position;\n }\n\n async function playContent(token) {\n // If access token retreived, pass token info on the play options\n let contentUrl;\n if (inputData.feed === 'VOD') {\n contentUrl = inputData.bulkaesURL;\n } else if (inputData.feed === 'EAST') {\n contentUrl = 'https://turnerlive.akamaized.net/hls/live/2023186/tcmeast/noslate/master.m3u8';\n } else if (inputData.feed === 'WEST') {\n contentUrl = 'https://turnerlive.akamaized.net/hls/live/2023187/tcmwest/noslate/master.m3u8';\n } else if (inputData.feed === 'CLIP') {\n contentUrl = inputData.mediaId;\n }\n\n let AuthConvivaOptions = {\n customerKey: 'dbd2f42d442bf97bff830c96f7eb79d33d42e79a',\n applicationName: 'TCM-Web',\n touchstoneUrl: '//cws.conviva.com',\n assetName: inputData.title,\n viewerId: \"1234567890\",\n tags : {\n 'rootID': '3056194',\n 'playerName': 'TCM - Desktop',\n 'authRequired': 'true',\n 'channel': 'TCM',\n 'contentType': inputData.feed,\n 'contentId': 'bb629946a7919de14cf5611257947ec0a052c493',\n 'tmsID': 'EP006883590001',\n 'genre': 'entertainment',\n 'pubDate': '2018-12-20',\n 'kruxId': 'LJFM4C9z',\n 'site': 'tcm.com',\n 'viewerAuthState': 'true',\n 'adobeID': '1212121212',\n 'streamProtocol': 'HLS',\n 'appVersion': '1.0.0',\n 'affiliate': adobeToken?.authenticatedProvider.displayName, //true Provider ID. ex: Comcast XFINITY (not Comcast_SSO)\n 'playerVendor': 'TOP',\n 'viewId': '1234567890',\n 'deviceId': 'c95db1b0a1349624a6151b2d8946c1ab',\n 'playerVersion': topVersion,\n },\n };\n\n video_metadata.content_dataCreated = inputData.releaseYear;\n video_metadata.content_dataAired = inputData.releaseYear;\n video_metadata.content_name = inputData.title;\n video_metadata.content_id = inputData.titleId;\n video_metadata.content_type = inputData.feed === 'EAST' || inputData.feed === 'WEST' ? 'live' : 'vod';\n video_metadata.content_format = getMediaFormat();\n // video_metadata.user_id: adobe hash id\n video_metadata.content_type_level2 = analyticsReturn();\n video_metadata.mvpd = window.userProvider;\n video_metadata.user_id = window.userProviderId;\n video_metadata.content_feed = liveStreamConverter();\n video_metadata.login_state = (window.userAuth) ? \"logged in\" : \"not logged in\";\n video_metadata.authentication_requirement = \"not required\";\n \n // SPE\n // Create entry data\n let contentPlayData = ContentEntryBuilder.forEntryData()\n .addFile({\n assetId: inputData.mediaId,\n url: contentUrl,\n playlistProtection: Player.auth.AuthCdnTokenType.Spe,\n })\n .build();\n\n let playConfig = PlayerConfigBuilder.forPlay()\n .withConviva(AuthConvivaOptions)\n .withMetadata({\n appId,\n companyId: companyIdVOD\n })\n // Additional Player Configuration\n .build();\n let contentEntryData = ContentEntryBuilder.forEntryOptions()\n .withAccessToken(token)\n .withAccessTokenType(Player.auth.AuthTokenType.Adobe)\n .withPlayConfigOverrides(playConfig)\n // Additional Content Options Configuration\n .build();\n\n player.play(contentPlayData, contentEntryData);\n }\n\n function getMediaFormat() {\n switch (inputData.videoType) {\n case ('EAST'):\n case ('WEST'):\n return 'movie';\n case 'VOD':\n return 'movie';\n case 'CLIP':\n if (inputData.clipType === 'Movie Clip') {\n return 'clip';\n } else {\n return inputData.clipType.toLowerCase();\n }\n default:\n return inputData.clipType.toLowerCase();\n }\n }\n\n function liveStreamConverter() {\n switch (inputData.feed) {\n case ('EAST'):\n return 'Simulcast East';\n case ('WEST'):\n return 'Simulcast West';\n default:\n return '';\n }\n }\n\n function analyticsReturn() {\n if (inputData.feed === 'VOD') {\n return 'video:vod:tve:episode:c4:content';\n } else if (inputData.feed === 'EAST' || inputData.feed === 'WEST') {\n return 'video:live:tve:live:live:content';\n } else {\n return 'video:clip:non tve:clip:clip:content';\n }\n }\n\n }\n}\n","import WatchModal from '../global/WatchModal';\nimport WatchPlayer from '../components/WatchPlayer';\nimport md5 from 'blueimp-md5';\n\nconst API_URLS = {\n 'local.tcm.com': 'https://qa-tcmws.tcm.com',\n 'localhost.tcm.com': 'https://qa-tcmws.tcm.com',\n 'tcm.dd': 'https://qa-tcmws.tcm.com',\n 'dev.tcm.com': 'https://dev-tcmws.tcm.com',\n 'dev-www.tcm.com': 'https://dev-tcmws.tcm.com',\n 'dev-admin.tcm.com': 'https://dev-tcmws.tcm.com',\n 'qa.tcm.com': 'https://qa-tcmws.tcm.com',\n 'qa-www.tcm.com': 'https://qa-tcmws.tcm.com',\n 'qa-admin.tcm.com': 'https://qa-tcmws.tcm.com',\n 'staging.tcm.com': 'https://staging-tcmws.tcm.com',\n 'staging-www.tcm.com': 'https://staging-tcmws.tcm.com',\n 'staging-admin.tcm.com': 'https://staging-tcmws.tcm.com',\n default: 'https://tcmws.tcm.com',\n};\n\nexport default class WatchTiles {\n static initialize() {\n $(document).ready(function () {\n const envVars = window.location.hostname;\n const apiURL = API_URLS[envVars] ?? API_URLS.default;\n let inputData = {};\n\n $('.watch__section').on(\n 'click',\n '.watch-tile__top-wrap.modal-capable, .watch-button--play .watchnowbutton, .modal-video-play',\n function () {\n // Error handling for ajax calls\n function handleAjaxError(error) {\n console.error(`Error in Ajax call: ${error}`);\n }\n\n inputData = {\n mediaId: this.getAttribute('data-url'),\n type: 'player',\n title: this.getAttribute('data-name'),\n des: this.getAttribute('data-des'),\n videoType: this.getAttribute('data-type'), // VOD, CLIP, WEST OR EAST\n feed: this.getAttribute('data-type'),\n releaseYear: this.getAttribute('data-year'),\n runtime: this.getAttribute('data-runtime'),\n genre: this.getAttribute('data-genre'),\n rating: this.getAttribute('data-rating'),\n titleId: this.getAttribute('data-titleId'),\n clipType: this.getAttribute('data-clipType'),\n expiry: this.getAttribute('data-expiry'),\n publish: this.getAttribute('data-publish'),\n };\n\n if (inputData.videoType === 'VOD') {\n $.ajax({\n url: `https://medium.ngtv.io/media/${inputData.mediaId}`,\n type: 'GET',\n headers: {\n accept: 'application/json;odata=verbose',\n },\n success: function (data) {\n inputData.bulkaesURL = data?.media?.desktop?.bulkaes?.secureUrl;\n populateOverlayCarousel();\n },\n error: handleAjaxError,\n });\n } else {\n populateOverlayCarousel();\n }\n\n function populateOverlayCarousel() {\n // check if mobile user and reroute to app based on userAgent\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {\n $('body').append(`\n
\n
\n
\n
want to watch movies and tcm live streams?
\n
Download the FREE Watch TCM app to view on your phone or tablet
\n \"watchTCM\n Get the free app\n
\n
\n `);\n\n // assign deep link based on user agent\n if (/android/i.test(navigator.userAgent)) {\n $('#app-download-link').attr('href', 'https://play.google.com/store/apps/details?id=com.tcm.tcm');\n } else if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {\n $('#app-download-link').attr('href', 'https://itunes.apple.com/us/app/tcm/id341161319?ls=1&mt=8');\n }\n\n // close app redirect overlay\n $('#app-redirect-close').on('click touch', function () {\n $(this).parents('#modal-overlay').remove();\n });\n } else {\n let meta = \"\";\n if (\n inputData?.videoType === \"VOD\" ||\n inputData?.videoType === \"EAST\" ||\n inputData?.videoType === \"WEST\"\n ) {\n const releaseMeta = inputData?.releaseYear\n ? `${inputData?.releaseYear}`\n : \"\";\n const runtimeMeta = inputData?.runtime\n ? ` . ${inputData?.runtime}`\n : \"\";\n const genreMeta = inputData?.genre\n ? ` . ${inputData?.genre}`\n : \"\";\n const ratingMeta = inputData?.rating\n ? ` . ${inputData?.rating}`\n : \"\";\n meta = releaseMeta + runtimeMeta + genreMeta + ratingMeta;\n } else {\n meta = inputData?.des;\n }\n\n // Handle TOP Auth\n let handleAuthContext = async context => {\n if (context.isAuthenticated()) {\n /* ---------------- Successful Authentication -------------------- */\n let userAuthBtn = document.getElementById(\"user-auth-btn\");\n const ratio = 'devicePixelRatio' in window && Number(window.devicePixelRatio) || 1;\n const originalWidth = 85;\n const originalHeight = 28;\n const imgWidth = Math.floor(originalWidth * ratio);\n const imgHeight = Math.floor(originalHeight * ratio);\n let providerImg = document.getElementById('provider-image');\n if (providerImg === null) {\n const imgUrl = await auth.buildImageURL({\n color: 'white',\n context: 'cobranding',\n providerId: context.authenticatedProvider.id,\n width: imgWidth,\n height: imgHeight,\n });\n providerImg = document.createElement('img');\n providerImg.setAttribute('src', imgUrl.imageURL);\n providerImg.setAttribute('width', String(originalWidth));\n providerImg.setAttribute('height', String(originalHeight));\n providerImg.setAttribute(\"id\", \"provider-image\");\n }\n\n window.userAuth = true;\n window.userProvider = context.authenticatedProvider.id;\n window.fw_ae = md5(context.authenticatedProvider.id.toLowerCase());\n window.fw_ar = 1;\n window.userProviderDisplayName = context.authenticatedProvider.displayName;\n userAuthBtn.innerHTML = \"SIGN OUT\";\n userAuthBtn.style.display = \"none\";\n userAuthBtn.parentNode.insertBefore(providerImg, userAuthBtn.nextSibling);\n \n modalCreation(inputData);\n } else {\n /* ---------------- Un-Successful Authentication -------------------- */\n startAuthFlow();\n }\n }\n \n // Start up the auth process\n async function startAuthFlow() {\n auth\n .prepare()\n .then((context) => {\n window.adobeToken = context;\n adobeToken = context;\n auth\n .fetchAuthContext()\n .then(async (isAuthenticated) => {\n // console.log(`authenticatedState = ${isAuthenticated.authenticatedState}`);\n if (isAuthenticated.authenticatedState !== 'unauthenticated') {\n window.userAuth = true;\n authorize();\n } else {\n auth.login().then(authorize);\n }\n })\n .catch((error) => {\n console.error('Auth fetchAuthContext failed: ', error);\n });\n })\n .catch((error) => console.error('Auth prepare failed: ', error));\n }\n\n const authorize = async () => {\n auth\n .authorize({ channel: 'TCM' })\n .then(async ({ channel, token }) => {\n window.authToken = token;\n window.auth.prepare().then(handleAuthContext);\n }) \n };\n\n // Analytics\n if (typeof turner_metadata !== 'undefined' && turner_metadata?.video_title) {\n turner_metadata.video_title = inputData.title;\n\n switch (inputData.videoType) {\n case 'VOD':\n if (turner_metadata?.video_franchise) {\n turner_metadata.video_franchise = 'vod';\n }\n break;\n\n case 'WEST':\n case 'EAST':\n if (turner_metadata?.video_franchise) {\n turner_metadata.video_franchise = 'livestream';\n }\n break;\n }\n }\n\n // If type of video is LiveStream or VOD playback needs auth\n if (\n inputData.videoType === \"VOD\" ||\n inputData.videoType === \"WEST\" ||\n inputData.videoType === \"EAST\"\n ) {\n // Analytics\n if (\n typeof turner_metadata !== \"undefined\" &&\n turner_metadata?.authentication_requirement\n ) {\n turner_metadata.authentication_requirement = \"required\";\n }\n\n // if user is authenticated create modal\n if (window.userAuth) {\n modalCreation(inputData);\n } else {\n window.auth.prepare().then(handleAuthContext)\n }\n // else user is watching clips that don't need auth to play\n } else {\n // Analytics\n if (\n typeof turner_metadata !== \"undefined\" &&\n turner_metadata?.authentication_requirement\n ) {\n turner_metadata.authentication_requirement = \"not required\";\n }\n\n modalCreation(inputData);\n }\n\n // Analytics\n if (\n typeof turner_metadata !== \"undefined\" &&\n turner_metadata?.login_state\n ) {\n if (window.userAuth) {\n turner_metadata.login_state = \"logged in\";\n } else {\n turner_metadata.login_state = \"not logged in\";\n }\n }\n\n function modalCreation(vodData) {\n // Build modal player sub template\n vodData.modal_player_template = `\n
\n
\n
DONE
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

${inputData.title}

\n

${meta}

\n
`;\n\n inputData.template = vodData.modal_player_template;\n // @todo - This is not required, this is just to demonstrate additional callbacks that can be used if needed on modal events\n const custom_options_that_are_not_required = {\n onOpen: async function (inputData) {\n // if LiveSteam is playing check for change in video meta on interval.\n // when the programming changes, update the meta content in the modal\n if (\n inputData.feed === \"EAST\" ||\n inputData.feed === \"WEST\"\n ) {\n // calls the function the first time\n liveFeedModalDataRefresh();\n }\n await WatchPlayer.initialize(inputData);\n },\n\n onClose: function (inputData) {\n // destroy player on modal close so you don't have mulitiple player instances floating around\n // if modal had a video player\n if (typeof window.player !== \"undefined\") {\n if (window.prodEnv || window.testEnv) {\n trackTOPEvent(\"Media_Finished\", 0, {});\n }\n window.player.stop();\n window.player.destroy();\n window.player = undefined;\n }\n // reset inputdata\n inputData = {};\n },\n };\n const modal = new WatchModal(\n inputData,\n custom_options_that_are_not_required\n );\n\n // You can also call like this if you don't need the additional callbacks\n // const modal = new WatchModal(test);\n\n modal.open(inputData);\n }\n }\n }\n\n function liveFeedModalDataRefresh() {\n var d = new Date(),\n h = new Date(\n d.getFullYear(),\n d.getMonth(),\n d.getDate(),\n d.getHours(),\n d.getMinutes() - (d.getMinutes() % 2) + 2,\n 0,\n 0\n ),\n e = h - d;\n // calls the function the second time and all preceeding intervals.\n window.setTimeout(liveFeedModalDataRefresh, e);\n let runTimeMins, hours, minutes;\n\n $.ajax({\n url: `${apiURL}/whatsOnNow/us/${identifyFeed()}`,\n type: 'GET',\n headers: {\n accept: 'application/json;odata=verbose',\n },\n success: function (data) {\n let metaDiv = document.querySelector('.watch__player__text__wrap');\n runTimeMins = data?.tcm?.schedule?.whatsOnNow?.runtimeMinutes;\n hours = Math.floor(runTimeMins / 60);\n minutes = runTimeMins % 60;\n if (metaDiv) {\n metaDiv.innerHTML = `

${data?.tcm?.schedule?.whatsOnNow?.name}

${data?.tcm?.schedule?.whatsOnNow?.releaseYear}. ${hours}h ${minutes}m. ${data?.tcm?.schedule?.whatsOnNow?.tvGenres}

`;\n }\n },\n });\n }\n\n function identifyFeed() {\n if (inputData.feed === 'EAST') {\n return 'est';\n } else {\n return 'pst';\n }\n } \n }\n ); \n\n // handles clicking of bottom half of tile for titles\n $('.watch__section').on('click', '.watch-tile__bottom-wrap.info-capable.watch-title', function () {\n const clickedTitleID = $(this).parents('.watch-tile').attr('data-tcm-id');\n window.location.href = `/watchtcm/titles/${clickedTitleID}`;\n $('#watchListMod').attr('data-id', clickedTitleID);\n });\n\n // Adding keydown event for keyboard navigation\n $('.watch__section').on(\n 'keydown',\n '.watch-tile__top-wrap.modal-capable, .watch-button--play .watchnowbutton, .modal-video-play',\n function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n $(this).click();\n }\n }\n );\n });\n }\n}\n","const { AuthConfigBuilder } = TOP.Auth.builder;\nconst mvpdConfigURL = new URL('https://tvem.cdn.turner.com/v2/getConfig');\nmvpdConfigURL.searchParams.set('brand', 'TCM');\nmvpdConfigURL.searchParams.set('platform', 'web');\nmvpdConfigURL.searchParams.set('country', 'US');\nconst appId = drupalSettings.top_appid || '';\nconst softwareStatement = drupalSettings.top_software_statement || '';\n\n// Configure the auth instance\nconst authConfig = new AuthConfigBuilder()\n.withAuthType('clientful')\n.withBrand('TCM')\n.withPlatform('web')\n.withMVPDConfigURL(mvpdConfigURL)\n.withServiceAppId(appId)\n.withSoftwareStatement(softwareStatement)\n.build()\n\n// Instantiate and initialize auth\nconst topAuth = TOP.Auth.create(authConfig)\n\n// Initialize jQuery alias\nwindow.$ = window.jQuery;\n\n// Initialize Authentication, AdobeAuth and TOP Player\n// Attach to window object as items are used globally\n// window.authManager = AuthManager;\nwindow.userAuth = false;\nwindow.player;\nwindow.adobeAccessToken = null;\n// window.AuthTokenType = com.turner.top.sdk.common.auth.AuthTokenType;\n// window.ContentEntryBuilder = com.turner.top.sdk.common.cms.ContentEntryBuilder;\nwindow.watchlist = {};\nwindow.userProvider;\nwindow.userProviderId = \"no mvpd set\";\nwindow.ngtvToken;\nwindow.appId;\nwindow.authToken;\nwindow.sup;\n\n\nlet UrlPathname = window.location.pathname\nwindow.localEnv = false\nwindow.testEnv = false\nwindow.prodEnv = false\n\n// Set dev/prod variables based off url:\nlet envVars = window.location.hostname;\nlet apiURL, s3Pool, s3Bucket, akamaiPre\nswitch (envVars) {\n case \"local.tcm.com\":\n case \"tcm.dd\":\n apiURL = \"https://qa-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\";\n s3Bucket = \"tcm-develop-www\";\n akamaiPre = \"https://dev-images.tcm.com/\";\n window.localEnv = true;\n break;\n case \"dev.tcm.com\":\n case \"dev-www.tcm.com\":\n case \"dev-admin.tcm.com\":\n apiURL = \"https://dev-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\";\n s3Bucket = \"tcm-develop-www\";\n akamaiPre = \"https://dev-images.tcm.com/\";\n window.testEnv = true;\n break;\n case \"qa.tcm.com\":\n case \"qa-www.tcm.com\":\n case \"qa-admin.tcm.com\":\n apiURL = \"https://qa-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\";\n s3Bucket = \"tcm-qa-www\";\n akamaiPre = \"https://qa-images.tcm.com/\";\n window.testEnv = true;\n break;\n case \"staging.tcm.com\":\n case \"staging-www.tcm.com\":\n case \"staging-admin.tcm.com\":\n apiURL = \"https://staging-tcmws.tcm.com\";\n s3Pool = \"us-east-1:815c496b-b17c-4d68-87ae-25af39af7d0c\";\n s3Bucket = \"tcm-stage-www\";\n akamaiPre = \"https://staging-images.tcm.com/\";\n window.testEnv = true;\n break;\n default:\n apiURL = \"https://tcmws.tcm.com\";\n s3Pool = \"us-east-1:30cf1fd4-ac22-4a68-b1e5-05d5f33a12a5\";\n s3Bucket = \"tcm-prod-www\";\n akamaiPre = \"https://prod-images.tcm.com/\";\n window.prodEnv = true;\n}\n\nwindow.apiURL = apiURL\n\nimport IntroAnimation from './components/introAnimation';\nimport Auth from './global/Auth';\nimport GlobalHeader from './global/GlobalHeader';\nimport WatchArchive from './components/WatchArchive';\nimport WatchCollections from './components/WatchCollections';\nimport WatchEssentials from './components/WatchEssentials';\nimport WatchFilters from './components/WatchFilters';\nimport WatchMoreText from './components/WatchMoreText';\nimport WatchSettings from './components/WatchSettings';\nimport WatchTiles from './components/WatchTiles';\nimport WatchTime from './global/WatchTime';\nimport WatchAnalytics from './components/WatchAnalytics';\n\n// Initialize components\nif (UrlPathname == '/watchtcm'){\n IntroAnimation.initialize();\n}\n// WatchlistPage.js is initialized inside Auth.js\nAuth.initialize(window.watchlist, UrlPathname, topAuth);\nGlobalHeader.initialize(UrlPathname);\nWatchArchive.initialize();\nWatchCollections.initialize(UrlPathname);\nWatchEssentials.initialize();\nWatchFilters.initialize();\nWatchMoreText.initialize();\nWatchSettings.initialize(UrlPathname);\nWatchTiles.initialize();\nWatchTime.initialize();\nWatchAnalytics.initialize();\nif (UrlPathname == '/activate'){\n activate.initialize();\n}\n","import WatchCarousel from '../components/WatchCarousel';\n\nexport default class IntroAnimation {\n static initialize() {\n\n window.onload = function(){ \n\n //grab elements \n const bgAnimation = document.querySelector('body')\n const logoAnimation = document.querySelector('.intro-animation-logo')\n const sloganAnimation = document.querySelector('.intro-animation-slogan')\n const watchPageWrapper = document.querySelector('#page-wrapper')\n const watchHeader = document.querySelector('.watch__header')\n const watchFooter = document.querySelector('.watch-footer__wrap')\n \n \n // is cookie there? // no\n // if(Cookies.get('welcomeAnimation') == undefined){\n \n // // assign background image to body at random intervials\n // var sup = (Math.floor(Math.random() * 4) + 1 )\n // var bgRotate = 'animationDone' + sup;\n // bgAnimation.classList.add('animateIn')\n \n // // begin animation \n // setTimeout( () => {\n // bgAnimation.classList.add(bgRotate)\n // logoAnimation.classList.add('done')\n // sloganAnimation.classList.add('done')\n // }, 500).then(loadPage()); \n \n // // remove animation classes and display index elements. \n // function loadPage(){\n // setTimeout( () => { \n // bgAnimation.classList.add('fade-in-body')\n // bgAnimation.classList.remove('animateIn')\n // bgAnimation.classList.remove(bgRotate)\n // logoAnimation.classList.add('hidden')\n // sloganAnimation.classList.add('hidden') \n // watchPageWrapper.classList.remove('hidden');\n // WatchCarousel.initialize();\n // watchHeader.classList.remove('hidden')\n // watchFooter.classList.remove('hidden')\n // setCookie()\n // }, 3500); \n \n // } \n // function setCookie() {\n // Cookies.set('welcomeAnimation','true', { expires: 7 })\n // }\n \n // }else{\n // yes cookie exists\n //bgAnimation.classList.remove('animateIn')\n bgAnimation.classList.add('fade-in-body')\n // bgAnimation.classList.remove(bgRotate)\n logoAnimation.classList.add('hidden')\n sloganAnimation.classList.add('hidden') \n watchPageWrapper.classList.remove('hidden')\n watchHeader.classList.remove('hidden')\n watchFooter.classList.remove('hidden')\n WatchCarousel.initialize(); \n \n // }\n };\n }\n}\n","import WatchModal from '../global/WatchModal';\nimport Watchlist from '../global/Watchlist';\nimport md5 from 'blueimp-md5';\n\nexport default class Auth {\n // User Authentication for VOD and livestream.\n static initialize(watchlist, UrlPathname, topAuth) {\n // add search and settings menu items to Hamburger / Mobile Flyout\n $('.watch-hamburger__wrap .menu--main .watch__menu .menu').append('
  • Settings
  • Sign In
  • ');\n\n var userAuthBtn = document.getElementById(\"user-auth-btn\");\n var userAuthBtnMobile = document.getElementById(\"user-mobile-auth-btn\");\n var userAuthBtnSettings = document.getElementById(\"settings-user-auth-btn\");\n window.userProvider = null\n window.auth = topAuth;\n\n let handleAuthContext = async context => {\n if (context.isAuthenticated()) {\n /* ---------------- Successful Authentication -------------------- */\n // console.log(\"[((.))] Authentication [((.))]\");\n const ratio = 'devicePixelRatio' in window && Number(window.devicePixelRatio) || 1;\n const originalWidth = 85;\n const originalHeight = 28;\n const imgWidth = Math.floor(originalWidth * ratio);\n const imgHeight = Math.floor(originalHeight * ratio);\n window.userProviderId = context.adobeHashId;\n let providerImg = document.getElementById('provider-image');\n if (providerImg === null) {\n const imgUrl = await topAuth.buildImageURL({\n color: 'white',\n context: 'cobranding',\n providerId: context.authenticatedProvider.id,\n width: imgWidth,\n height: imgHeight,\n });\n providerImg = document.createElement('img');\n providerImg.setAttribute('src', imgUrl.imageURL);\n providerImg.setAttribute('width', String(originalWidth));\n providerImg.setAttribute('height', String(originalHeight));\n providerImg.setAttribute(\"id\", \"provider-image\");\n }\n\n // Replace header button\n window.userAuth = true;\n window.userProvider = context.authenticatedProvider.id;\n window.fw_ae = md5(context.authenticatedProvider.id.toLowerCase());\n window.fw_ar = 1;\n window.userProviderDisplayName = context.authenticatedProvider.displayName;\n userAuthBtn.innerHTML = \"SIGN OUT\";\n userAuthBtnMobile.innerHTML = \"SIGN OUT\";\n userAuthBtn.style.display = \"none\";\n userAuthBtn.parentNode.insertBefore(providerImg, userAuthBtn.nextSibling);\n\n $('#mvpd-intercept .btn').on('click', function(){\n document.cookie = 'hasAcceptedMvpdWarning=true';\n $('#mvpd-intercept').css('display',' none');\n });\n\n providerImg.setAttribute(\"alt\", `${window.userProviderDisplayName} logo` || 'Provider logo');\n\n // if user went through signin flow, remove previous eventListeners\n userAuthBtn.removeEventListener('click', startAuthFlow);\n userAuthBtn.addEventListener(\"click\", userLogout);\n // same for mobile button\n userAuthBtnMobile.removeEventListener('click', startAuthFlow);\n userAuthBtnMobile.addEventListener(\"click\", userLogout);\n\n // login btn for settings page only\n if (userAuthBtnSettings !== null) {\n userAuthBtnSettings.innerHTML = \"SIGN OUT\";\n userAuthBtnSettings.removeEventListener('click', startAuthFlow);\n userAuthBtnSettings.addEventListener(\"click\", userLogout);\n }\n // update watchlist\n Watchlist.initialize(watchlist, UrlPathname);\n $('#mvpd-intercept .btn').on('click', function(){\n document.cookie = 'hasAcceptedMvpdWarning=true';\n $('#mvpd-intercept').css('display',' none');\n });\n\n if (context.authenticatedProvider.id == 'Dish' && !document.cookie.indexOf('hasAcceptedMvpdWarning=true')){\n $('#mvpd-intercept').css('display',' block');\n providerImg = document.getElementById(\"mvpd-logo\");\n providerImg.setAttribute(\"src\", \"https://cvp1.cdn.turner.com/xslo/tve/assets/\" + context.authenticatedProvider.id + \"_black.png?w=85&h=28\");\n if(window.width >= 992 && window.width <= 1200){\n providerImg = document.getElementById(\"logo-container\");\n providerImg.setAttribute(\"src\", \"https://cvp1.cdn.turner.com/xslo/tve/assets/\" + context.authenticatedProvider.id + \"_black.png?w=85&h=28\");\n providerImg.setAttribute(\"alt\", window.userProviderDisplayName);\n providerImg.setAttribute(\"id\", \"provider-image\");\n }\n }\n } else {\n /* ---------------- Un-Successful Authentication -------------------- */\n // console.log(\"[(())] Unauthentication [(())]\");\n window.userAuth = false\n window.userProvider = null\n window.fw_ae = \"\";\n window.fw_ar = 0;\n userAuthBtn.innerHTML = \"SIGN IN\";\n userAuthBtnMobile.innerHTML = \"SIGN IN\"\n userAuthBtn.style.display = \"inline-block\";\n userAuthBtn.removeEventListener('click', userLogout)\n userAuthBtn.addEventListener(\"click\", startAuthFlow)\n userAuthBtnMobile.removeEventListener('click', userLogout )\n userAuthBtnMobile.addEventListener(\"click\", startAuthFlow );\n\n // login btn for settings page only\n if (userAuthBtnSettings !== null) {\n userAuthBtnSettings.innerHTML = \"SIGN IN\";\n userAuthBtnSettings.removeEventListener('click', userLogout)\n userAuthBtnSettings.addEventListener(\"click\", startAuthFlow)\n }\n\n // Remove the logo and link\n let providerImg = document.getElementById(\"provider-image\");\n let providerLink = document.getElementById(\"provider-link\");\n if (providerImg !== null) {\n providerImg.parentNode.removeChild(providerImg);\n }\n if (providerLink !== null) {\n providerLink.parentNode.removeChild(providerLink);\n }\n\n // resets watchlist bubble to display '0' on logout\n let watchlistDomBubble = Array.from(document.querySelectorAll('a[data-drupal-link-system-path=\"watchtcm/watchlist\"]'));\n watchlistDomBubble = watchlistDomBubble.forEach( (ele) => ele.innerHTML = 'watchlist0')\n }\n }\n\n // instead of authManager.init() and an 'initReady' listener that calls checkAuthentication()\n topAuth.prepare().then(handleAuthContext)\n // add search and settings menu items to Hamburger / Mobile Flyout\n $('.watch-hamburger__wrap .menu--main .watch__menu .menu').append('
  • Settings
  • Sign In
  • ');\n\n window.userProvider = null\n\n\n // login btn for settings page only\n if (userAuthBtnSettings !== null) {\n userAuthBtnSettings.innerHTML = \"SIGN IN\";\n userAuthBtnSettings.removeEventListener('click', userLogout)\n userAuthBtnSettings.addEventListener(\"click\", startAuthFlow)\n }\n\n function userLogout(){\n // Remove previous eventListeners\n userAuthBtn.removeEventListener('click', userLogout);\n userAuthBtn.addEventListener(\"click\", startAuthFlow);\n userAuthBtnMobile.removeEventListener('click', userLogout);\n userAuthBtnMobile.addEventListener(\"click\", startAuthFlow);\n userAuthBtnSettings.removeEventListener('click', userLogout);\n userAuthBtnSettings.addEventListener(\"click\", startAuthFlow);\n\n const cancelTimer = setTimeout(() => { topAuth.cancelAuthentication() }, 2000)\n topAuth.logout().then(handleAuthContext).finally(() => { clearTimeout(cancelTimer) })\n }\n\n function popUp(message) {\n if (message) {\n const popUpMessage = '
    There was a problem accessing this content...

    ' + message + '
    ';\n let inputData = {\n type: 'text',\n fullText: popUpMessage\n };\n const modal = new WatchModal(inputData);\n modal.open(inputData);\n return;\n }\n }\n\n const authorize = async () => {\n topAuth\n .authorize({ channel: 'TCM' })\n .then(async ({ channel, token }) => {\n window.authToken = token;\n window.auth.prepare().then(handleAuthContext);\n }).catch((error) => \n popUp(error.message)\n );\n };\n\n // Start up the auth process\n async function startAuthFlow() {\n auth\n .prepare()\n .then((context) => {\n window.adobeToken = context;\n adobeToken = context;\n auth\n .fetchAuthContext()\n .then(async (isAuthenticated) => {\n // console.log(`authenticatedState = ${isAuthenticated.authenticatedState}`);\n if (isAuthenticated.authenticatedState !== 'unauthenticated') {\n window.userAuth = true;\n authorize();\n } else {\n auth.login().then(authorize);\n }\n })\n .catch((error) => {\n console.error('Auth fetchAuthContext failed: ', error);\n });\n })\n .catch((error) => console.error('Auth prepare failed: ', error));\n }\n\n \n };\n}\n","/**\n * Initializes global header\n */\nexport default class GlobalHeader {\n /**\n * Attach events for global header\n */\n static initialize(homeURL) {\n $('document').ready(function() {\n // Move WatchTCM nav & search down if admin toolbar is present.\n // Still may need to add bump-height to the margin-top of the content.\n // (Maybe the body or #page-wrapper elements)\n if ( $('#toolbar-bar').length && $('.watch-navbar').length ) {\n let bump_height = $('#toolbar-bar').height();\n\n if ( $('#toolbar-item-administration-tray').hasClass('is-active') \n && $('#toolbar-item-administration-tray').hasClass('toolbar-tray-horizontal') ) {\n bump_height += $('#toolbar-item-administration-tray').height();\n }\n\n $('.watch-navbar').css('top', bump_height);\n\n $('.watch-filters').css('top', '185px');\n if ( $('.watch__searchbar').length ) {\n bump_height += $('.watch__searchbar').offset().top;\n $('.watch__searchbar').css('top', bump_height);\n }\n } \n // for intro animation \n if (homeURL !== '/watchtcm'){ \n $('#page-wrapper, .watch__header, .watch-footer__wrap').removeClass('hidden');\n }\n\n // GLOBAL HEADER JS\n // add watch list counter to menu item containing \"Watch List\" text\n $('a:contains(\"Watchlist\")').append('0');\n\n\n // const watchListBtn = document.querySelector('#watchListMod')\n\n // watchListBtn.addEventListener('click', modWatchList)\n // function modWatchList(ele){\n // console.log(ele)\n\n // }\n\n\n // show hamburger menu on icon click\n $('.watch-navbar-toggle').click(function() {\n $('.watch-hamburger').show();\n $('body').addClass('no-scroll');\n });\n\n // close hambuger menu on X click\n $('.watch-hamburger__close-button').click(function(e) {\n $('.watch-hamburger').hide();\n $('body').removeClass('no-scroll');\n e.preventDefault();\n });\n \n $(function(){\n $(\"a\").each(function(){\n if ($(this).attr(\"href\") == window.location.pathname){\n $(this).addClass(\"is-active\");\n }\n });\n });\n \n });\n }\n}\n","import WatchModal from '../global/WatchModal';\n\n// Javascript to create archive gallery modal\nexport default class WatchArchive {\n\n static initialize() {\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-tile__bottom-wrap.archive-capable', function() {\n var One = this.getAttribute('data-jsonID')\n var text = $(`#imgJson${One}`).text();\n // add the content to an array like structure[]\n text = `[${text}`\n text = text.replace(/,\\s*$/, \"\"); // stripping whitespace?\n text = `${text}]`\n console.log(`// WatchArchive:19 text = ${text}`);\n var tcmString = $.parseJSON(text);\n const inputData = {\n id: 2345,\n type: 'archive',\n title: this.getAttribute('data-name'),\n galleryData: {\n galleryID: 1234,\n galleryTitle: this.getAttribute('data-name'),\n galleryType: this.getAttribute('data-galtype'),\n galleryDescription: this.getAttribute('data-des'),\n galleryThumbSrc: \"../themes/custom/bogart/img/recentlyAdded/recentlyAdded1.jpg\",\n images: [tcmString]\n }\n };\n this.modal_archive_container_template = `\n
    \n
    \n

    ${inputData.title}

    \n

    ${inputData.galleryData.galleryType}: ${inputData.galleryData.galleryDescription}

    \n
    \n

    \n

    \n
    \n `;\n // slick slides\n this.modal_archive_slides_template = '';\n for (let i = 0; i < tcmString.length; i++ ) {\n let altTag = `${tcmString[i]?.imgDescription} featuring ${tcmString[i]?.imgParticipants}`;\n if (!tcmString[i]?.imgDescription || !tcmString[i]?.imgParticipants) {\n altTag = inputData.title\n }\n tcmString[i].imgSrc = (tcmString[i].imgSrc === undefined) ? '' : `https:${tcmString[i].imgSrc.substring(tcmString[i].imgSrc.indexOf('//'))}`;\n this.modal_archive_slides_template += `\n
    \n \"${altTag}\"\n
    \n `;\n }\n\n //console.log(this.modal_archive_slides_template);\n\n inputData.archiveContainerTemplate = this.modal_archive_container_template;\n inputData.archiveSlidesTemplate = this.modal_archive_slides_template;\n\n const archiveModalSetup = {\n\n onClose: function(inputData) {\n },\n\n onOpen: function(inputData) {\n $('.modal-overlay__content__main--archive').append(inputData.archiveContainerTemplate);\n $('.watch-archive__carousel').append(inputData.archiveSlidesTemplate);\n\n var $status = $('.pagingInfo');\n var $slickElement = $('.watch-archive__carousel');\n\n $slickElement.on('init reInit afterChange', function (event, slick, currentSlide, nextSlide) {\n var i = (currentSlide ? currentSlide : 0) + 1;\n $status.text(`Image ${i} of ${slick.slideCount}`);\n });\n $(\".watch-archive__carousel\").slick({mobileFirst:true});\n }\n };\n const modal = new WatchModal(inputData, archiveModalSetup);\n modal.open(inputData);\n });\n $('.watch__section').on('keydown', '.watch-tile__bottom-wrap.archive-capable', function(event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n $(this).click();\n }\n });\n });\n }\n}\n","/**\n * Initializes watch collections\n */\nexport default class WatchCollections {\n /**\n * Attach common page events and initialize miscellaneous components\n */\n static initialize(UrlPathname) {\n \n //I.E 11 fix, tiles are centered when less than 3 appear in a collection\n if(UrlPathname == '/watchtcm/collections'){ \n $(document).ajaxStop( function(){ \n $('.watch-tiles__wrap.watch-collections .watch-collections-carousel .slick-list .slick-track').css('float', 'left');\n });\n \n }\n\n }\n}\n","import WatchModal from '../global/WatchModal';\n\n// Javascript to create complex sidebar modal\nexport default class WatchEssentials {\n /**\n * Attach common page events and initialize tile components\n */\n static initialize() {\n $(window).on('resize', function(){\n $(window).scrollTop(0);\n\n // check if mobile view and if sidebar is open\n if ( $(window).width() <= 767 && $('.modal-overlay__content__sidebar')[0] && $('.modal-overlay__content__sidebar').hasClass('collapsed') === false ) {\n // prevent body from scrolling in the background\n // commented out per android no scroll issues. \n // $('body').addClass('no-scroll');\n } else if ( $(window).width() >= 768 ) {\n // re-enable scrolling\n $('body').removeClass('no-scroll');\n // reveal sidebar\n $('.modal-overlay__content__sidebar').removeClass('collapsed');\n // hide back button\n $('.modal-overlay__toggle-content__header').removeClass('active');\n\n /* if there's no currently active section, set default\n section for viewport resize up scenario*/\n if ( $('.modal-overlay__toggle-content__section').hasClass('active') === false ) {\n $('.modal-overlay__toggle-content__section--essentials').addClass('active');\n $('[data-settings-section=\"essentials\"]').addClass('active');\n }\n }\n });\n\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-button--essentials', function() {\n\n // use ID to grab data here... pretend inputData is retreived data for now...\n const inputData = {\n id: 2345,\n type: 'sidebar',\n title: 'Dr. Strangelove: Or How I Learned to Stop Worrying and Love the Bomb',\n meta: '1964 . 1h 35m . Comedy . TV-MA'\n };\n\n\n // Build essentials modal sub templates:\n // Sidebar template\n this.modal_essentials_sidebar_template = `\n
    \n
    ARTICLES:
    \n\n
      \n
    • THE ESSENTIALS
    • \n
    • POP CULTURE
    • \n
    • TRIVIA
    • \n
    • THE BIG IDEA
    • \n
    • BEHIND THE CAMERA
    • \n
    • THE CRITICS CORNER
    • \n
    \n
    `;\n\n // Toggleable content templates\n this.modal_essentials_toggle_template = `\n
    \n
    BACK
    \n
    \n\n
    \n
    \n

    THE ESSENTIALS

    \n\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sit amet dapibus nulla. Cras consequat diam purus, quis vestibulum turpis scelerisque ac. Sed in molestie enim, eget dignissim enim. Sed porta vestibulum tellus, consequat molestie nunc faucibus nec. Sed eros justo, porta et velit a, ullamcorper sollicitudin nulla. Nullam ex orci, bibendum vel lectus quis, dignissim rutrum urna. Phasellus aliquet lorem ac vestibulum blandit. Nunc quis nisi laoreet, tincidunt elit id, convallis nulla. Sed nibh urna, bibendum id lectus in, molestie aliquam erat. Nam ac ornare metus.

    \n\n

    Maecenas ac bibendum lorem. Donec non nunc metus. Donec vel fermentum diam, aliquam finibus ante. Maecenas in diam a leo placerat malesuada non ac orci. Vivamus pharetra dolor vitae posuere tempor. Quisque urna tellus, auctor nec porta et, fermentum eu libero. Morbi diam nisi, vestibulum at mattis sed, placerat at mauris. Aliquam mauris libero, mattis eget pulvinar eu, dictum eget orci.

    \n\n

    Cras odio ipsum, vehicula blandit aliquet varius, porttitor sed magna. Phasellus efficitur augue fringilla lobortis elementum. Fusce tincidunt risus enim, eget condimentum risus sagittis ut. Integer faucibus gravida placerat. Cras sapien purus, rutrum eu eleifend a, euismod in nisl. Praesent suscipit euismod egestas. Suspendisse pretium suscipit turpis, at sollicitudin mi vehicula at. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse diam ipsum, mattis at neque maximus, iaculis scelerisque enim. Nulla tempor gravida nibh non blandit. Pellentesque lobortis vulputate libero, non facilisis arcu lobortis sit amet. Suspendisse vel odio ornare, egestas mi a, pellentesque ipsum. Proin et quam a mi ullamcorper maximus sit amet quis mauris. Phasellus tempor varius augue suscipit laoreet. Vestibulum accumsan diam in nisi fermentum, nec sollicitudin est porttitor. Suspendisse sit amet scelerisque nisl.

    \n\n

    Integer aliquam et dui eget finibus. Maecenas a dapibus augue. Quisque facilisis ultrices arcu eu maximus. Phasellus convallis scelerisque magna, eget sagittis orci tincidunt in. Fusce venenatis faucibus est, in consequat felis tempus non. Curabitur pretium nibh et lacus semper, in luctus lorem vehicula. Etiam a iaculis risus. Suspendisse vel sollicitudin lectus. Vestibulum nec nulla felis. Aenean egestas, tortor non auctor pulvinar, nunc urna convallis elit, et dignissim odio leo sed ligula. Cras molestie accumsan porta. Pellentesque euismod condimentum leo at sagittis. Donec non varius mi. Suspendisse tortor odio, luctus sit amet magna nec, dictum viverra tortor. Aenean posuere mollis vehicula.

    \n\n

    Nullam sed est sollicitudin libero hendrerit interdum. Nam sit amet tortor massa. Etiam finibus placerat rhoncus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim purus ac erat mollis, ultrices posuere lacus feugiat.

    \n\n
    \n\n

    SUB-HEADER ONE

    \n\n

    Cras odio ipsum, vehicula blandit aliquet varius, porttitor sed magna. Phasellus efficitur augue fringilla lobortis elementum. Fusce tincidunt risus enim, eget condimentum risus sagittis ut. Integer faucibus gravida placerat. Cras sapien purus, rutrum eu eleifend a, euismod in nisl. Praesent suscipit euismod egestas. Suspendisse pretium suscipit turpis, at sollicitudin mi vehicula at. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse diam ipsum, mattis at neque maximus, iaculis scelerisque enim. Nulla tempor gravida nibh non blandit. Pellentesque lobortis vulputate libero, non facilisis arcu lobortis sit amet. Suspendisse vel odio ornare, egestas mi a, pellentesque ipsum. Proin et quam a mi ullamcorper maximus sit amet quis mauris. Phasellus tempor varius augue suscipit laoreet. Vestibulum accumsan diam in nisi fermentum, nec sollicitudin est porttitor. Suspendisse sit amet scelerisque nisl.

    \n\n

    Integer aliquam et dui eget finibus. Maecenas a dapibus augue. Quisque facilisis ultrices arcu eu maximus. Phasellus convallis scelerisque magna, eget sagittis orci tincidunt in. Fusce venenatis faucibus est, in consequat felis tempus non. Curabitur pretium nibh et lacus semper, in luctus lorem vehicula. Etiam a iaculis risus. Suspendisse vel sollicitudin lectus. Vestibulum nec nulla felis. Aenean egestas, tortor non auctor pulvinar, nunc urna convallis elit, et dignissim odio leo sed ligula. Cras molestie accumsan porta. Pellentesque euismod condimentum leo at sagittis. Donec non varius mi. Suspendisse tortor odio, luctus sit amet magna nec, dictum viverra tortor. Aenean posuere mollis vehicula.Nullam sed est sollicitudin libero hendrerit interdum. Nam sit amet tortor massa. Etiam finibus placerat rhoncus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim purus ac erat mollis, ultrices posuere lacus feugiat.

    \n
    \n\n
    \n

    POP CULTURE

    \n\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sit amet dapibus nulla. Cras consequat diam purus, quis vestibulum turpis scelerisque ac. Sed in molestie enim, eget dignissim enim. Sed porta vestibulum tellus, consequat molestie nunc faucibus nec. Sed eros justo, porta et velit a, ullamcorper sollicitudin nulla. Nullam ex orci, bibendum vel lectus quis, dignissim rutrum urna. Phasellus aliquet lorem ac vestibulum blandit. Nunc quis nisi laoreet, tincidunt elit id, convallis nulla. Sed nibh urna, bibendum id lectus in, molestie aliquam erat. Nam ac ornare metus.

    \n
    \n\n
    \n

    TRIVIA

    \n\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sit amet dapibus nulla. Cras consequat diam purus, quis vestibulum turpis scelerisque ac. Sed in molestie enim, eget dignissim enim. Sed porta vestibulum tellus, consequat molestie nunc faucibus nec. Sed eros justo, porta et velit a, ullamcorper sollicitudin nulla. Nullam ex orci, bibendum vel lectus quis, dignissim rutrum urna. Phasellus aliquet lorem ac vestibulum blandit. Nunc quis nisi laoreet, tincidunt elit id, convallis nulla. Sed nibh urna, bibendum id lectus in, molestie aliquam erat. Nam ac ornare metus.

    \n\n

    Maecenas ac bibendum lorem. Donec non nunc metus. Donec vel fermentum diam, aliquam finibus ante. Maecenas in diam a leo placerat malesuada non ac orci. Vivamus pharetra dolor vitae posuere tempor. Quisque urna tellus, auctor nec porta et, fermentum eu libero. Morbi diam nisi, vestibulum at mattis sed, placerat at mauris. Aliquam mauris libero, mattis eget pulvinar eu, dictum eget orci.

    \n\n
    \n\n
    \n

    THE BIG IDEA

    \n\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sit amet dapibus nulla. Cras consequat diam purus, quis vestibulum turpis scelerisque ac. Sed in molestie enim, eget dignissim enim. Sed porta vestibulum tellus, consequat molestie nunc faucibus nec. Sed eros justo, porta et velit a, ullamcorper sollicitudin nulla. Nullam ex orci, bibendum vel lectus quis, dignissim rutrum urna. Phasellus aliquet lorem ac vestibulum blandit. Nunc quis nisi laoreet, tincidunt elit id, convallis nulla. Sed nibh urna, bibendum id lectus in, molestie aliquam erat. Nam ac ornare metus.

    \n\n

    Maecenas ac bibendum lorem. Donec non nunc metus. Donec vel fermentum diam, aliquam finibus ante. Maecenas in diam a leo placerat malesuada non ac orci. Vivamus pharetra dolor vitae posuere tempor. Quisque urna tellus, auctor nec porta et, fermentum eu libero. Morbi diam nisi, vestibulum at mattis sed, placerat at mauris. Aliquam mauris libero, mattis eget pulvinar eu, dictum eget orci.

    \n\n

    Cras odio ipsum, vehicula blandit aliquet varius, porttitor sed magna. Phasellus efficitur augue fringilla lobortis elementum. Fusce tincidunt risus enim, eget condimentum risus sagittis ut. Integer faucibus gravida placerat. Cras sapien purus, rutrum eu eleifend a, euismod in nisl. Praesent suscipit euismod egestas. Suspendisse pretium suscipit turpis, at sollicitudin mi vehicula at. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse diam ipsum, mattis at neque maximus, iaculis scelerisque enim. Nulla tempor gravida nibh non blandit. Pellentesque lobortis vulputate libero, non facilisis arcu lobortis sit amet. Suspendisse vel odio ornare, egestas mi a, pellentesque ipsum. Proin et quam a mi ullamcorper maximus sit amet quis mauris. Phasellus tempor varius augue suscipit laoreet. Vestibulum accumsan diam in nisi fermentum, nec sollicitudin est porttitor. Suspendisse sit amet scelerisque nisl.

    \n\n

    Integer aliquam et dui eget finibus. Maecenas a dapibus augue. Quisque facilisis ultrices arcu eu maximus. Phasellus convallis scelerisque magna, eget sagittis orci tincidunt in. Fusce venenatis faucibus est, in consequat felis tempus non. Curabitur pretium nibh et lacus semper, in luctus lorem vehicula. Etiam a iaculis risus. Suspendisse vel sollicitudin lectus. Vestibulum nec nulla felis. Aenean egestas, tortor non auctor pulvinar, nunc urna convallis elit, et dignissim odio leo sed ligula. Cras molestie accumsan porta. Pellentesque euismod condimentum leo at sagittis. Donec non varius mi. Suspendisse tortor odio, luctus sit amet magna nec, dictum viverra tortor. Aenean posuere mollis vehicula.

    \n\n

    Nullam sed est sollicitudin libero hendrerit interdum. Nam sit amet tortor massa. Etiam finibus placerat rhoncus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim purus ac erat mollis, ultrices posuere lacus feugiat.

    \n\n

    SUB-HEADER ONE

    \n\n

    Cras odio ipsum, vehicula blandit aliquet varius, porttitor sed magna. Phasellus efficitur augue fringilla lobortis elementum. Fusce tincidunt risus enim, eget condimentum risus sagittis ut. Integer faucibus gravida placerat. Cras sapien purus, rutrum eu eleifend a, euismod in nisl. Praesent suscipit euismod egestas. Suspendisse pretium suscipit turpis, at sollicitudin mi vehicula at. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse diam ipsum, mattis at neque maximus, iaculis scelerisque enim. Nulla tempor gravida nibh non blandit. Pellentesque lobortis vulputate libero, non facilisis arcu lobortis sit amet. Suspendisse vel odio ornare, egestas mi a, pellentesque ipsum. Proin et quam a mi ullamcorper maximus sit amet quis mauris. Phasellus tempor varius augue suscipit laoreet. Vestibulum accumsan diam in nisi fermentum, nec sollicitudin est porttitor. Suspendisse sit amet scelerisque nisl.

    \n\n

    Integer aliquam et dui eget finibus. Maecenas a dapibus augue. Quisque facilisis ultrices arcu eu maximus. Phasellus convallis scelerisque magna, eget sagittis orci tincidunt in. Fusce venenatis faucibus est, in consequat felis tempus non. Curabitur pretium nibh et lacus semper, in luctus lorem vehicula. Etiam a iaculis risus. Suspendisse vel sollicitudin lectus. Vestibulum nec nulla felis. Aenean egestas, tortor non auctor pulvinar, nunc urna convallis elit, et dignissim odio leo sed ligula. Cras molestie accumsan porta. Pellentesque euismod condimentum leo at sagittis. Donec non varius mi. Suspendisse tortor odio, luctus sit amet magna nec, dictum viverra tortor. Aenean posuere mollis vehicula.Nullam sed est sollicitudin libero hendrerit interdum. Nam sit amet tortor massa. Etiam finibus placerat rhoncus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim purus ac erat mollis, ultrices posuere lacus feugiat.

    \n
    \n\n
    \n

    BEHIND THE CAMERA

    \n\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sit amet dapibus nulla. Cras consequat diam purus, quis vestibulum turpis scelerisque ac. Sed in molestie enim, eget dignissim enim. Sed porta vestibulum tellus, consequat molestie nunc faucibus nec. Sed eros justo, porta et velit a, ullamcorper sollicitudin nulla. Nullam ex orci, bibendum vel lectus quis, dignissim rutrum urna. Phasellus aliquet lorem ac vestibulum blandit. Nunc quis nisi laoreet, tincidunt elit id, convallis nulla. Sed nibh urna, bibendum id lectus in, molestie aliquam erat. Nam ac ornare metus.

    \n\n

    Maecenas ac bibendum lorem. Donec non nunc metus. Donec vel fermentum diam, aliquam finibus ante. Maecenas in diam a leo placerat malesuada non ac orci. Vivamus pharetra dolor vitae posuere tempor. Quisque urna tellus, auctor nec porta et, fermentum eu libero. Morbi diam nisi, vestibulum at mattis sed, placerat at mauris. Aliquam mauris libero, mattis eget pulvinar eu, dictum eget orci.

    \n\n
    \n\n
    \n

    THE CRITICS CORNER

    \n\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sit amet dapibus nulla. Cras consequat diam purus, quis vestibulum turpis scelerisque ac. Sed in molestie enim, eget dignissim enim. Sed porta vestibulum tellus, consequat molestie nunc faucibus nec. Sed eros justo, porta et velit a, ullamcorper sollicitudin nulla. Nullam ex orci, bibendum vel lectus quis, dignissim rutrum urna. Phasellus aliquet lorem ac vestibulum blandit. Nunc quis nisi laoreet, tincidunt elit id, convallis nulla. Sed nibh urna, bibendum id lectus in, molestie aliquam erat. Nam ac ornare metus.

    \n\n

    Maecenas ac bibendum lorem. Donec non nunc metus. Donec vel fermentum diam, aliquam finibus ante. Maecenas in diam a leo placerat malesuada non ac orci. Vivamus pharetra dolor vitae posuere tempor. Quisque urna tellus, auctor nec porta et, fermentum eu libero. Morbi diam nisi, vestibulum at mattis sed, placerat at mauris. Aliquam mauris libero, mattis eget pulvinar eu, dictum eget orci.

    \n\n
    \n\n
    `;\n\n inputData.sidebarTemplate = this.modal_essentials_sidebar_template;\n inputData.toggleTemplate = this.modal_essentials_toggle_template;\n\n const sidebarModalSetup = {\n\n onClose: function(inputData) {\n // reset header bottom border behavior\n $('.watch__header').removeClass('watch__header--articles-modal');\n // make sure to reactivate body scrolling\n $('body').removeClass('no-scroll');\n // remove article modal classes\n $('.modal-overlay__content__main').removeClass('watch__toggle-content');\n $('.modal-overlay__content__sidebar').removeClass('watch__sidebar');\n },\n\n onOpen: function(inputData) {\n // set header bottom border behavior\n $('.watch__header').addClass('watch__header--articles-modal');\n\n // set styles for article modal\n $('.modal-overlay__content__main').addClass('watch__toggle-content');\n $('.modal-overlay__content__sidebar').addClass('watch__sidebar');\n\n // check if mobile view and if sidebar is open\n if ( $(window).width() <= 767 && $('.modal-overlay__content__sidebar')[0] && $('.modal-overlay__content__sidebar').hasClass('collapsed') === false ) {\n // prevent body from scrolling in the background\n $('body').addClass('no-scroll');\n } else if ( $(window).width() >= 768 ) {\n // re-enable scrolling\n $('body').removeClass('no-scroll');\n // reveal sidebar\n $('.modal-overlay__content__sidebar').removeClass('collapsed');\n // hide back button\n $('.modal-overlay__toggle-content__header').removeClass('active');\n\n /* if there's no currently active section, set default\n section for viewport resize up scenario*/\n if ( $('.modal-overlay__toggle-content__section').hasClass('active') === false ) {\n $('.modal-overlay__toggle-content__section--essentials').addClass('active');\n $('[data-settings-section=\"essentials\"]').addClass('active');\n }\n }\n\n // handle section selection\n $('.modal-overlay__content__sidebar__list__item').on('click', function(){\n // get selected 'page'\n const sectionClicked = $(this).attr('data-settings-section');\n\n //clear sidebar menu active states\n $('.modal-overlay__content__sidebar__list__item').removeClass('active');\n // set sidebar menu item as active\n $(this).addClass('active');\n // allow body scrolling\n $('body').removeClass('no-scroll');\n // close all previously opened sections\n $('.modal-overlay__toggle-content__section').removeClass('active');\n\n // reveal content area\n $('.modal-overlay__content__main').addClass('active');\n // collapse sidebar and reveal back button if mobile\n if ( $(window).width() <= 767 ) {\n $('.modal-overlay__content__sidebar').addClass('collapsed');\n $('.modal-overlay__toggle-content__header').addClass('active');\n }\n // open selected section\n $('.modal-overlay__toggle-content__section--' + sectionClicked).addClass('active');\n });\n\n // handle back button click\n $('.modal-overlay__toggle-content__header__back-button').on('click', function(){\n // remove active state from settings submenu item\n $('.modal-overlay__content__sidebar__list__item').removeClass('active');\n\n // close all opened sections\n $('.modal-overlay__toggle-content__section').removeClass('active');\n\n // reveal sidebar\n $('.modal-overlay__content__sidebar').removeClass('collapsed');\n\n // reset scrollbar position\n $(window).scrollTop(0);\n // prevent body scrolling\n $('body').addClass('no-scroll');\n // hide content area\n $('.modal-overlay__content__main').removeClass('active');\n // hide back button\n $('.modal-overlay__toggle-content__header').removeClass('active');\n\n });\n\n }\n };\n\n const modal = new WatchModal(inputData, sidebarModalSetup);\n\n modal.open(inputData);\n });\n });\n }\n}\n","import Watchlist from '../global/Watchlist';\nimport WatchlistPage from '../components/WatchlistPage';\n\nexport default class WatchFilters {\n /**\n * Attach common page events and initialize miscellaneous components\n */\n static initialize() {\n $(document).on('click', function() {\n //close all dropdowns when clicking outside\n $('.watch-dropdown').removeClass('open');\n });\n\n $(document).ready(function() {\n // handle dropdown open/close behavior\n $('.watch-dropdown__selected').on('click', function(e) {\n // prevent event from bubbling to document level so that dropdown can open\n e.stopPropagation();\n // close all dropdowns to clear slate first\n $('.watch-dropdown').removeClass('open');\n // open clicked on dropdown\n $(this).parent().addClass('open');\n });\n\n // handle dropdown selection\n $('.watch-dropdown__options__item').on('click', function(e) {\n // get filter type\n let currentFilter = $(this).parents('.watch-dropdown').attr('data-type');\n // get selected option\n let selectedOption = $(this).attr('data-' + currentFilter + '-filter');\n\n // clear previously selected item\n $(this).siblings().removeClass('selected');\n // hide selected option in dropdown\n $(this).addClass('selected');\n // set new value as selected\n $('.watch-dropdown__selected--' + currentFilter).text(selectedOption);\n // close dropdown\n $('.watch-dropdown').removeClass('open');\n pageSelectSort(selectedOption);\n });\n\n // handle edit watchlist click\n $('#edit-watchlist').on('click', function(e) {\n // check if currently in editing mode or not\n if ($(this).hasClass('editing') === false) {\n $(this).addClass('editing');\n // deactivate dropdown filters\n $('.watch-dropdown').addClass('inactive');\n // update button text\n $(this).text('DONE');\n // show remove buttons\n $('.watch-tile__remove-overlay').addClass('active');\n } else {\n $(this).removeClass('editing');\n // reactivate dropdowns\n $('.watch-dropdown').removeClass('inactive');\n // update button text\n $(this).text('EDIT WATCHLIST');\n // hide remove buttons\n $('.watch-tile__remove-overlay').removeClass('active');\n }\n });\n $('.watch-dropdown__selected').on(\n 'keydown',\n function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n $(this).click();\n }\n }\n );\n $('.watch-dropdown__options__item').on(\n 'keydown',\n function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n $(this).click();\n }\n }\n );\n });\n\n\n // sorts based on toggle of dropdown used on both Films page and Watchlist page\n function pageSelectSort(value){\n\n let tilesWrap = $('.watch-tiles__wrap')\n let tiles = tilesWrap.children('.watch-tile');\n let date = new Date()\n\n // Expiring Soon Sort\n if(value == 'EXPIRING SOON'){\n tiles.sort(function(a,b){\n let an = a.getAttribute('data-expires')\n let bn = b.getAttribute('data-expires')\n an = new Date(an)\n bn = new Date(bn)\n if(an > bn) {\n return 1;\n }\n if(an < bn) {\n return -1;\n }\n return 0;\n });\n tiles.detach().appendTo(tilesWrap);\n\n\n // Recently Added Sort\n }else if(value == 'RECENTLY ADDED'){\n tiles.sort(function(a,b){\n let an = a.getAttribute('data-published');\n let bn = b.getAttribute('data-published');\n\n an = an.replace(/-/g, '/');\n bn = bn.replace(/-/g, '/');\n an = new Date(an)\n bn = new Date(bn)\n //console.log(an +'\\n' +bn + '\\n' + typeof an +'\\n' + typeof bn +'\\n=====')\n\n if(an < bn) {\n return 1;\n }\n if(an > bn) {\n return -1;\n }\n return 0;\n });\n tiles.detach().appendTo(tilesWrap);\n\n // Old To New Sort\n }else if(value == 'OLD TO NEW'){\n tiles.sort(function(a,b){\n let an = a.getAttribute('data-release-year');\n let bn = b.getAttribute('data-release-year');\n if(an > bn) {\n return 1;\n }\n if(an < bn) {\n return -1;\n }\n return 0;\n });\n tiles.detach().appendTo(tilesWrap);\n\n // New To Old Sort\n }else if(value == 'NEW TO OLD'){\n tiles.sort(function(a,b){\n let an = a.getAttribute('data-release-year');\n let bn = b.getAttribute('data-release-year');\n\n if(an < bn) {\n return 1;\n }\n if(an > bn) {\n return -1;\n }\n return 0;\n });\n tiles.detach().appendTo(tilesWrap);\n\n // A To Z Sort\n }else if(value == 'A TO Z'){\n tiles.sort(function(a,b){\n let an = a.getAttribute('data-name').toLowerCase();\n let bn = b.getAttribute('data-name').toLowerCase();\n if(an > bn) {\n return 1;\n }\n if(an < bn) {\n return -1;\n }\n return 0;\n });\n tiles.detach().appendTo(tilesWrap);\n\n // Z - A Sort\n }else if(value == 'Z TO A'){\n tiles.sort(function(a,b){\n let an = a.getAttribute('data-name').toLowerCase();\n let bn = b.getAttribute('data-name').toLowerCase();\n\n if(an > bn) {\n return -1;\n }\n if(an < bn) {\n return 1;\n }\n return 0;\n });\n tiles.detach().appendTo(tilesWrap);\n\n // Handles All Genra Sort\n }else {\n let count = 0;\n\n // add hidden div to filter return div incase filters return null\n\n\n let searchReturnsEmptyDiv = $('.genre-sort-is-empty');\n\n tiles.filter(function() {\n $(this).removeClass('hidden')\n // if filter by \"all genres\" remove hidden from all tiles\n if(value.toLowerCase() == 'all genres'){\n count ++;\n }\n\n // else if any other filter\n else if(!$(this).data('genre') || $(this).data('genre').toLowerCase() !== value.toLowerCase()){\n //alert($(this).data('name') + '\\n'+ $(this).data('genre') )\n $(this).addClass('hidden')\n }else {\n count ++;\n }\n\n });\n if (count < 1){\n searchReturnsEmptyDiv.html('There are no films currently available in the '+value+' genre.')\n searchReturnsEmptyDiv.removeClass('hidden');\n }else{\n searchReturnsEmptyDiv.addClass('hidden');\n }\n }\n }\n }\n}\n","import WatchModal from '../global/WatchModal';\n\n// Javascript to create basic text modal\nexport default class WatchMoreText {\n /**\n * Attach common page events and initialize tile components\n */\n static initialize() {\n\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-button--more-text', function() {\n let inputData = {\n id: 2345,\n type: 'text'\n };\n\n inputData['fullText'] = '

    FULL SYNOPSIS

    \\\n

    ' + $(this).data('full-synopsis') + '

    ';\n\n const modal = new WatchModal(inputData);\n\n modal.open(inputData);\n });\n\n });\n\n\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-button--more-bio', function() {\n let inputData = {\n id: 2345,\n type: 'text'\n };\n\n inputData['fullText'] = '

    FULL BIOGRAPHY

    \\\n

    ' + $(this).data('full-synopsis') + '

    ';\n\n const modal = new WatchModal(inputData);\n\n modal.open(inputData);\n });\n\n });\n\n\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-button--more-notes', function() {\n let inputData = {\n id: 2345,\n type: 'text'\n };\n\n inputData['fullText'] = '

    NOTES

    \\\n

    ' + $(this).data('full-synopsis') + '

    ';\n\n const modal = new WatchModal(inputData);\n\n modal.open(inputData);\n });\n\n });\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-button--more-miles', function() {\n let inputData = {\n id: 2345,\n type: 'text'\n };\n\n inputData['fullText'] = '

    MILESTONES

    \\\n
      ' + $(this).data('full-synopsis') + '
    ';\n\n const modal = new WatchModal(inputData);\n\n modal.open(inputData);\n });\n\n });\n\n\n $(document).ready(function() {\n\n $('.watch__section').on('click', '.watch-button--IE', function() {\n let inputData = {\n id: 2345,\n type: 'text'\n };\n \n inputData['fullText'] = '
    Your Browser is Not Supported

    To view this content, please use one of the following compatible browsers:


    ';\n \n const modal = new WatchModal(inputData);\n \n modal.open(inputData);\n });\n\n });\n\n }\n}\n\n\n","export default class WatchSettings {\n /**\n * Attach common page events and initialize miscellaneous components\n */\n static initialize() {\n \n $(window).on('resize load', function(){\n $(window).scrollTop(0);\n\n // check if mobile view and if sidebar is open\n if ( $(window).width() <= 767 && $('.watch__sidebar')[0] && $('.watch__sidebar').hasClass('collapsed') === false ) {\n // prevent body from scrolling in the background\n // $('body').addClass('no-scroll');\n } else if ( $(window).width() >= 768 ) {\n // re-enable scrolling\n $('body').removeClass('no-scroll');\n // reveal sidebar\n $('.watch__sidebar').removeClass('collapsed');\n // hide back button\n $('.watch__toggle-content__header').removeClass('active');\n /* if there's no currently active section, set default\n section for viewport resize up scenario*/\n // if ( $('.watch__toggle-content__section').hasClass('active') === false ) {\n // $('.watch__toggle-content__section--faq').addClass('active');\n // $('[data-settings-section=\"faq\"]').addClass('active');\n // }\n }\n });\n\n // Used for side navigation on /settings page\n $(document).ready(function() {\n \n // if page request comes from a external URL, grab hash and show correct tab\n var queryString = window.location.hash \n\n if(queryString){\n \n // $('.watch__toggle-content__section--faq', '.watch__sidebar__list__item').removeClass('active');\n switch(queryString){\n case '#privacy-policy':\n $('.watch__toggle-content__section--privacy, [data-settings-section=\"privacy\"]').addClass('active');\n break;\n case '#terms-of-use':\n $('.watch__toggle-content__section--terms, [data-settings-section=\"terms\"]').addClass('active'); \n break;\n default:\n $('.watch__toggle-content__section--faq, [data-settings-section=\"faq\"]').addClass('active'); \n } \n }else{\n // if there's no currently active section, set default\n $('.watch__toggle-content__section--faq, [data-settings-section=\"faq\"]').addClass('active');\n } \n\n // correct privacy policy and terms on drupal footer . \n // links that don't recognize which jquery page tab is open /#terms or /#settings\n if(location.pathname == '/watchtcm/settings'){\n let footerLink = $('#block-footer .menu-item a')\n footerLink.each(function(){\n if ( $(this).data('drupalLinkSystemPath') == 'watchtcm/settings'){\n if( $(this).html() == 'Privacy Policy'){\n $(this).addClass('privacyPolicy')\n if(queryString == '#privacy-policy'){\n $(this).addClass('is-active')\n }\n }else if( $(this).html() == 'Terms of Use'){\n $(this).addClass('termsOfUse')\n if(queryString == '#terms-of-use'){\n $(this).addClass('is-active')\n } \n }\n } \n });\n\n // add onclik events for all PP links on page\n $('.privacyPolicy').on('click', function(){\n $(window).scrollTop(0);\n location.reload()\n });\n \n // add onclik events for all Terms links on page\n $('.termsOfUse').on('click', function(){\n $(window).scrollTop(0);\n location.reload()\n });\n }\n\n // handle onclick section selection\n $('.watch__sidebar__list__item').on('click', function(){\n \n // get selected 'page'\n const sectionClicked = $(this).attr('data-settings-section');\n\n //clear sidebar menu active states\n $('.watch__sidebar__list__item').removeClass('active');\n // set sidebar menu item as active\n $(this).addClass('active');\n // allow body scrolling\n $('body').removeClass('no-scroll');\n // close all previously opened sections\n $('.watch__toggle-content__section').removeClass('active');\n\n // reveal content area\n $('.watch__toggle-content').addClass('active');\n // collapse sidebar and reveal back button if mobile\n if ( $(window).width() <= 767 ) {\n $('.watch__sidebar').addClass('collapsed');\n $('.watch__toggle-content__header').addClass('active');\n }\n // open selected section\n $('.watch__toggle-content__section--' + sectionClicked).addClass('active');\n \n });\n\n\n\n // handle back button click\n $('.watch__toggle-content__header__back-button').on('click', function(){\n // remove active state from settings submenu item\n $('.watch__sidebar__list__item').removeClass('active');\n\n // close all opened sections\n $('.watch__toggle-content__section').removeClass('active');\n\n // reveal sidebar\n $('.watch__sidebar').removeClass('collapsed');\n\n // reset scrollbar position\n $(window).scrollTop(0);\n // prevent body scrolling\n $('body').addClass('no-scroll');\n // hide content area\n $('.watch__toggle-content').removeClass('active');\n // hide back button\n $('.watch__toggle-content__header').removeClass('active');\n\n });\n });\n\n }\n}\n","import {getFormattedRuntime} from '../global/WatchUtils';\n/**\n * Processes runtime spans to format into hours and minutes\n */\nexport default class WatchTime {\n /**\n * Attach events for Watch Time\n */\n static initialize() {\n $('document').ready(function() {\n // format all runtimes on page\n $('.watch-title-runtime').each(function(i, obj){\n const retrievedSeconds = $(this).data('movie-seconds');\n let processedMovieTime = getFormattedRuntime(parseInt(retrievedSeconds));\n //insert time string into span\n $(this).append(processedMovieTime);\n });\n });\n }\n}\n","/**\n * Global functions\n */\n\n// Trim long content and append ellipsis\nexport function ellipsisTrim(data, length = 50) {\n let returnData = {\n processedString: data,\n wasTrimmed: false\n };\n\n if ( data.length >= length ) {\n returnData['processedString'] = data.substr(0,length).concat('...');\n returnData['wasTrimmed'] = true;\n }\n\n return returnData;\n}\n\n// Convert seconds to hours-minutes string\nexport function getFormattedRuntime(seconds) {\n let formattedTime = '';\n\n // get hour(s)\n if (seconds >= 3600) {\n formattedTime = Math.floor(seconds/3600) + 'h';\n\n // get remaining minutes\n if (seconds % 3600 > 59 ) {\n formattedTime += ' ' + Math.floor((seconds % 3600)/60) + 'm';\n }\n\n } else {\n formattedTime = Math.floor(seconds/60) + 'm';\n }\n\n return formattedTime;\n}\n","/**\n * Set up click listeners to send mvpd picker analytics events.\n */\nexport default class WatchAnalytics {\n static initialize() {\n // window.authManager.on('trackingData', ({ eventType, trackingData }) => {\n // if (eventType === 'authenticationDetection') {\n // const [success, mvpdId, userId, cached] = trackingData;\n // if (success && !cached) {\n // this.sendAnalyticsEvent('picker-click', 'tve:successful login');\n // }\n // }\n // });\n document.addEventListener(\n 'click',\n event => {\n if (event.target.parentNode.className === 'mvpdsbyname') {\n this.sendAnalyticsEvent('picker-click', 'tve:picker:' + event.target.dataset.mvpdid);\n } else if (event.target.parentNode.className === 'mvpdsbylogo') {\n this.sendAnalyticsEvent('picker-click', 'tve:picker:' + event.target.dataset.mvpdid);\n } else {\n // Switch by id.\n switch (event.target.id) {\n case 'user-auth-btn':\n this.sendAnalyticsEvent('picker-click', 'sign in top menu');\n break;\n case 'settings-user-auth-btn':\n case 'user-mobile-auth-btn':\n if (event.target.innerHTML === 'SIGN OUT') {\n this.sendAnalyticsEvent('picker-click', 'sign out side menu');\n } else if (event.target.innerHTML === 'SIGN IN') {\n this.sendAnalyticsEvent('picker-click', 'sign in side menu');\n }\n break;\n }\n // Switch by class.\n switch (event.target.className) {\n case 'rememberedcancelbutton':\n this.sendAnalyticsEvent('picker-pageview', 'not my provider');\n break;\n case 'viewallbutton':\n this.sendAnalyticsEvent('picker-pageview', 'list of service providers');\n break;\n case 'viewtopbutton':\n this.sendAnalyticsEvent('picker-pageview', 'top providers');\n break;\n case 'mvpdlogo':\n this.sendAnalyticsEvent('picker-click', 'tve:picker:' + event.target.parentNode.dataset.mvpdid);\n break;\n case 'dontseebutton':\n this.sendAnalyticsEvent('picker-click', 'provider not available');\n break;\n case 'watchnowbutton':\n this.sendAnalyticsEvent('picker-click', 'watch now');\n break;\n case 'close':\n this.sendAnalyticsEvent('picker-click', 'tve login close out');\n break;\n }\n }\n },\n false,\n );\n }\n\n /**\n * Wrapper function for sendEvent\n * @param eventType String\n * @param interaction String\n */\n static sendAnalyticsEvent(eventType, interaction) {\n try {\n window.sendEvent(eventType, {\n interaction: interaction,\n mvpd_name: window.userProvider === null ? 'no mvpd set' : window.userProvider,\n mvpd_id: window.userProviderId === null ? 'no mvpd set' : window.userProviderId,\n });\n } catch (e) {\n if (e instanceof TypeError) {\n setTimeout(() => {\n if (window.sendEvent && window.sendEvent === 'function') {\n window.sendEvent(eventType, {\n interaction: interaction,\n mvpd_name: window.userProvider === null ? 'no mvpd set' : window.userProvider,\n mvpd_id: window.userProviderId === null ? 'no mvpd set' : window.userProviderId,\n });\n } else {\n console.warn(e);\n }\n }, 1000);\n }\n }\n }\n}\n"],"names":["$","safeAdd","x","y","lsw","md5cmn","q","a","b","s","t","num","cnt","md5ff","c","d","md5gg","md5hh","md5ii","binlMD5","len","i","olda","oldb","oldc","oldd","length","binl2rstr","input","output","length32","String","fromCharCode","rstr2binl","undefined","length8","charCodeAt","rstr2hex","hexTab","charAt","str2rstrUTF8","unescape","encodeURIComponent","rawMD5","rstrMD5","rawHMACMD5","k","key","data","hash","bkey","ipad","opad","concat","rstrHMACMD5","md5","string","raw","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","n","getter","__esModule","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","WatchCarousel","initialize","slick","autoplay","autoplaySpeed","arrows","cssEase","dots","dotsClass","infinite","speed","slidesToShow","swipe","WatchModal","constructor","options","this","modal_template","onOpen","onClose","custom_open_callback","bind","custom_close_callback","modal_selector","modal_open_class","modal_close_selector","modal_sidebar_close_selector","modal_player_close_selector","is_open","_setupEventListeners","open","close","addClass","append","type","template","hide","sidebarTemplate","toggleTemplate","fullText","element","document","querySelector","console","log","focus","click","detach","removeClass","window","player","getIsOpen","on","e","WatchlistPage","watchlist","UrlPathname","apiURL2","toStr","isCallable","maxSafeInteger","toLength","addEventListener","tileOverlay","querySelectorAll","watchListRemoveBtn","Array","from","deleteVOD","classList","toggle","getElementsByTagName","editable","toString","fn","Math","pow","value","number","Number","isNaN","isFinite","floor","abs","toInteger","min","max","arrayLike","items","TypeError","T","mapFn","arguments","kValue","A","Browser","OS","nameOffset","verOffset","ix","nVer","navigator","appVersion","nAgt","userAgent","browser","appName","version","parseFloat","majorVersion","parseInt","indexOf","substring","lastIndexOf","toLowerCase","toUpperCase","mobile","test","cookieEnabled","cookie","os","clientStrings","r","id","cs","osVersion","exec","flashVersion","swfobject","fv","getFlashPlayerVersion","major","minor","release","jscd","browserVersion","browserMajorVersion","cookies","show","apiURL","s3Pool","s3Bucket","akamaiPre","currentUrl","location","origin","hostname","arrayForLoop","domWatchlistModifiers","watchlistArray","empty","ajax","url","contentId","headers","success","runtime","tcm","title","imageProfiles","image","each","index","item","usage","runtimeMinutes","split","titleId","moment","vod","expiryDate","valueOf","publishedDate","name","releaseYear","f","h","genre","mpaaRating","movieDescription","j","genres","l","daysUntilExp","available","g","GetVod","mediaId","error","numericallyOrderedDivs","movId","dataset","vodDeleted","modWatchlist","tileToRemove","parentNode","removeChild","expireDate","Date","today","round","sort","find","text","html","Watchlist","currentURL","Player","TOP","ngtvTokenRequestUrl","deleteSuccess","ngtvTokenRefreshRate","ngtvToken","appId","drupalSettings","top_appid","localEnv","testEnv","prodEnv","ngtvVar","watchlistCount","addSubtractMovie","currentId","watchlistDomBubble","isCurrentPageInList","ifTitlesPageVodTitle","ifTitlesPageVodImg","ifTitlesPageVodYear","ifTitlesPageVodPub","ifTitlesPageVodExp","readWatchList","async","auth","prepare","then","context","adobeToken","fetchAuthContext","isAuthenticated","authenticatedState","userAuth","authorize","login","catch","startAuthFlow","channel","token","authToken","AuthTokenType","Adobe","method","body","accessTokenType","accessToken","done","token_ttl","getNgtvToken","ngtv_token","documents","filter","seriesId","todaysDate","now","metadata","expiration","metatdata","some","updateDom","importedVodId","map","favorite","JSON","stringify","traditional","contentType","sbpBody","position","updated","year","push","userProvider","watchlistSpan","innerHTML","modifyWatchlistBtn","getElementById","getAttribute","css","providerImg","setAttribute","userProviderDisplayName","AuthConfigBuilder","Auth","builder","PlayerConfigBuilder","ContentEntryBuilder","mvpdConfigURL","URL","searchParams","set","companyIdVOD","top_software_statement","top_companyid_vod","customerkey","top_companyid_live","top_customerkey","WatchPlayer","inputData","usprivacy","topVersion","Version","video_metadata","vodMeta","forEach","create","mediaEvents","playerReady","adStarted","adFinished","mediaStarted","mediaBufferingStarted","mediaBufferingFinished","mediaPaused","mediaResumed","mediaFinished","contentCompleted","convivaOptions","customerKey","applicationName","touchstoneUrl","assetName","setupConfig","forSetup","withContainer","withConviva","withMetadata","serviceWorkerPath","build","events","listen","result","videoType","play","contentSetup","playhead","time","playerid","content_duration","adCreativeStarted","ad_duration","ad_type","feed","storePlayHead","paused","trackTOPEvent","mediaStopped","mediaTimeChanged","timeProgressed","exitFullscreen","eventMapper","ev","setup","sbpUrl","assignPlayHead","contentUrl","bulkaesURL","AuthConvivaOptions","viewerId","tags","authenticatedProvider","displayName","content_dataCreated","content_dataAired","content_name","content_id","content_type","content_format","clipType","getMediaFormat","content_type_level2","mvpd","user_id","userProviderId","content_feed","liveStreamConverter","login_state","authentication_requirement","contentPlayData","forEntryData","addFile","assetId","playlistProtection","AuthCdnTokenType","Spe","playConfig","forPlay","companyId","contentEntryData","forEntryOptions","withAccessToken","withAccessTokenType","withPlayConfigOverrides","playContent","message","popUp","vodCompleted","expiry","publish","setInterval","API_URLS","default","softwareStatement","authConfig","withAuthType","withBrand","withPlatform","withMVPDConfigURL","withServiceAppId","withSoftwareStatement","topAuth","jQuery","adobeAccessToken","sup","pathname","onload","bgAnimation","logoAnimation","sloganAnimation","watchPageWrapper","watchHeader","watchFooter","add","remove","userAuthBtn","userAuthBtnMobile","userAuthBtnSettings","handleAuthContext","ratio","devicePixelRatio","originalWidth","originalHeight","imgWidth","imgHeight","adobeHashId","imgUrl","buildImageURL","color","providerId","width","height","createElement","imageURL","fw_ae","fw_ar","style","display","insertBefore","nextSibling","removeEventListener","userLogout","providerLink","ele","cancelTimer","setTimeout","cancelAuthentication","logout","finally","clearTimeout","homeURL","ready","bump_height","hasClass","offset","top","preventDefault","attr","One","replace","tcmString","parseJSON","galleryData","galleryID","galleryTitle","galleryType","galleryDescription","galleryThumbSrc","images","modal_archive_container_template","modal_archive_slides_template","altTag","imgDescription","imgParticipants","imgSrc","archiveContainerTemplate","archiveSlidesTemplate","archiveModalSetup","$status","event","currentSlide","nextSlide","slideCount","mobileFirst","ajaxStop","scrollTop","meta","modal_essentials_sidebar_template","modal_essentials_toggle_template","sectionClicked","stopPropagation","parent","currentFilter","parents","selectedOption","siblings","tilesWrap","tiles","children","an","bn","appendTo","count","searchReturnsEmptyDiv","pageSelectSort","queryString","reload","envVars","populateOverlayCarousel","MSStream","rating","des","modalCreation","turner_metadata","video_title","video_franchise","vodData","modal_player_template","custom_options_that_are_not_required","liveFeedModalDataRefresh","stop","destroy","getFullYear","getMonth","getDate","getHours","getMinutes","runTimeMins","hours","minutes","accept","metaDiv","schedule","whatsOnNow","tvGenres","media","desktop","bulkaes","secureUrl","clickedTitleID","href","retrievedSeconds","processedMovieTime","seconds","formattedTime","getFormattedRuntime","target","className","sendAnalyticsEvent","mvpdid","eventType","interaction","sendEvent","mvpd_name","mvpd_id","warn","activate"],"sourceRoot":""}