{ "version": 3, "sources": ["../../lib/_dompurify/purify.js", "../../js/universal/debounce/debounce.js", "../../lib/_cookie-js/js.cookie.js", "../../lib/_smooth-scroll-polyfill/smoothscroll.js", "../../js/universal/jquery-plugins/do-if-exists.js", "../../js/universal/jquery-plugins/do-if-not-exists.js", "../../js/universal/jquery-plugins/flex-fade-in.js", "../../js/universal/jquery-plugins/flex-fade-out.js", "../../js/universal/jquery-plugins/safe-html.js", "../../js/universal/jquery-plugins/all.js", "../../js/universal/hover/add-class.js", "../../js/player-search/clear.js", "../../js/player-search/events.js", "../../js/player-search/handle-keyboard-nav.js", "../../js/universal/hover/remove-class.js", "../../js/player-search/show-mobile-search-box.js", "../../js/player-search/build-search-result.js", "../../js/universal/error-handling/remove-error-notification-bar.js", "../../js/universal/error-handling/show-error-notification-bar.js", "../../js/player-search/search.js", "../../js/player-search/trigger-search.js", "../../js/nav/display-screen.js", "../../js/nav/section-nav-sub.js", "../../js/nav/open-section-menu.js", "../../js/nav/close-section-menu.js", "../../js/nav/events.js", "../../js/navigation/events.js", "../../js/navigation/scroll-tabs/arrows/adjust.js", "../../js/navigation/scroll-tabs/arrows/add.js", "../../js/navigation/side/search/clear.js", "../../js/navigation/side/close.js", "../../js/universal/window-resize/do-on-window-resize.js", "../../js/navigation/side/search/add-to-nav.js", "../../js/navigation/side/open.js", "../../js/navigation/scroll-tabs/toggle-sub-pages.js", "../../js/navigation/scroll-tabs/toggle-default-sub-pages.js", "../../js/navigation/section/close-dropdown.js", "../../js/navigation/section/calculate-dropdown-pos.js", "../../js/navigation/section/toggle-dropdown.js", "../../js/navigation/side/sub-section/toggle.js", "../../js/navigation/section/trigger-close-dropdown.js", "../../js/navigation/section/trigger-item-link.js", "../../js/navigation/scroll-tabs/arrows/trigger-scroll.js", "../../js/navigation/scroll-tabs/trigger-toggle-sub-pages.js", "../../js/navigation/side/search/get-no-results-html.js", "../../js/navigation/side/search/watch.js", "../../js/universal/cloudinary/hide-hidden-images.js", "../../js/universal/cloudinary/restore-hidden-images.js", "../../js/universal/cloudinary/activate.js", "../../js/universal/ripple-effect/activate.js", "../../js/universal/smart-anchor-tags/remove-hashes-from-url.js", "../../js/universal/smart-anchor-tags/activate.js", "../../js/universal/button-state/automatic-button-processing.js", "../../js/universal/articles/cancel-comment-reply.js", "../../js/universal/ads/check-for-wallpaper.js", "../../js/universal/player-news/expand-update.js", "../../js/universal/player-outlooks/expand.js", "../../js/universal/widows/fix-all.js", "../../js/universal/button-state/remove-button-processing-state.js", "../../js/universal/toggle-tabs/get-tab-settings.js", "../../js/universal/toggle-tabs/perform-actions.js", "../../js/universal/toggle-tabs/switch-tab.js", "../../js/universal/player-news/get.js", "../../js/universal/css-grid/set-min-grid-width.js", "../../js/universal/player-rankings/get.js", "../../js/universal/player-rumors/get.js", "../../js/universal/ads/hide-ad-containers.js", "../../js/universal/filter-tabs/check-for-match.js", "../../js/universal/filter-checkboxes/filter-items.js", "../../js/universal/filter-checkboxes/get-settings.js", "../../js/universal/filter-checkboxes/update-filter.js", "../../js/universal/filter-checkboxes/initialize.js", "../../lib/_lozad/lozad.es.js", "../../js/universal/cloudinary/lazy-loader.js", "../../js/universal/ads/insert-freestar-sticky-ads.js", "../../js/universal/ads/insert-connatix.js", "../../js/universal/ads/insert-stn.js", "../../js/universal/ads/insert-video-ads.js", "../../js/universal/ajax-loader/get-data.js", "../../js/universal/player-news/minimize-update.js", "../../js/universal/charts/on-data.js", "../../js/universal/charts/get-key-data-points.js", "../../js/universal/charts/get-limit-mode.js", "../../js/universal/charts/on-draw.js", "../../js/universal/modal-window/get-presets-confirmation.js", "../../js/universal/modal-window/build-modal-confirmation.js", "../../js/universal/modal-window/open-confirmation.js", "../../js/universal/modal-window/build-modal-item-editor.js", "../../js/universal/modal-window/open-item-editor.js", "../../js/universal/jump-bar/activate.js", "../../js/universal/reveal/reveal-element.js", "../../js/universal/filter-links/reveal-selected-filter.js", "../../js/universal/scroll-on-load/scroll-to-element-on-load.js", "../../js/universal/radio-button/select-radio-button-in-row.js", "../../js/universal/userlist/send-activity-event.js", "../../js/universal/events.js", "../../js/universal/checkboxes/toggle.js", "../../js/universal/filter-checkboxes/trigger-filter-update.js", "../../js/universal/data-filter/clear.js", "../../js/universal/data-filter/trigger-clear.js", "../../js/universal/input-with-clear/clear.js", "../../js/universal/input-with-clear/trigger-clear.js", "../../js/universal/filter-links/trigger-close-sub-nav.js", "../../js/universal/modal-window/close.js", "../../js/universal/modal-window/trigger-close.js", "../../js/universal/articles/trigger-comment-reply.js", "../../js/universal/filter-links/open-range-editor.js", "../../js/universal/filter-links/trigger-range-editor.js", "../../js/universal/filter-links/trigger-sub-nav.js", "../../js/universal/filter-tabs/manage-empty-state.js", "../../js/universal/filter-tabs/filter-items.js", "../../js/universal/filter-tabs/get-filter-settings.js", "../../js/universal/filter-tabs/get-tab-settings.js", "../../js/universal/filter-tabs/switch-tab.js", "../../js/universal/filter-tabs/trigger-tab-open.js", "../../js/universal/filter-tabs/trigger-tab-switch.js", "../../js/universal/articles/get-articles.js", "../../js/universal/articles/trigger-get-articles.js", "../../js/universal/custom-lists/get-content.js", "../../js/universal/custom-lists/trigger-get-content.js", "../../lib/_idb-keyval/idb-keyval.js", "../../js/universal/breakpoints/get-data.js", "../../js/universal/toggle-tabs/trigger-selected-tab.js", "../../js/universal/toggle-tabs/trigger-selected-on-resize.js", "../../js/universal/time-period-selector/change-time-period.js", "../../js/universal/time-period-selector/trigger-time-period-change.js", "../../js/universal/toggle-tabs/trigger-tab-switch.js", "../../js/universal/bet-calc/update-winnings.js", "../../js/universal/bet-calc/trigger-update-winnings.js", "../../js/universal/window-resize/trigger-window-resized-listener.js", "../../js/universal/filter-tabs/get-all-tabs.js", "../../js/universal/filter-tabs/update-filter-counts.js", "../../js/universal/filter-links/update-range-editor.js", "../../js/universal/data-filter/watch-input.js", "../../js/universal/filter-tabs/watch-items.js", "../../js/universal/input-with-clear/watch-input.js", "../../js/universal/modal-window/build-modal.js", "../../js/sport-specific/nfl/open-team-vs-pos-modal.js", "../../js/sport-specific/nfl/open-team-trends-modal.js", "../../js/sport-specific/nfl/open-win-rate-modal.js", "../../js/sport-specific/nfl/open-win-rate-by-season-modal.js", "../../js/sport-specific/nfl/events.js", "../../js/sport-specific/nba/add-court-on-off-player.js", "../../js/sport-specific/nba/clear-injury-archive-search.js", "../../js/sport-specific/nba/events.js", "../../js/sport-specific/nba/load-court-on-off-table.js", "../../js/sport-specific/nba/open-court-on-off-modal.js", "../../js/sport-specific/nba/open-injury-archive-modal.js", "../../js/sport-specific/nba/open-team-trends-modal.js", "../../js/sport-specific/nba/remove-court-on-off-player.js", "../../js/sport-specific/nba/injury-archive-search.js", "../../js/sport-specific/nba/trigger-injury-archive-search.js", "../../js/sport-specific/nhl/open-team-trends-modal.js", "../../js/sport-specific/nhl/events.js", "../../js/sport-specific/pga/open-scorecard-modal.js", "../../js/sport-specific/pga/events.js", "../../js/sport-specific/cbb/open-team-preview-modal.js", "../../js/sport-specific/cbb/events.js", "../../js/sport-specific/cfb/open-team-vs-pos-modal.js", "../../js/sport-specific/cfb/open-team-trends-modal.js", "../../js/sport-specific/cfb/events.js", "../../js/sport-specific/soccer/open-team-trends-modal.js", "../../js/sport-specific/soccer/events.js", "../../js/sport-specific/mlb/open-team-trends-modal.js", "../../js/sport-specific/mlb/events.js", "../../js/sport-specific/wnba/open-team-trends-modal.js", "../../js/sport-specific/wnba/events.js", "../../js/sport-specific/euro/open-team-trends-modal.js", "../../js/sport-specific/euro/events.js", "../../js/rotowire.js"], "sourcesContent": [";(function(factory) {\n 'use strict';\n /* global window: false, define: false, module: false */\n var root = typeof window === 'undefined' ? null : window;\n\n if (typeof define === 'function' && define.amd) {\n define(function(){ return factory(root); });\n } else if (typeof module !== 'undefined') {\n module.exports = factory(root);\n } else {\n root.DOMPurify = factory(root);\n }\n}(function factory(window) {\n 'use strict';\n\n var DOMPurify = function(window) {\n return factory(window);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '0.8.9';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n\n var document = window.document;\n var originalDocument = document;\n var DocumentFragment = window.DocumentFragment;\n var HTMLTemplateElement = window.HTMLTemplateElement;\n var Node = window.Node;\n var NodeFilter = window.NodeFilter;\n var NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap;\n var Text = window.Text;\n var Comment = window.Comment;\n var DOMParser = window.DOMParser;\n var useDOMParser = false; // See comment below\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n var implementation = document.implementation;\n var createNodeIterator = document.createNodeIterator;\n var getElementsByTagName = document.getElementsByTagName;\n var createDocumentFragment = document.createDocumentFragment;\n var importNode = originalDocument.importNode;\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof implementation.createHTMLDocument !== 'undefined' &&\n document.documentMode !== 9;\n\n /* Add properties to a lookup table */\n var _addToSet = function(set, array) {\n var l = array.length;\n while (l--) {\n if (typeof array[l] === 'string') {\n array[l] = array[l].toLowerCase();\n }\n set[array[l]] = true;\n }\n return set;\n };\n\n /* Shallow clone an object */\n var _cloneObj = function(object) {\n var newObject = {};\n var property;\n for (property in object) {\n if (object.hasOwnProperty(property)) {\n newObject[property] = object[property];\n }\n }\n return newObject;\n };\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = _addToSet({}, [\n\n // HTML\n 'a','abbr','acronym','address','area','article','aside','audio','b',\n 'bdi','bdo','big','blink','blockquote','body','br','button','canvas',\n 'caption','center','cite','code','col','colgroup','content','data',\n 'datalist','dd','decorator','del','details','dfn','dir','div','dl','dt',\n 'element','em','fieldset','figcaption','figure','font','footer','form',\n 'h1','h2','h3','h4','h5','h6','head','header','hgroup','hr','html','i',\n 'img','input','ins','kbd','label','legend','li','main','map','mark',\n 'marquee','menu','menuitem','meter','nav','nobr','ol','optgroup',\n 'option','output','p','pre','progress','q','rp','rt','ruby','s','samp',\n 'section','select','shadow','small','source','spacer','span','strike',\n 'strong','style','sub','summary','sup','table','tbody','td','template',\n 'textarea','tfoot','th','thead','time','tr','track','tt','u','ul','var',\n 'video','wbr',\n\n // SVG\n 'svg','altglyph','altglyphdef','altglyphitem','animatecolor',\n 'animatemotion','animatetransform','circle','clippath','defs','desc',\n 'ellipse','filter','font','g','glyph','glyphref','hkern','image','line',\n 'lineargradient','marker','mask','metadata','mpath','path','pattern',\n 'polygon','polyline','radialgradient','rect','stop','switch','symbol',\n 'text','textpath','title','tref','tspan','view','vkern',\n\n // SVG Filters\n 'feBlend','feColorMatrix','feComponentTransfer','feComposite',\n 'feConvolveMatrix','feDiffuseLighting','feDisplacementMap',\n 'feFlood','feFuncA','feFuncB','feFuncG','feFuncR','feGaussianBlur',\n 'feMerge','feMergeNode','feMorphology','feOffset',\n 'feSpecularLighting','feTile','feTurbulence',\n\n //MathML\n 'math','menclose','merror','mfenced','mfrac','mglyph','mi','mlabeledtr',\n 'mmuliscripts','mn','mo','mover','mpadded','mphantom','mroot','mrow',\n 'ms','mpspace','msqrt','mystyle','msub','msup','msubsup','mtable','mtd',\n 'mtext','mtr','munder','munderover',\n\n //Text\n '#text'\n ]);\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = _addToSet({}, [\n\n // HTML\n 'accept','action','align','alt','autocomplete','background','bgcolor',\n 'border','cellpadding','cellspacing','checked','cite','class','clear','color',\n 'cols','colspan','coords','datetime','default','dir','disabled',\n 'download','enctype','face','for','headers','height','hidden','high','href',\n 'hreflang','id','ismap','label','lang','list','loop', 'low','max',\n 'maxlength','media','method','min','multiple','name','noshade','novalidate',\n 'nowrap','open','optimum','pattern','placeholder','poster','preload','pubdate',\n 'radiogroup','readonly','rel','required','rev','reversed','role','rows',\n 'rowspan','spellcheck','scope','selected','shape','size','span',\n 'srclang','start','src','step','style','summary','tabindex','title',\n 'type','usemap','valign','value','width','xmlns',\n\n // SVG\n 'accent-height','accumulate','additivive','alignment-baseline',\n 'ascent','attributename','attributetype','azimuth','basefrequency',\n 'baseline-shift','begin','bias','by','clip','clip-path','clip-rule',\n 'color','color-interpolation','color-interpolation-filters','color-profile',\n 'color-rendering','cx','cy','d','dx','dy','diffuseconstant','direction',\n 'display','divisor','dur','edgemode','elevation','end','fill','fill-opacity',\n 'fill-rule','filter','flood-color','flood-opacity','font-family','font-size',\n 'font-size-adjust','font-stretch','font-style','font-variant','font-weight',\n 'fx', 'fy','g1','g2','glyph-name','glyphref','gradientunits','gradienttransform',\n 'image-rendering','in','in2','k','k1','k2','k3','k4','kerning','keypoints',\n 'keysplines','keytimes','lengthadjust','letter-spacing','kernelmatrix',\n 'kernelunitlength','lighting-color','local','marker-end','marker-mid',\n 'marker-start','markerheight','markerunits','markerwidth','maskcontentunits',\n 'maskunits','max','mask','mode','min','numoctaves','offset','operator',\n 'opacity','order','orient','orientation','origin','overflow','paint-order',\n 'path','pathlength','patterncontentunits','patterntransform','patternunits',\n 'points','preservealpha','r','rx','ry','radius','refx','refy','repeatcount',\n 'repeatdur','restart','result','rotate','scale','seed','shape-rendering',\n 'specularconstant','specularexponent','spreadmethod','stddeviation','stitchtiles',\n 'stop-color','stop-opacity','stroke-dasharray','stroke-dashoffset','stroke-linecap',\n 'stroke-linejoin','stroke-miterlimit','stroke-opacity','stroke','stroke-width',\n 'surfacescale','targetx','targety','transform','text-anchor','text-decoration',\n 'text-rendering','textlength','u1','u2','unicode','values','viewbox',\n 'visibility','vert-adv-y','vert-origin-x','vert-origin-y','word-spacing',\n 'wrap','writing-mode','xchannelselector','ychannelselector','x','x1','x2',\n 'y','y1','y2','z','zoomandpan',\n\n // MathML\n 'accent','accentunder','bevelled','close','columnsalign','columnlines',\n 'columnspan','denomalign','depth','display','displaystyle','fence',\n 'frame','largeop','length','linethickness','lspace','lquote',\n 'mathbackground','mathcolor','mathsize','mathvariant','maxsize',\n 'minsize','movablelimits','notation','numalign','open','rowalign',\n 'rowlines','rowspacing','rowspan','rspace','rquote','scriptlevel',\n 'scriptminsize','scriptsizemultiplier','selection','separator',\n 'separators','stretchy','subscriptshift','supscriptshift','symmetric',\n 'voffset',\n\n // XML\n 'xlink:href','xml:id','xlink:title','xml:space','xmlns:xlink'\n ]);\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for jQuery's $() factory? */\n var SAFE_FOR_JQUERY = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Specify template detection regex for SAFE_FOR_TEMPLATES mode */\n var MUSTACHE_EXPR = /\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm;\n var ERB_EXPR = /<%[\\s\\S]*|[\\s\\S]*%>/gm;\n\n /* Decide if document with ... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html string.\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html string */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify. */\n var RETURN_DOM_IMPORT = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = _addToSet({}, [\n 'audio', 'head', 'math', 'script', 'style', 'template', 'svg', 'video'\n ]);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = _addToSet({}, [\n 'audio', 'video', 'img', 'source', 'image'\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = _addToSet({}, [\n 'alt','class','for','id','label','name','pattern','placeholder',\n 'summary','title','value','style','xmlns'\n ]);\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param optional config literal\n */\n var _parseConfig = function(cfg) {\n /* Shield configuration object from tampering */\n if (typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ?\n _addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ?\n _addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ?\n _addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ?\n _addToSet({}, cfg.FORBID_ATTR) : {};\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = _cloneObj(ALLOWED_TAGS);\n }\n _addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = _cloneObj(ALLOWED_ATTR);\n }\n _addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n _addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) { ALLOWED_TAGS['#text'] = true; }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (Object && 'freeze' in Object) { Object.freeze(cfg); }\n\n CONFIG = cfg;\n };\n\n /**\n * _forceRemove\n *\n * @param a DOM node\n */\n var _forceRemove = function(node) {\n DOMPurify.removed.push({element: node});\n try {\n node.parentNode.removeChild(node);\n } catch (e) {\n node.outerHTML = '';\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param an Attribute name\n * @param a DOM node\n */\n var _removeAttribute = function(name, node) {\n DOMPurify.removed.push({\n attribute: node.getAttributeNode(name),\n from: node\n });\n node.removeAttribute(name);\n };\n\n /**\n * _initDocument\n *\n * @param a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n var _initDocument = function(dirty) {\n /* Create a HTML document */\n var doc, body;\n\n /* Fill body with bogus element */\n if (FORCE_BODY) {\n dirty = '' + dirty;\n }\n\n /* Use DOMParser to workaround Firefox bug (see comment below) */\n if (useDOMParser) {\n try {\n doc = new DOMParser().parseFromString(dirty, 'text/html');\n } catch (e) {}\n }\n\n /* Otherwise use createHTMLDocument, because DOMParser is unsafe in\n Safari (see comment below) */\n if (!doc || !doc.documentElement) {\n doc = implementation.createHTMLDocument('');\n body = doc.body;\n body.parentNode.removeChild(body.parentNode.firstElementChild);\n body.outerHTML = dirty;\n }\n\n /* Work on whole document or just its body */\n return getElementsByTagName.call(doc,\n WHOLE_DOCUMENT ? 'html' : 'body')[0];\n };\n\n // Safari 10.1+ (unfixed as of time of writing) has a catastrophic bug in\n // its implementation of DOMParser such that the following executes the\n // JavaScript:\n //\n // new DOMParser()\n // .parseFromString('', 'text/html');\n //\n // However, Firefox uses a different parser for innerHTML rather than\n // DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631)\n // which means that you *must* use DOMParser, otherwise the output may\n // not be safe if used in a document.write context later.\n //\n // So we feature detect the Firefox bug and use the DOMParser if necessary.\n if (DOMPurify.isSupported) {\n (function () {\n var doc = _initDocument('');\n if (doc.querySelector('svg img')) {\n useDOMParser = true;\n }\n }());\n }\n\n /**\n * _createIterator\n *\n * @param document/fragment to create iterator for\n * @return iterator instance\n */\n var _createIterator = function(root) {\n return createNodeIterator.call(root.ownerDocument || root,\n root,\n NodeFilter.SHOW_ELEMENT\n | NodeFilter.SHOW_COMMENT\n | NodeFilter.SHOW_TEXT,\n function() { return NodeFilter.FILTER_ACCEPT; },\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n var _isClobbered = function(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n if ( typeof elm.nodeName !== 'string'\n || typeof elm.textContent !== 'string'\n || typeof elm.removeChild !== 'function'\n || !(elm.attributes instanceof NamedNodeMap)\n || typeof elm.removeAttribute !== 'function'\n || typeof elm.setAttribute !== 'function'\n ) {\n return true;\n }\n return false;\n };\n\n /**\n * _isNode\n *\n * @param object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n var _isNode = function(obj) {\n return (\n typeof Node === \"object\" ? obj instanceof Node : obj\n && typeof obj === \"object\" && typeof obj.nodeType === \"number\"\n && typeof obj.nodeName===\"string\"\n );\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param node to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n var _sanitizeElements = function(currentNode) {\n var tagName, content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n tagName = currentNode.nodeName.toLowerCase();\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for black-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]\n && typeof currentNode.insertAdjacentHTML === 'function') {\n try {\n currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML);\n } catch (e) {}\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Convert markup to cover jQuery behavior */\n if (SAFE_FOR_JQUERY && !currentNode.firstElementChild &&\n (!currentNode.content || !currentNode.content.firstElementChild) &&\n / tag that has an \"id\"\n // attribute at the time.\n if (lcName === 'name' &&\n currentNode.nodeName === 'IMG' && attributes.id) {\n idAttr = attributes.id;\n attributes = Array.prototype.slice.apply(attributes);\n _removeAttribute('id', currentNode);\n _removeAttribute(name, currentNode);\n if (attributes.indexOf(idAttr) > l) {\n currentNode.setAttribute('id', idAttr.value);\n }\n } else if (\n // This works around a bug in Safari, where input[type=file]\n // cannot be dynamically set after type has been removed\n currentNode.nodeName === 'INPUT' && lcName === 'type' &&\n value === 'file' && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {\n continue;\n } else {\n // This avoids a crash in Safari v9.0 with double-ids.\n // The trick is to first set the id to be empty and then to\n // remove the attribute\n if (name === 'id') {\n currentNode.setAttribute(name, '');\n }\n _removeAttribute(name, currentNode);\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in window || value in document || value in formElement)) {\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = value.replace(MUSTACHE_EXPR, ' ');\n value = value.replace(ERB_EXPR, ' ');\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && DATA_ATTR.test(lcName)) {\n // This attribute is safe\n }\n else if (ALLOW_ARIA_ATTR && ARIA_ATTR.test(lcName)) {\n // This attribute is safe\n }\n /* Otherwise, check the name is permitted */\n else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n continue;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n }\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n else if (IS_ALLOWED_URI.test(value.replace(ATTR_WHITESPACE,''))) {\n // This attribute is safe\n }\n /* Keep image data URIs alive if src/xlink:href is allowed */\n else if (\n (lcName === 'src' || lcName === 'xlink:href') &&\n value.indexOf('data:') === 0 &&\n DATA_URI_TAGS[currentNode.nodeName.toLowerCase()]) {\n // This attribute is safe\n }\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !IS_SCRIPT_OR_DATA.test(value.replace(ATTR_WHITESPACE,''))) {\n // This attribute is safe\n }\n /* Check for binary attributes */\n else if (!value) {\n // binary attributes are safe at this point\n }\n /* Anything else, presume unsafe, do not add it back */\n else {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n currentNode.setAttribute(name, value);\n DOMPurify.removed.pop();\n } catch (e) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n * @return void\n */\n var _sanitizeShadowDOM = function(fragment) {\n var shadowNode;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while ( (shadowNode = shadowIterator.nextNode()) ) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode\n */\n var _executeHook = function(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) { return; }\n\n hooks[entryPoint].forEach(function(hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n DOMPurify.sanitize = function(dirty, cfg) {\n var body, importedNode, currentNode, oldNode, nodeIterator, returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n if (!dirty) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString !== 'function') {\n throw new TypeError('toString is not a function');\n } else {\n dirty = dirty.toString();\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (typeof window.toStaticHTML === 'object'\n || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n } else if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else {\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {\n return dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n nodeIterator = _createIterator(body);\n\n /* Now start iterating over the created document */\n while ( (currentNode = nodeIterator.nextNode()) ) {\n\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /* adoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs. */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n };\n\n /**\n * setConfig\n * Public method to set the configuration once\n *\n * @param {Object} configuration object\n * @return void\n */\n DOMPurify.setConfig = function(cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * clearConfig\n * Public method to remove the configuration\n *\n * @return void\n */\n DOMPurify.clearConfig = function() {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * addHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint\n * @param {Function} hookFunction\n */\n DOMPurify.addHook = function(entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') { return; }\n hooks[entryPoint] = hooks[entryPoint] || [];\n hooks[entryPoint].push(hookFunction);\n };\n\n /**\n * removeHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint\n * @return void\n */\n DOMPurify.removeHook = function(entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint].pop();\n }\n };\n\n /**\n * removeHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint\n * @return void\n */\n DOMPurify.removeHooks = function(entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * removeAllHooks\n * Public method to remove all DOMPurify hooks\n *\n * @return void\n */\n DOMPurify.removeAllHooks = function() {\n hooks = {};\n };\n\n return DOMPurify;\n}));\n", "/* eslint-disable */\n/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n", "/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n", "/* eslint-disable */\n/* smoothscroll v0.4.0 - 2018 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n var isBody;\n\n do {\n el = el.parentNode;\n\n isBody = el === d.body;\n } while (isBody === false && isScrollable(el) === false);\n\n isBody = null;\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n", "/*******************************************************************************\nDO IF EXISTS\nTake action on an element if it exists and return the element so it can be chained.\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n jQuery.fn.doIfExists = function dIfE(func) {\n if (this.length) { func.apply(this); }\n return this;\n };\n}\n", "/*******************************************************************************\nDO IF NOT EXISTS\nTake action if an element does not exists and return the element so it can be chained.\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n jQuery.fn.doIfNotExists = function difNE(func) {\n if (this.length === 0) { func.apply(this); }\n return this;\n };\n}\n", "/*******************************************************************************\nFADE IN FLEXBOX ELEMENT\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n $.fn.flexFadeIn = function flexFadeIn(hideClasses, speed, callback) {\n callback = callback || function emptyCallback() {};\n hideClasses = hideClasses || 'hide';\n this.css('opacity', '0').removeClass(hideClasses).animate({ opacity: 1 }, speed || '300');\n callback();\n return this;\n };\n}\n", "/*******************************************************************************\nFADE OUT FLEXBOX ELEMENT\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n $.fn.flexFadeOut = function flexFadeOut(hideClasses, speed, callback) {\n callback = callback || function emptyCallback() {};\n hideClasses = hideClasses || 'hide';\n this.animate({ opacity: 0 }, speed || '300', function hide() { $(this).addClass(hideClasses); callback(this); });\n\n return this;\n };\n}\n", "/*******************************************************************************\nOUTPUT SANITIZED HTML\nThis is a custom plugin written to replace jQuery's built-in html() method with something\nthat's more resistant to XSS attacks when user-generated data is added to the page.\n*******************************************************************************/\n\nimport { sanitize } from '../../../lib/_dompurify/purify';\n\nexport default function addPluginSafeHTML() {\n\n // Sanitize the HTML string before sending it through jQuery's .html() method\n jQuery.fn.safehtml = function safeHTML(htmlString) {\n const safeHTMLString = sanitize(htmlString, { SAFE_FOR_JQUERY: true });\n $(this).html(safeHTMLString);\n return this;\n };\n}\n", "/*******************************************************************************\nADD ALL jQUERY PLUGINS\nLoad all the jQuery plugins.\n*******************************************************************************/\n\nimport doIfExists from './do-if-exists';\nimport doIfNotExists from './do-if-not-exists';\nimport flexFadeIn from './flex-fade-in';\nimport flexFadeOut from './flex-fade-out';\nimport safeHTML from './safe-html';\n\nexport default function addAlljQueryPlugins() {\n doIfExists();\n doIfNotExists();\n flexFadeIn();\n flexFadeOut();\n safeHTML();\n}\n", "/*******************************************************************************\nAdd the Hover Class To An Element\nAdds the hover class to an element. Prevents touch events from triggering the hover state.\n*******************************************************************************/\n\nlet touchDetected = false;\n\nexport default function addHoverClass(e) {\n\n // 'touchstart' comes through before 'mousenter', but both will fire on IOS\n // If 'touchstart' is fired, we can set the global touchDetected variable to true\n // That way we know when to avoid trigging the hover state (which is sticky on IOS)\n if (e.type === 'touchstart') { touchDetected = true; }\n\n // As long as a touch was not detected, add the 'hovering' class which creates the hover state\n if (!touchDetected) { $(this).addClass('hovering'); }\n\n // Reset the global touchDetected variable to false so it's ready for the next time\n if (e.type === 'mouseenter') { touchDetected = false; }\n}\n", "/*******************************************************\nCLEAR SEARCH\nClears the search box and results.\n********************************************************/\n\nexport default function clearSearch() {\n\n // Clear the input, clear the last search, and remove the clear button\n $(\"input[name='playersearch']\")\n .val('')\n .data('lastsearch', '')\n .siblings('#player-search-clear').remove(); // eslint-disable-line newline-per-chained-call\n\n // Remove the search results\n $('#player-search-results').remove();\n}\n", "/*******************************************************\r\nPLAYER SEARCH EVENT HANDLERS\r\nThis handles events related to the player search boxes.\r\n********************************************************/\r\n\r\nimport addHoverClass from '../universal/hover/add-class';\r\nimport clearSearch from './clear';\r\nimport debounce from '../universal/debounce/debounce';\r\nimport handleKeyboardNavigation from './handle-keyboard-nav';\r\nimport removeHoverClass from '../universal/hover/remove-class';\r\nimport showMobileSearchBox from './show-mobile-search-box';\r\n//import showTopNavSearch from './show-top-nav-search';\r\nimport triggerSearchPlayers from './trigger-search';\r\n\r\nexport default function addPlayerSearchEventHandlers() {\r\n\r\n // Show the search box on small devices when the search icon button is tapped\r\n $(document).on('click', '.top-nav-section__search-icon', showMobileSearchBox);\r\n\r\n // Show the search input box in the top navigation when the button is clicked\r\n //$(document).on('click', '.t-nav__search-button', showTopNavSearch);\r\n\r\n // Watch for typing inside the gamer search box\r\n $(document).on('input', \"input[name='playersearch']\", debounce(triggerSearchPlayers, 300));\r\n\r\n // Watch for keyboard navigation events inside the gamer search box\r\n $(document).on('keyup', \"input[name='playersearch']\", handleKeyboardNavigation);\r\n\r\n // Clear player search box and results\r\n $(document).on('click', '#player-search-clear', clearSearch);\r\n\r\n // Control when hover effects are used on search results\r\n $(document).on('touchstart mouseenter', '.search-result', addHoverClass);\r\n $(document).on('mouseleave', '.search-result', removeHoverClass);\r\n\r\n}\r\n", "/*******************************************************\nHANDLE KEYBOARD NAVIGATION\nHandle navigating search results via keyboard and triggering actual search.\n********************************************************/\n\nimport clearSearch from './clear';\n\nexport default function handleKeyboardNavigation(e) {\n\n // Exit out if any key other than enter, esc, up or down is pressed\n if (![13, 27, 38, 40].includes(e.which)) { return; }\n\n // Get the search data\n const $input = $(e.currentTarget);\n const searchTerm = $input.val() || '';\n const sport = $input.data('sport') || '';\n\n // Check for various keyboard actions\n const keyPressed = {\n enter: (e.which === 13),\n esc : (e.which === 27),\n down : (e.which === 40),\n up : (e.which === 38),\n };\n\n // If the input is empty or the ESC key is pressed,\n // then reset everything to its initial state and exit out\n if (!searchTerm || keyPressed.esc) { clearSearch(); return; }\n\n const activeClass = 'is-active';\n const $results = $('.search-result');\n const $current = $(`.search-result.${activeClass}`);\n const aResultExists = ($results.length > 0);\n const aResultIsSelected = ($current.length > 0);\n let $next;\n\n // If the enter key is pressed while a search result is selected, go to the selected player\n // If the entry key is pressed while a search result is not selected, go the search page\n if (keyPressed.enter) {\n if(aResultIsSelected){\n window.location.href = $current.find('a').attr('href');\n return;\n } else{\n\n // The link to the search page should awlays include the current search term\n let searchPage = '/search.php?term=' + String(searchTerm).toLowerCase().replace(/[\\u2018\\u2019]/g, \"'\").replace(/[\\u201C\\u201D]/g, '\"');\n\n // Add the sport if one exists\n searchPage += ('&sport=' + sport);\n\n window.location.href = searchPage;\n return;\n }\n }\n\n // If the key pressed is up/down and a result exists\n if( (keyPressed.down || keyPressed.up) && aResultExists){\n\n // If the down key is pressed, go to the next result in the list. If we're already at the end, move to the start.\n if (keyPressed.down) {\n $next = (aResultIsSelected && $current.next().length) ? $current.next() : $results.first();\n }\n\n // If the up key is pressed, go to the previous result in the list. If we're already at the beginning, move to the end.\n if (keyPressed.up) {\n $next = (aResultIsSelected && $current.prev().length) ? $current.prev() : $results.last();\n }\n\n // Remove the active class from the current element and add to the next one\n if ($current) { $current.removeClass(activeClass); }\n $next.addClass(activeClass);\n\n // Scroll to the active search result\n const $resultsContainer = $('#player-search-results');\n $resultsContainer.animate({\n scrollTop: $next.position().top + $resultsContainer.scrollTop(),\n }, 50);\n\n }\n\n}\n", "/*******************************************************************************\nRemove Hover Class From An Element\nRemoves the 'hovering' class from an element.\n*******************************************************************************/\n\nexport default function removeHoverClass() {\n $(this).removeClass('hovering');\n}\n", "/*******************************************************\r\nShow Search Box on Devices with Small Screens\r\nShows the hidden search box on small devices when the search icon button is tapped.\r\n********************************************************/\r\n\r\nexport default function showMobileSearchBox(e) {\r\n\r\n // Hide the search icon button\r\n $(e.currentTarget).remove();\r\n\r\n // Show the expanded search box and focus the cursor inside\r\n $('.top-nav-section__search').addClass('is-visible-mobile').find('input').focus();\r\n\r\n // Add this class to the section bar so we can switch from flex row to column\r\n $('.section-bar').addClass('search-is-visible');\r\n}\r\n", "/*******************************************************\nBUILD SEARCH RESULT\nBuilds the HTML for a player search resultsHTML.\n********************************************************/\n\nexport default function buildSearchResult(sport,playerObject) {\n const { link, logo, alt, name, span, text } = playerObject;\n\n // If viewing all sports, the default logo should be at least an empty div. Othwerise it can be empty\n const logoDefault = (sport == 'All') ? '' : '';\n const logoHTML = logo ? `` : logoDefault;\n\n // Specific handler for cases where the text is not set and thus we should not have any left-margins\n const spanStyle = text ? '' : 'style=\"padding-left:0px;\"';\n\n return `\n \n \n ` + logoHTML + `\n \n ${name}\n ${text}${span}\n \n \n `;\n}\n", "/*******************************************************************************\nREMOVE ERROR NOTIFICATION\nRemoves any error notifications from the screen.\n*******************************************************************************/\n\nexport default function removeErrorNotification() {\n\n const $notification = $('.error-notification-bar');\n\n // Handle notifications in the daily section differently than the typical notification\n if ($notification.hasClass('daily-error') || $notification.hasClass('daily-success')) {\n\n // Hide notification bar\n $('.notification-bar.full-width').addClass('hide');\n\n // Hide and reset error and success message\n $notification.find('.daily-error').addClass('hide').text();\n $notification.find('.daily-success').addClass('hide').text();\n }\n\n\n // All other notification bars\n else {\n\n // Remove notification bar element\n $notification.remove();\n }\n}\n", "/*******************************************************************************\nSHOW ERROR NOTIFICATION\nShow an error notification at the bottom of the screen.\n*******************************************************************************/\n\nimport removeErrorNotificationBar from './remove-error-notification-bar';\n\nexport default function showErrorNotification(message, duration = 'forever') {\n\n // Remove any existing error bars (just in case they trigger multiple errors quickly)\n removeErrorNotificationBar();\n\n // Build the error message html\n const errorHTML = `${message}`;\n\n // Show an error message at the bottom of the screen\n $('body').append(errorHTML);\n\n // Remove the error bar from the page after a set amount of time\n // Unless the duration is set to 'forever'\n if (duration !== 'forever') { setTimeout(() => { removeErrorNotificationBar(); }, duration); }\n}\n", "/*******************************************************\nSEARCH FOR PLAYERS\nSearches for players and returns the results.\n********************************************************/\n\nimport showErrorNotificationBar from '../universal/error-handling/show-error-notification-bar';\n\nexport default async function searchPlayers(settings) {\n try {\n const response = await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/search-players.php',\n data : settings,\n timeout: 8000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n players: response.players,\n };\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to search for players. Please try again.', 3000);\n }\n}\n", "/*******************************************************\nWATCH PLAYER SEARCH INPUT\nHandle keyboard events with the player search input.\n********************************************************/\n\nimport buildSearchResult from './build-search-result';\nimport searchPlayers from './search';\n\nexport default async function triggerSearchPlayers(e) {\n\n // Searchable sports\n const searchableSports = ['All','MLB','NFL','NBA','EUR','NHL','PGA','RAC','CFB','CBB','SOC','MMA','DAY','MYROTOWIRE','CFL','WNB','TEN', 'XFL', 'ESP', 'CRI', 'KBO', 'CPB', 'AFL', 'NPB', 'USF', 'F1'];\n\n // Get the input\n const $input = $(e.currentTarget);\n\n // Get the search class from the input\n const searchClass = $input.data('search');\n\n // Get the container element\n const $searchSection = $('.'+searchClass);\n\n // Get the sport from the input\n let sport = $input.data('sport') || '';\n\n // If the sport is not searchable simply return\n if( $.inArray(sport,searchableSports) === -1 ){ return; }\n\n // Cast the special DAY and MYROTOWIRE cases to All\n if(sport === \"DAY\" || sport === \"MYROTOWIRE\"){ sport = \"All\"; }\n\n // Get the search term and convert to lowercase (to improve probability of using Redis cache) and remove any curly quotes (common problem with iPhones)\n const searchTerm = String($input.val() || '').toLowerCase().replace(/[\\u2018\\u2019]/g, \"'\").replace(/[\\u201C\\u201D]/g, '\"');\n\n // Store the last search\n const lastSearch = $input.data('lastsearch') || '';\n\n // If the last search is the same as the current search, don't run it again\n if (searchTerm === lastSearch || !searchTerm) { return; }\n\n // Add the clear button to the search box if it doesn't already exist\n const $clearButton = $('', { \n class: searchClass ? searchClass + '-clear' : '',\n id : 'player-search-clear',\n }).html('×');\n if ($('#player-search-clear').length === 0) { $searchSection.append($clearButton); }\n\n // Add the container for the search results if it doesn't already exist\n let $searchResults = $('', {\n class: searchClass ? searchClass + '-results' : '',\n id : 'player-search-results',\n });\n if ($('#player-search-results').length === 0) { $searchSection.append($searchResults); }\n\n // Grab the search results element from the page\n $searchResults = $('#player-search-results');\n\n // Display a message and exit out if there are fewer than 2 characters\n if (searchTerm.length < 2) {\n $searchResults.html('Please enter at least 2 characters.');\n return;\n }\n\n // Empty the search results and add a \"Searching...\" message\n $searchResults.html('Searching for players...');\n\n // Set the data that gets used with the AJAX query\n const settings = {\n searchTerm,\n };\n\n // If a sport was passed in, add it to the AJAX call\n if (sport) { settings.sport = sport; }\n\n try {\n // Store the current search term in a data attribute (useful for preventing duplicate AJAX calls)\n $input.data('lastsearch', searchTerm);\n\n // Search the players\n // If players is undefined, the rest of this try block won't run\n const { players } = await searchPlayers(settings);\n\n // If there are no results, exit out and show the empty state\n if (players.length === 0) {\n $searchResults.html('No players matched your search.');\n return;\n }\n\n // Build an array of search result HTML and add the results to the container\n const searchResults = players.map(player => buildSearchResult(sport,player));\n $searchResults.safehtml(searchResults.join(''));\n\n }\n catch (err) {\n // Error message already handled in search.js\n }\n}\n", "export default function displaySideNavScreen({screenToDisplay, screenName, backButtonScreen, backButtonScreenName, back }) {\r\n const $titleBar = $('.rwnav-title');\r\n\r\n // Make the title bar visible unless we're displaying the top-level menu screen\r\n $titleBar.toggleClass('hide', screenToDisplay === 'menu');\r\n\r\n // Set the screen name on the title bar\r\n $('#rwnav-title-name').text(screenName);\r\n\r\n // Add the back button screen to the back screens array\r\n const backScreens = $('#rwnav-back').data('screens') || [];\r\n const highestScreenLevel = backScreens.length === 0 ? 0 : Math.max(...backScreens.map(s => s.level));\r\n\r\n if (!back) {\r\n backScreens.push({\r\n screen: backButtonScreen,\r\n screenName: backButtonScreenName,\r\n level: highestScreenLevel + 1,\r\n });\r\n $('#rwnav-back').data('screens', backScreens); \r\n }\r\n\r\n $('.rwnav-screen').removeClass('is-open');\r\n $(`.rwnav-screen[data-list=\"${screenToDisplay}\"]`).addClass('is-open');\r\n}\r\n", "export function toggleSubNav(e) {\r\n\r\n // Get the navigation item that is being selected/hovered over\r\n const $selectedItem = $(e.currentTarget);\r\n\r\n // If this isn't a dropdown (just a single link), then exit out\r\n if ($selectedItem.find('.rwnav-section__link').length > 0) { return; }\r\n\r\n // Prevents the mouse event from occurring if the touch event is triggered (except for the side nav trigger element)\r\n if (e.type === 'touchstart') { e.preventDefault(); }\r\n\r\n // Check to see if a menu is currently open\r\n const menuIsOpen = $selectedItem.hasClass('open');\r\n\r\n // Find the sub navgations\r\n let $selectedSubNav = $(`.rwnav-section-sub__group[data-list=\"${$selectedItem.data('list')}\"]`);\r\n\r\n // Exit out if there is no sub navigation to display\r\n if ($selectedSubNav.length === 0) { return; }\r\n\r\n // Close all sub navigation menus to have a clean slate\r\n closeDropdownMenu();\r\n\r\n // If a menu was already open, then we know the user is trying to close it (which we've done above)\r\n if (menuIsOpen && e.type === 'touchstart') { return; }\r\n\r\n // Add the 'open' class to the selected item\r\n $selectedItem.addClass('open');\r\n\r\n // Make the selected sub nav visible\r\n $selectedSubNav.removeClass('hide');\r\n\r\n // Position the sub nav below the selected item\r\n $selectedSubNav.css('left', calculateDropdownPosition($selectedItem));\r\n}\r\n\r\nexport function closeDropdownMenu() {\r\n\r\n // Hide all the sub nav groups\r\n $('.rwnav-section-sub__group').addClass('hide');\r\n\r\n // Remove the 'open' class from all items\r\n $('.rwnav-section__item').removeClass('open');\r\n}\r\n\r\n// Figure out where the dropdown menu should be appear (and if it should left or right aligned)\r\nexport function calculateDropdownPosition($selectedItem) {\r\n\r\n // Find the sub navigations\r\n let $selectedSubNav = $(`.rwnav-section-sub__group[data-list=\"${$selectedItem.data('list')}\"]`);\r\n\r\n // Get the left side position of the selected item\r\n let itemLeftSide = $selectedItem.position().left;\r\n\r\n // There's a transparent border on the sub nav groups so that moving the mouse outside the\r\n // dropdown is more forgiving. This border needs to be accounted for when calculating the menu position\r\n const transparentBorderOffset = parseInt($selectedSubNav.css('border-left-width'), 10);\r\n\r\n // Get the width of the sub nav group\r\n const subNavWidth = parseInt($selectedSubNav.css('width'), 10);\r\n\r\n // Get the width of the selected item\r\n const itemWidth = parseInt($selectedItem.css('width'), 10);\r\n\r\n // Get the width of the navigation row (the page width)\r\n let pageWidth = parseInt($('.rwnav-section-sub').css('width'), 10);\r\n\r\n // Calculate where the sub nav should be positioned for right alignment\r\n const rightAlignPosition = (itemLeftSide + transparentBorderOffset + itemWidth) - subNavWidth;\r\n\r\n // Check if left-aligning the menu will make it overflow the right side of the page\r\n const overflowsRightSideOfPage = ((itemLeftSide + subNavWidth) > pageWidth);\r\n\r\n // Align the sub menu on the left unless that would make it extend past the boundaries of the right side of the page\r\n let menuPosition = overflowsRightSideOfPage ? rightAlignPosition : itemLeftSide - transparentBorderOffset;\r\n\r\n if (subNavWidth === pageWidth) { menuPosition = 0; }\r\n\r\n return menuPosition;\r\n}\r\n\r\n// Trigger the navigation menu to close (if it should)\r\nexport function triggerCloseDropdownMenu(e) {\r\n const $wasOn = $(e.currentTarget);\r\n const $movedTo = $(e.relatedTarget);\r\n\r\n // Check if the mouse was moved from a dropdown menu to a nav item\r\n const movingFromDropdownToItem = ($wasOn.hasClass('rwnav-section-sub__group') || $wasOn.hasClass('rwnav-section-sub__inner'))\r\n && ($movedTo.hasClass('rwnav-section') || $movedTo.hasClass('rwnav-section__item'));\r\n\r\n // Check if the mouse was moved from a nav item to a dropdown menu\r\n const movingFromItemToDropDown = ($wasOn.hasClass('rwnav-section__item'))\r\n && ($movedTo.hasClass('rwnav-section-sub__group') || $movedTo.hasClass('rwnav-section-sub__inner') || $movedTo.hasClass('rwnav-section-sub__link'));\r\n\r\n // If the mouse isn't on or moving to part of the selected\r\n // navigation (dropdown menu + selected nav item), then close the menu\r\n if (!movingFromDropdownToItem && !movingFromItemToDropDown) { closeDropdownMenu(); }\r\n}\r\n", "export default function openSectionMenu(){\n $('body').addClass('hide-overflow');\n $('.site-wrapper').addClass('rwnav-section-side-is-open');\n $('.fs-close-button-sticky').trigger('click');\n\n const menuStructure = $('.rwnav-section__item').map(function(i, el){\n const $menuItem = $(el);\n const name = $menuItem.text();\n const listID = $menuItem.data('list') || null;\n\n if (!listID) {\n const link = $menuItem.find('a').attr('href');\n return {\n name,\n links: [{ name, link }],\n }\n }\n\n return {\n name, \n links: $(`.rwnav-section-sub__group[data-list=\"${listID}\"] .rwnav-section-sub__link`).map(function(i, el){ \n return { name: $(el).text(), link: $(el).attr('href') }\n }).get()\n };\n }).get();\n\n // Take the menu structure and build the HTML for a right side navigation panel where items with a single link are just links, and items with multiple links are dropdowns\n const menuHTML = menuStructure.map(function(item){\n const { name, links } = item;\n if (links.length === 1) {\n return `\n ${name}`;\n }\n \n return `\n ${name} +\n \n ${links.map(function(item){\n return `${item.name}`\n }).join('')}\n \n `;\n }).join('');\n\n const sectionName = $('.rwnav-section-label:first').text();\n\n const menuTop = `\n \n All ${sectionName}\n \n \n \n \n \n `;\n\n $(\"body\").append(`\n \n ${menuTop}\n ${menuHTML}\n `);\n\n setTimeout(function(){ $('.rwnav-section-side-menu').addClass('is-open'); }, 0);\n}\n", "export default function closeSectionMenu(e){\n // Remove the menu from the screen\n $('.rwnav-section-side-menu').remove();\n\n // Remove the overflow:hidden style from the body so scrolling is possible\n $('body').removeClass('hide-overflow');\n\n // Remove the class on the site wrapper container that signals that side nav is currently open\n $('.site-wrapper').removeClass('rwnav-section-side-is-open');\n\n}\n", "import displaySideNavScreen from './display-screen';\r\nimport {toggleSubNav, triggerCloseDropdownMenu} from './section-nav-sub';\r\nimport openSectionMenu from './open-section-menu';\r\nimport closeSectionMenu from './close-section-menu';\r\n\r\nexport default function addNavEventHandlers() {\r\n //$('.site-header').append('I am experimenting with the hover setting in the top nav right now. It may break but this is temporary. - AQ');\r\n\r\n // Control top nav hover/tap dropdowns\r\n $(document).on(\"touchstart mouseenter\", \".rwnav-top-menu-wrapper\", function(){\r\n $('body').addClass(\"rwnav-dropdown-open\").attr('data-list', $(this).data(\"list\"));\r\n });\r\n\r\n $(document).on(\"mouseenter\", \".rwnav-top-account\", function(){\r\n if ($('.rwnav-logout').length >= 1) { return; }\r\n\r\n const isSmallerScreen = window.matchMedia('(max-width: 1000px)').matches;\r\n if (isSmallerScreen) { return }\r\n\r\n const logoutLink = `\r\n \r\n Account\r\n \r\n Logout \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `;\r\n\r\n $(\".rwnav-top-account\").wrap('');\r\n $('.rwnav-account-wrapper').append(logoutLink);\r\n });\r\n\r\n $(document).on(\"mouseleave\", \".rwnav-account-wrapper\", function(e){\r\n const isSmallerScreen = window.matchMedia('(max-width: 1000px)').matches;\r\n if (isSmallerScreen) { return }\r\n\r\n $('.rwnav-logout').remove();\r\n $('.rwnav-top-account').unwrap();\r\n });\r\n \r\n $(document).on(\"mouseleave\", \".site-header\", function(e){\r\n /* \r\n const $movingTo = $(e.relatedTarget);\r\n\r\n if ($movingTo.hasClass('rwnav') || $movingTo.hasClass('rwnav-top-menus')) {\r\n return; \r\n }\r\n */\r\n \r\n $('body').removeClass(\"rwnav-dropdown-open\").attr('data-list', '');\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-hamburger', function(){\r\n $('body').addClass('rwnav-is-open');\r\n $('.fs-close-button-sticky').trigger('click');\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-hamburger-close', function(){\r\n $('body').removeClass('rwnav-is-open');\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-search-icon', function(){\r\n $('body').addClass('rwnav-player-search-is-open');\r\n $('#search-for-players').focus();\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-search-close', function(){\r\n $('body').removeClass('rwnav-player-search-is-open');\r\n });\r\n\r\n $(document).on('click', '.rwnav-item.has-link i, .rwnav-item:not(.has-link)', function(e){\r\n const $el = $(e.currentTarget);\r\n const isPlusButton = $el.get(0).tagName === 'I';\r\n console.log(isPlusButton);\r\n const $item = isPlusButton ? $el.parents('.rwnav-item') : $el;\r\n\r\n const screenToDisplay = $item.data('list') || '';\r\n if (!screenToDisplay) { return; }\r\n\r\n const screenName = $item.clone().find('span').remove().end().text().replace('+','');\r\n const currentScreen = $('.rwnav-screen.is-open').data('list');\r\n const currentScreenName = $('#rwnav-title-name').text();\r\n \r\n displaySideNavScreen({\r\n screenToDisplay, \r\n screenName, \r\n backButtonScreen: currentScreen, \r\n backButtonScreenName: currentScreenName,\r\n back: false,\r\n });\r\n });\r\n\r\n $(document).on('click', '#rwnav-back', function(){\r\n const $backButton = $('#rwnav-back');\r\n const backScreens = $backButton.data('screens');\r\n const backScreenNames = $backButton.data('screen-names');\r\n\r\n const {screen, screenName} = backScreens.pop();\r\n\r\n const currentScreen = $('.rwnav-screen.is-open').data('list');\r\n const currentScreenName = $('#rwnav-title-name').text();\r\n\r\n displaySideNavScreen({\r\n screenToDisplay: screen, \r\n screenName, \r\n backButtonScreen: currentScreen, \r\n backButtonScreenName: currentScreenName,\r\n back: true,\r\n });\r\n\r\n $backButton.data('screens', backScreens);\r\n $backButton.data('screen-names', backScreenNames);\r\n\r\n });\r\n\r\n // Toggles a sub navigation dropdown menu\r\n $(document).on('touchstart mouseenter', '.rwnav-section__item', toggleSubNav);\r\n\r\n // Hides a sub navigation dropdown menu\r\n $(document).on('mouseleave', '.rwnav-section__item, .rwnav-section-sub__group', triggerCloseDropdownMenu);\r\n\r\n // Open the section nav side menu\r\n $(document).on('click', '.open-section-nav', openSectionMenu);\r\n\r\n // Close the section nav side menu\r\n $(document).on('click', '.close-section-nav, .rwnav-section-side-is-open', closeSectionMenu);\r\n\r\n // Toggle a dropdown in the section nav side menu\r\n $(document).on('click', '.rwnav-section-side-menu__group.has-sub-items', function(e){\r\n if ($(e.target).hasClass('rwnav-section-side-menu__link')) { return; }\r\n\r\n const $group = $(e.currentTarget);\r\n const closingGroup = $group.hasClass('is-open');\r\n\r\n $('.rwnav-section-side-menu__group').removeClass('is-open');\r\n $('.rwnav-section-side-menu__items').addClass('hide');\r\n\r\n if (closingGroup) { return; }\r\n\r\n $group.addClass('is-open');\r\n $group.find('.rwnav-section-side-menu__items').removeClass('hide');\r\n });\r\n\r\n}\r\n", "/*******************************************************\r\nNAVIGATION EVENT HANDLERS\r\nThis handles events related to navigation interactions.\r\n********************************************************/\r\n\r\nimport * as Cookies from '../../lib/_cookie-js/js.cookie';\r\n\r\nimport addHoverClass from '../universal/hover/add-class';\r\nimport addScrollTabArrows from './scroll-tabs/arrows/add';\r\nimport adjustScrollTabArrows from './scroll-tabs/arrows/adjust';\r\nimport clearSideNavSearch from './side/search/clear';\r\nimport closeSideNav from './side/close';\r\nimport doOnWindowResize from '../universal/window-resize/do-on-window-resize';\r\nimport openSideNav from './side/open';\r\nimport removeHoverClass from '../universal/hover/remove-class';\r\nimport openDefaultTab from './scroll-tabs/toggle-default-sub-pages';\r\n//import scrollToSelectedTab from './scroll-tabs/scroll-to-selected';\r\nimport toggleDropdownMenu from './section/toggle-dropdown';\r\nimport toggleSideNavSubSection from './side/sub-section/toggle';\r\nimport triggerCloseSubDropdown from './section/trigger-close-dropdown';\r\nimport triggerItemLink from './section/trigger-item-link';\r\nimport triggerScrollViaNavArrow from './scroll-tabs/arrows/trigger-scroll';\r\nimport triggerToggleSubPages from './scroll-tabs/trigger-toggle-sub-pages';\r\nimport watchSideNavSearch from './side/search/watch';\r\n\r\nexport default function addNavigationEventHandlers() {\r\n\r\n // Add left/right arrows to all scroll tab navigation bars on the page\r\n addScrollTabArrows();\r\n\r\n // Open the default dropdown box for the section\r\n openDefaultTab();\r\n\r\n // Scroll the selected scroll tab into view (when possible) - killed by Herb <--- Haha!\r\n //scrollToSelectedTab();\r\n\r\n // Opens the offscreen navigation menu\r\n $(document).on('click', '.open-side-nav', openSideNav);\r\n\r\n // Closes the offscreen navigation menu\r\n $(document).on('click', '.side-nav-is-open, .side-nav__close', closeSideNav);\r\n\r\n // Catch taps/clicks on navigation items with a single link\r\n $(document).on('click', '.s-nav__item, .section-nav__item', triggerItemLink);\r\n\r\n // Toggles a sub navigation dropdown menu\r\n $(document).on('touchstart mouseenter', '.s-nav__item, .section-nav__item', toggleDropdownMenu);\r\n\r\n // Controls hover effect on section navigation item and dropdown links\r\n $(document).on('touchstart mouseenter', '.s-nav__item, .s-sub-nav__link, .side-nav__item, .section-nav__item, .section-sub-nav__link, .rwnav-section__item, .rwnav-section-sub__link', addHoverClass);\r\n $(document).on('mouseleave', '.s-nav__item, .s-sub-nav__link, .side-nav__item, .section-nav__item, .section-sub-nav__link, .rwnav-section__item, .rwnav-section-sub__link', removeHoverClass);\r\n\r\n // Hides a sub navigation dropdown menu\r\n $(document).on('mouseleave', '.s-nav__item, .s-sub-nav__group, .section-nav__item, .section-sub-nav__group', triggerCloseSubDropdown);\r\n\r\n // Handle typing in page search box in the section side navigation\r\n $(document).on('keyup', '.side-nav__search', watchSideNavSearch);\r\n\r\n // Clear the page search box in the section side navigation\r\n $(document).on('click', '.side-nav__clear-search', clearSideNavSearch);\r\n\r\n // Toggle a sub-section in the side nav\r\n $(document).on('click', '.side-nav__sub-section', toggleSideNavSubSection);\r\n\r\n // Show sub pages when clicking on a scroll tab\r\n $(document).on('click', '.scroll-tab', triggerToggleSubPages);\r\n\r\n // Scroll the scroll tabs navigation when an arrow is clicked/tapped\r\n $(document).on('click', '.nav-arrow-left, .nav-arrow-right', triggerScrollViaNavArrow);\r\n\r\n // Figure out of if the scroll tabs arrows should appear when the viewport is resized\r\n const $scrollTabs = $('.scroll-tabs');\r\n if ($scrollTabs.length > 0) {\r\n doOnWindowResize(() => {\r\n $scrollTabs.each(function adjustArrows() { adjustScrollTabArrows($(this)); });\r\n });\r\n }\r\n\r\n $(() => {\r\n // On page load, set the section content cookie if we're in a section/content home page\r\n // This feature persists the section content navigation even if you click on a page that technically\r\n // belongs to another contenct section (ex. if you click a /baseball/ link from the DFS nav, you'll\r\n // still continue to see the DFS nav once the new page loads)\r\n //const $activeContent = $('.top-nav-section__item.is-active');\r\n //const section = $activeContent.data('navSection') || $('#search-for-players').data('sport');\r\n //if (section === 'HOME' || section === 'All') { return; }\r\n\r\n const sectionLinks = [];\r\n $('a[data-is-section-link]').each(function loopLinks() {\r\n const link = $(this).attr('href');\r\n sectionLinks.push(link);\r\n sectionLinks.push(`${link}index.php`);\r\n });\r\n\r\n const pathName = window.location.pathname || '';\r\n\r\n if (sectionLinks.includes(pathName) || pathName.includes('/article.php') || pathName.includes('/article/')) {\r\n const $activeContent = $('.top-nav-section__item.is-active');\r\n const section = $activeContent.data('navSection') || $('#search-for-players').data('sport') || '';\r\n const content = $activeContent.data('navContent') || '';\r\n if (section && content && !['HOME', 'ALL'].includes(section)) {\r\n Cookies.set(`rwnav_${section}`, content);\r\n }\r\n }\r\n });\r\n\r\n}\r\n", "/*******************************************************************************\nADJUST ARROWS ON SCROLL\nAdjusts the display of the left/right arrows based on scroll position.\n*******************************************************************************/\n\nexport default function adjustArrows($scrollArea) {\n const $scrollTabsOuter = $scrollArea.parents('.scroll-tabs-outer');\n\n // The full width of the full scroll tabs nav bar\n const width = parseInt($scrollArea[0].scrollWidth, 10);\n\n // The width of the visible scrollable area\n const visibleWidth = parseInt($scrollArea.outerWidth(), 10);\n\n // The left scroll position inside the scrollable area\n const scrollLeft = parseInt($scrollArea.scrollLeft(), 10);\n\n // Show the right arrow if either of these apply:\n // 1. The table is scrolled all the way over to the right (with a 30px buffer to make things more smooth).\n // 2. The table does not need to be scrolled horizontally (the < 5 is to account for varying pixel calculations by browsers).\n const rightOpacityClass = ((width <= visibleWidth + scrollLeft + 30) || (width - visibleWidth) < 5) ? 'is-hidden' : 'is-visible';\n $scrollTabsOuter.find('.nav-arrow-right').removeClass('is-hidden is-visible').addClass(rightOpacityClass);\n\n // Show the left arrow if either of these apply:\n // 1. The table is scrolled all the way over to the left (with a 30px buffer to make things more smooth).\n // 2. The table does not need to be scrolled horizontally (the < 5 is to account for varying pixel calculations by browsers).\n const leftOpacityClass = (scrollLeft <= 30 || (width - visibleWidth) < 5) ? 'is-hidden' : 'is-visible';\n $scrollTabsOuter.find('.nav-arrow-left').removeClass('is-hidden is-visible').addClass(leftOpacityClass);\n}\n", "/*******************************************************************************\nADD LEFT/RIGHT ARROWS TO SCROLL TABS\nAdds arrows to the sides of the nav bar to indicate more data outside of view.\n*******************************************************************************/\n\nimport adjustArrows from './adjust';\n\nexport default function addScrollTabArrows() {\n\n $('.scroll-tabs').each((index, nav) => {\n\n // The scrollable area\n const $scrollableArea = $(nav);\n\n // If there's a visible scrollbar, we don't need the arrow indicators\n // The check below compares the height of the container (which includes any scrollbars) to the height of the first nav item\n // If they're different, then we know that scrollbars are visible on the page\n //if ($scrollableArea.outerHeight() !== $scrollableArea.find('.scroll-tab:first-child').outerHeight()) { return; }\n\n // Wrap the scroll tabs with a 'scroll-tabs-outer' div\n if ($scrollableArea.parents('.scroll-tabs-outer').length === 0) {\n $scrollableArea.wrap('');\n }\n const $scrollTabsOuter = $scrollableArea.parents('.scroll-tabs-outer');\n\n // The HTML for the left and right arrows\n const arrows = '◄►';\n\n // Add the arrow elements to the page and set the left arrow position to the edge of the fixed column\n $scrollTabsOuter.append(arrows);\n\n // Make the initial arrow adjustment\n adjustArrows($scrollableArea);\n\n // Watch the scroll position and turn the arrows on and off as necessary\n $scrollableArea.on('scroll', () => { adjustArrows($scrollableArea); });\n\n });\n\n}\n", "/*******************************************************************************\nClear The Search Box In Side Nav\nClear the section search box and show all the pages.\n*******************************************************************************/\n\n// Clear the section search box and show all the pages.\nexport default function clearSectionSearch() {\n if ($('.side-nav__search').length === 0) { return; }\n\n // Clear the search input box and hide the clear button\n $('.side-nav__search').val('').next('.side-nav__clear-search').addClass('hide');\n\n // Show all the pages and sub-section titles in the section\n $('.side-nav__item').removeClass('hide');\n $('.side-nav__sub-section').removeClass('hide');\n\n // Remove the \"No Pages Found\" message\n $('.side-nav__no-results').remove();\n\n // Make sure the menu is scrolled all the way to the top to start (possible performance issue?)\n //$('.side-nav__middle').scrollTop(0);\n\n // Remove the search class from the nav\n $('.side-nav').removeClass('is-search');\n\n // Compress all the sub nav groups\n $('.side-nav__group').removeClass('is-open is-search-result');\n}\n", "/*******************************************************************************\nClose Side Navigation\nCloses the offscreen navigation menu on the right side of the page.\n*******************************************************************************/\n\nimport clearSectionSearch from './search/clear';\n\n// Closes the side navigation menu\nexport default function closeSideNav(e) {\n\n // Prevents clicks on random elements within the site wrapper from doing anything\n e.preventDefault();\n\n // The side nav container\n const $sideNav = $('.side-nav');\n\n // Remove the class on the side nav container that signals that side nav is currently open\n $sideNav.removeClass('is-open');\n\n // Close any open sub sections\n $('.side-nav__group').removeClass('is-open');\n\n // Remove the class on the site wrapper container that signals that side nav is currently open\n $('.site-wrapper').removeClass('side-nav-is-open');\n\n // Remove the overflow:hidden style from the body so scrolling is possible\n $('body').removeClass('hide-overflow');\n\n // Clear the section search\n clearSectionSearch();\n}\n", "/*******************************************************************************\nRUN A FUNCTION WHEN THE WINDOW IS RESIZED\nTriggers a function when the window is resized.\n*******************************************************************************/\n\nexport default function doOnWindowResize(functionToRun) {\n $(window).on('rw:window-resized', functionToRun);\n}\n", "/*******************************************************************************\r\nCONDITIONALLY ADD THE SEARCH FEATURE\r\nOnly certain sports (with lots of links) will need the search feature so this\r\nadds it to only those sports.\r\n*******************************************************************************/\r\n\r\nexport default function addSearchFeature() {\r\n if ($('.side-nav__search').length > 0) { return; }\r\n\r\n const numLinks = $('.is-section .side-nav__item').length;\r\n const numSections = $('.is-section .side-nav__sub-section').length;\r\n const contentName = $('.top-nav-section__item.is-active').text();\r\n\r\n // Add search to this sport nav if it has enough links and/or sections\r\n if (numLinks >= 50 || numSections >= 10) {\r\n const searchHTML = `\r\n \r\n \r\n Search ${contentName} Pages\r\n \r\n ×\r\n \r\n `;\r\n $('.side-nav__middle').before(searchHTML);\r\n }\r\n}\r\n", "/*******************************************************************************\nOpen Side Navigation\nOpens the offscreen navigation menu on the right side of the page.\n*******************************************************************************/\n\n//import activateStickyHeaders from './sticky-headers/activate';\nimport addSearchFeature from './search/add-to-nav';\nimport clearSectionSearch from './search/clear';\n\n// Opens the side navigation menu\nexport default function openSideNav(e) {\n\n // The side nav container\n const $sideNav = $('.side-nav');\n\n // Exit out if the side nav is already open\n if ($sideNav.hasClass('is-open')) { return; }\n\n // Get the type of menu to display (Main or Section)\n const menu = $(e.currentTarget).data('menu');\n\n // Special classes for each menu type to control which items display\n const menus = {\n Main : 'viewing-main',\n Section: 'viewing-section',\n };\n\n // Set the classes on the side nav container so it opens and displays the correct menu\n $sideNav.removeClass('viewing-main viewing-section').addClass(`is-open ${menus[menu]}`);\n\n // Add a class to the site wrapper so it fades into the background when the side nav menu is open\n $('.site-wrapper').addClass('side-nav-is-open');\n\n // Set overflow:hidden on the body of the page to stop it from scrolling when scrolling the side nav (not foolproof)\n $('body').addClass('hide-overflow');\n\n // Conditionally turn on search feature\n // Only certain sports (with lots of links) will need the search feature so\n // this adds it to only those sports.\n addSearchFeature();\n\n // Clear the section search\n clearSectionSearch();\n\n // Activates sticky headers in the side navigation panel\n //activateStickyHeaders('.side-nav__sub-section', '.side-nav__middle');\n}\n", "/*******************************************************************************\nSHOW SUB PAGES\nShows the sub pages for the tab that was clicked on.\n*******************************************************************************/\n\nexport default function showSubPages(tabName) {\n const $subPagesContainer = $(`.l-boxes[data-name=\"${tabName}\"]`);\n const $connectedTab = $(`.scroll-tab[data-name=\"${tabName}\"]`);\n\n // Switch the selected tab to the one that was clicked\n $connectedTab.siblings('.scroll-tab').removeClass('is-selected hovering').end().addClass('is-selected');\n\n // Make sure all the other tabs are \"closed\"\n $connectedTab.siblings('.scroll-tab.has-more').removeClass('is-open').addClass('is-closed');\n\n // Hide all sub page sections and toggle the selected tab's sub-section\n $subPagesContainer.siblings('.l-boxes').addClass('hide');\n $subPagesContainer.toggleClass('hide');\n\n // If the selected tab was closed, scroll to the tab and open it\n if ($connectedTab.hasClass('is-closed')) {\n // $('html, body').animate({ scrollTop: $connectedTab.offset().top }, 300); -- killed by Herb\n $connectedTab.addClass('is-open').removeClass('is-closed');\n }\n\n // If the selected tab was open:\n // 1. Close it\n // 2. Restore the selected tab to it's initial state (whichever page was originally selected on page load)\n else {\n $connectedTab.addClass('is-closed').removeClass('is-open is-selected');\n $connectedTab.parents().find('.was-selected').addClass('is-selected');\n }\n}\n", "/*******************************************************************************\r\nOPEN DEFAULT TAB\r\nOpens the default tab box for scroll-tabs.\r\n*******************************************************************************/\r\n\r\nimport toggleSubPages from './toggle-sub-pages';\r\n\r\nexport default function openDefault() {\r\n const scrollTabSections = $('.scroll-tabs .scroll-tab');\r\n\r\n // Loop through all the scroll tab containers on the page\r\n scrollTabSections.each(function() {\r\n\r\n // Prevent tabs from defaulting to the wrong tab when closed.\r\n //$(this).removeClass('was-selected');\r\n //$(this).removeClass('is-selected');\r\n\r\n // Select the dropdown\r\n if ($(this).data('name') === 'Daily Sites') {\r\n $(this).addClass('is-selected');\r\n //$(this).addClass('was-selected'); // Mark as last opened tab\r\n //toggleSubPages($(this).data('name')); // Add active state\r\n }\r\n\r\n });\r\n}\r\n", "/*******************************************************\r\nClose All Sub-Navigation Dropdown Menus\r\nShows or hides the navigation menus that appear below links in the section nav.\r\n********************************************************/\r\n\r\nexport default function closeDropdownMenu() {\r\n\r\n // Hide all the sub nav groups\r\n $('.s-sub-nav__group, .section-sub-nav__group').addClass('hide');\r\n\r\n // Remove the 'open' class from all items\r\n $('.s-nav__item, .section-nav__item').removeClass('open');\r\n}\r\n", "/*******************************************************\r\nCalculate Dropdown Menu Position\r\nFigure out where the dropdown menu should be appear (and if it should left or right aligned).\r\n\r\nFiguring out when to close/position the menu is complicated because the sub nav is not a\r\nchild element of the selected item. That's how it's normally done, but it wasn't an option\r\ndue to the flexbox wrap menu for the visible navigation row (.s-nav) The required overflow: hidden\r\nsetting in the visible nav row would clip the dropdown if it was a child of a visible nav item\r\n********************************************************/\r\n\r\n// Figure out where the dropdown menu should be appear (and if it should left or right aligned)\r\nexport default function calculateDropdownPosition($selectedItem) {\r\n\r\n // Find the sub navgations\r\n let $selectedSubNav = $(`.s-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n if ($selectedSubNav.length === 0) {\r\n $selectedSubNav = $(`.section-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n }\r\n\r\n // Get the left side position of the selected item\r\n const itemLeftSide = $selectedItem.position().left;\r\n\r\n // There's a transparent border on the sub nav groups so that moving the mouse outside the\r\n // dropdown is more forgiving. This border needs to be accounted for when calculating the menu position\r\n const transparentBorderOffset = parseInt($selectedSubNav.css('border-left-width'), 10);\r\n\r\n // Get the width of the sub nav group\r\n const subNavWidth = parseInt($selectedSubNav.css('width'), 10);\r\n\r\n // Get the width of the selected item\r\n const itemWidth = parseInt($selectedItem.css('width'), 10);\r\n\r\n // Get the width of the navigation row (the page width)\r\n let pageWidth = parseInt($('.s-sub-nav').css('width'), 10);\r\n if ($('.s-sub-nav').length === 0) {\r\n pageWidth = parseInt($('.section-sub-nav').css('width'), 10);\r\n }\r\n\r\n // Calculate where the sub nav should be positioned for right alignment\r\n const rightAlignPosition = (itemLeftSide + transparentBorderOffset + itemWidth) - subNavWidth;\r\n\r\n // Check if left-aligning the menu will make it overflow the right side of the page\r\n const overflowsRightSideOfPage = ((itemLeftSide + subNavWidth) > pageWidth);\r\n\r\n // Align the sub menu on the left unless that would make it extend past the boundaries of the right side of the page\r\n let menuPosition = overflowsRightSideOfPage ? rightAlignPosition : itemLeftSide - transparentBorderOffset;\r\n\r\n if (subNavWidth === pageWidth) { menuPosition = 0; }\r\n\r\n return menuPosition;\r\n}\r\n", "/*******************************************************\r\nToggle Sub Navigation\r\nShows or hides the navigation menus that appear below links in the section nav.\r\n********************************************************/\r\n\r\nimport closeDropdownMenu from './close-dropdown';\r\nimport calculateDropdownPosition from './calculate-dropdown-pos';\r\n\r\nexport default function toggleSubNav(e) {\r\n\r\n // Get the navigation item that is being selected/hovered over\r\n const $selectedItem = $(e.currentTarget);\r\n\r\n // If this isn't a dropdown (just a single link), then exit out\r\n if ($selectedItem.find('.s-nav__link').length > 0) { return; }\r\n\r\n // Prevents the mouse event from occurring if the touch event is triggered (except for the side nav trigger element)\r\n if (e.type === 'touchstart' && !$selectedItem.hasClass('open-side-nav')) { e.preventDefault(); }\r\n\r\n // Check to see if a menu is currently open\r\n const menuIsOpen = $selectedItem.hasClass('open');\r\n\r\n // Find the sub navgations\r\n let $selectedSubNav = $(`.s-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n if ($selectedSubNav.length === 0) {\r\n $selectedSubNav = $(`.section-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n }\r\n\r\n // Exit out if there is no sub navigation to display\r\n if ($selectedSubNav.length === 0) { return; }\r\n\r\n // Close all sub navigation menus to have a clean slate\r\n closeDropdownMenu();\r\n\r\n // If a menu was already open, then we know the user is trying to close it (which we've done above)\r\n if (menuIsOpen && e.type === 'touchstart') { return; }\r\n\r\n // Add the 'open' class to the selected item\r\n $selectedItem.addClass('open');\r\n\r\n // Make the selected sub nav visible\r\n $selectedSubNav.removeClass('hide');\r\n\r\n // Position the sub nav below the selected item\r\n $selectedSubNav.css('left', calculateDropdownPosition($selectedItem));\r\n}\r\n", "/*******************************************************************************\nTOGGLE SIDE NAV SUB SECTION\nOpens or closes a sub-section in the side nav.\n*******************************************************************************/\n\n// Opens the side navigation menu\nexport default function toggleSubSection(e) {\n const $subSection = $(e.currentTarget);\n const $subGroup = $subSection.parents('.side-nav__group');\n\n // Exit out here if the sub section is a link\n if ($subSection.is('a') || $subGroup.hasClass('is-search-result')) { return; }\n\n // Figure out if the section is currently open or closed\n const isOpen = $subGroup.hasClass('is-open');\n\n // Close all the other sub sections and then toggle the current sub section\n $('.side-nav__group').removeClass('is-open');\n if (isOpen) {\n $subGroup.removeClass('is-open');\n }\n else {\n $subGroup.addClass('is-open');\n $subGroup.find('.side-nav__item').first().get(0).scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n}\n", "/*******************************************************\r\nToggle Sub Navigation\r\nTriggers the sub-navigation menus to show or hide.\r\n********************************************************/\r\n\r\nimport closeDropdownMenu from './close-dropdown';\r\n\r\n// Trigger the navigation menu to close (if it should)\r\nexport default function triggerCloseDropdownMenu(e) {\r\n const $wasOn = $(e.currentTarget);\r\n const $movedTo = $(e.relatedTarget);\r\n\r\n // Check if the mouse was moved from a dropdown menu to a nav item\r\n const movingFromDropdownToItem = ($wasOn.hasClass('s-sub-nav__group') || $wasOn.hasClass('section-sub-nav__group') || $wasOn.hasClass('section-sub-nav__inner'))\r\n && ($movedTo.hasClass('s-nav') || $movedTo.hasClass('s--nav__item') || $movedTo.hasClass('section-nav') || $movedTo.hasClass('section--nav__item'));\r\n\r\n // Check if the mouse was moved from a nav item to a dropdown menu\r\n const movingFromItemToDropDown = ($wasOn.hasClass('s-nav__item') || $wasOn.hasClass('section-nav__item'))\r\n && ($movedTo.hasClass('s-sub-nav__group') || $movedTo.hasClass('s-sub-nav__link') || $movedTo.hasClass('section-sub-nav__group') || $movedTo.hasClass('section-sub-nav__inner') || $movedTo.hasClass('section-sub-nav__link'));\r\n\r\n // If the mouse isn't on or moving to part of the selected\r\n // navigation (dropdown menu + selected nav item), then close the menu\r\n if (!movingFromDropdownToItem && !movingFromItemToDropDown) { closeDropdownMenu(); }\r\n}\r\n", "/*******************************************************\nTRIGGERS LINK INSIDE NAVIGATION ITEM\nThis function catches clicks on navigation items that\ncontain a single link (instead of a dropdown). Most of the\ntime, the user will tap/click the link inside, but this\ncovers the padding around the link.\n********************************************************/\n\nexport default function triggerItemLink(e) {\n const $link = $(e.currentTarget).find('.s-nav__link');\n if (!$link.length || $link.attr('target') === '_blank') { return; }\n\n window.location.href = $link.attr('href');\n}\n", "/*******************************************************************************\nTRIGGER HORIZONTAL SCROLL USING LEFT/RIGHT ARROWS\n*******************************************************************************/\n\nexport default function triggerScrollOnClick(e) {\n const $arrowButton = $(e.currentTarget);\n const $scrollableArea = $arrowButton.siblings('.scroll-tabs');\n\n // Figure out which arrow was clicked\n const isLeft = $arrowButton.hasClass('nav-arrow-left');\n\n // Stop the click event from triggering on the nav item below the arrow\n e.stopPropagation();\n\n const currentScrollPos = $scrollableArea.scrollLeft();\n\n if (isLeft) { $scrollableArea.animate({ scrollLeft: currentScrollPos - 200 }, 400); }\n if (!isLeft) { $scrollableArea.animate({ scrollLeft: currentScrollPos + 200 }, 400); }\n}\n", "/*******************************************************************************\nTRIGGERS SHOWING SUB PAGES\nTriggers showing the sub pages for the tab that was clicked on.\n*******************************************************************************/\n\nimport toggleSubPages from './toggle-sub-pages';\n\nexport default function triggerShowSubPages(e) {\n const tabName = $(e.currentTarget).data('name') || '';\n if (!tabName) { return; }\n toggleSubPages(tabName);\n}\n", "/*******************************************************************************\nGET THE NO RESULTS FOUND HTML FOR THE SEARCH FEATURE\nReturns the HTML needed to display the No Results panel.\n*******************************************************************************/\n\nexport default function getNoSearchResultsHTML() {\n return `\n No Pages Found\n Sorry, but we couldn't find any pages that matched your search.\n However, we're always looking for new ideas to improve the site so please email our team and make a suggestion if you have time:\n support@rotowire.com\n `;\n}\n", "/*******************************************************************************\nSearch Pages in Section Side Navigation\nWatch for keystrokes in the section search input box.\n*******************************************************************************/\n\nimport clearSectionSearch from './clear';\nimport getNoSearchResultsHTML from './get-no-results-html';\n\n// Watch for keystrokes in the section search input box.\nexport default function watchSectionSearch(e) {\n const $searchBox = $(e.currentTarget);\n const searchTerm = $searchBox.val();\n const itemSelector = '.side-nav__group.is-section .side-nav__item';\n const $items = $(itemSelector);\n const $sectionHeads = $('.side-nav__sub-section');\n const enterKeyPressed = e.which === 13;\n\n // Remove the No Results panel (if it's there)\n $('.side-nav__no-results').remove();\n\n // Add the search class to the nav\n $('.side-nav').addClass('is-search');\n\n // Show the clear button\n $('.side-nav__clear-search').removeClass('hide');\n\n // If the input is empty (or the ESC key is pressed, then get rid of the clear button and show everything\n if (!searchTerm || e.which === 27) {\n clearSectionSearch();\n return;\n }\n\n // A collection of the links that matched the search term\n const visibleLinks = new Set();\n\n // Hide all the sub-section titles to start\n $sectionHeads.addClass('hide');\n\n // Hide all the link items to start\n $items.addClass('hide');\n\n // If the search string does not match part of the search term, hide the item. Otherwise show it.\n $items.each(function searchPages() {\n const $item = $(this);\n\n // Get the link element, text and actual link\n const $link = $item.find('.side-nav__link');\n const linkName = $link.text();\n const link = $link.attr('href');\n\n // Get the associated section head element and text\n const $sectionHead = $item.siblings('.side-nav__sub-section');\n const sectionHeadText = $sectionHead.text();\n\n // Does the search term match the link text?\n const searchMatchesLink = linkName.search(new RegExp(searchTerm, 'i')) >= 0;\n\n // Does the search term match the section heading?\n const searchMatchesHeading = sectionHeadText.search(new RegExp(searchTerm, 'i')) >= 0;\n\n // Was this link already matched in another section? (some links are listed under multiple sections)\n const linkAlreadyFound = visibleLinks.has(link);\n\n // If the search term is found within the link text or the section header (and is not already visible):\n // 1. Add the link to the list of visible links\n // 2. Show the link\n // 3. Show the header for the link's section\n if ((searchMatchesLink || searchMatchesHeading) && !linkAlreadyFound) {\n visibleLinks.add(link);\n $item.removeClass('hide');\n $sectionHead.removeClass('hide');\n }\n\n // Expand all the sub sections\n $('.side-nav__group').addClass('is-open is-search-result');\n });\n\n // Show the \"No Results\" indicator if the search failed to match any pages\n const numResults = $(itemSelector).not(':hidden').length;\n if (numResults === 0 && $('.side-nav__no-results').length === 0) {\n const noResultsMessageHTML = getNoSearchResultsHTML();\n $('.side-nav__middle').append(noResultsMessageHTML);\n }\n\n // If you press enter when there's only one item displaying (and it's a link), then go to the link\n // Or if there's a button, trigger a click on it (and also clear the filter)\n if (enterKeyPressed) {\n if ($(itemSelector).not(':hidden').find('a').length === 1) {\n window.location.href = $(`${itemSelector}:visible`).find('a').attr('href');\n }\n }\n}\n", "/*******************************************************************************\nGET CLOUDINARY TO IGNORE HIDDEN IMAGES\nActivate the images on the page that are being loaded through Cloudinary.\n*******************************************************************************/\n\nexport default function hideHiddenImagesFromCloudinary() {\n // This prevents hidden images from being processed by Cloudinary\n $('.cld-responsive').filter(':hidden').removeClass('cld-responsive').addClass('cld-responsive-hidden');\n}\n", "/*******************************************************************************\nRESTORE HIDDEN IMAGES SO CLOUDINARY CAN PROCESS THEM\nRestore the responsive class to the hidden images so Cloudinary can process them\n*******************************************************************************/\n\nexport default function restoreHiddenImages() {\n // Restore the responsive class to the hidden images\n $('.cld-responsive-hidden').addClass('cld-responsive').removeClass('cld-responsive-hidden');\n}\n", "/*******************************************************************************\nACTIVATE CLOUDINARY IMAGES\nActivate the images on the page that are being loaded through Cloudinary.\n*******************************************************************************/\n\nimport hideHiddenImages from './hide-hidden-images';\nimport restoreHiddenImages from './restore-hidden-images';\n\nexport default function activateCloudinaryImages() {\n const $cloudinaryImages = $('.cld-responsive').filter(':visible');\n\n // If there are no Cloudinary images on the page, exit out\n if ($cloudinaryImages.length === 0) { return; }\n\n // Set the breakpoints to determine when a new image is created\n const myBreakpoints = function generateBreakpoints(width) {\n if (width <= 100) { return 10 * Math.ceil(width / 10); }\n if (width <= 1000) { return 50 * Math.ceil(width / 50); }\n return 100 * Math.ceil(width / 100);\n };\n\n if (window.cloudinary !== undefined) {\n\n if (!window.rwCloudinaryFunctionInitialized) {\n\n // keep a reference to the original function\n const origUpdateFn = window.cloudinary.Cloudinary.prototype.cloudinary_update;\n\n // This prevents hidden images from being processed by Cloudinary at a width of zero\n // Without this wrapper, a 404 error is triggered for every hidden image\n window.cloudinary.Cloudinary.prototype.cloudinary_update = function newUpdateFn() {\n hideHiddenImages();\n origUpdateFn.apply(this, arguments); // eslint-disable-line\n restoreHiddenImages();\n };\n\n window.rwCloudinaryFunctionInitialized = true;\n }\n\n window.cloudinary.Cloudinary.new({\n responsive_use_breakpoints: true,\n breakpoints : myBreakpoints,\n cloud_name : 'rotowire',\n }).responsive();\n }\n\n // Lazy load dynamically added images\n if (window.rwLazyLoader !== undefined) { window.rwLazyLoader.observe(); }\n\n // Get all the images that have a credited source attached to them\n const $imagesWithCredit = $('img[data-credit]');\n\n // If there are no Cloudinary images that have a credited source, exit out here\n if ($imagesWithCredit.length === 0) { return; }\n\n // Add photo credits section in footer\n if ($('.photo-credits').length === 0) {\n $('.site-footer').append(`\n \n Photo Credits\n \n \n `);\n }\n // Clear out the photo credit list if the section already exists\n else {\n $('.photo-credits__list').empty();\n }\n\n // Add individual photo credits to the list\n $imagesWithCredit.each(function addImageCredits(index) {\n const $image = $(this);\n const imageCredit = $image.data('credit') || '';\n const creditLink = $image.data('creditlink') || '';\n const imageNumber = index + 1;\n\n // Give the image a unique ID (or use the existing one)\n const uniqueImageID = $image.attr('id') === undefined ? `cld-img${imageNumber}` : $image.attr('id');\n $image.attr('id', uniqueImageID);\n\n if (imageCredit) {\n const creditWithLink = `${imageCredit} `;\n const creditNoLink = `${imageCredit} `;\n const creditItem = (creditLink) ? creditWithLink : creditNoLink;\n $('.photo-credits__list').append(`${creditItem}`);\n }\n });\n}\n", "/*******************************************************************************\nActivate Ripple Effect on Buttons\nCreates the ripple effect when a button is clicked.\n*******************************************************************************/\n\nexport default function activateRippleEffect(e) {\n\n // Get rid of any ripple or hover effects on all buttons to start\n $('.ripple-effect').removeClass('ripple-effect');\n //$('button').removeClass('hovering');\n\n const $button = $(this);\n\n // If the button has the 'no-ripple' class, then exit out\n if ($button.hasClass('no-ripple')) { return; }\n\n const $div = $('', { class: 'ripple-effect' });\n\n const btnOffset = $button.offset();\n const xPos = e.pageX - btnOffset.left;\n const yPos = e.pageY - btnOffset.top;\n\n // Position the ripple effect and add it to the button\n $div.css({\n top : yPos - ($div.height() / 2),\n left: xPos - ($div.width() / 2),\n }).appendTo($button);\n\n // Remove the ripple effect after 1 second (needs to match CSS animation!)\n setTimeout(() => { $div.remove(); }, 1000);\n}\n", "/*******************************************************************************\nRemove Hashes From URL\nRemoves #hashes from the URL address bar.\n*******************************************************************************/\n\nexport default function removeHashesFromURL() {\n const { hash } = window.location;\n const currentURL = window.location.href;\n const newURL = currentURL.replace(hash, '');\n\n // Keep the original hash around just in case\n window.urlHashRW = hash;\n\n window.history.replaceState('', document.title, newURL);\n}\n", "/*******************************************************************************\nSmart Anchor Tags\nWhen an anchor tag is clicked, this function:\n1. Scrolls smoothly rather than jumping to the anchor.\n2. Prevents the #hash from showing up in the URL address bar.\n3. Prevents the named element from being flush with the top of the screen.\n*******************************************************************************/\nimport removeHashesFromURL from './remove-hashes-from-url';\n\nexport default function activateSmartAnchorTags() {\n\n // Scrolls smoothly rather than jumping to the anchor.\n const anchorHash = (this) ? this.hash : window.location.hash;\n try {\n if (anchorHash && $(anchorHash).length > 0) {\n $('html, body').animate({ scrollTop: $(anchorHash).offset().top }, 300);\n }\n // Prevents the #hash from showing up in the URL address bar.\n setTimeout(() => { removeHashesFromURL(); }, 10);\n\n // Prevents the named element from being flush with the top of the screen.\n setTimeout(() => { window.scrollTo(window.scrollX, window.scrollY - 10); }, 310);\n }\n catch (error) {\n // No need to do anything. It's likely an invalid selector in which case the code above is irrelevant\n }\n\n}\n", "/*******************************************************************************\nAutomatically Add Button Processing State\nTriggers the processing state on a button.\n*******************************************************************************/\n\nexport default function automaticButtonProcessing(e) {\n\n const $button = $(e.currentTarget);\n const buttonHTML = $button.html();\n const buttonText = $button.clone().find('>*').remove().end().html(); // eslint-disable-line newline-per-chained-call\n const processingText = $button.data('inprogress') || '';\n\n const newButtonHTML = buttonHTML.replace(buttonText, processingText);\n\n // Set a data attribute with the original button html\n $button.data('origbuttonhtml', buttonHTML);\n\n // Set the button HTML\n $button.safehtml(newButtonHTML);\n\n // Disable the button\n $button.prop('disabled', true);\n\n // Remove the ripple-effect after 1 sec\n setTimeout(() => {\n $button.find('.ripple-effect').remove();\n }, 1000);\n}\n", "/*******************************************************************************\nCANCEL COMMENT REPLY\nCloses the reply form and add it back to its normal spot.\n*******************************************************************************/\n\nexport default async function triggerCommentReply(e) {\n\n // Prevents the form from submitting\n e.preventDefault();\n\n const $cancelButton = $(e.currentTarget);\n\n // Get the parent comment and our target form\n const $comments = $cancelButton.parents('.article-comments');\n const $form = $('#articleComments');\n\n // Setup the form\n $form.find('textarea').val('');\n $form.find('input[name=\"parentComment\"]').val('');\n\n // Grab the original button html from the data attribute\n const $submitButton = $form.find('.submit-reply-form');\n const origButtonHTML = $submitButton.data('origbuttonhtml');\n\n // Reset the button text\n $submitButton.safehtml(origButtonHTML);\n\n // Hide the cancel button\n $cancelButton.hide();\n\n // Move the form\n $form.detach().appendTo($comments);\n\n}\n", "/*******************************************************************************\r\nCHECK FOR WALLPAPER AD\r\nListens to see if a wallpaper ad is being served.\r\n*******************************************************************************/\r\n\r\nimport activateCloudinaryImages from '../cloudinary/activate';\r\n\r\nexport default function activateWallpaper(event) {\r\n if (!event || !event.data || !event.data.wallpaperRW) { return; }\r\n\r\n const wallpaper = event.data.wallpaperRW;\r\n const { image = '', link = '', code = null } = wallpaper;\r\n\r\n if (!image || !link) { return; }\r\n\r\n const $siteWrapper = $('.site-wrapper');\r\n\r\n $siteWrapper.addClass('wallpaper-is-active').css('background', `url(${image}) #122335 no-repeat fixed top center`);\r\n\r\n $(document).on('click', '.site-wrapper:not(.rwnav-section-side-is-open)', function listenForWallpaperClick(e) {\r\n if (e.target === this) { window.open(link, '_blank'); }\r\n });\r\n\r\n activateCloudinaryImages();\r\n\r\n // Adds a custom script tag (optional)\r\n if (code) {\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = code;\r\n\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n }\r\n\r\n // Trigger a custom event that signals the wallpaper is loaded\r\n $(document).trigger('rw:wallpaper-loaded', []);\r\n\r\n // Trigger a window resize event so elements on the page can adjust if necessary\r\n window.dispatchEvent(new Event('resize'));\r\n}\r\n\r\nwindow.addEventListener('message', activateWallpaper, false);\r\n", "/*******************************************************************************\nEXPAND A NEWS UPDATE\nExpands a news update that is in compact mode.\n*******************************************************************************/\n\nexport default function expandNewsUpdate(e) {\n\n // We don't want a click on the player link to take the user to a new page\n if (e.target.tagName.toLowerCase() === 'a') { e.preventDefault(); }\n\n // Remove the is-compact class to expand the news update and then scroll to it\n const $newsUpdate = $(e.currentTarget);\n $newsUpdate.removeClass('is-compact').addClass('was-user-expanded');\n $newsUpdate.get(0).scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\n", "/*******************************************************************************\nEXPAND TOP OUTLOOK ON PLAYER PAGES\nExpands the outlook at the top of the page to display the full text.\n*******************************************************************************/\n\nexport default function expandPlayerOutlook() {\n $('.p-card__outlook-more').remove();\n $('.p-card__outlook').addClass('is-expanded');\n $('.p-card__stats').css('border-bottom', '1px solid #ddd');\n}\n", "/*******************************************************************************\nFIX ALL WIDOWS\nWidows occur when a sentence has the last word hanging out by itself on a line.\nThis should fix that problem for any selectors matched by inserting a non-breaking space in between the last two words.\nFound here: http://justinhileman.info/article/a-jquery-widont-snippet/\n*******************************************************************************/\n\nexport default function fixAllWidows() {\n $('.article__headline, .table-paywall__headline, .compact-article__link, .featured-article__title, .featured-article__desc, .compact-article__link div').each((index, element) => {\n const newHTML = $(element).html().replace(/\\s((?=(([^\\s<>]|<[^>]*>)+))\\2)\\s*$/, ' $1');\n $(element).safehtml(newHTML);\n });\n}\n", "/*******************************************************************************\nRemove Button Processing State\nRemoves the processing state from a button.\n*******************************************************************************/\n\nexport default function removeButtonProcessingState($button) {\n\n // Grab the original button html from the data attribute\n const origButtonHTML = $button.data('origbuttonhtml');\n\n // Reset the button text\n $button.safehtml(origButtonHTML);\n\n // Remove the hover state (if necessary)\n $button.removeClass('hovering');\n\n // Enable the button\n $button.prop('disabled', false);\n\n}\n", "/*******************************************************************************\r\nGET TAB SETTINGS\r\nGather all the settings related to a tab.\r\n*******************************************************************************/\r\n\r\nexport default function getTabSettings(tabSetName, tabName) {\r\n\r\n const $tab = $(`.toggle-tabs[data-name=\"${tabSetName}\"]`).find(`.toggle-tab[data-name=\"${tabName}\"]`);\r\n\r\n return {\r\n set : tabSetName,\r\n name : tabName,\r\n targets: ($tab.data('targets') || '').split('|'),\r\n add : ($tab.data('add') || '').split('|'),\r\n remove : ($tab.data('remove') || '').split('|'),\r\n };\r\n}\r\n", "/*******************************************************************************\nPERFORM ACTIONS\nPerform the action(s) associated with the selected tab.\n*******************************************************************************/\n\n/* global $$ */\nexport default function switchTab(tabSettings) {\n const { targets, add, remove } = tabSettings;\n\n // Loop through the targets and their associated actions\n for (let i = 0; i < targets.length; i++) {\n if (typeof targets[i] !== 'undefined') {\n const $target = $(targets[i]);\n if (typeof remove[i] !== 'undefined') { $target.removeClass(remove[i]); }\n if (typeof add[i] !== 'undefined') { $target.addClass(add[i]); }\n if ($target.find('.webix_dtable').length > 0 && typeof $$ !== 'undefined') {\n $$($target.find('.webix_dtable').attr('id')).resize();\n }\n }\n }\n}\n", "/*******************************************************************************\r\nSWITCH TO TAB\r\nSwitch the active filter tab.\r\n*******************************************************************************/\r\n\r\nimport getTabSettings from './get-tab-settings';\r\nimport performActions from './perform-actions';\r\nimport activateCloudinaryImages from '../cloudinary/activate';\r\n\r\nexport default function switchTab(tabSetName, tabName) {\r\n // Find the set of tabs to use\r\n const $tabs = $(`.toggle-tabs[data-name=\"${tabSetName}\"]`);\r\n\r\n // If the tab set is hidden, don't do anything\r\n if ($tabs.parents('.toggle-tabs-set').hasClass('hide') && !$tabs.data('alwaysop')) { return; }\r\n\r\n // Find the tab that was clicked on\r\n const $tabToSelect = $tabs.find(`.toggle-tab[data-name=\"${tabName}\"]`);\r\n\r\n // Add the selected class to the tab and remove it everywhere else\r\n $tabToSelect.addClass('is-selected').siblings('.toggle-tab').removeClass('is-selected');\r\n\r\n // Get all the settings for this specific tab\r\n const tabSettings = getTabSettings(tabSetName, tabName);\r\n\r\n // Perform the actions associated with the active tab\r\n performActions(tabSettings);\r\n\r\n // Trigger a custom event that signals the tab is loaded\r\n $(document).trigger(`toggleTabLoaded:${tabSetName}-${tabName.replace(/ /g, '-')}`, [tabSettings]);\r\n\r\n // Activate any Cloudinary images that may have been hidden previously\r\n activateCloudinaryImages();\r\n}\r\n", "/*******************************************************************************\nGET NEWS UPDATES\nReturns a set of updates.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\nimport switchToggleTab from '../../universal/toggle-tabs/switch-tab';\n\nexport default async function getUpdates(e) {\n const $showMoreButton = $(e.currentTarget);\n\n // Options on Show More button\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\n const type = String($showMoreButton.data('type') || '').toLowerCase();\n const itemID = $showMoreButton.data('item-id') || '';\n const lastUpdateTime = $showMoreButton.data('last-update-time') || '';\n const numUpdates = $showMoreButton.data('num-updates') || '';\n const team = String($showMoreButton.data('team') || '').toLowerCase();\n const position = String($showMoreButton.data('position') || '').toLowerCase();\n const status = String($showMoreButton.data('status') || '').toLowerCase();\n const leagueLevel = String($showMoreButton.data('leaguelevel') || '');\n const priority = $showMoreButton.data('priority') || '';\n const rank = $showMoreButton.data('rank') || '';\n const offense = $showMoreButton.data('offense') || false;\n const top = $showMoreButton.data('top') || false;\n const idp = $showMoreButton.data('idp') || false;\n const teamDef = $showMoreButton.data('teamdef') || false;\n const freeAgents = $showMoreButton.data('free-agents') || false;\n const hideLogo = $showMoreButton.data('hide-logo') || false;\n const conferenceVal = $showMoreButton.data('conference');\n const conference = (conferenceVal || conferenceVal === 0) ? conferenceVal : '';\n const league = $showMoreButton.data('league') || '';\n const competition = $showMoreButton.data('competition') || '';\n const nation = $showMoreButton.data('nation') || '';\n const nlonly = $showMoreButton.data('nlonly') || '';\n const alonly = $showMoreButton.data('alonly') || '';\n const closers = $showMoreButton.data('closers') || '';\n const minors = $showMoreButton.data('minors') || '';\n const prospects = $showMoreButton.data('prospects') || '';\n const injuries = $showMoreButton.data('injuries') || '';\n const gender = $showMoreButton.data('gender') || '';\n const foreign = $showMoreButton.data('foreign') || '';\n const language = $showMoreButton.data('language') || '';\n const extraClasses = $showMoreButton.data('extra-classes') || '';\n\n // Add the options that were set on the button\n const settings = {};\n if (type) { settings.type = type; }\n if (itemID) { settings.itemID = itemID; }\n if (lastUpdateTime) { settings.lastUpdateTime = lastUpdateTime; }\n if (numUpdates) { settings.numUpdates = numUpdates; }\n if (team) { settings.team = team; }\n if (position) { settings.position = position; }\n if (status) { settings.status = status; }\n if (leagueLevel) { settings.leagueLevel = leagueLevel; }\n if (priority) { settings.priority = priority; }\n if (rank) { settings.rank = rank; }\n if (offense) { settings.offense = offense; }\n if (top) { settings.top = top; }\n if (idp) { settings.idp = idp; }\n if (teamDef) { settings.teamDef = teamDef; }\n if (freeAgents) { settings.freeAgents = freeAgents; }\n if (hideLogo) { settings.hideLogo = hideLogo; }\n if (conference !== '') { settings.conference = conference; }\n if (league) { settings.league = league; }\n if (competition) { settings.competition = competition; }\n if (nation) { settings.nation = nation; }\n if (nlonly) { settings.nlonly = nlonly; }\n if (alonly) { settings.alonly = alonly; }\n if (closers) { settings.closers = closers; }\n if (minors) { settings.minors = minors; }\n if (prospects) { settings.prospects = prospects; }\n if (injuries) { settings.injuries = injuries; }\n if (gender) { settings.gender = gender; }\n if (foreign) { settings.foreign = foreign; }\n if (language) { settings.language = language; }\n if (extraClasses) { settings.extraClasses = extraClasses; }\n\n const sportDirectories = {\n cbb: 'cbasketball',\n cfb: 'cfootball',\n mlb: 'baseball',\n nba: 'basketball',\n nfl: 'football',\n nhl: 'hockey',\n pga: 'golf',\n cri: 'cricket',\n soc: 'soccer',\n };\n const sportDirectory = sportDirectories[sport.toLowerCase()] || sport;\n\n try {\n const response = await $.ajax({\n type : 'GET',\n url : `/${sportDirectory}/ajax/get-more-updates.php`,\n data : settings,\n timeout: 8000,\n });\n\n const { updatesHTML, newLastUpdateTime, noMoreUpdates, success } = response;\n\n // Check for errors with the data\n if (response.error || !success) { throw new Error(response.error); }\n\n $showMoreButton.data('last-update-time', newLastUpdateTime);\n $showMoreButton.before(updatesHTML);\n if (noMoreUpdates) {\n $showMoreButton.after('There are no more news updates to display.');\n $showMoreButton.remove();\n }\n\n // If there are toggle tabs in use on the news page, perform the active\n // toggle's actions on the news updates that were just added to the page\n if ($('.toggle-tabs').length > 0) {\n const $activeToggleTab = $('.toggle-tab.is-selected');\n const activeToggleTabName = $activeToggleTab.data('name');\n const activeToggleTabSetName = $activeToggleTab.parents('.toggle-tabs').data('name');\n if (activeToggleTabSetName && activeToggleTabName) {\n switchToggleTab(activeToggleTabSetName, activeToggleTabName);\n }\n }\n\n // Trigger a moreUpdatesLoaded event for use with other page resources\n $(document).trigger(`rw-moreUpdatesLoaded`, [settings]);\n\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to retrieve updates for you. Please try again.', 3000);\n }\n\n // Reset the button to its original state\n removeButtonProcessingState($showMoreButton);\n\n}\n", "/*******************************************************************************\nSET MIN GRID WIDTH\nWhen tabs have variable width content our CSS Grid styles are unable to adjust in\na way that makes the page look nice. The layout we want is essentially impossible\nto pull off with dynamic, unknown content so this javascript is necessary to make\nthe necessary layout adjustments.\n*******************************************************************************/\n\nexport default function setMinGridWidth(settings) {\n const { containers, items, padding, auto = 'fit' } = settings;\n\n // Loop through all the containers\n $(containers).each((index, set) => {\n const $set = $(set);\n\n // Reset this to start (necessary for handling window resizes correctly)\n $set.css('grid-template-columns', '');\n\n // Flip on CSS Grid\n $set.css('display', 'grid');\n\n // Get all the item widths\n const itemWidths = Array.from($set.find(items).map((i, item) => $(item).width()));\n\n // Find the maximum item content width (and allow for 10px of padding on each side)\n const maxItemWidth = Math.round(Math.max(...itemWidths)) + Number(padding);\n\n const gridFormat = auto === 'fit' ? 'auto-fit' : 'auto-fill';\n\n // Use the width of the widest item as a minimum for the tab width\n $set.css('grid-template-columns', `repeat(${gridFormat}, minmax(${maxItemWidth}px, 1fr))`);\n\n // The CSS has a max-height because the best way to let the items expand to their natural height\n // is by letting them flow into a single column. We set the max-height to avoid a content\n // jump/jitter after the page loads\n $set.css('max-height', 'none');\n\n // Special logic for specific toggle tabs sets (ones that are part of a group of filters)\n if (items === '.toggle-tab') {\n const numItems = $set.find(items).length;\n const maxWidth = (maxItemWidth + 16) * numItems;\n $(set).parents('.toggle-tabs-set.is-in-group').css('max-width', maxWidth);\n }\n\n });\n}\n", "/*******************************************************************************\r\nGET RANKINGS UPDATES\r\nReturns a set of rankings with player outlooks.\r\n*******************************************************************************/\r\n\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\r\nimport setMinGridWidth from '../../universal/css-grid/set-min-grid-width';\r\n\r\nexport default async function getUpdates(e) {\r\n const $showMoreButton = $(e.currentTarget);\r\n\r\n // Options on Show More button\r\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\r\n const pos = String($showMoreButton.data('pos') || '').toLowerCase();\r\n const type = String($showMoreButton.data('type') || '').toLowerCase();\r\n const league = String($showMoreButton.data('league') || '').toUpperCase();\r\n\r\n const lastRank = $showMoreButton.data('last-rank') || '';\r\n\r\n // Add the options that were set on the button\r\n const settings = {};\r\n if (type) { settings.type = type; }\r\n if (pos) { settings.pos = pos; }\r\n if (lastRank) { settings.lastRank = lastRank; }\r\n if (league) { settings.league = league; }\r\n\r\n const sportDirectories = {\r\n 'cbb': 'cbasketball',\r\n 'cfb': 'cfootball',\r\n 'mlb': 'baseball',\r\n 'nba': 'basketball',\r\n 'nfl': 'football',\r\n 'nhl': 'hockey',\r\n 'pga': 'golf',\r\n 'cri': 'cricket', \r\n };\r\n const sportDirectory = sportDirectories[sport.toLowerCase()] || sport;\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/${sportDirectory}/ajax/get-more-rankings.php`,\r\n data : settings,\r\n timeout: 8000,\r\n });\r\n\r\n const { rankingsHTML, newLastRank, noMoreRankings, success } = response;\r\n\r\n // Check for errors with the data\r\n if (response.error || !success) { throw new Error(response.error); }\r\n\r\n $showMoreButton.data('last-rank', newLastRank);\r\n $showMoreButton.before(rankingsHTML);\r\n if (noMoreRankings) {\r\n $showMoreButton.after('There are no more news rankings to display.');\r\n $showMoreButton.remove();\r\n }\r\n\r\n // Figure out the minimum tab width so we can add the correct CSS Grid styles for the stat boxes\r\n setMinGridWidth({\r\n containers: '.stat-boxes',\r\n items : '.stat-box',\r\n padding : '16',\r\n });\r\n\r\n\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve rankings for you. Please try again.', 3000);\r\n }\r\n\r\n // Reset the button to its original state\r\n removeButtonProcessingState($showMoreButton);\r\n\r\n}\r\n", "/*******************************************************************************\r\nGET RUMOR UPDATES\r\nReturns a set of updates.\r\n*******************************************************************************/\r\n\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\r\nimport switchToggleTab from '../../universal/toggle-tabs/switch-tab';\r\n\r\nexport default async function getRumors(e) {\r\n const $showMoreButton = $(e.currentTarget);\r\n\r\n // Options on Show More button\r\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\r\n const type = String($showMoreButton.data('type') || '').toLowerCase();\r\n const itemID = $showMoreButton.data('item-id') || '';\r\n const lastUpdateTime = $showMoreButton.data('last-update-time') || '';\r\n const numUpdates = $showMoreButton.data('num-updates') || '';\r\n const team = String($showMoreButton.data('team') || '').toLowerCase();\r\n const position = String($showMoreButton.data('position') || '').toLowerCase();\r\n const status = String($showMoreButton.data('status') || '').toLowerCase();\r\n const leagueLevel = String($showMoreButton.data('leaguelevel') || '');\r\n //const priority = $showMoreButton.data('priority') || '';\r\n const rank = $showMoreButton.data('rank') || '';\r\n const offense = $showMoreButton.data('offense') || false;\r\n const top = $showMoreButton.data('top') || false;\r\n const idp = $showMoreButton.data('idp') || false;\r\n const teamDef = $showMoreButton.data('teamdef') || false;\r\n const freeAgents = $showMoreButton.data('free-agents') || false;\r\n const hideLogo = $showMoreButton.data('hide-logo') || false;\r\n const conferenceVal = $showMoreButton.data('conference');\r\n const conference = (conferenceVal || conferenceVal === 0) ? conferenceVal : '';\r\n const league = $showMoreButton.data('league') || '';\r\n const competition = $showMoreButton.data('competition') || '';\r\n const nation = $showMoreButton.data('nation') || '';\r\n const nlonly = $showMoreButton.data('nlonly') || '';\r\n const alonly = $showMoreButton.data('alonly') || '';\r\n const closers = $showMoreButton.data('closers') || '';\r\n const minors = $showMoreButton.data('minors') || '';\r\n const prospects = $showMoreButton.data('prospects') || '';\r\n //const injuries = $showMoreButton.data('injuries') || '';\r\n const gender = $showMoreButton.data('gender') || '';\r\n const foreign = $showMoreButton.data('foreign') || '';\r\n const language = $showMoreButton.data('language') || '';\r\n const extraClasses = $showMoreButton.data('extra-classes') || '';\r\n\r\n // Add the options that were set on the button\r\n const settings = {};\r\n if (type) { settings.type = type; }\r\n if (itemID) { settings.itemID = itemID; }\r\n if (lastUpdateTime) { settings.lastUpdateTime = lastUpdateTime; }\r\n if (numUpdates) { settings.numUpdates = numUpdates; }\r\n if (team) { settings.team = team; }\r\n if (position) { settings.position = position; }\r\n if (status) { settings.status = status; }\r\n if (leagueLevel) { settings.leagueLevel = leagueLevel; }\r\n //if (priority) { settings.priority = priority; }\r\n if (rank) { settings.rank = rank; }\r\n if (offense) { settings.offense = offense; }\r\n if (top) { settings.top = top; }\r\n if (idp) { settings.idp = idp; }\r\n if (teamDef) { settings.teamDef = teamDef; }\r\n if (freeAgents) { settings.freeAgents = freeAgents; }\r\n if (hideLogo) { settings.hideLogo = hideLogo; }\r\n if (conference !== '') { settings.conference = conference; }\r\n if (league) { settings.league = league; }\r\n if (competition) { settings.competition = competition; }\r\n if (nation) { settings.nation = nation; }\r\n if (nlonly) { settings.nlonly = nlonly; }\r\n if (alonly) { settings.alonly = alonly; }\r\n if (closers) { settings.closers = closers; }\r\n if (minors) { settings.minors = minors; }\r\n if (prospects) { settings.prospects = prospects; }\r\n //if (injuries) { settings.injuries = injuries; }\r\n if (gender) { settings.gender = gender; }\r\n if (foreign) { settings.foreign = foreign; }\r\n if (language) { settings.language = language; }\r\n if (extraClasses) { settings.extraClasses = extraClasses; }\r\n\r\n const sportDirectories = {\r\n //cbb: 'cbasketball',\r\n //cfb: 'cfootball',\r\n mlb: 'baseball',\r\n nba: 'basketball',\r\n //nfl: 'football',\r\n nhl: 'hockey',\r\n //pga: 'golf',\r\n //cri: 'cricket',\r\n //soc: 'soccer',\r\n };\r\n const sportDirectory = sportDirectories[sport.toLowerCase()] || sport;\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/${sportDirectory}/ajax/get-more-rumors.php`,\r\n data : settings,\r\n timeout: 8000,\r\n });\r\n\r\n const { updatesHTML, newLastUpdateTime, noMoreUpdates, success } = response;\r\n\r\n // Check for errors with the data\r\n if (response.error || !success) { throw new Error(response.error); }\r\n\r\n $showMoreButton.data('last-update-time', newLastUpdateTime);\r\n $showMoreButton.before(updatesHTML);\r\n if (noMoreUpdates) {\r\n $showMoreButton.after('There are no more news updates to display.');\r\n $showMoreButton.remove();\r\n }\r\n\r\n // If there are toggle tabs in use on the news page, perform the active\r\n // toggle's actions on the news updates that were just added to the page\r\n if ($('.toggle-tabs').length > 0) {\r\n const $activeToggleTab = $('.toggle-tab.is-selected');\r\n const activeToggleTabName = $activeToggleTab.data('name');\r\n const activeToggleTabSetName = $activeToggleTab.parents('.toggle-tabs').data('name');\r\n if (activeToggleTabSetName && activeToggleTabName) {\r\n switchToggleTab(activeToggleTabSetName, activeToggleTabName);\r\n }\r\n }\r\n\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve updates for you. Please try again.', 3000);\r\n }\r\n\r\n // Reset the button to its original state\r\n removeButtonProcessingState($showMoreButton);\r\n\r\n}\r\n", "/*******************************************************************************\nHides Ad Containers When Ads Have Been Shut Off\n*******************************************************************************/\n\nexport default function hideAdContainers() {\n const numAdsInHeader = $('.site-header').data('num-ads');\n if (numAdsInHeader !== 'off') { return; }\n\n\n // Hide the ad containers\n const adContainerClasses = ['ad', 'ad-standard', 'ad-footer', 'ad-article', 'ad-tall__sidebar', 'ad-container-side', 'ad-container-side-lg', 'in-article-text-ad'];\n $.each(adContainerClasses, (i, adClass) => { $(`.${adClass}`).remove(); });\n\n // If the \"plp\" parameter exists, remove the ad containers and the plp parameter from the URL\n const params = new URLSearchParams(location.search);\n\n // Remove the \"plp\" parameter from the URL if it exists\n if (params.get('plp')) {\n params.delete('plp');\n const paramsLength = Array.from(params).length;\n const qMark = (paramsLength !== 0) ? '?' : '';\n window.history.replaceState({}, '', `${location.pathname}${qMark}${params}`);\n }\n}\n", "/*******************************************************************************\nCHECK FOR MATCH\nChecks if an item matches the current filter.\n*******************************************************************************/\n\nexport default function checkForMatch($item, filterSettings, tabSettings) {\n\n // This is done purely for code readabilty\n const subset = filterSettings.subset;\n const { dataToMatch, secDataToMatch, mainExclude, matchType, secSubsetOperator, secSubset, secExclude, secMatchType } = tabSettings;\n\n // If the 'All' option (*) is passed in, then everything matches\n if (dataToMatch[0] === '*') { return true; }\n\n let $elementToSearch = $item;\n\n // If there's a subset (and it's not targeting a data attribute) then use that when the searching the item\n if (subset && subset[0] !== '[') { $elementToSearch = $item.find(subset); }\n\n // This is where we'll store the value to match against\n let itemValue = '';\n\n // If the subset starts with '[' then you know it's targeting a data attribute instead of a normal selector\n // This gets set in the subset data attribute in the HMTL like this \"[attrname]\"\n if (subset[0] === '[') {\n const subsetTargetAttribute = subset.replace('[', '').replace(']', '');\n itemValue = $.trim($item.data(subsetTargetAttribute)) || '';\n }\n else {\n\n // Find the value of the text to match against\n itemValue = $.trim($elementToSearch.text()) || '';\n\n // Find the value from an input\n if ($elementToSearch.is(':input')) { itemValue = $.trim($elementToSearch.val()); }\n\n // Find the value from a radio button\n if ($elementToSearch.next('input').is('[type=\"radio\"]')) { itemValue = $.trim($elementToSearch.next('input').val()); }\n }\n\n // Check if the item matches the main filter\n let mainFilterMatches = false;\n\n // If the data needs to be an exact match\n if (matchType === 'exact') {\n mainFilterMatches = (mainExclude) ? $.inArray(itemValue, dataToMatch) === -1 : $.inArray(itemValue, dataToMatch) > -1;\n }\n\n // If the data only needs to be contained in the value\n if (matchType === 'contains') {\n dataToMatch.forEach((valToMatch) => {\n const valMatched = (mainExclude) ? !itemValue.includes(valToMatch) : itemValue.includes(valToMatch);\n if (valMatched) { mainFilterMatches = true; }\n });\n }\n\n // Defaults for when there is no secondary filter in use\n let secSubsetMatches = (secSubsetOperator === 'AND');\n\n // If we're using a secondary filter, this handles that matching\n if (secSubset) {\n secSubsetMatches = false;\n\n // Use the secondary filter when the searching the item\n const $secElemToSearch = $item.find(secSubset);\n\n // This is where we'll store the value to match against\n let secItemValue = '';\n\n // If the secondary subset starts with '[' then you know it's targeting a data attribute instead of a normal selector\n // This gets set in the secondary subset data attribute in the HMTL like this \"[attrname]\"\n if (secSubset[0] === '[') {\n const secSubsetTargetAttribute = secSubset.replace('[', '').replace(']', '');\n secItemValue = $.trim($item.data(secSubsetTargetAttribute)) || '';\n }\n else {\n\n // Find the value of the text to match against\n secItemValue = $.trim($secElemToSearch.text()) || '';\n\n // Find the value from an input\n if ($secElemToSearch.is(':input')) { secItemValue = $.trim($secElemToSearch.val()); }\n\n // Find the value from a radio button\n if ($secElemToSearch.next('input').is('[type=\"radio\"]')) { secItemValue = $.trim($secElemToSearch.next('input').val()); }\n }\n\n // If the data needs to be an exact match\n if (secMatchType === 'exact') {\n secSubsetMatches = (secExclude) ? $.inArray(secItemValue, secDataToMatch) === -1 : $.inArray(secItemValue, secDataToMatch) > -1;\n }\n\n // If the data only needs to be contained in the value\n if (secMatchType === 'contains') {\n secDataToMatch.forEach((valToMatch) => {\n const valMatched = (secExclude) ? !secItemValue.includes(valToMatch) : secItemValue.includes(valToMatch);\n if (valMatched) { secSubsetMatches = true; }\n });\n }\n }\n\n // These are the two options for the secondary operator (defaults to AND)\n const filterOptions = {\n AND: () => mainFilterMatches && secSubsetMatches,\n OR : () => mainFilterMatches || secSubsetMatches,\n };\n\n // See if the item matches the filter(s) using AND or OR (depending on what the secondary operator is)\n const filterMatches = filterOptions[secSubsetOperator]();\n\n // Returns true if the item matched the filter, false if it doesn't\n return filterMatches;\n}\n", "/*******************************************************************************\nFILTERS DATA TO MATCH CHECKBOX FILTER\nRuns the filter against a set of items attached to a checkbox filter.\n*******************************************************************************/\n\nimport checkForMatch from '../filter-tabs/check-for-match';\n\nexport default function filterItems(settings) {\n\n const $items = $(settings.items);\n const hiddenClass = `hide--${settings.name}`;\n\n // Check each item to see if it matches the filter tab criteria\n $items.each((index, item) => {\n const $item = $(item);\n\n // Check to see if the current item matches the filter\n const filterMatches = checkForMatch($item, settings, settings);\n\n // Hide matching items if the checkbox is checked and the action is 'hide' OR if the checkbox is NOT checked and the action is 'show'\n if (filterMatches && ((settings.isChecked && settings.action === 'hide') || (!settings.isChecked && settings.action === 'show'))) {\n $item.addClass(hiddenClass);\n }\n\n // Show matching items if the checkbox is checked and the action is 'show' OR if the checkbox is NOT checked and the action is 'hide'\n if (filterMatches && ((settings.isChecked && settings.action === 'show') || (!settings.isChecked && settings.action === 'hide'))) {\n $item.removeClass(hiddenClass);\n }\n });\n}\n", "/*******************************************************************************\nGET CHECKBOX FILTER SETTINGS\nReturns all the options set on a checkbox filter.\n*******************************************************************************/\n\nexport default function getSettings(name) {\n\n const $checkbox = $(`.filter-checkbox[data-name=\"${name}\"]`);\n\n // Is the checkbox checked or not\n const isChecked = $checkbox.hasClass('checked');\n\n // The selector that matches all the items we're filtering on\n const items = `${$checkbox.data('items')}`;\n\n // This optional attribute is used if the content that needs to be searched is something specific inside the item\n // Ex. If an item is a table row, but you only want to filter the results based on the first column's content\n const subset = $checkbox.data('subset') || '';\n\n // The data to match against. Only data matching this value will appear when the checkbox is checked.\n let dataToMatch = String($checkbox.data('match')) || '';\n\n // If the checkbox is not checked, then we want to remove the filter\n // To remove the filter, we just set the data to match all items\n // Because we're using a custom hide class, using the wildcard selector won't interfere with other filters.\n //if ($checkbox.hasClass('checked')) { dataToMatch = '*'; }\n\n // On an individual checkbox, you can optionally add a secondary subsset along with the data to match against\n const secSubset = $checkbox.data('secondary-subset') || '';\n let secDataToMatch = String($checkbox.data('ss-match')) || '';\n\n // By default, both the main filter AND the secondary subset have to match for an item to match\n // If this is set to OR, then it would only have to match one or the other\n const secSubsetOperator = ($checkbox.data('ss-operator') || 'AND').toUpperCase();\n\n // Check if we want to include matching items or exclude them\n const mainExclude = (dataToMatch.charAt(0) === '!');\n const secExclude = (secDataToMatch.charAt(0) === '!');\n\n // Strip off the ! character at the beginning of the match data (if it exists)\n dataToMatch = (mainExclude) ? dataToMatch.slice(1) : dataToMatch;\n secDataToMatch = (secExclude) ? secDataToMatch.slice(1) : secDataToMatch;\n\n // Convert the match criteria to an array (if it's not already)\n dataToMatch = (dataToMatch.includes(',')) ? dataToMatch.split(',') : [dataToMatch];\n secDataToMatch = (secDataToMatch.includes(',')) ? secDataToMatch.split(',') : [secDataToMatch];\n\n // Trim all the values in the arrays\n dataToMatch = $.map(dataToMatch, $.trim);\n secDataToMatch = $.map(secDataToMatch, $.trim);\n\n // Should we \"show\" or \"hide\" the items when checked\n const action = $checkbox.data('action') || 'hide';\n\n /* The matchType options below control how the filtering works. There are two options:\n --------------------------------------------------------------------------\n 1. exact - [default] The data has to exactly match the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would NOT match\n 2. contains - If this option is used, the data just needs to be somewhere in the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would match\n ----------------------------------------------------------------------------*/\n const matchType = $checkbox.data('match-type') || 'exact';\n const secMatchType = $checkbox.data('ss-match-type') || 'exact';\n\n return {\n action, // Should we \"show\" or \"hide\" the items when checked?\n isChecked, // Returns true if the checkbox is checked\n items, // The selector that matches all the items we're filtering on\n name, // The name of the checkboxFilter\n subset, // Optional attribute to add the ability to match against something inside the item\n dataToMatch, // Only items matching this value will be affected by the checkbox.\n mainExclude, // Should the main filter match using the !== operator?\n matchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n secSubset, // A secondary subset (in the form of a selector) for this checkbox\n secDataToMatch, // The data that the secondary subset should try to match against\n secExclude, // Should the secondary filter match using the !== operator?\n secSubsetOperator, // [AND/OR] Do the main AND secondary filters have to match or just one OR the other?\n secMatchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n };\n\n}\n", "/*******************************************************************************\nUPDATE DATA BASED ON CHECKBOX FILTER STATUS\nHandles a change to a checkbox filter.\n*******************************************************************************/\n\nimport filterItems from './filter-items';\nimport getFilterSettings from './get-settings';\n\nexport default function updateCheckboxFilter(checkboxName) {\n\n // Get the settings for the filter\n const settings = getFilterSettings(checkboxName);\n\n // Filter the items using the checkbox's settings\n filterItems(settings);\n}\n", "/*******************************************************************************\nTRIGGER ALL THE CHECKBOX FILTERS ON A PAGE\nUsed to run the filters on page load based on their initial state (checked or unchecked).\n*******************************************************************************/\n\nimport updateCheckboxFilter from './update-filter';\n\nexport default function initializeCheckBoxFilters() {\n\n $('.filter-checkbox').each((index, checkbox) => {\n const checkboxName = $(checkbox).data('name');\n const $items = $($(checkbox).data('items'));\n\n // Don't initialize the filter if the items are still loading via AJAX\n // Instead add a 'waiting-for-ajax' class and let the AJAX loader handle the initialization\n if ($items.find('.loading').length > 0 || $items.parent().find('.loading').length > 0) {\n $(checkbox).addClass('waiting-for-ajax');\n return;\n }\n\n updateCheckboxFilter(checkboxName);\n });\n\n}\n", "/*! lozad.js - v1.7.0 - 2018-11-08\n* https://github.com/ApoorvSaxena/lozad.js\n* Copyright (c) 2018 Apoorv Saxena; Licensed MIT */\n\n\n/**\n * Detect IE browser\n * @const {boolean}\n * @private\n */\nconst isIE = typeof document !== 'undefined' && document.documentMode;\n\nconst defaultConfig = {\n rootMargin: '0px',\n threshold : 0,\n load(element) {\n if (element.nodeName.toLowerCase() === 'picture') {\n const img = document.createElement('img');\n if (isIE && element.getAttribute('data-iesrc')) {\n img.src = element.getAttribute('data-iesrc');\n }\n if (element.getAttribute('data-alt')) {\n img.alt = element.getAttribute('data-alt');\n }\n element.appendChild(img);\n }\n if (element.getAttribute('data-src')) {\n element.src = element.getAttribute('data-src');\n }\n if (element.getAttribute('data-srcset')) {\n element.setAttribute('srcset', element.getAttribute('data-srcset'));\n }\n if (element.getAttribute('data-background-image')) {\n element.style.backgroundImage = `url('${element.getAttribute('data-background-image')}')`;\n }\n if (element.getAttribute('data-toggle-class')) {\n element.classList.toggle(element.getAttribute('data-toggle-class'));\n }\n },\n loaded() {},\n};\n\nfunction markAsLoaded(element) {\n element.setAttribute('data-loaded', true);\n}\n\nconst isLoaded = element => element.getAttribute('data-loaded') === 'true';\n\nconst onIntersection = (load, loaded) => (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0 || entry.isIntersecting) {\n observer.unobserve(entry.target);\n\n if (!isLoaded(entry.target)) {\n load(entry.target);\n markAsLoaded(entry.target);\n loaded(entry.target);\n }\n }\n });\n};\n\nconst getElements = (selector, root = document) => {\n if (selector instanceof Element) {\n return [selector];\n }\n if (selector instanceof NodeList) {\n return selector;\n }\n return root.querySelectorAll(selector);\n};\n\nfunction lozad(selector = '.lozad', options = {}) {\n const {\n root, rootMargin, threshold, load, loaded,\n } = Object.assign({}, defaultConfig, options);\n let observer;\n\n if (window.IntersectionObserver) {\n observer = new IntersectionObserver(onIntersection(load, loaded), {\n root,\n rootMargin,\n threshold,\n });\n }\n\n return {\n observe() {\n const elements = getElements(selector, root);\n\n for (let i = 0; i < elements.length; i++) {\n if (isLoaded(elements[i])) {\n continue;\n }\n if (observer) {\n observer.observe(elements[i]);\n continue;\n }\n load(elements[i]);\n markAsLoaded(elements[i]);\n loaded(elements[i]);\n }\n },\n triggerLoad(element) {\n if (isLoaded(element)) {\n return;\n }\n\n load(element);\n markAsLoaded(element);\n loaded(element);\n },\n observer,\n };\n}\n\nexport default lozad;\n", "/*******************************************************************************\nLAZY LOAD CLOUDINARY IMAGES\nWe're using the Lozad libary with some adaptations.\n*******************************************************************************/\n\nimport lozad from '../../../lib/_lozad/lozad.es';\nimport activateCloudinaryImages from './activate';\n\nexport default function initializeLazyLoading() {\n window.rwLazyLoader = lozad('.lozad', {\n // We don't want to do anything here since the Cloudinary library\n // takes care of loading the image.\n load : () => {},\n loaded: (el) => {\n el.classList.add('cld-responsive');\n activateCloudinaryImages();\n },\n rootMargin: '150px 0px',\n });\n window.rwLazyLoader.observe();\n}\n", "/*******************************************************************************\r\nInsert Freestar Sticky Ads\r\nAdd sticky ads to the page on mobile and on some desktop pages\r\n*******************************************************************************/\r\n\r\nfunction configureFreestarStickyAds(){\r\n if (!window.freestar?.queue) { return; }\r\n\r\n // Add sticky ad to the bottom of the page on mobile\r\n window.freestar.queue.push(function(){\r\n window.freestar.newStickyFooter(\"rotowire_adhesion\");\r\n });\r\n\r\n const isLoggedInUser = $('.rwnav-top-account').length > 0;\r\n\r\n // Add sticky ad to the bottom of the page on desktop (if the user is not logged in)\r\n if (!isLoggedInUser) {\r\n const desktopPages = [\r\n '/basketball/nba-lineups.php',\r\n '/baseball/daily-lineups.php',\r\n '/soccer/lineups.php',\r\n '/football/lineups.php',\r\n '/wnba/lineups.php',\r\n '/euro/daily-lineups.php',\r\n ];\r\n const currentPage = window.location.pathname;\r\n const desktopStickyShouldAppear = desktopPages.some(page => currentPage.includes(page));\r\n\r\n if (desktopStickyShouldAppear) {\r\n window.freestar.queue.push(function(){\r\n window.freestar.newStickyFooter(\"rotowire_adhesion_desktop\");\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default function insertFreestarStickyAds(){\r\n if (window.freestar?.queue) { return configureFreestarStickyAds(); }\r\n $(window).on(\"load\", configureFreestarStickyAds);\r\n}\r\n", "/*******************************************************************************\r\nInsert Connatix Ads\r\nAdd Connatix ads to articles and lineup pages\r\n*******************************************************************************/\r\n\r\n// Add a connatix ad in the set of lineups making sure to have some space between the existing 300x250 ad\r\nfunction addLineupCardPlacements() {\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 5 && $('.is-connatix').length === 0) {\r\n const extraLineupsAd = `\r\n `;\r\n let connatixAdSlot = 3;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 2 : ad300Position + 2;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${extraLineupsAd}`);\r\n }\r\n\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 10 && $('.is-connatix').length === 1) {\r\n console.log('hello');\r\n const extraLineupsAd = `\r\n `;\r\n let connatixAdSlot = 9;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 3 : ad300Position + 3;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${extraLineupsAd}`);\r\n }\r\n\r\n}\r\n\r\nexport default function insertConnatixAds() {\r\n if (!window.cnxps) { return; }\r\n\r\n // PLAYER PAGES\r\n if ($('.pp-connatix-section').length > 0) {\r\n const playerPageAd = `\r\n `;\r\n $('.pp-connatix-section').html(playerPageAd);\r\n }\r\n\r\n // ARTICLES\r\n if ($('.article__body').length > 0 && $('.article-preview-fader').length === 0) {\r\n const numParagraphs = $('.article__body > p').length;\r\n let adPlacement = 3;\r\n if (numParagraphs < adPlacement) { adPlacement = Math.max(numParagraphs - 1, 1); }\r\n\r\n const articleAd = `\r\n `;\r\n $(`.article__body > p:nth-of-type(${adPlacement})`).after(`${articleAd}`);\r\n return;\r\n }\r\n\r\n // LINEUPS\r\n if ($('.lineups').length > 0) {\r\n\r\n // Add ad to bottom of lineups page\r\n /*\r\n const lineupsAd = `\r\n `;\r\n if ($('.page.has-gdc').length === 0) {\r\n $('.page').append(`${lineupsAd}`);\r\n }\r\n */\r\n\r\n // Add ad as a lineup card\r\n // We have to watch for the toggle-tab event on the \"Hide Games That Have Started\" option for each sport because\r\n // it messes with the positioning of the ads\r\n const tabSets = [\r\n 'lineups-nfl-hidestarted',\r\n 'lineups-mlb-hidestarted',\r\n 'lineups-nba-hidestarted',\r\n 'lineups-nhl-hidestarted',\r\n 'lineups-euro-hidestarted',\r\n 'lineups-soccer-hidestarted',\r\n 'lineups-cricket-hidestarted',\r\n ];\r\n const tabOptions = ['Yes', 'No'];\r\n const eventsToWatch = [];\r\n tabSets.forEach((ts) => {\r\n tabOptions.forEach((opt) => { eventsToWatch.push(`toggleTabLoaded:${ts}-${opt}`); });\r\n });\r\n const eventsToWatchString = eventsToWatch.join(' ');\r\n $(document).on(eventsToWatchString, (e, tabSettings) => { addLineupCardPlacements(); });\r\n }\r\n}\r\n", "/*******************************************************************************\r\nInsert Connatix Ads\r\nAdd Connatix ads to articles and lineup pages\r\n*******************************************************************************/\r\n\r\nfunction getSTNPlayerCode(){\r\n return ``;\r\n}\r\n\r\n// Add a connatix ad in the set of lineups making sure to have some space between the existing 300x250 ad\r\nfunction addLineupCardPlacements() {\r\n const stnPlayerCode = getSTNPlayerCode();\r\n\r\n // Add CSS to make the ad take up the full width of the container\r\n document.head.appendChild(document.createElement(\"style\")).innerHTML = \".lineup.is-ad.is-connatix > div[data-stn-player] { min-width: 100%; }\";\r\n\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 5 && $('.is-connatix').length === 0) {\r\n let connatixAdSlot = 3;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 2 : ad300Position + 2;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${stnPlayerCode}`);\r\n }\r\n\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 10 && $('.is-connatix').length === 1) {\r\n let connatixAdSlot = 9;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 3 : ad300Position + 3;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${stnPlayerCode}`);\r\n }\r\n\r\n}\r\n\r\nexport default function insertSTNAds() { \r\n const isLoggedInUser = $('.rwnav-top-account').length > 0;\r\n //if (isLoggedInUser) { return; }\r\n console.log('Loading STN ads');\r\n\r\n // ARTICLES\r\n if ($('.article__body').length > 0 && $('.article-preview-fader').length === 0) {\r\n const numParagraphs = $('.article__body > p').length;\r\n let adPlacement = 3;\r\n if (numParagraphs < adPlacement) { adPlacement = Math.max(numParagraphs - 1, 1); }\r\n $(`.article__body > p:nth-of-type(${adPlacement})`).after(`${getSTNPlayerCode()}`);\r\n return;\r\n }\r\n\r\n // LINEUPS\r\n if ($('.lineups').length > 0) {\r\n\r\n // Add ad as a lineup card\r\n // We have to watch for the toggle-tab event on the \"Hide Games That Have Started\" option for each sport because\r\n // it messes with the positioning of the ads\r\n const tabSets = [\r\n 'lineups-nfl-hidestarted',\r\n 'lineups-mlb-hidestarted',\r\n 'lineups-nba-hidestarted',\r\n 'lineups-nhl-hidestarted',\r\n 'lineups-euro-hidestarted',\r\n 'lineups-soccer-hidestarted',\r\n 'lineups-cricket-hidestarted',\r\n ];\r\n const tabOptions = ['Yes', 'No'];\r\n const eventsToWatch = [];\r\n tabSets.forEach((ts) => {\r\n tabOptions.forEach((opt) => { eventsToWatch.push(`toggleTabLoaded:${ts}-${opt}`); });\r\n });\r\n const eventsToWatchString = eventsToWatch.join(' ');\r\n $(document).on(eventsToWatchString, (e, tabSettings) => { addLineupCardPlacements(); });\r\n }\r\n}\r\n", "import insertConnatixAds from './insert-connatix';\nimport insertSTNAds from './insert-stn';\n\nexport default function insertVideoAds(){\n if (window.location.host.includes('dev') || window.location.host.includes('localhost')) { \n return insertSTNAds();\n }\n insertConnatixAds();\n}\n", "/*******************************************************************************\nLOAD ALL AJAX URLS\nLook for any \"ajax-load\" data attributes and use them to load data into the targeted elements.\n*******************************************************************************/\n/* eslint-disable no-console */\n\nimport updateCheckboxFilter from '../filter-checkboxes/update-filter';\n\nexport default async function getDataAJAX() {\n const loadingErrorMessage = 'We were unable to load this data. Please try again.';\n\n // Find all the AJAX urls to load\n $('[data-ajax-load]').each(async (index, element) => {\n const ajaxURL = $(element).data('ajax-load');\n const targets = $(element).data('ajax-targets').split(',');\n const emptyDataMessage = $(element).data('ajax-empty') || '';\n\n // Tables need to be handled differently than everything else.\n // So if any of the target elements are a table, then we need to exit without running an AJAX request.\n let tableDetected = false;\n let targetMissing = false;\n targets.forEach((target) => {\n if ($(target).length === 0) { targetMissing = true; }\n\n if ($(target).is('table')) {\n const targetName = target.replace('#', '');\n tableDetected = true;\n\n // Set the AJAX url, AJAX data source and (optionally) the 'noresults' data attribute on the table element\n // Both these attributes are used when loading the table with DataTables\n $(target).data('ajaxsource', ajaxURL);\n $(target).data('datasource', targetName);\n if (emptyDataMessage) { $(target).data('noresults', emptyDataMessage); }\n }\n });\n if (targetMissing || tableDetected) { return; }\n\n // Run the AJAX request and load the data returned into the target elements\n try {\n const response = await $.ajax({\n type : 'GET',\n url : ajaxURL,\n timeout: 120000, // 2 minute timeout to accommodate slow MyRotoWire query (reduce later?)\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Load the data into the targets\n targets.forEach((target) => {\n const $target = $(target);\n const targetName = target.replace('#', '');\n const targetHTML = (targetName in response) ? response[targetName] : 'data not returned';\n\n if ($target.get(0).tagName === \"META\") { return; }\n\n // If the target element does not exists, let the developer know in the console\n if ($target.length === 0) {\n console.log('The element you are targeting does not exist on the page.');\n }\n\n // If the data for the targeted element does not exist, let the developer and user know.\n if (targetHTML === 'data not returned') {\n $target.replaceWith(loadingErrorMessage);\n console.log('The data for your targeted element is not being returned.');\n }\n\n // If the AJAX call was successful, but the data came back empty, display a message to the user.\n if (!targetHTML) {\n $target.replaceWith(emptyDataMessage || 'No data was found.');\n }\n\n // Load the data into the target\n $target.replaceWith(targetHTML);\n });\n\n // Initialize the checkbox filters that were waiting for the AJAX to finish\n $('.filter-checkbox.waiting-for-ajax').each((i, checkbox) => {\n const checkboxName = $(checkbox).data('name');\n updateCheckboxFilter(checkboxName);\n });\n }\n catch (error) {\n targets.forEach((target) => { $(target).replaceWith(loadingErrorMessage); });\n }\n });\n}\n", "/*******************************************************************************\nMINIMIZE A NEWS UPDATE\nShrinks a news update down to just its headline.\n*******************************************************************************/\n\nexport default function minimizeUpdate(e) {\n const $newsUpdate = $(e.currentTarget);\n\n // We need links inside the news update to continue to work\n if (e.target.className === 'news-update__top') {\n $newsUpdate.removeClass('was-user-expanded').addClass('is-compact');\n }\n}\n", "/*******************************************************************************\nCHARTIST DATA PROCESSING\nThis returns a function that can be used to manipulate a chart's data set.\n*******************************************************************************/\n\nexport default function onData(options = {}) {\n const {\n flipDataSign = false,\n } = options;\n\n return (context) => {\n context.data.series = context.data.series.map(series => series.map((data) => {\n if (flipDataSign) { data.value = -data.value; }\n return data;\n }));\n };\n //TEST\n}\n", "/*******************************************************************************\nGET KEY DATA POINTS FOR CHART\nThis calculates the start, end, max and min data points from a chart's data set.\n*******************************************************************************/\n\nexport default function getKeyChartistDataPoints(dataSets) {\n return dataSets.map((dataSet) => {\n const numData = dataSet.length;\n if (numData === 0) { return []; }\n\n const data = $.extend(true, [], dataSet);\n\n const maxEntry = data.reduce((max, d) => ((Number(d.value) >= Number(max.value)) ? d : max));\n const minEntry = data.reduce((min, d) => ((Number(d.value) < Number(min.value)) ? d : min));\n const start = data[0];\n const end = data[numData - 1];\n\n const keyPoints = [start, end];\n const keyValues = keyPoints.map(p => p.value);\n\n if (!keyValues.includes(minEntry.value)) { keyPoints.push(minEntry); }\n if (!keyValues.includes(maxEntry.value)) { keyPoints.push(maxEntry); }\n\n return keyPoints;\n });\n}\n", "/*******************************************************************************\nGET LIMIT MODE\nThere can be limited space to display data points on chart so this function adapts how\nthe chart is displayed based on the number of data points and the available width.\nIt flips between showing all data points (\"all\"), showing every other data point (\"everyOther\"),\nor showing only key data points [start, end, min, max] (\"key\").\n*******************************************************************************/\n\nexport default function getLimitMode(chartWidthPixels, numDataPoints) {\n if (chartWidthPixels < 350) {\n if (numDataPoints > 10) { return 'key'; }\n return 'all';\n }\n if (chartWidthPixels < 450) {\n if (numDataPoints > 15) { return 'key'; }\n return 'all';\n }\n if (chartWidthPixels < 700) {\n if (numDataPoints > 40) { return 'key'; }\n if (numDataPoints > 20) { return 'everyOther'; }\n return 'all';\n }\n if (chartWidthPixels < 800) {\n if (numDataPoints > 50) { return 'key'; }\n if (numDataPoints > 25) { return 'everyOther'; }\n return 'all';\n }\n if (chartWidthPixels < 950) {\n if (numDataPoints > 60) { return 'key'; }\n if (numDataPoints > 30) { return 'everyOther'; }\n return 'all';\n }\n if (chartWidthPixels < 1050) {\n if (numDataPoints > 70) { return 'key'; }\n if (numDataPoints > 35) { return 'everyOther'; }\n return 'all';\n }\n if (numDataPoints > 80) { return 'key'; }\n if (numDataPoints > 40) { return 'everyOther'; }\n return 'all';\n}\n", "/*******************************************************************************\nCHARTIST DRAW PROCESSING\nThis returns a function that can be used to change how a chart is drawn on screen.\n*******************************************************************************/\n\nimport getKeyData from './get-key-data-points';\nimport getLimitMode from './get-limit-mode';\n\nexport default function onDrawChartist(chartName, dataSets, options = {}) {\n const drawOptions = $.extend(true, {}, options.rw);\n drawOptions.labelClass = options.labelClass;\n\n const {\n labelDecimals = 0,\n labelClass = 'ct-point-label',\n drawLabelOffsetX = -10,\n drawLabelOffsetY = -10,\n labelStyle = '',\n flipDataSign = false,\n } = drawOptions;\n const $chart = $(`#chart${chartName}`);\n let chartWidth;\n\n const keyData = getKeyData(dataSets);\n const numData = dataSets.reduce((a, b) => (a.length > b.length ? a : b), []).length;\n\n let isEveryOther = true;\n\n return (data) => {\n if (data.type === 'point') {\n if (data.index === 0) { chartWidth = $chart.width(); }\n\n const limit = getLimitMode(chartWidth, numData);\n const isKeyDataPoint = keyData.flat().map(d => d.meta).includes(data.meta);\n\n // Figure out if the data point dot should be displayed\n const displayDot = (limit === 'all') || (limit === 'key' && isKeyDataPoint) || (limit === 'everyOther' && isEveryOther === true);\n\n // Flip the isEveryOther variable so the next dot has the opposite visibility\n isEveryOther = !isEveryOther;\n\n if (displayDot) {\n const val = flipDataSign ? -data.value.y : data.value.y;\n data.group\n .elem('text', {\n x : data.x + Number(drawLabelOffsetX),\n y : data.y + Number(drawLabelOffsetY),\n style: labelStyle,\n }, labelClass)\n .text(Number(val).toFixed(labelDecimals));\n }\n else {\n data.element.remove();\n }\n }\n };\n}\n", "/*******************************************************************************\nGET CONFIRMATION MODAL SETTINGS\nThis function determines a confirmation modal functions.\n1) If any values were passed in as data attributes, those take precedence over the presets and default options.\n2) If a preset name was passed in, then any options that were not set via data attribute are filled in with the preset values.\n3) If no preset name was passed in, then the default options are used to fill in any missing options.\n*******************************************************************************/\n\nexport default function getPresetsConfirmation(options) {\n\n // All the different options that can be passed in\n const { preset, itemID, title, message, cancelButton, confirmButton, confirmClass, includeBackground } = options;\n\n if (preset === 'delete-watchlist') {\n return {\n itemID : itemID || '',\n title : title || 'Delete Watchlist?',\n message : message || 'Are you sure you want to delete this watchlist?',\n cancelButton : cancelButton || 'Cancel',\n confirmButton : confirmButton || 'Delete',\n confirmClass : confirmClass || 'delete-watchlist',\n includeBackground: includeBackground || 'Yes',\n };\n }\n\n if (preset === 'delete-profile') {\n return {\n itemID : itemID || '',\n title : title || 'Delete Profile?',\n message : message || 'Are you sure you want to delete this profile?',\n cancelButton : cancelButton || 'Cancel',\n confirmButton : confirmButton || 'Delete',\n confirmClass : confirmClass || 'delete-profile',\n includeBackground: includeBackground || 'Yes',\n };\n }\n\n\n // Default Options\n return {\n itemID : itemID || '',\n title : title || 'Are You Sure?',\n message : message || 'Are you sure you want to do this?',\n cancelButton : cancelButton || 'No',\n confirmButton : confirmButton || 'Yes',\n confirmClass : confirmClass || '',\n includeBackground: includeBackground || 'Yes',\n };\n}\n", "/*******************************************************************************\nBUILD A ITEM EDIT MODAL WINDOW\n*******************************************************************************/\n\nexport default function buildConfirmationModal(options) {\n const { title, message, cancelButton, itemID, confirmClass, confirmButton, includeBackground } = options;\n\n const modalHTML = `\n \n ${title}\n \n ${message}\n \n ${cancelButton}\n ${confirmButton}\n \n \n `;\n\n return (includeBackground === 'Yes') ? `${modalHTML}` : modalHTML;\n}\n", "/*******************************************************************************\nOPEN CONFIRMATION MODAL WINDOW\nOpens a confirmation modal window\n*******************************************************************************/\n\nimport getConfirmationModalSettings from './get-presets-confirmation';\nimport buildConfirmationModal from './build-modal-confirmation';\n\nexport default function openConfirmationModal(e) {\n\n // Get any confirmation modal settings that exist on the button that triggered the modal\n const $triggerButton = $(e.currentTarget);\n const options = {\n preset : $triggerButton.data('preset'),\n itemID : $triggerButton.data('id'),\n title : $triggerButton.data('title'),\n message : $triggerButton.data('message'),\n cancelButton : $triggerButton.data('cancel-button'),\n confirmButton : $triggerButton.data('confirm-button'),\n confirmClass : $triggerButton.data('confirm-class'),\n includeBackground: $triggerButton.data('include-bg'),\n };\n\n // Get the editoroptions for the confirmation modal\n const modalOptions = getConfirmationModalSettings(options);\n\n // Build the rename watchlist editor modal window\n const modalHTML = buildConfirmationModal(modalOptions);\n\n // Add the modal window to the page\n $('.page').after(modalHTML);\n}\n", "/*******************************************************************************\nBUILD A ITEM EDIT MODAL WINDOW\n*******************************************************************************/\n\nexport default function buildItemEditModal(options) {\n\n // All the different options that can be passed in\n const title = options.title || 'Edit Item';\n const itemID = options.itemID || '';\n const itemName = options.itemName || 'item';\n const itemValue = options.itemValue || '';\n const maxlength = options.maxlength || '';\n const cancelButton = options.cancelButton || 'Cancel';\n const saveButton = options.saveButton || 'Save';\n const saveClass = options.saveClass || '';\n const includeBackground = (options.includeBackground === undefined) ? true : options.includeBackground;\n\n const modalHTML = `\n \n ${title}\n \n \n \n \n ${cancelButton}\n ${saveButton}\n \n \n `;\n\n return (includeBackground) ? `${modalHTML}` : modalHTML;\n}\n", "/*******************************************************************************\r\nOPEN CONFIRMATION MODAL WINDOW\r\nOpens a confirmation modal window\r\n*******************************************************************************/\r\n\r\nimport buildItemEditModal from './build-modal-item-editor';\r\n\r\nexport default function openItemEditorModal(e) {\r\n\r\n // Get any confirmation modal settings that exist on the button that triggered the modal\r\n const $triggerButton = $(e.currentTarget);\r\n const options = {\r\n title : $triggerButton.data('title'),\r\n itemID : $triggerButton.data('id'),\r\n itemName : $triggerButton.data('item-name'),\r\n itemValue : $triggerButton.data('item-value'),\r\n maxlength : $triggerButton.data('maxlength'),\r\n cancelButton : $triggerButton.data('cancel-button'),\r\n saveButton : $triggerButton.data('save-button'),\r\n saveClass : $triggerButton.data('save-class'),\r\n includeBackground: $triggerButton.data('include-bg'),\r\n };\r\n\r\n // Build the rename watchlist editor modal window\r\n const modalHTML = buildItemEditModal(options);\r\n\r\n // Add the modal window to the page\r\n $('.page').after(modalHTML);\r\n}\r\n", "/*******************************************************************************\nACTIVATE JUMP BAR\nRemoves tabs that are associated with section IDs that do not exist and un-hide the bar.\n*******************************************************************************/\n\n// This checks if the sections exist for each tab\nfunction checkTabs($jumpBar) {\n $jumpBar.find('.jump-link').each((index, tab) => {\n const $tab = $(tab);\n const id = $tab.attr('href');\n if ($(id).length === 0) { $tab.remove(); }\n });\n $jumpBar.removeClass('hide');\n}\n\nexport default function activateJumpBar() {\n $('.jump-bar').each((i, jumpBar) => {\n const $jumpBar = $(jumpBar);\n\n // This is an event to wait for before checking the tabs\n const waitFor = $jumpBar.data('waitFor');\n const extraWaitTime = $jumpBar.data('extraTime');\n\n if (waitFor) {\n $(document).on(waitFor, () => {\n if (extraWaitTime) {\n setTimeout(() => { checkTabs($jumpBar); }, extraWaitTime);\n }\n else {\n checkTabs($jumpBar);\n }\n });\n }\n else {\n checkTabs($jumpBar);\n }\n });\n}\n", "/*******************************************************************************\nREVEALS AN ELEMENT THAT WAS HIDDEN\n*******************************************************************************/\n\nimport setMinGridWidth from '../css-grid/set-min-grid-width';\n\nexport default function revealElement(e) {\n const $trigger = $(e.currentTarget);\n\n // Grab the element selector. Exit out if none exists.\n const elementSelector = $trigger.data('show');\n if (!elementSelector) { return; }\n\n // Options\n const revealMode = $trigger.data('mode') || 'fade';\n const hideClasses = $trigger.data('hideClasses') || 'hide';\n const elementsToHide = $trigger.data('hide') || '';\n const selfDestruct = ($trigger.data('selfDestruct') || '').toLowerCase() !== 'no';\n const group = $trigger.data('group') || '';\n const selectedClasses = $trigger.data('selected-classes') || '';\n\n // Elements\n const $elements = $(elementSelector);\n\n // Perform actions based on the settings\n if (selfDestruct) { $trigger.remove(); }\n if (revealMode === 'show') { $elements.removeClass(hideClasses); }\n if (revealMode === 'fade') { $elements.flexFadeIn(hideClasses); }\n if (elementsToHide) { $(elementsToHide).addClass(hideClasses); }\n\n // Handle changes to the selected trigger/trigger group (if set)\n if (group && selectedClasses) {\n $(group).removeClass(selectedClasses);\n $trigger.addClass(selectedClasses);\n }\n\n if ($elements.find('.filter-tab').length) {\n setMinGridWidth({ containers: '.filter-tabs', items: '.filter-tab', padding: '20' });\n }\n}\n", "/*******************************************************************************\nREVEAL THE SELECTED FILTER FOR A SET OF FILTER LINKS\nOn page load we need to drill down to the selected filter if it's not at the top level.\n*******************************************************************************/\n\nexport default function revealSelectedFilter(i, filterLinkSet) {\n const $filterLinkSet = $(filterLinkSet);\n const moreButtonText = $filterLinkSet.data('moreButton') || 'More Filters';\n const $selectedFilter = $filterLinkSet.find('.is-selected');\n const selectedLevel = +$selectedFilter.data('level') || 1;\n const selectedParent = $selectedFilter.data('parent');\n\n // Hide all the filter links to start\n $filterLinkSet.find('.filter-link').addClass('hide');\n\n if (selectedLevel > 1) {\n const $title = $filterLinkSet.parents('.filter-links-wrapper').siblings('.filter-links-title');\n\n // Add the active sub nav wrapper class and the More Filters button\n $filterLinkSet.parents('.filter-links-wrapper').addClass('is-showing-sub-nav');\n $filterLinkSet.before(`${moreButtonText}`);\n\n // Only show the filter links that are in the same group as the selected filter\n $(`.filter-link[data-level=\"${selectedLevel}\"][data-parent=\"${selectedParent}\"]`).removeClass('hide');\n\n // Update the sub-title\n let subTitle = selectedParent;\n if (selectedLevel === 3) {\n subTitle = `${$(`.filter-link[data-name=\"${selectedParent}\"]`).data('parent')}: ${selectedParent}`;\n }\n $title.html(`${$title.html()}${subTitle}`);\n }\n else {\n $filterLinkSet.find('.filter-link:not(.is-sub-link)').removeClass('hide');\n }\n}\n", "/*******************************************************************************\nSCROLL TO ELEMENT ON PAGE LOAD\n*******************************************************************************/\n\nexport default function scrollToElementOnPageLoad() {\n const $scrollToElements = $(\".scroll-to-here-on-load\").first();\n if ($scrollToElements.length === 0) {\n return;\n }\n\n $(\"html, body\").animate({ scrollTop: $scrollToElements.offset().top }, 300);\n}\n", "/*******************************************************************************\r\nselect Radio Button In row\r\nselects a radio butt and deseslects another in a radio row\r\n*******************************************************************************/\r\n\r\n// Selects a custom radio button (horizontal)\r\nexport default function selectRadioButtonInRow(e) {\r\n\tvar $rb = $(e.currentTarget);\r\n\tvar rbName = $rb.data('name');\r\n\r\n\t// De-select all the radio buttons with the same name\r\n\t$('.radio-box[data-name=\"' + rbName + '\"]').removeClass('radio-box-sel').prop('checked',false);\r\n\r\n\t// Select the box that was clicked on\r\n\t$rb.addClass('radio-box-sel');\r\n\t$rb.next('.radio-box-real').prop('checked',true).trigger('change');\r\n}\r\n", "export default async function sendUserlistActivityEvent() {\n const $userlistMetaTag = $('meta[name=\"rotowire-content\"]');\n if ($userlistMetaTag.length === 0) { return; }\n\n const section = $userlistMetaTag.data('section');\n const category = $userlistMetaTag.data('category');\n if (!section || !category) { return; }\n\n try {\n await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/trigger-site-use.php',\n data : { section, category },\n timeout: 10000,\n });\n }\n catch (error) {\n // Fail silently\n }\n}\n", "/*******************************************************\r\nUNIVERSAL EVENT HANDLERS\r\nThis handles events for various interactions.\r\n********************************************************/\r\n\r\nimport activateCloudinaryImages from \"./cloudinary/activate\";\r\nimport activateRippleEffect from \"./ripple-effect/activate\";\r\nimport activateSmartAnchorTags from \"./smart-anchor-tags/activate\";\r\nimport addHoverClass from \"./hover/add-class\";\r\nimport automaticButtonProcessing from \"./button-state/automatic-button-processing\";\r\nimport cancelCommentReply from \"./articles/cancel-comment-reply\";\r\nimport checkForWallpaperAd from \"./ads/check-for-wallpaper\";\r\nimport doOnWindowResize from \"./window-resize/do-on-window-resize\";\r\nimport expandNewsUpdate from \"./player-news/expand-update\";\r\nimport expandPlayerOutlook from \"./player-outlooks/expand\";\r\nimport fixAllWidows from \"./widows/fix-all\";\r\nimport getPlayerNews from \"./player-news/get\";\r\nimport getPlayerRankings from \"./player-rankings/get\";\r\nimport getPlayerRumors from \"./player-rumors/get\";\r\nimport hideAdContainersIfAdsAreOff from \"./ads/hide-ad-containers\";\r\nimport initializeCheckBoxFilters from \"./filter-checkboxes/initialize\";\r\nimport initializeLazyLoading from \"./cloudinary/lazy-loader\";\r\nimport insertFreestarStickyAds from './ads/insert-freestar-sticky-ads';\r\nimport insertVideoAds from './ads/insert-video-ads';\r\nimport loadAJAXData from \"./ajax-loader/get-data\";\r\nimport minimizeNewsUpdate from \"./player-news/minimize-update\";\r\nimport onDataChartist from \"./charts/on-data\";\r\nimport onDrawChartist from \"./charts/on-draw\";\r\nimport openConfirmationModal from \"./modal-window/open-confirmation\";\r\nimport openItemEditorModal from \"./modal-window/open-item-editor\";\r\nimport removeErrorNotificationBar from \"./error-handling/remove-error-notification-bar\";\r\nimport removeHoverClass from \"./hover/remove-class\";\r\nimport removeMissingJumpBarSectionTabs from \"./jump-bar/activate\";\r\nimport revealElement from \"./reveal/reveal-element\";\r\nimport revealSelectedFilterLink from \"./filter-links/reveal-selected-filter\";\r\nimport scrollToElementOnPageLoad from \"./scroll-on-load/scroll-to-element-on-load\";\r\nimport selectRadioButtonInRow from \"./radio-button/select-radio-button-in-row\";\r\nimport sendUserlistActivityEvent from \"./userlist/send-activity-event\";\r\nimport setMinGridWidth from \"./css-grid/set-min-grid-width\";\r\nimport smoothScrollPolyfill from \"../../lib/_smooth-scroll-polyfill/smoothscroll\";\r\nimport toggleCheckbox from \"./checkboxes/toggle\";\r\nimport triggerCheckBoxFilterUpdate from \"./filter-checkboxes/trigger-filter-update\";\r\nimport triggerClearDataFilter from \"./data-filter/trigger-clear\";\r\nimport triggerClearInputBox from \"./input-with-clear/trigger-clear\";\r\nimport triggerCloseFilterLinkSubNav from \"./filter-links/trigger-close-sub-nav\";\r\nimport triggerCloseModalWindow from \"./modal-window/trigger-close\";\r\nimport triggerCommentReply from \"./articles/trigger-comment-reply\";\r\nimport triggerFilterLinksRangeEditor from \"./filter-links/trigger-range-editor\";\r\nimport triggerFilterLinkSubNav from \"./filter-links/trigger-sub-nav\";\r\nimport triggerFilterTabOpen from \"./filter-tabs/trigger-tab-open\";\r\nimport triggerFilterTabSwitch from \"./filter-tabs/trigger-tab-switch\";\r\nimport triggerGetArticles from \"./articles/trigger-get-articles\";\r\nimport triggerGetCustomListContent from \"./custom-lists/trigger-get-content\";\r\nimport triggerSelectedToggleTab from \"./toggle-tabs/trigger-selected-tab\";\r\nimport triggerSelectedToggleTabOnResize from \"./toggle-tabs/trigger-selected-on-resize\";\r\nimport triggerTimePeriodChange from \"./time-period-selector/trigger-time-period-change\";\r\nimport triggerToggleTabSwitch from \"./toggle-tabs/trigger-tab-switch\";\r\nimport triggerUpdateWinnings from \"./bet-calc/trigger-update-winnings\";\r\nimport triggerWindowResizedListener from \"./window-resize/trigger-window-resized-listener\";\r\nimport updateFilterTabCounts from \"./filter-tabs/update-filter-counts\";\r\nimport updateRangeEditor from \"./filter-links/update-range-editor\";\r\nimport watchDataFilterInput from \"./data-filter/watch-input\";\r\nimport watchFilterTabItems from \"./filter-tabs/watch-items\";\r\nimport watchInputWithClearButton from \"./input-with-clear/watch-input\";\r\n\r\nexport default function addUniversalEventHandlers() {\r\n // Move debugging info from PHP into a console\r\n //createDebuggingConsole();\r\n\r\n // Sends out a custom event 'rw:window-resized' whenever the window is resized\r\n triggerWindowResizedListener();\r\n\r\n // Scroll to the first element on the page with this class (if any exist)\r\n scrollToElementOnPageLoad();\r\n\r\n // Activate Cloudinary images on the page\r\n activateCloudinaryImages();\r\n\r\n // Turn on lazy loading\r\n initializeLazyLoading();\r\n\r\n // Check for wallpaper ad\r\n checkForWallpaperAd();\r\n\r\n // Smooth Scrolling Polyfill\r\n // http://iamdustan.com/smoothscroll/\r\n smoothScrollPolyfill.polyfill();\r\n\r\n // Activate the ripple effect when buttons are clicked\r\n $(document).on(\"click\", \".btn, .scroll-tab:not(.has-more)\", activateRippleEffect);\r\n\r\n // Control when hover effects are used on buttons\r\n $(document).on(\r\n \"touchstart mouseenter\",\r\n \"button, .btn, .news-headline, .side-nav__sub-section, .side-nav__item, .jump-link, .show-myleagues-for-player\",\r\n addHoverClass\r\n );\r\n $(document).on(\r\n \"mouseleave\",\r\n \"button, .btn, .news-headline, .side-nav__sub-section, .side-nav__item, .jump-link, .show-myleagues-for-player\",\r\n removeHoverClass\r\n );\r\n\r\n // Control when hover effects are used on scroll tabs\r\n $(document).on(\"touchstart mouseenter\", \".scroll-tab:not(.is-selected)\", addHoverClass);\r\n $(document).on(\"mouseleave\", \".scroll-tab:not(.is-selected)\", removeHoverClass);\r\n\r\n // Open confirmation modal (set options via data attributes on trigger element and/or presets)\r\n $(document).on(\"click\", \".open-confirm-modal\", openConfirmationModal);\r\n\r\n // Open item editor modal\r\n $(document).on(\"click\", \".open-item-editor-modal\", openItemEditorModal);\r\n\r\n // Close a modal window\r\n $(document).on(\"click\", \".modal-background\", triggerCloseModalWindow);\r\n\r\n // Hide error notification bar if it's clicked on\r\n $(document).on(\"click\", \".error-notification-bar\", removeErrorNotificationBar);\r\n\r\n // Reveals an element or elements depending on the selector passed via data attribute\r\n $(document).on(\"click\", \".revealer\", revealElement);\r\n\r\n // Smart Anchor Tags\r\n // When an anchor tag is clicked (or the page loads), this function:\r\n // 1. Scrolls smoothly rather than jumping to the anchor.\r\n // 2. Prevents the named element from being flush with the top of the screen.\r\n // 3. Prevents the #hash from showing up in the URL address bar.\r\n $(document).on(\"click\", 'a[href^=\"#\"]', activateSmartAnchorTags);\r\n activateSmartAnchorTags();\r\n\r\n // Load More articles\r\n $(document).on(\"click\", \".show-more-articles\", triggerGetArticles);\r\n\r\n // Show the reply form\r\n $(document).on(\"click\", \".show-reply-form\", triggerCommentReply);\r\n\r\n // Hide the reply form\r\n $(document).on(\"click\", \".hide-reply-form\", cancelCommentReply);\r\n\r\n // Automatically add the processing state on click for buttons/links with the 'inprogress' data attribute\r\n $(document).on(\"click\", \"a[data-inprogress], button[data-inprogress]\", automaticButtonProcessing);\r\n\r\n // Watch for keystrokes in a data filter input\r\n $(document).on(\"keyup\", \".data-filter input\", watchDataFilterInput);\r\n\r\n // Clear data filter input\r\n $(document).on(\"click\", \".filter-clear\", triggerClearDataFilter);\r\n\r\n // Watch for keystrokes in a input box that's using a clear button\r\n $(document).on(\"keyup\", \".input-wrapper:not(.no-clear) input\", watchInputWithClearButton);\r\n\r\n // Clear the input box (for input boxes using a clear button)\r\n $(document).on(\"click\", \".input-clear\", triggerClearInputBox);\r\n\r\n // Toggle a custom checkbox\r\n $(document).on(\"click\", \".checkbox\", toggleCheckbox);\r\n\r\n // Select a custom radio button (horizontal)\r\n $(document).on(\"click\", \".radio-box\", selectRadioButtonInRow);\r\n\r\n // Get more gamer news\r\n $(document).on(\"click\", \".get-more-player-news\", getPlayerNews);\r\n\r\n // Get more player rumors\r\n $(document).on(\"click\", \".get-more-player-rumors\", getPlayerRumors);\r\n\r\n // Get more player rankings with outlooks\r\n $(document).on(\"click\", \".get-more-player-rankings-outlooks\", getPlayerRankings);\r\n\r\n // Expand News Update in Compact Mode\r\n $(document).on(\"click\", \".news-update.is-compact\", expandNewsUpdate);\r\n\r\n // Minimize News Update\r\n $(document).on(\"click\", \".news-update:not(.is-compact).allow-minimize\", minimizeNewsUpdate);\r\n\r\n // Expand player outlook (on player pages)\r\n $(document).on(\"click\", \".p-card__outlook-more:not(.is-not-subscribed)\", expandPlayerOutlook);\r\n\r\n // Check the number of ads displayed to make sure it matches what's in the header\r\n //checkNumAds();\r\n\r\n // Hide ad containers if ads are shut off (via the \"plp\" url parameter)\r\n hideAdContainersIfAdsAreOff();\r\n\r\n // Fix widows in text (for specific selectors)\r\n fixAllWidows();\r\n\r\n /*****************************************************************************/\r\n // FILTER TABS\r\n // A way to filter a set of items using tabs to show only items that match a certain shared condition.\r\n // Example Item Set: List of players. Example set of tabs: Positions (QB, RB, WR, TE, K)\r\n\r\n // Handle a filter tab switch\r\n $(document).on(\"click\", \".filter-tab\", triggerFilterTabSwitch);\r\n\r\n // Handle click on element that controls a filter tab\r\n $(document).on(\"click\", \".switch-to-filter-tab\", triggerFilterTabOpen);\r\n\r\n // If there are filter tab counters in use on the page, update the counters for each tab\r\n $('.filter-tab[data-count=\"Yes\"]').doIfExists(updateFilterTabCounts);\r\n\r\n // If there are filter tab counters in use on the page, watch the items for changes\r\n $('.filter-tab[data-count=\"Yes\"]').doIfExists(watchFilterTabItems);\r\n\r\n // On window resize and page load, figure out the minimum tab width so we can add\r\n // the correct CSS Grid styles\r\n const setFilterTabsGrid = () => {\r\n setMinGridWidth({\r\n containers: \".filter-tabs\",\r\n items: \".filter-tab\",\r\n padding: \"20\",\r\n });\r\n };\r\n setFilterTabsGrid();\r\n doOnWindowResize(setFilterTabsGrid);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // FILTER LINKS\r\n\r\n // Trigger expanding a sub-nav\r\n $(document).on(\"click\", \".filter-link.has-sub-nav\", triggerFilterLinkSubNav);\r\n\r\n // Trigger closing a sub-nav\r\n $(document).on(\"click\", \".more-filter-links\", triggerCloseFilterLinkSubNav);\r\n\r\n // Loop through all the filter link sets on the page and make sure the selected filter is visible\r\n $(\".filter-links-wrapper > .filter-links\").each(revealSelectedFilterLink);\r\n\r\n // Trigger the filter links range editor\r\n $(document).on(\"click\", \".filter-range__edit\", triggerFilterLinksRangeEditor);\r\n\r\n // When the filter range editor select box changes, update the \"Go\" button link\r\n $(document).on(\"change\", \".filter-range__select-box\", updateRangeEditor);\r\n\r\n /*****************************************************************************/\r\n // TOGGLE TABS\r\n\r\n // Handle a toggle tab switch\r\n $(\".toggle-tabs\").on(\"click\", \".toggle-tab\", triggerToggleTabSwitch);\r\n\r\n // Determine the correct toggle tab to be selected at the current screen size\r\n triggerSelectedToggleTab();\r\n\r\n // Determine the correct toggle tab to be selected when the screen is resized\r\n $(window).on(\"resize\", triggerSelectedToggleTabOnResize);\r\n\r\n // Refresh one or all toggle tabs via this custom event (passing in a tab set name is optional)\r\n $(document).on(\"toggleTabs:refresh\", (e, name) => {\r\n triggerSelectedToggleTab(name);\r\n });\r\n\r\n // On window resize and page load, figure out the minimum tab width so we can add\r\n // the correct CSS Grid styles\r\n const setToggleTabsGrid = () => {\r\n setMinGridWidth({\r\n containers: \".toggle-tabs-set.is-many .toggle-tabs\",\r\n items: \".toggle-tab\",\r\n padding: \"10\",\r\n });\r\n };\r\n setToggleTabsGrid();\r\n doOnWindowResize(setToggleTabsGrid);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // STAT BOXES\r\n\r\n // On window resize and page load, figure out the minimum box width so we can add\r\n // the correct CSS Grid styles\r\n const setStatBoxesGrid = () => {\r\n setMinGridWidth({\r\n containers: \".stat-boxes\",\r\n items: \".stat-box\",\r\n padding: \"16\",\r\n });\r\n };\r\n setStatBoxesGrid();\r\n doOnWindowResize(setStatBoxesGrid);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // JUMP BAR\r\n removeMissingJumpBarSectionTabs();\r\n\r\n /*****************************************************************************/\r\n // CUSTOM LISTS\r\n $(document).on(\"click\", \".get-more-custom-list\", triggerGetCustomListContent);\r\n\r\n /******************************************************************************/\r\n\r\n // Run all checkbox filters once the page loads (sets the initial state)\r\n initializeCheckBoxFilters();\r\n\r\n // Handle toggling a checkbox filter\r\n $(document).on(\"click\", \".filter-checkbox\", triggerCheckBoxFilterUpdate);\r\n\r\n // Add automated in-article text ads (if applicable)\r\n //$('.article').each(addInArticleTextAds);\r\n\r\n // Add video ads\r\n insertVideoAds();\r\n\r\n // Add Freestar Sticky Ads\r\n insertFreestarStickyAds();\r\n\r\n // Load data from all AJAX URLs set in the top of the page (this needs to run before loadTableData)\r\n loadAJAXData();\r\n\r\n // Listen for keypresses in the Webix table search boxes (if any exist)\r\n $(document).on(\"keyup\", \".auto-search input\", (e) => {\r\n const $inputBox = $(e.currentTarget);\r\n\r\n // Check for various keyboard actions\r\n const keyPressed = {\r\n esc: e.which === 27,\r\n };\r\n\r\n // Clear the input box if the ESC key is pressed\r\n if (keyPressed.esc) {\r\n $inputBox.val(\"\");\r\n }\r\n });\r\n\r\n // USERLIST USER ACTIVITY EVENT\r\n // This triggers an activity event in Userlist if a specific meta tag exists on the page\r\n sendUserlistActivityEvent();\r\n\r\n // GLOBAL CHARTIST FUNCTIONS\r\n // Making these global so they can be used with inline scripts\r\n window.rwChartist = {};\r\n window.rwChartist.onData = onDataChartist;\r\n window.rwChartist.onDraw = onDrawChartist;\r\n\r\n // This custom event lets anyone know when the core javascript is done loading (useful for tables)\r\n const rwjsEvent = document.createEvent(\"Event\");\r\n rwjsEvent.initEvent(\"rwjs:ready\", true, true);\r\n document.dispatchEvent(rwjsEvent);\r\n\r\n /*****************************************************************************/\r\n // BET CALCULATORS\r\n\r\n $(document).on(\"keyup change\", \".event__bet\", triggerUpdateWinnings);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // SPORTSBOOK CHOOSER\r\n\r\n //$(document).on('click', '.switch-to-book', triggerChooseBook);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // TIME PERIOD CHOOSER\r\n\r\n $(document).on(\"change\", \".time-period-selector\", triggerTimePeriodChange);\r\n\r\n /******************************************************************************/\r\n}\r\n", "/*******************************************************************************\nToggle Custom Checkbox State\nChecks or unchecks a custom checkbox.\n*******************************************************************************/\n\nexport default function toggleCheckbox(e) {\n const $cb = $(e.currentTarget);\n if ($cb.hasClass('checked')) {\n $cb.removeClass('checked').find('input[type=\"checkbox\"]').prop('checked', false).change();\n }\n else {\n $cb.addClass('checked').find('input[type=\"checkbox\"]').prop('checked', true).change();\n }\n}\n", "/*******************************************************************************\nTRIGER CHANGE TO CHECKBOX FILTER\nHandles a click on a checkbox filter.\n*******************************************************************************/\n\nimport updateCheckboxFilter from './update-filter';\n\nexport default function triggerCheckBoxFilterUpdate(e) {\n const checkboxName = $(e.currentTarget).data('name');\n updateCheckboxFilter(checkboxName);\n}\n", "/*******************************************************************************\nCLEAR DATA FILTER\nResets the data filter to its empty state.\n*******************************************************************************/\n\nexport default function clearFilter(itemSelector) {\n const $input = $(`input[data-items=\"${itemSelector}\"]`);\n\n // Clear the input, remove the clear button, and show all the items\n $input.val('').parents('.data-filter').find('.filter-clear').remove();\n $(itemSelector).removeClass('hide-filter');\n $('.filter-empty').remove();\n}\n", "/*******************************************************************************\nTRIGGER CLEAR DATA FILTER\nTriggers clearing the data filter.\n*******************************************************************************/\n\nimport clearFilter from './clear';\n\nexport default function triggerClearDataFilter(e) {\n const itemSelector = $(e.currentTarget).prev('input').data('items');\n clearFilter(itemSelector);\n}\n", "/*******************************************************************************\nCLEAR INPUT BOX\nResets the input box to its empty state.\n*******************************************************************************/\n\nexport default function clearInputBox($input) {\n\n // Clear the input and remove the clear button\n $input.val('').parents('.input-wrapper').find('.input-clear').remove();\n}\n", "/*******************************************************************************\nTRIGGER CLEAR INPUT BOX\nTriggers clearing the input box.\n*******************************************************************************/\n\nimport clearInputBox from './clear';\n\nexport default function triggerClearInputBox(e) {\n const $input = $(e.currentTarget).prev('input');\n clearInputBox($input);\n}\n", "/*******************************************************************************\nTRIGGER A SUB NAVIGATION LIST\nHandles a click on a link with sub-navigation.\n*******************************************************************************/\n\nexport default function triggerCloseSubNav(e) {\n const $moreFiltersButton = $(e.currentTarget);\n const $filterSet = $moreFiltersButton.siblings('.filter-links');\n const $filterWrapper = $filterSet.parents('.filter-links-wrapper');\n const $title = $filterWrapper.siblings('.filter-links-title');\n const level = $('.is-sub-link:not(.hide):first').data('level');\n const inDeepNav = level > 2;\n\n // If we're two levels deep, just go up one level\n if (inDeepNav) {\n const navName = $filterSet.find('.filter-link:not(.hide):first').data('parent');\n const parentName = $filterSet.find(`.is-sub-link[data-name=\"${navName}\"]:first`).data('parent');\n\n // Hide all the sub nav items\n $filterSet.find('.is-sub-link').addClass('hide');\n\n // Show the sub-items for the active filter\n $(`.is-sub-link[data-parent=\"${parentName}\"]`).removeClass('hide');\n\n // Update the secondary title\n $title.find('.filter-links-sub-title').text(parentName);\n\n }\n else {\n // Remove the sub nav class to the wrapper (used for adjusting styles)\n $filterWrapper.addClass('is-showing-sub-nav');\n\n // Remove the \"more filters\" button\n $moreFiltersButton.remove();\n\n // Show all the top level filters\n $filterSet.find('.filter-link').removeClass('hide');\n\n // Hide all the sub nav items\n $filterSet.find('.is-sub-link').addClass('hide');\n\n // Remove the secondary title\n $title.find('.filter-links-sub-title').remove();\n }\n}\n", "/*******************************************************************************\nClose A Modal Window\n*******************************************************************************/\n\nexport default function closeModalWindow() {\n\n $('body').removeClass('hide-overflow');\n $('.modal-background').remove();\n\n}\n", "/*******************************************************************************\nTrigger Closing A Modal Window\n*******************************************************************************/\n\nimport closeModalWindow from './close';\n\nexport default function triggerCloseModalWindow(e) {\n\n // This variable determines whether the modal window should be closed\n let closeModal = false;\n\n // The element that the user clicked on\n const $clickTarget = $(e.target);\n\n // If the user clicked on an element that has one of these classes, then we should close the modal\n const targetsToClose = ['modal-background', 'close-modal'];\n\n // Check the click target against all the classes that should trigger the modal to close\n targetsToClose.forEach((className) => { if ($clickTarget.hasClass(className)) { closeModal = true; } });\n\n // Close the modal window if a class matched\n if (closeModal) { closeModalWindow(); }\n}\n", "/*******************************************************************************\nTRIGGER COMMENT REPLY\nTrigger moving the form after the selected comment\n*******************************************************************************/\n\nexport default async function triggerCommentReply(e) {\n const $replyButton = $(e.currentTarget);\n\n // Get the parent comment, the following comment ad our target form\n const $comment = $replyButton.parents('.article-comment');\n const $nextComment = $comment.nextAll('.article-comment:not(.is-reply):first');\n const $commentList = $comment.parents('.article-comments__list');\n const $form = $('#articleComments');\n\n // Setup the form\n const commentID = $comment.data('id');\n $form.find('textarea').val('');\n $form.find('input[name=\"parentComment\"]').val(commentID);\n\n // Change the button text to a reply message\n const $submitButton = $form.find('.submit-reply-form');\n const buttonHTML = $submitButton.html();\n const buttonText = $submitButton.clone().find('>*').remove().end().html(); // eslint-disable-line newline-per-chained-call\n const newButtonHTML = buttonHTML.replace(buttonText, 'Add Your Reply');\n\n // Set a data attribute with the original button html\n $submitButton.data('origbuttonhtml', buttonHTML);\n\n // Set the button HTML\n $submitButton.safehtml(newButtonHTML);\n\n // Show the cancel button\n const $cancelButton = $form.find('.hide-reply-form');\n $cancelButton.show();\n\n if($nextComment.length){\n $form.detach().insertBefore($nextComment);\n } else {\n $form.detach().appendTo($commentList);\n }\n\n // Make sure the user can see the form\n $('html, body').animate({ scrollTop: $('#articleComments').offset().top }, 300);\n\n}\n", "/*******************************************************************************\nTRIGGER THE FILTER RANGE UI\nHandles a click on the filter range edit button.\n*******************************************************************************/\n\nexport default function openRangeEditor(editorID) {\n const $filterRange = $(`#${editorID}`);\n\n // We get the current width of the filter range so if the editor is more narrow it doesn't jump\n // up to the previous line (in a multiple filter set scenario)\n const rangeWidth = `${$filterRange.outerWidth()}px`;\n\n $filterRange.css('min-width', rangeWidth).addClass('is-open').parents('.filter-links-set');\n}\n", "import openRangeEditor from './open-range-editor';\n\n/*******************************************************************************\nTRIGGER THE FILTER RANGE UI\nHandles a click on the filter range edit button.\n*******************************************************************************/\n\nexport default function triggerRangeEditor(e) {\n const rangeEditorID = $(e.currentTarget).parents('.filter-range').attr('id');\n openRangeEditor(rangeEditorID);\n}\n", "/*******************************************************************************\nTRIGGER A SUB NAVIGATION LIST\nHandles a click on a link with sub-navigation.\n*******************************************************************************/\n\nexport default function triggerSubNav(e) {\n const $activeNav = $(e.currentTarget);\n const activeNavName = $activeNav.data('name');\n const parentName = $activeNav.data('parent');\n const $filterSet = $activeNav.parents('.filter-links');\n const $filterWrapper = $filterSet.parents('.filter-links-wrapper');\n const $title = $filterWrapper.siblings('.filter-links-title');\n const navTitle = (parentName) ? `${parentName}: ${activeNavName}` : `${activeNavName}`;\n const moreButtonText = $filterSet.data('moreButton') || 'More Filters';\n\n // Add the sub nav class to the wrapper (used for adjusting styles)\n $filterWrapper.addClass('is-showing-sub-nav');\n\n // Hide all the top level filters\n $filterSet.find('.filter-link').addClass('hide');\n\n // Show the sub-items for the active filter\n $(`.is-sub-link[data-parent=\"${activeNavName}\"]`).removeClass('hide');\n\n // Add a button that lets you go back to the parent level filters (if it's not already there)\n if ($filterSet.siblings('.more-filter-links').length === 0) {\n $filterSet.before(`${moreButtonText}`);\n }\n\n // Scroll the sub nav filter all the way to the left to start\n $filterSet[0].scrollLeft = 0;\n\n // Remove any existing secondary titles\n $title.find('.filter-links-sub-title').remove();\n\n // Add a secondary title to the filter title that shows which parent filter is active\n $title.html(`${$title.html()}${navTitle}`);\n}\n", "/*******************************************************************************\nMANAGE EMPTY STATE\nFigure out if the empty state should be displayed or not.\n*******************************************************************************/\n\nexport default function manageEmptyState(itemSelector) {\n const numVisibleItems = $(`${itemSelector}:not(.hide-filtertab)`).length;\n const $emptyMessage = $(itemSelector).parent().find('.filter-tab-empty');\n const emptyClass = 'hide-filtertab';\n\n // Hide the empty message if there are any visible items, otherwise show it\n if (numVisibleItems > 0) {\n $emptyMessage.addClass(emptyClass);\n }\n else {\n $emptyMessage.removeClass(emptyClass);\n }\n}\n", "/*******************************************************************************\nFILTER ITEMS\nHandles a click on a tab.\n*******************************************************************************/\n\nimport checkForMatch from './check-for-match';\nimport manageEmptyState from './manage-empty-state';\n\nexport default function filterItems(filterSettings, tabSettings) {\n\n const $items = $(filterSettings.items);\n\n // If the match criteria is '*', then all rows should be shown and we can exit out\n if (tabSettings.dataToMatch === '*') {\n $items.removeClass('hide-filtertab');\n $('.filter-tab-empty').addClass('hide-filtertab');\n return;\n }\n\n // Check to see if there are any tables on the page\n const checkForTable = $('.webix_dtable').length > 0;\n\n // Check each item to see if it matches the filter tab criteria\n $items.each((index, item) => {\n const $item = $(item);\n\n // Check to see if the current item matches the filter\n const filterMatches = checkForMatch($item, filterSettings, tabSettings);\n\n // Filter the items so that only the matching ones are visible\n if (filterMatches) {\n $item.removeClass('hide-filtertab');\n\n // Check to see if the item contains a table.\n // If it does, fire off a custom event letting us know that the table may need to be refreshed\n if (checkForTable) {\n $item.find('.webix_dtable').each((index, tableItem) => {\n const tableID = $(tableItem).attr('id');\n $(document).trigger(`tableNeedsRefresh:${tableID}`);\n });\n }\n }\n else {\n $item.addClass('hide-filtertab');\n }\n });\n\n // Figure out if the empty state should be displayed or not\n manageEmptyState(filterSettings.items);\n}\n", "/*******************************************************************************\nGET FILTER SETTINGS\nGet the settings for the main filter.\n*******************************************************************************/\n\nexport default function getFilterSettings(tabSetName) {\n const $tabs = $(`.filter-tabs[data-name=\"${tabSetName}\"]`);\n\n return {\n // The selector that matches all the items we're filtering on\n items: `${$tabs.data('items')}:not(.filter-tab-empty)`,\n\n // The name of the tab set\n name: tabSetName,\n\n // This optional attribute is used if the content that needs to be searched is something specific inside the item\n // Ex. If an item is a table row, but you only want to filter the results based on the first column's content\n subset: $tabs.data('subset') || '',\n\n // This is a selector that identifies the element whose text gets replaced with a tab's title data attribute value\n // It's mostly useful for changing the title of a section based on which filter tab is selected\n titleTarget: $tabs.data('title-target') || '',\n };\n}\n", "/*******************************************************************************\nGET TAB SETTINGS\nGather all the settings related to a tab.\n*******************************************************************************/\n\nexport default function getTabSettings(tabName) {\n\n const $tab = $(`.filter-tab[data-name=\"${tabName}\"]`);\n\n // The data to match against\n let dataToMatch = $tab.data('match').toString() || '';\n \n // On an individual tab, you can optionally add a secondary filter along with the data to match against\n const secSubset = $tab.data('secondary-subset') || '';\n let secDataToMatch = $tab.data('ss-match') || '';\n\n // By default, both the main filter AND the secondary filter have to match for an item to match\n // If this is set to OR, then it would only have to match one or the other\n const secSubsetOperator = ($tab.data('ss-operator') || 'AND').toUpperCase();\n\n // Check if we want to include matching items or exclude them\n const mainExclude = (dataToMatch.charAt(0) === '!');\n const secExclude = (secDataToMatch.charAt(0) === '!');\n\n // Strip off the ! character at the beginning of the match data (if it exists)\n dataToMatch = (mainExclude) ? dataToMatch.slice(1) : dataToMatch;\n secDataToMatch = (secExclude) ? secDataToMatch.slice(1) : secDataToMatch;\n\n // Convert the match criteria to an array (if it's not already)\n dataToMatch = (dataToMatch.includes(',')) ? dataToMatch.split(',') : [dataToMatch];\n secDataToMatch = (secDataToMatch.includes(',')) ? secDataToMatch.split(',') : [secDataToMatch];\n\n // Trim all the values in the arrays\n dataToMatch = $.map(dataToMatch, $.trim);\n secDataToMatch = $.map(secDataToMatch, $.trim);\n\n // Get the title text associated with the tab.\n // This is used in combination with the \"title-target\" data attribute on the set of tabs.\n const tabTitle = $tab.data('title') || '';\n\n /* The matchType options below control how the filtering works. There are two options:\n --------------------------------------------------------------------------\n 1. exact - [default] The data has to exactly match the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would NOT match\n 2. contains - If this option is used, the data just needs to be somewhere in the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would match\n ----------------------------------------------------------------------------*/\n const matchType = $tab.data('match-type') || 'exact';\n const secMatchType = $tab.data('ss-match-type') || 'exact';\n\n return {\n dataToMatch, // The data that the main filter should try to match against\n mainExclude, // Should the main filter match using the !== operator?\n matchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n secSubset, // A secondary filter (in the form of a selector) just for this tab\n secDataToMatch, // The data that the secondary filter should try to match against\n secExclude, // Should the secondary filter match using the !== operator?\n secSubsetOperator, // [AND/OR] Do the main AND secondary filters have to match or just one OR the other?\n secMatchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n tabTitle, // The title text that appears when this tab is selected.\n };\n}\n", "/*******************************************************************************\nSWITCH TO TAB\nSwitch the active filter tab.\n*******************************************************************************/\n\nimport filterItems from './filter-items';\nimport getFilterSettings from './get-filter-settings';\nimport getTabSettings from './get-tab-settings';\nimport setMinGridWidth from '../css-grid/set-min-grid-width';\n\nexport default function switchTab(tabSetName, tabName) {\n\n // Find the set of tabs to use\n const $tabs = $(`.filter-tabs[data-name=\"${tabSetName}\"]`);\n\n // Find the tab that was clicked on\n const $tabToSelect = $tabs.find(`.filter-tab[data-name=\"${tabName}\"]`);\n\n // Add the selected class to the tab and remove it everywhere else\n $tabToSelect.addClass('is-selected').siblings('.filter-tab').removeClass('is-selected');\n\n // Get the settings for the filter\n const filterSettings = getFilterSettings(tabSetName);\n\n // Get all the settings for this specific tab\n const tabSettings = getTabSettings(tabName);\n\n // Show only the items that match the active filter\n filterItems(filterSettings, tabSettings);\n\n // If the option is in use, dynamically change the title of the section based on the tab that was clicked on\n if (filterSettings.titleTarget) {\n $(filterSettings.titleTarget).safehtml($tabToSelect.data('title'));\n }\n\n // If there are hidden filter tabs sets, we need to run this so they display correctly when made visible\n if ($('.filter-tabs:hidden').length > 0) {\n setMinGridWidth({ containers: '.filter-tabs', items: '.filter-tab', padding: '20' });\n }\n\n // Trigger a custom event that signals the tab is loaded\n $(document).trigger(`filterTabLoaded:${tabSetName}-${tabName}`, [tabSettings]);\n}\n", "/*******************************************************************************\nTRIGGER TAB OPEN\nHandles a click on any element and switches to the desired filter tab.\n*******************************************************************************/\n\nimport switchTab from './switch-tab';\n\nexport default function triggerTabOpen(e) {\n\n // Get the name of the element that was clicked on and switch to it\n const $element = $(e.currentTarget);\n const tabName = $element.data('name');\n const tabSetName = $element.data('set');\n\n switchTab(tabSetName, tabName);\n}\n", "/*******************************************************************************\nTRIGGER TAB SWITCH\nHandles a click on a tab.\n*******************************************************************************/\n\nimport switchTab from './switch-tab';\n\nexport default function triggerTabSwitch(e) {\n\n // Get the name of the tab that was clicked on and switch to it\n const $tab = $(e.currentTarget);\n const tabName = $tab.data('name');\n const tabSetName = $tab.parents('.filter-tabs').data('name');\n\n switchTab(tabSetName, tabName);\n}\n", "/*******************************************************************************\nGET ARTICLES\nReturns a set of articles.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\n\nexport default async function getArticles(settings) {\n try {\n\n // Optional Settings\n const options = {};\n if (settings.content) { options.content = settings.content; }\n if (settings.sport) { options.sport = settings.sport; }\n if (settings.column) { options.column = settings.column; }\n if (settings.author) { options.author = settings.author; }\n if (settings.noColumnInHeadline) { options.noColumnInHeadline = settings.noColumnInHeadline; }\n if (settings.lastArticleDate) { options.lastArticleDate = settings.lastArticleDate; }\n if (settings.numArticles) { options.numArticles = settings.numArticles; }\n if (settings.exclude) { options.exclude = settings.exclude; }\n\n const response = await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/get-articles.php',\n data : options,\n timeout: 8000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n articles : response.articles,\n articlesHTML : response.articlesHTML,\n newLastArticleDate: response.lastArticleDate,\n noMoreArticles : response.noMoreArticles,\n };\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to retrieve articles for you. Please try again.', 3000);\n }\n}\n", "/*******************************************************************************\nTRIGGER GET MORE TEAM NEWS\nTrigger appending more team news updates to the page.\n*******************************************************************************/\n\nimport getArticles from './get-articles';\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\nimport activateCloudinaryImages from '../../universal/cloudinary/activate';\n\nexport default async function triggerGetArticles(e) {\n const $showMoreButton = $(e.currentTarget);\n\n // Options on Show More button\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\n const content = $showMoreButton.data('content') || '';\n const column = $showMoreButton.data('column') || '';\n const author = $showMoreButton.data('author') || '';\n const noColumnInHeadline = $showMoreButton.data('no-column-in-headline') || '';\n const lastArticleDate = $showMoreButton.data('last-article-date') || '';\n const numArticles = $showMoreButton.data('num-articles') || '';\n\n // Add the options that were set on the button\n const settings = {};\n if (sport) { settings.sport = sport; }\n if (content) { settings.content = content; }\n if (column) { settings.column = column; }\n if (author) { settings.author = author; }\n if (noColumnInHeadline) { settings.noColumnInHeadline = noColumnInHeadline; }\n if (lastArticleDate) { settings.lastArticleDate = lastArticleDate; }\n if (numArticles) { settings.numArticles = numArticles; }\n\n try {\n // Find the articles that match the last article date on the page\n // We're going to send a list of these IDs to getArticles() so we don't get back duplicates\n // We have to do this because articles don't have real timestamps (just dates) and IDs don't necessarily correspond to publish time :-(\n settings.exclude = [];\n $(`.content-preview[data-article-date=\"${lastArticleDate}\"]`).each((i, a) => {\n settings.exclude.push($(a).data('articleid'));\n });\n\n // Get the set of articles\n // If any of the values below are undefined, the rest of this try block won't run\n const { articlesHTML, newLastArticleDate, noMoreArticles } = await getArticles(settings);\n\n // Update the button's \"lastarticledate\" data attribute\n $showMoreButton.data('last-article-date', newLastArticleDate);\n\n // Add the articles to the page\n $showMoreButton.prevAll('.article-list').append(articlesHTML);\n\n // load the images\n activateCloudinaryImages();\n\n // Check if a hidden content type filter (DFS/Traditional) should be made visible\n const sportInName = sport ? `-${sport.toUpperCase()}` : '';\n const $hiddenContentFilter = $(`.toggle-tabs-set[data-name=\"article-type-${sportInName}\"].hide`);\n if ($hiddenContentFilter.length) {\n const numDFS = $('.article-preview.is-dfs').length;\n const numTraditional = $('.article-preview.is-traditional').length;\n if (numDFS > 0 && numTraditional > 0) { $hiddenContentFilter.removeClass('hide'); }\n }\n\n // If there were no articles returned, hide the show more button (since there is no more)\n if (noMoreArticles) { $showMoreButton.remove(); }\n }\n catch (err) {\n // Error message already triggered in get-articles.js\n }\n\n // Reset the button to its original state\n removeButtonProcessingState($showMoreButton);\n}\n", "/*******************************************************************************\nTRIGGER GET CUSTOM LIST CONTENT\nTrigger appending more custom list content to the page.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\n\nexport default async function getCustomListContent(listID, listType, lastContent, excludedContentIDs, style) {\n try {\n const response = await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/get-custom-list-content.php',\n data : { listID, listType, lastContent, excludedContentIDs, style },\n timeout: 20000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n contentHTML : response.contentHTML,\n newLastContent : response.newLastContent,\n haveMoreContent: response.haveMoreContent,\n };\n }\n catch (error) {\n showErrorNotificationBar('We were unable to retrieve more content for you. Please try again.', 3000);\n }\n}\n", "import getCustomListContent from './get-content';\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\nimport activateCloudinaryImages from '../../universal/cloudinary/activate';\n\n/*******************************************************************************\nTRIGGER GET CUSTOM LIST CONTENT\nTrigger appending more custom list content to the page.\n*******************************************************************************/\n\nexport default async function triggerGetCustomListContent(e) {\n const $button = $(e.currentTarget);\n const listID = $button.data('list');\n const lastContent = $button.data('last');\n const listType = $button.data('type');\n const style = $button.data('style');\n let excludedContentIDs = [];\n if (listType === 'auto') {\n excludedContentIDs = $button.parents('.custom-list').find(`.custom-list__item[data-last=\"${lastContent}\"]`).map((i, el) => $(el).data('item')).get();\n }\n\n const { contentHTML, newLastContent, haveMoreContent } = await getCustomListContent(listID, listType, lastContent, excludedContentIDs, style);\n\n // Add the articles to the page\n const $articleList = $button.prevAll('.article-list');\n\n if ($articleList.length > 0) {\n $articleList.append(contentHTML);\n }\n else {\n $button.before(contentHTML);\n }\n\n\n // Load the images\n activateCloudinaryImages();\n\n if (haveMoreContent) {\n // Update the button's \"last\" data attribute\n $button.data('last', newLastContent);\n\n // Reset the button to its original state\n removeButtonProcessingState($button);\n }\n else {\n $button.after('There are no more articles to display.').remove();\n }\n}\n", "/* eslint-disable */\nclass Store {\n constructor(dbName = 'keyval-store', storeName = 'keyval') {\n this.storeName = storeName;\n this._dbp = new Promise((resolve, reject) => {\n const openreq = indexedDB.open(dbName, 1);\n openreq.onerror = () => reject(openreq.error);\n openreq.onsuccess = () => resolve(openreq.result);\n // First time setup: create an empty object store\n openreq.onupgradeneeded = () => {\n openreq.result.createObjectStore(storeName);\n };\n });\n }\n _withIDBStore(type, callback) {\n return this._dbp.then(db => new Promise((resolve, reject) => {\n const transaction = db.transaction(this.storeName, type);\n transaction.oncomplete = () => resolve();\n transaction.onabort = transaction.onerror = () => reject(transaction.error);\n callback(transaction.objectStore(this.storeName));\n }));\n }\n}\nlet store;\nfunction getDefaultStore() {\n if (!store)\n store = new Store();\n return store;\n}\nfunction get(key, store = getDefaultStore()) {\n let req;\n return store._withIDBStore('readonly', store => {\n req = store.get(key);\n }).then(() => req.result);\n}\nfunction set(key, value, store = getDefaultStore()) {\n return store._withIDBStore('readwrite', store => {\n store.put(value, key);\n });\n}\nfunction del(key, store = getDefaultStore()) {\n return store._withIDBStore('readwrite', store => {\n store.delete(key);\n });\n}\nfunction clear(store = getDefaultStore()) {\n return store._withIDBStore('readwrite', store => {\n store.clear();\n });\n}\nfunction keys(store = getDefaultStore()) {\n const keys = [];\n return store._withIDBStore('readonly', store => {\n // This would be store.getAllKeys(), but it isn't supported by Edge or Safari.\n // And openKeyCursor isn't supported by Safari.\n (store.openKeyCursor || store.openCursor).call(store).onsuccess = function () {\n if (!this.result)\n return;\n keys.push(this.result.key);\n this.result.continue();\n };\n }).then(() => keys);\n}\n\nexport { Store, get, set, del, clear, keys };\n", "/*******************************************************************************\nRETURN THE BREAKPOINT DATA\nPairs with /frontend/sass/misc/_breakpoint-detect.scss\nSee here for why this is needed: https://www.fourfront.us/blog/jquery-window-width-and-media-queries\nAnd this for the implementation: https://www.lullabot.com/articles/importing-css-breakpoints-into-javascript\n*******************************************************************************/\n\nexport default function getBreakpointData() {\n const breakpointData = window.getComputedStyle(document.querySelector('.logo-bar'), ':before').getPropertyValue('content').replace(/['\"]+/g, '').split('|', 2);\n\n const breakpointOrder = (breakpointData[1] || '').split(',');\n breakpointOrder.unshift('xxs');\n\n const currentBreakpoint = breakpointData[0] || '';\n const currentIndex = breakpointOrder.findIndex(bp => bp === currentBreakpoint);\n\n return {\n current: currentBreakpoint,\n currentIndex,\n order : breakpointOrder,\n };\n}\n", "/*******************************************************************************\nTRIGGER THE SELECTED TAB\nActivates the tab that is designated as the selected one for the current screen size.\n*******************************************************************************/\n\n// https://www.npmjs.com/package/idb-keyval\nimport { Store, get } from '../../../lib/_idb-keyval/idb-keyval';\n\nimport getBreakpointData from '../breakpoints/get-data';\nimport switchTab from './switch-tab';\n\nasync function getTabThatShouldBeSelected(tabSetName) {\n\n // Check for saved preference in IndexDB first\n const rwStore = new Store('rotowire', 'toggletabs');\n const savedSelectedTab = await get(tabSetName, rwStore).then(val => val);\n if (savedSelectedTab) { return savedSelectedTab; }\n\n // Get the breakpoint data\n const { order: breakpoints, currentIndex: currentBPindex } = getBreakpointData();\n\n // Get the data attributes and filter them down to just the breakpoint-related values\n const $tabSet = $(`.toggle-tabs[data-name=\"${tabSetName}\"]`);\n const tabSetDataAttr = $tabSet.data() || {};\n const bpSelections = Object.keys(tabSetDataAttr)\n .filter(key => key.includes('sel') && !key.includes('Exists'))\n .reduce((obj, key) => {\n const newKey = key.replace('sel', '', key).toLowerCase();\n obj[newKey] = tabSetDataAttr[key];\n return obj;\n }, {});\n\n // Find all the breakpoints at or below the current one (order from largest screen to smallest)\n const relevantBreakpoints = breakpoints.filter((bp, index) => index <= currentBPindex).reverse();\n\n // Filter that list down to only breakpoints that have selected tab values (it's possible there are none)\n const bpWithSelectedTabs = relevantBreakpoints.filter(bp => bpSelections.hasOwnProperty(bp));\n\n // Find the correct selected tab for this breakpoint by using the largest matching breakpoint value\n // If no matching breakpoint was found, then default to the xxs value (which is always there)\n return (bpWithSelectedTabs.length > 0) ? bpSelections[bpWithSelectedTabs[0]] : bpSelections.xxs;\n}\n\n// Figure out the correct selected tab and activate it\nasync function setSelectedTab(tabSetName) {\n const selectedTab = await getTabThatShouldBeSelected(tabSetName);\n switchTab(tabSetName, selectedTab);\n}\n\nexport default function triggerSelectedTab(tabSetName) {\n\n // If we have a specific tab set, activate its selected tab\n if (tabSetName) { return setSelectedTab(tabSetName); }\n\n // If we don't have a specific tab set, then we know we need to loop through all of them\n $('.toggle-tabs').filter(':visible').each(function loopAllSets() { setSelectedTab($(this).data('name')); });\n\n $('.toggle-tabs').each(function() { \n if ($(this).data(\"alwaysop\") == 1) {\n setSelectedTab($(this).data('name')); \n }\n });\n}\n", "/*******************************************************************************\nTRIGGER THE SELECTED TAB ON WINDOW RESIZE\nActivates the tab that is designated as the selected one for the current screen size.\n*******************************************************************************/\n\nimport triggerSelectedTab from './trigger-selected-tab';\n\nconst resizeTimer = {};\n\nexport default function triggerSelectedTabOnResize() {\n\n // Loop through all the toggle tab sets that have responsive breakpoints on them\n $('.toggle-tabs[data-sel-bp-exists]').each(function loopToggleTabSets() {\n const $tabs = $(this);\n const tabSetName = $tabs.data('name');\n\n clearTimeout(resizeTimer[tabSetName]);\n resizeTimer[tabSetName] = setTimeout(() => { triggerSelectedTab(tabSetName); }, 250);\n });\n}\n", "/*******************************************************************************\r\nCHANGE TIME PERIOD\r\nNavigates to the desired URL.\r\n*******************************************************************************/\r\n\r\nexport default function changeTimePeriod(url) {\r\n if (url) {\r\n window.location.href = url;\r\n }\r\n}\r\n", "/*******************************************************************************\r\nTRIGGER TIME PERIOD CHANGE\r\nTriggers the time period to change.\r\n*******************************************************************************/\r\nimport changeTimePeriod from './change-time-period';\r\n\r\nexport default function triggerTimePeriodChange(e) {\r\n\r\n const $selectedOption = $(e.currentTarget);\r\n const urlToActivate = $selectedOption.find(':selected').data('url');\r\n\r\n changeTimePeriod(urlToActivate);\r\n}\r\n", "/*******************************************************************************\nTRIGGER TAB SWITCH\nHandles a click on a tab.\n*******************************************************************************/\n\n// https://www.npmjs.com/package/idb-keyval\nimport { Store, set } from '../../../lib/_idb-keyval/idb-keyval';\n\nimport switchTab from './switch-tab';\n\nexport default function triggerTabSwitch(e) {\n\n // Get the name of the tab that was clicked on and switch to it\n const $tab = $(e.currentTarget);\n const tabName = $tab.data('name');\n const tabSetName = $tab.parents('.toggle-tabs').data('name');\n\n // Save the selected tab to the browser's indexDB storage\n const rwStore = new Store('rotowire', 'toggletabs');\n set(tabSetName, tabName, rwStore).catch((err) => {\n console.log(`IDB KeyVal Error: ${err}`); // eslint-disable-line\n });\n\n switchTab(tabSetName, tabName);\n}\n", "/*******************************************************************************\r\nUpdates the winnings amounts displayed on a betting event card.\r\n*******************************************************************************/\r\n\r\nexport default function updateWinnings(eventID, centsBet, multipliers) {\r\n\r\n // Map the elements to update to their multiplier value\r\n const multipliersMap = {\r\n '.ml-home' : multipliers.ml.home,\r\n '.ml-away' : multipliers.ml.away,\r\n '.spread-home': multipliers.spread.home,\r\n '.spread-away': multipliers.spread.away,\r\n '.ou-over' : multipliers.ou.over,\r\n '.ou-under' : multipliers.ou.under,\r\n '.distance-yes' : multipliers.distance.yes,\r\n '.distance-no' : multipliers.distance.no,\r\n '.decision-fighter1' : multipliers.decision.fighter1,\r\n '.decision-fighter2' : multipliers.decision.fighter2,\r\n '.knockout-fighter1' : multipliers.knockout.fighter1,\r\n '.knockout-fighter2' : multipliers.knockout.fighter2,\r\n '.submission-fighter1' : multipliers.submission.fighter1,\r\n '.submission-fighter2' : multipliers.submission.fighter2,\r\n };\r\n\r\n const elementsToUpdate = Object.keys(multipliersMap);\r\n elementsToUpdate.forEach((el) => {\r\n const newWinnings = Number((centsBet * multipliersMap[el]) / 100).toFixed(2).toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,');\r\n const dollars = newWinnings.split('.')[0] || 0;\r\n const cents = newWinnings.split('.')[1] || 0;\r\n\r\n // Update the element with the new winnings value\r\n $(`.event[data-id=\"${eventID}\"]`).find(el)\r\n .safehtml(`$${dollars}.${cents}`);\r\n });\r\n}\r\n", "/*******************************************************************************\r\nTriggers an update to the winnings amounts displayed on a betting event card.\r\n*******************************************************************************/\r\n\r\nimport updateWinnings from './update-winnings';\r\n\r\nexport default function triggerUpdateWinnings(e) {\r\n const $input = $(e.currentTarget);\r\n const eventID = Number($input.parents('.event').data('id')) || '';\r\n\r\n // We're converting to cents to potentially limit issues with JS and decimal values\r\n const centsBet = Math.round(Math.max(Number($input.val().replace(/[^0-9.]/g, '')) * 100, 0));\r\n\r\n // Get the multiplier values from the input data attributes\r\n const {\r\n mlHome, mlAway, spreadHome, spreadAway, ouOver, ouUnder, distanceYes, distanceNo, decisionFighter1, decisionFighter2, knockoutFighter1, knockoutFighter2, submissionFighter1, submissionFighter2\r\n } = $input.data();\r\n\r\n // Bundle all the multipliers into an object\r\n const multipliers = {\r\n ml : { home: mlHome, away: mlAway },\r\n spread: { home: spreadHome, away: spreadAway },\r\n ou : { over: ouOver, under: ouUnder },\r\n distance : { yes: distanceYes, no: distanceNo },\r\n decision : { fighter1: decisionFighter1, fighter2: decisionFighter2 },\r\n knockout : { fighter1: knockoutFighter1, fighter2: knockoutFighter2 },\r\n submission : { fighter1: submissionFighter1, fighter2: submissionFighter2 },\r\n };\r\n\r\n // Update the winnings on screen\r\n updateWinnings(eventID, centsBet, multipliers);\r\n}\r\n", "/*******************************************************************************\nTRIGGER CUSTOM WINDOW RESIZED LISTENER\nTriggers a custom event to let any function know when the window has been resized.\n*******************************************************************************/\n\nlet resizeTimer;\n\nexport default function triggerWindowResizedListener() {\n $(window).on('resize', () => {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(() => { $(window).trigger('rw:window-resized'); }, 250);\n });\n}\n", "/*******************************************************************************\nGET ALL TABS\nGet the tab element, name and counter setting for every tab within a specific set of tabs.\n*******************************************************************************/\n\nexport default function getAllTabs(tabSetName) {\n const $tabs = $(`.filter-tabs[data-name=\"${tabSetName}\"]`);\n\n const tabs = [];\n $tabs.find('.filter-tab').each((index, tab) => {\n const $tab = $(tab);\n tabs.push({\n $element : $tab, // The tab element as a jQuery selector\n name : $tab.data('name'), // The name of the tab filter\n showCount: ($tab.data('count') === 'Yes'), // [true/false] Should we show a count of matching items?\n });\n });\n\n return tabs;\n}\n", "/*******************************************************************************\nUPDATE FILTER COUNTS\nCount the number of items that each filter tab matches (if that feature is turned on).\n*******************************************************************************/\n\nimport checkForMatch from './check-for-match';\nimport getAllTabs from './get-all-tabs';\nimport getFilterSettings from './get-filter-settings';\nimport getTabSettings from './get-tab-settings';\n\nexport default function updateFilterCounts() {\n const $tabSets = $('.filter-tabs');\n\n // If there are no tabs on screen, exit out\n if ($tabSets.length === 0) { return; }\n\n // Loop through all the sets of tabs\n $tabSets.each((index, tabSet) => {\n const $tabs = $(tabSet);\n const tabSetName = $tabs.data('name') || '';\n\n // Get an array of tab objects to loop through\n const allTabs = getAllTabs(tabSetName);\n\n // Get the settings for the filter\n const filterSettings = getFilterSettings(tabSetName);\n\n // Get the all items to filter on\n const $items = $(filterSettings.items);\n\n // Loop through all the tabs\n $.each(allTabs, (tabIndex, tab) => {\n\n // If the counter feature is turned on\n if (tab.showCount) {\n let counter = 0;\n\n // Gather all the settings related to the current filter\n const tabSettings = getTabSettings(tab.name);\n\n // Check each item to see if it matches the filter tab criteria\n $items.each((i, item) => {\n const $item = $(item);\n\n // Check to see if the current item matches the filter\n const filterMatches = checkForMatch($item, filterSettings, tabSettings);\n\n // Increment the match counter\n if (filterMatches) { counter += 1; }\n });\n\n // Get the counter element (which may not exist) for current tab element\n const $tabCounter = tab.$element.find('.filter-tab-count');\n\n // If the counter element is already there, then update the counter\n if ($tabCounter.length) {\n $tabCounter.text(counter);\n }\n // Otherwise add the counter to the page\n else {\n tab.$element.append(`${counter}`);\n }\n }\n });\n });\n\n}\n", "/*******************************************************************************\r\nTRIGGER THE FILTER RANGE UI\r\nHandles a click on the filter range edit button.\r\n*******************************************************************************/\r\n\r\nexport default function updateRangeEditor(e) {\r\n const $filterRangeEditor = $(e.currentTarget).parents('.filter-range__editor');\r\n const $startSelBox = $filterRangeEditor.find('.is-start');\r\n const $endSelBox = $filterRangeEditor.find('.is-end');\r\n const $button = $filterRangeEditor.find('.filter-range__go');\r\n\r\n // Get the current URL's params\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n // Grab the selected start and end values\r\n const start = $startSelBox.val();\r\n const end = $endSelBox.val();\r\n\r\n // Get the URL param names to use\r\n const startName = $startSelBox.data('name') || 'start';\r\n const endName = $endSelBox.data('name') || 'end';\r\n\r\n // Find the defaults + single unit label\r\n const defaultStart = $filterRangeEditor.data('defaultStart') || '';\r\n const defaultEnd = $filterRangeEditor.data('defaultEnd') || '';\r\n const singleName = $filterRangeEditor.data('single') || null;\r\n\r\n // Update the start/end values in the URL parameters array\r\n if (singleName && start === end) {\r\n params.set(singleName, start);\r\n params.delete(startName);\r\n params.delete(endName);\r\n }\r\n else {\r\n params.set(startName, start);\r\n params.set(endName, end);\r\n }\r\n\r\n // If the default values match the start or end, omit their respective URL params\r\n if (Number(defaultStart) === Number(start)) { params.delete(startName); }\r\n if (Number(defaultEnd) === Number(end)) { params.delete(endName); }\r\n\r\n // Sort the params so they're in alphabetical order (for URL consistency)\r\n params.sort();\r\n\r\n // Build the updated link\r\n const paramsLength = Array.from(params).length;\r\n const qMark = (paramsLength !== 0) ? '?' : '';\r\n const updatedLink = `${window.location.pathname}${qMark}${params}`;\r\n\r\n // Update the \"go\" button link\r\n $button.attr('href', updatedLink);\r\n}\r\n", "/*******************************************************************************\nWATCH DATA FILTER INPUT\nWatch for keystrokes inside the data filter text input box.\n*******************************************************************************/\n\nimport clearFilter from './clear';\n\nexport default function watchItemFilterInput(e) {\n const $filterInput = $(e.currentTarget);\n const searchTerm = $filterInput.val();\n const $filterWrapper = $filterInput.parents('.filter');\n\n // The CSS selector that determines what an \"item\" is\n const itemSelector = $filterInput.data('items');\n const $items = $(itemSelector);\n\n // This optional attribute is used if the content that needs to be searched is something specific inside the item\n // Ex. If you want to filter table rows, but you only want to filter the results based on the first column's content\n const subset = $filterInput.data('subset') || '';\n\n // This is the name that's used in the \"No [items name] found\" empty state message. Defaults to \"matches\".\n const itemsName = $filterInput.data('item') || 'matches';\n\n // Build the clear button\n const $clearButton = $('', { class: 'filter-clear' }).text('Clear');\n\n // Build the \"no matches found\" indicator\n const $noMatchesIndicator = $('', { class: 'filter-empty' }).text(`No ${itemsName} found.`);\n\n // Remove the previous \"no matches found\" indicator (if applicable)\n $('.filter-empty').remove();\n\n // Add the clear button if it doesn't exist\n $filterWrapper.find('.filter-clear').doIfNotExists(() => { $filterWrapper.append($clearButton); });\n\n // If the input is empty (or the ESC key is pressed, then get rid of the clear button and show everything\n if (!searchTerm || e.which === 27) {\n $filterInput.val('');\n $filterWrapper.find('.filter-clear').remove();\n $items.removeClass('hide-filter');\n return;\n }\n\n // If the search string does not match part of the search term, hide the item. Otherwise show it.\n $items.each(function filterItems() {\n const $item = $(this);\n\n // If there's an optional subset, use that when the searching the item\n const $itemToSearch = (subset) ? $item.find(subset).text() : $item.text();\n\n // Filter the items\n if ($itemToSearch.search(new RegExp(searchTerm, 'i')) < 0) {\n $item.addClass('hide-filter');\n }\n else {\n $item.removeClass('hide-filter');\n }\n });\n\n // If there no matching items, display the message explaining that\n if ($(`${itemSelector}:not(.hide-filter)`).length === 0) {\n $filterWrapper.after($noMatchesIndicator);\n\n // Adjust the left padding to fit the input position\n const noMatchesLeftPad = parseInt($filterWrapper.css('padding-left'), 10) + parseInt($noMatchesIndicator.css('padding-left'), 10);\n $noMatchesIndicator.css('padding-left', `${noMatchesLeftPad}px`);\n }\n\n // If you press enter when there's only one item displaying (and it's a link), then go to the link\n // Or if there's a button, trigger a click on it (and also clear the filter)\n if (e.which === 13) {\n if ($(itemSelector).not('.hide-filter').find('a').length === 1) {\n window.location.href = $(`${itemSelector}:visible`).find('a').attr('href');\n return;\n }\n if ($(itemSelector).not('.hide-filter').find('button:visible').length === 1) {\n $(`${itemSelector}:visible`).find('button').trigger('click');\n clearFilter(itemSelector);\n }\n }\n}\n", "/*******************************************************************************\nWATCH ITEMS\nWatch the items being filtered and react to any input changes.\n*******************************************************************************/\n\nimport getFilterSettings from './get-filter-settings';\nimport updateFilterCounts from './update-filter-counts';\n\nexport default function watchItems() {\n const { items } = getFilterSettings();\n\n // Set up an event handler to update the tab counts whenever a change is made to an input within an item\n $(items).on('change', ':input', () => { updateFilterCounts(); });\n}\n", "/*******************************************************************************\nWATCH INPUT BOX THAT USES CLEAR BUTTON\nWatch for keystrokes inside the input box.\n*******************************************************************************/\n\nimport clearInputBox from './clear';\n\nexport default function watchInputWithClearButton(e) {\n const $input = $(e.currentTarget);\n const $inputWrapper = $input.parents('.input-wrapper');\n const customClearClass = $inputWrapper.data('clear-class');\n\n // Build the clear button\n const $clearButton = $('', { class: `input-clear ${customClearClass}` }).text('Clear');\n\n // Add the clear button if it doesn't exist\n $inputWrapper.find('.input-clear').doIfNotExists(() => { $inputWrapper.append($clearButton); });\n\n // If the input is empty (or the ESC key is pressed, then get rid of the clear button\n if (!$input.val() || e.which === 27) { clearInputBox($input); }\n}\n", "/*******************************************************************************\nBUILD A MODAL WINDOW SHELL\nThis is essentially an empty shell to put content inside.\n*******************************************************************************/\n\nexport default function buildModalWindowShell(options) {\n\n // All the different options that can be passed in\n const title = options.title || '';\n const content = options.content || 'This modal window needs some content';\n const isWide = (options.wide === undefined) ? false : options.wide;\n const isFull = (options.fullWidth === undefined) ? false : options.fullWidth;\n //const modalType = options.modalType || 'basic';\n const includeBackground = (options.includeBackground === undefined) ? true : options.includeBackground;\n const includeHeader = (options.includeHeader === undefined) ? true : options.includeHeader;\n\n // Default modal classes (for basic modal)\n const modalClasses = {\n main : 'modal',\n head : 'modal__head',\n close: 'modal__close',\n };\n\n const modalHeader = (!includeHeader) ? '' : `\n \n ${title}\n ×\n `;\n\n const modalHTML = `\n \n ${modalHeader}\n ${content}\n `;\n\n return (includeBackground) ? `${modalHTML}` : modalHTML;\n}\n", "/*******************************************************\nOPEN TEAM VS POSITION MODAL\nUsed on the team vs. position page for NFL.\n********************************************************/\n\nimport buildModal from '../../universal/modal-window/build-modal';\n\nexport default function openTeamVsPosModal(event) {\n const $button = $(event.currentTarget);\n const { pos, team, scoringtype, year } = $button.data();\n const teamNameParts = ($button.siblings('a').text() || '').split(' ');\n const teamName = teamNameParts[teamNameParts.length - 1];\n\n // Set the table loading message\n const loadingMessage = `Loading ${teamName} vs. ${pos} Stats`;\n\n // Build the title\n const modalTitle = `\n \n ${teamName}Vs. ${pos}\n `;\n\n // Build the content of the modal\n const modalContent = `\n \n ${loadingMessage}\n `;\n\n // Get the modal window HTML\n const modalHTML = buildModal({\n fullWidth: true,\n title : modalTitle,\n content : modalContent,\n });\n\n // Append the modal window to the page\n $('.page').append(modalHTML);\n\n if (pos === 'QB') {\n\n loadTableRW({\n container : `tvp-table${team}`,\n url : `/football/tables/defense-vs-pos-gl.php?pos=QB&team=${team}&scoringtype=${scoringtype}&year=${year}`,\n emptyMessage: 'There were no stats found.',\n leftSplit : 2,\n css : 'no-border',\n columns : [\n { id : 'team',\n header : [{ text: '', css: 'columns-head is-dark', colspan: 2 }, { text: 'Name', css: 'align-l' }],\n css : 'align-l',\n sort : 'text-string',\n template: '#team#',\n },\n { id : 'week',\n header: ['', { text: 'Week' }],\n sort : 'number',\n },\n\n { id : 'points', startOfGroup: true,\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'passComp', startOfGroup: true,\n header: [{ text: 'Passing', css: 'columns-head is-dark', colspan: 6 }, { text: 'COMP' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passAtt',\n header: ['', { text: 'ATT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passInt',\n header: ['', { text: 'INT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypa',\n header: ['', { text: 'YPA' }],\n css: 'align-r', \n sort: 'number',\n },\n { id : 'rushAtt', startOfGroup: true,\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 4 }, { text: 'ATT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypc',\n header: ['', { text: 'YPC' }],\n css: 'align-r', \n sort: 'number',\n },\n ],\n\n });\n }\n else if (pos === 'RB' || pos === 'WR' || pos === 'TE') {\n\n loadTableRW({\n container : `tvp-table${team}`,\n url : `/football/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\n emptyMessage: 'There were no stats found.',\n leftSplit : 2,\n columns : [\n\n { id : 'team',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 2 }, { text: 'Name', css: 'align-l' }],\n css : 'align-l',\n sort : 'text-string',\n },\n { id : 'week',\n header: ['', { text: 'Week' }],\n sort : 'number',\n },\n\n { id : 'points', startOfGroup: true,\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'rushAtt', startOfGroup: true,\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 4 }, { text: 'ATT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypc',\n header: ['', { text: 'YPC' }],\n css: 'align-r', \n sort: 'number',\n },\n\n { id : 'receptions', startOfGroup: true,\n header: [{ text: 'Receiving', css: 'columns-head is-dark', colspan: 5 }, { text: 'REC' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'recYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'recTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'targets',\n header: ['', { text: 'TAR' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypt',\n header: ['', { text: 'YPT' }],\n css: 'align-r', \n sort: 'number',\n },\n\n ],\n });\n\n }\n else if (pos === 'K') {\n\n loadTableRW({\n container : `tvp-table${team}`,\n url : `/football/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\n emptyMessage: 'There were no stats found.',\n leftSplit : 2,\n columns : [\n\n { id : 'team',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 2 }, { text: 'Name', css: 'align-l' }],\n css : 'align-l',\n sort : 'text-string',\n },\n { id : 'week',\n header: ['', { text: 'Week' }],\n sort : 'number',\n },\n\n { id : 'points', startOfGroup: true,\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'xpm', startOfGroup: true,\n header: [{ text: 'Extra Points', css: 'columns-head is-dark', colspan: 2 }, { text: 'XPM' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'xpa',\n header: ['', { text: 'XPA' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'fgm', startOfGroup: true,\n header: [{ text: 'Field Goals', css: 'columns-head is-dark', colspan: 2 }, { text: 'FGM' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fga',\n header: ['', { text: 'FGA' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'fgm29', startOfGroup: true,\n header: [{ text: 'Field Goal Distance', css: 'columns-head is-dark', colspan: 4 }, { text: '0-29' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fgm39',\n header: ['', { text: '30-39' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fgm49',\n header: ['', { text: '40-49' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fgm50',\n header: ['', { text: '50+' }],\n css : 'align-r',\n sort : 'number',\n },\n\n ],\n });\n\n }\n\n\n}\n", "/*******************************************************\nOPEN TEAM VS POSITION MODAL\nUsed on the team vs. position page for NFL.\n********************************************************/\n\nimport buildModal from '../../universal/modal-window/build-modal';\n\nexport default function openTeamVsPosModal(event) {\n const $button = $(event.currentTarget);\n const { id, firstname, lastname, pos, team, startweek, endweek, view } = $button.data();\n\n\n // Set the table loading message\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\n\n // Build the title\n const modalTitle = `\n \n ${firstname} ${lastname}\n `;\n\n // Build the content of the modal\n const modalContent = `\n \n ${loadingMessage}\n `;\n\n // Get the modal window HTML\n const modalHTML = buildModal({\n fullWidth: true,\n title : modalTitle,\n content : modalContent,\n });\n\n const $allTable = $('#trendsALL');\n\n // Append the modal window to the page\n $('.page').append(modalHTML);\n\n if (view === 'percent') {\n\n loadTableRW({\n container : `tt-table${id}`,\n url : `/football/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\n emptyMessage: 'We do not have any stats to display at the moment.',\n leftSplit : 1,\n css : 'no-border',\n columns : [\n\n { id : 'stat',\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\n sort : 'text-string',\n sortDirection: 'asc',\n },\n\n { id : 'avgStat',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'total',\n header: ['', { text: 'Total' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'minStat',\n header: ['', { text: 'Min' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'maxStat',\n header: ['', { text: 'Max' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'wk1',\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk2',\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk3',\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk4',\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk5',\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk6',\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk7',\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk8',\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk9',\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk10',\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk11',\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk12',\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk13',\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk14',\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk15',\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk16',\n header : [{ text: '16', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk17',\n header : [{ text: '17', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n ],\n });\n\n }\n else {\n\n loadTableRW({\n container : `tt-table${id}`,\n url : `/football/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\n emptyMessage: 'We do not have any stats to display at the moment.',\n leftSplit : 1,\n css : 'no-border',\n columns : [\n\n { id : 'stat',\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\n sort : 'text-string',\n sortDirection: 'asc',\n },\n\n { id : 'avgStat',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'total',\n header: ['', { text: 'Total' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'minStat',\n header: ['', { text: 'Min' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'maxStat',\n header: ['', { text: 'Max' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'wk1',\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk2',\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk3',\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk4',\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk5',\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk6',\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk7',\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk8',\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk9',\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk10',\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk11',\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk12',\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk13',\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk14',\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk15',\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk16',\n header: [{ text: '16', css: 'columns-head is-dark' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk17',\n header: [{ text: '17', css: 'columns-head is-dark' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n ],\n });\n\n }\n\n}\n", "/*******************************************************\r\nOPEN WIN RATE MODAL\r\nUsed on the win rate page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openWinRateModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, playerid, firstname, lastname, pos, team, startweek, endweek } = $button.data();\r\n\r\n // Get the table data\r\n let $activeTab = $('.bestball:not(.hide-filtertab)').data('pos').toUpperCase();\r\n let tableID = $('#bestball'+$activeTab).find('.webix_dtable').attr('id');\r\n let table = $$(tableID);\r\n let $rowData = table.getItem(id);\r\n\r\n // Build label name + bar data\r\n let $weeks = [];\r\n let $percentages = [];\r\n let $barColor = [];\r\n let $borderColor = [];\r\n for (let i = startweek; i <= endweek; ++i) {\r\n $weeks.push(i);\r\n $percentages.push($rowData['wk'+i]);\r\n $barColor.push('rgba(18, 108, 211, 0.2)');\r\n $borderColor.push('rgba(18, 108, 211, 1)');\r\n }\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n \r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n // Add bar chart\r\n var ctx = document.getElementById('myChart').getContext('2d');\r\n var myChart = new Chart(ctx, {\r\n type: 'bar',\r\n data: {\r\n labels: $weeks,\r\n datasets: [{\r\n data: $percentages,\r\n backgroundColor: $barColor,\r\n borderColor: $borderColor,\r\n borderWidth: 1\r\n }]\r\n },\r\n options: {\r\n scales: {\r\n yAxes: [{\r\n ticks: {\r\n beginAtZero: true\r\n },\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'Win Rate %',\r\n fontSize: 12,\r\n fontColor: '#000',\r\n fontStyle: 'bold',\r\n },\r\n }],\r\n xAxes: [{\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'Weeks',\r\n fontSize: 12,\r\n fontColor: '#000',\r\n fontStyle: 'bold',\r\n },\r\n }],\r\n },\r\n title: {\r\n display: true,\r\n text: 'Win Rate By Week',\r\n fontSize: 15,\r\n fontColor: '#000',\r\n fontStyle: 'bold',\r\n },\r\n legend: {\r\n display: false,\r\n }\r\n }\r\n });\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN WIN RATE SEASON MODAL\r\nUsed on the win rate page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openWinRateBySeasonModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, playerid, firstname, lastname, pos, team, startweek, endweek } = $button.data();\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n loadTableRW({\r\n container : `win-rate-table${playerid}`,\r\n url : `/football/tables/win-rate-player.php?&playerid=${playerid}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id: 'player',\r\n header: [{ text: 'Player', css: 'align-l' },],\r\n sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n },\r\n },\r\n { id: 'team',\r\n header: [{ text: 'Team' }, ],\r\n sort: 'text-string',\r\n },\r\n { id: 'pos',\r\n header: [{ text: 'Pos' }, ],\r\n sort: 'text-string',\r\n },\r\n { id: 'season',\r\n header: [{ text: 'Season' }, ],\r\n sort: 'number', sortDirection: 'asc',\r\n },\r\n { id: 'winPct',\r\n header: [{ text: 'Win %' }, ],\r\n sort: 'number'\r\n },\r\n { id: 'adp',\r\n header: [{ text: 'ADP' }, ],\r\n sort: 'number', sortDirection: 'asc',\r\n },\r\n { id: 'fpts',\r\n header: [{ text: 'FPTS' }, ],\r\n sort: 'number'\r\n },\r\n { id: 'score',\r\n header: [{ text: 'Avg Score' }, ],\r\n sort: 'number'\r\n },\r\n\r\n ],\r\n });\r\n}\r\n", "/*******************************************************\nNFL EVENT HANDLERS\nThis handles events for various interactions related to NFL.\n********************************************************/\n\nimport openTeamVsPosModal from './open-team-vs-pos-modal';\nimport openTeamTrendsModal from './open-team-trends-modal';\nimport openWinRateModal from './open-win-rate-modal';\nimport openWinRateBySeasonModal from './open-win-rate-by-season-modal';\n\nexport default function addNFLEventHandlers() {\n\n // Open team vs position modal\n $(document).on('click', '.tvp-open', openTeamVsPosModal);\n\n $(document).on('click', '.tt-open', openTeamTrendsModal);\n\n // Open win rate graph\n $(document).on('click', '.win-rate-graph-open', openWinRateModal);\n\n // Open win rate by season table\n $(document).on('click', '.win-rate-by-season-open', openWinRateBySeasonModal);\n\n}\n", "/*******************************************************\r\nADD FIVE MAN PLAYER\r\nUsed on the five man stats page for NBA.\r\n********************************************************/\r\n\r\nimport closeModalWindow from '../../universal/modal-window/close';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function openCourtOnOffModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { player, court } = $button.data();\r\n\r\n const playerId = player;\r\n const courtOnOff = court;\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/basketball/ajax/get-court-on-off-player.php`,\r\n data : {\r\n player: playerId,\r\n },\r\n timeout: 10000,\r\n });\r\n\r\n const { playerHTML, success } = response;\r\n\r\n // Get the modal button\r\n const $modalButton = $('.open-court-on-off-modal[data-court=\"' + courtOnOff + '\"]');\r\n\r\n // Prepend the player HTML to the add player button\r\n $modalButton.before(playerHTML);\r\n\r\n // If we have 5 or more players and we in the ON court section than hide the modal\r\n if($modalButton.siblings('.court-on-off-player').length >= 5 && courtOnOff === \"on\"){\r\n $modalButton.addClass('hide');\r\n }\r\n\r\n // Close the modal\r\n closeModalWindow();\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to add that player for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************************************\nCLEAR INJURY ARCHIVE SEARCH\nResets the player search input to its empty state.\n*******************************************************************************/\n\nimport clearInputBox from '../../../js/universal/input-with-clear/clear';\n\nexport default function clearInjuryArchiveSearch() {\n const $input = $('#injury-archive-search');\n\n // Sets the last search to nothing\n $input.data('lastsearch', '');\n\n // Clears the search results\n $('.archive-search-results').empty();\n\n // Clear the input box and remove the clear button\n // This is normally handled by the universal input box with clear button scripts in the /universal/ folder,\n // but clearPlayerSearch() is triggered in other contexts, so it's necessary to call it manually here too\n clearInputBox($input);\n}\n", "/*******************************************************\r\nNBA EVENT HANDLERS\r\nThis handles events for various interactions related to NBA.\r\n********************************************************/\r\n\r\nimport addCourtOnOffPlayer from './add-court-on-off-player';\r\nimport clearInjuryArchiveSearch from './clear-injury-archive-search';\r\nimport debounce from '../../../js/universal/debounce/debounce';\r\nimport loadCourtOnOffTable from './load-court-on-off-table';\r\nimport openCourtOnOffModal from './open-court-on-off-modal';\r\nimport openInjuryArchiveModal from './open-injury-archive-modal';\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\nimport removeCourtOnOffPlayer from './remove-court-on-off-player';\r\nimport triggerInjuryArchiveSearch from './trigger-injury-archive-search';\r\n\r\nexport default function addNBAEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-nba', openTeamTrendsModal);\r\n\r\n $(document).on('click', '.open-court-on-off-modal', openCourtOnOffModal);\r\n\r\n $(document).on('click', '.add-court-on-off-player', addCourtOnOffPlayer);\r\n\r\n $(document).on('click', '.remove-court-on-off-player', removeCourtOnOffPlayer);\r\n\r\n $(document).on('click', '.load-court-on-off-table', loadCourtOnOffTable);\r\n\r\n $(document).on('click', '.open-injury-archive-modal', openInjuryArchiveModal);\r\n\r\n $(document).on('keyup', '#injury-archive-search', debounce(triggerInjuryArchiveSearch, 300));\r\n\r\n $(document).on('click', '.clear-injury-archive-search', clearInjuryArchiveSearch);\r\n\r\n}\r\n", "/*******************************************************\r\nLOAD ON/OFF COURT TABLE\r\nUsed on the on/off court stats page for NBA.\r\n********************************************************/\r\n\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function loadCourtOnOffTable(event) {\r\n\r\n // The data to collect to build our table\r\n let playersOnCourt = [];\r\n let playersOffCourt = [];\r\n let team = null;\r\n let range = null;\r\n let split = null;\r\n\r\n // Iterate over the modal buttons to get the list of on players and off players\r\n $('.open-court-on-off-modal').each((index, modalButton) => {\r\n const $modalButton = $(modalButton);\r\n const modalButtonCourt = $modalButton.data('court');\r\n const modalButtonTeam = $modalButton.data('team');\r\n\r\n // Set the team\r\n if(!team){ team = modalButtonTeam; }\r\n\r\n // Get each player and add them to the appropriate array\r\n $modalButton.siblings('.court-on-off-player').each((index, player) => {\r\n const $player = $(player);\r\n const playerId = $player.data('player');\r\n\r\n if(modalButtonCourt === \"on\"){\r\n playersOnCourt.push(playerId);\r\n } else {\r\n playersOffCourt.push(playerId);\r\n }\r\n\r\n });\r\n });\r\n\r\n // Get the date range\r\n range = $('#reportrange').val();\r\n\r\n // Get the split\r\n split = $(\"input[name='split']:checked\").val();\r\n\r\n // Show the toggle tabs\r\n $('.court-on-off-view-toggle').removeClass('hide');\r\n\r\n // Remove any existing tables and headers\r\n $('#court-on-off-totals').remove();\r\n $('#court-on-off-per-36').remove();\r\n $('#court-on-off-difference-header').remove();\r\n $('#court-on-off-difference').remove();\r\n\r\n // Build the new table placeholders\r\n let $onOffStatsTables =\r\n `\r\n \r\n \r\n Loading Stats\r\n \r\n \r\n \r\n \r\n \r\n \r\n Loading Stats\r\n \r\n \r\n `;\r\n\r\n // If we supplied any player parameters then show the differential table\r\n if(playersOnCourt.length > 0 || playersOffCourt.length > 0){\r\n $onOffStatsTables +=\r\n `DIFFERENTIAL PER 36\r\n \r\n \r\n \r\n Loading Stats\r\n \r\n \r\n `;\r\n }\r\n\r\n // Add the table placeholders\r\n $('.page').append($onOffStatsTables);\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : '/basketball/tables/court-on-off-stats.php',\r\n data : {\r\n team: team,\r\n on: playersOnCourt,\r\n off: playersOffCourt,\r\n range: range,\r\n split: split,\r\n },\r\n timeout: 25000,\r\n });\r\n\r\n // Build the totals table data\r\n let totalData = {\r\n container: 'court-on-off-totals',\r\n data: response.players,\r\n emptyMessage: 'There were no stats found with those settings.',\r\n leftSplit: 1,\r\n customFilters: {\r\n visible: false,\r\n },\r\n columns: [\r\n { id: 'player',\r\n header: [{ text: '', css: 'columns-head', },{ text: 'Player', css: 'align-l' }],\r\n css: 'align-l',sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n }\r\n },\r\n { id: 'games',\r\n header: [{ text: 'Basic Stats', css: 'columns-head', colspan: 12}, { text: 'G' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'minutes',\r\n header: ['', { text: 'MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'plusMinus',\r\n header: ['', { text: '+/-' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'points',\r\n header: ['', { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'rebounds',\r\n header: ['', { text: 'REB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'offensiveRebounds',\r\n header: ['', { text: 'OREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'defensiveRebounds',\r\n header: ['', { text: 'DREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'assists',\r\n header: ['', { text: 'AST' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'steals',\r\n header: ['', { text: 'STL' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'blocks',\r\n header: ['', { text: 'BLK' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'turnovers',\r\n header: ['', { text: 'TO' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fouls',\r\n header: ['', { text: 'PF' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fieldGoalsMade',\r\n header: [{ text: 'Shooting', css: 'columns-head align-c', colspan: 6 }, { text: 'FGM' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fieldGoalAttempts',\r\n header: ['', { text: 'FGA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointersMade',\r\n header: ['', { text: '3PM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointerAttempts',\r\n header: ['', { text: '3PA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowsMade',\r\n header: ['', { text: 'FTM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowAttempts',\r\n header: ['', { text: 'FTA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'usage',\r\n header: [{ text: 'Usage', css: 'columns-head align-c', colspan: 1 }, { text: 'USG %' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPoints',\r\n header: [{ text: 'FanDuel', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'draftkingsPoints',\r\n header: [{ text: 'DraftKings', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'draftkingsPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n ],\r\n }\r\n\r\n // Build the per36 table data\r\n let per36Data = {\r\n container: 'court-on-off-per-36',\r\n data: response.players,\r\n emptyMessage: 'There were no stats found with those settings.',\r\n leftSplit: 1,\r\n customFilters: {\r\n visible: false,\r\n },\r\n columns: [\r\n { id: 'player',\r\n header: [{ text: '', css: 'columns-head', },{ text: 'Player', css: 'align-l' }],\r\n css: 'align-l',sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n }\r\n },\r\n { id: 'games',\r\n header: [{ text: 'Basic Stats', css: 'columns-head', colspan: 12}, { text: 'G' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'minutes',\r\n header: ['', { text: 'MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'plusMinusPer36',\r\n header: ['', { text: '+/-' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'pointsPer36',\r\n header: ['', { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'reboundsPer36',\r\n header: ['', { text: 'REB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'offensiveReboundsPer36',\r\n header: ['', { text: 'OREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'defensiveReboundsPer36',\r\n header: ['', { text: 'DREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'assistsPer36',\r\n header: ['', { text: 'AST' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'stealsPer36',\r\n header: ['', { text: 'STL' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'blocksPer36',\r\n header: ['', { text: 'BLK' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'turnoversPer36',\r\n header: ['', { text: 'TO' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'foulsPer36',\r\n header: ['', { text: 'PF' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fieldGoalsMadePer36',\r\n header: [{ text: 'Shooting', css: 'columns-head align-c', colspan: 6 }, { text: 'FGM' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fieldGoalAttemptsPer36',\r\n header: ['', { text: 'FGA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointersMadePer36',\r\n header: ['', { text: '3PM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointerAttemptsPer36',\r\n header: ['', { text: '3PA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowsMadePer36',\r\n header: ['', { text: 'FTM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowAttemptsPer36',\r\n header: ['', { text: 'FTA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'usage',\r\n header: [{ text: 'Usage', css: 'columns-head align-c', colspan: 1 }, { text: 'USG %' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPer36',\r\n header: [{ text: 'FanDuel', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'draftkingsPointsPer36',\r\n header: [{ text: 'DraftKings', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'draftkingsPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n ],\r\n }\r\n\r\n // Build the difference table data\r\n let differenceData = {\r\n container: 'court-on-off-difference',\r\n data: response.players,\r\n emptyMessage: 'There were no differential stats found with those settings.',\r\n leftSplit: 1,\r\n customFilters: {\r\n visible: false,\r\n },\r\n columns: [\r\n { id: 'player',\r\n header: [{ text: '', css: 'columns-head', },{ text: 'Player', css: 'align-l' }],\r\n css: 'align-l',sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n }\r\n },\r\n { id: 'pointsDifference',\r\n header: [{ text: 'Basic Stats', css: 'columns-head', colspan: 9}, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'reboundsDifference',\r\n header: ['', { text: 'REB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'offensiveReboundsDifference',\r\n header: ['', { text: 'OREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'defensiveReboundsDifference',\r\n header: ['', { text: 'DREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'assistsDifference',\r\n header: ['', { text: 'AST' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'stealsDifference',\r\n header: ['', { text: 'STL' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'blocksDifference',\r\n header: ['', { text: 'BLK' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'turnoversDifference',\r\n header: ['', { text: 'TO' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'foulsDifference',\r\n header: ['', { text: 'PF' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fieldGoalsMadeDifference',\r\n header: [{ text: 'Shooting', css: 'columns-head align-c', colspan: 6 }, { text: 'FGM' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fieldGoalAttemptsDifference',\r\n header: ['', { text: 'FGA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointersMadeDifference',\r\n header: ['', { text: '3PM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointerAttemptsDifference',\r\n header: ['', { text: '3PA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowsMadeDifference',\r\n header: ['', { text: 'FTM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowAttemptsDifference',\r\n header: ['', { text: 'FTA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'usageDifference',\r\n header: [{ text: 'Usage', css: 'columns-head align-c', colspan: 1 }, { text: 'USG %' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsDifference',\r\n header: [{ text: 'FanDuel', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPerMinuteDifference',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'draftkingsPointsDifference',\r\n header: [{ text: 'DraftKings', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'draftkingsPointsPerMinuteDifference',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n ],\r\n }\r\n\r\n // Filter empty rows from the difference table data\r\n differenceData.data = $.grep(differenceData.data, function(p) {\r\n return p.usageDifference !== '';\r\n });\r\n\r\n // Sort the difference table data by usage\r\n differenceData.data.sort(function(a, b){\r\n return ((a.usageDifference < b.usageDifference) ? 1 : ((a.usageDifference > b.usageDifference) ? -1 : 0));\r\n });\r\n\r\n function mapCourtOnOffColumns(tableData){\r\n var heatmapColumns = ['usage','usageDifference'];\r\n\r\n var maxValues = Object.keys(tableData[0] || []).reduce(function(maxList, col){\r\n if (!heatmapColumns.includes(col)) { return maxList; }\r\n maxList[col] = Math.max.apply(null, tableData.map(function(r){ return Number(r[col]); }));\r\n return maxList;\r\n }, {});\r\n\r\n var minValues = Object.keys(tableData[0] || []).reduce(function(minList, col){\r\n if (!heatmapColumns.includes(col)) { return minList; }\r\n minList[col] = Math.min.apply(null, tableData.map(function(r){ return Number(r[col]); }));\r\n return minList;\r\n }, {});\r\n\r\n return function(col){\r\n if (!col.sort) { col.sort = 'number'; }\r\n if (!col.sortDirection) { col.sortDirection = 'desc'; }\r\n if (!col.css) { col.css = 'align-r'; }\r\n if (heatmapColumns.includes(col.id)) {\r\n\r\n var minValue = minValues[col.id] || 0;\r\n var maxValue = maxValues[col.id] || 1000;\r\n\r\n if(col.sortDirection === 'asc'){\r\n col.cssFormat = formatCellRW('heatmap', { min: maxValue , max: minValue });\r\n } else {\r\n col.cssFormat = formatCellRW('heatmap', { min: minValue , max: maxValue });\r\n }\r\n }\r\n return col;\r\n }\r\n }\r\n\r\n totalData.columns = totalData.columns.map(mapCourtOnOffColumns(response.players));\r\n per36Data.columns = per36Data.columns.map(mapCourtOnOffColumns(response.players));\r\n differenceData.columns = differenceData.columns.map(mapCourtOnOffColumns(response.players));\r\n\r\n if(!response.paid){\r\n const paywall = {\r\n headline: 'Want to see stats for every player?',\r\n text: 'We\\'ve only included a limited number of players in the section above. The rest of our sortable on/off court stats are reserved for RotoWire subscribers.',\r\n cta: {\r\n text: 'Unlock Our Full Stats',\r\n link: '/subscribe/',\r\n }\r\n }\r\n\r\n totalData.paywall = paywall;\r\n per36Data.paywall = paywall;\r\n differenceData.paywall = paywall;\r\n }\r\n\r\n\r\n //Load the tables to the screen\r\n loadTableRW(totalData);\r\n\r\n loadTableRW(per36Data);\r\n\r\n if(playersOnCourt.length > 0 || playersOffCourt.length > 0){\r\n loadTableRW(differenceData);\r\n }\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'There was an error. Please try again.', 3000);\r\n }\r\n}\r\n", "/*******************************************************\r\nOPEN FIVE MAN MODAL\r\nUsed on the five man stats page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function openCourtOnOffModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { team, court } = $button.data();\r\n\r\n const teamAbbr = team;\r\n const courtOnOff = court;\r\n\r\n // Get the list of excluded players who have already been added\r\n const excludedPlayers = [];\r\n $('.court-on-off-player').each((index, player) => {\r\n const $player = $(player);\r\n excludedPlayers.push($player.data('player'));\r\n });\r\n\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/basketball/ajax/get-court-on-off-team.php`,\r\n data : {\r\n team: teamAbbr,\r\n court: courtOnOff,\r\n exclude: excludedPlayers,\r\n },\r\n timeout: 10000,\r\n });\r\n\r\n const { playersHTML, success } = response;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n Add Player\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n \r\n ${playersHTML}\r\n \r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve that info for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN INJURY ARCHIVE MODAL\r\nUsed on the injury archive page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function openInjuryArchiveModal(event) {\r\n\r\n const $button = $(event.currentTarget);\r\n const { injury, dates } = $button.data();\r\n\r\n try {\r\n // Build the title\r\n const modalTitle = `\r\n \r\n Search Players\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve that info for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/basketball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/basketball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nREMOVE COURT ON/OFF PLAYER\r\nUsed on the five man stats page for NBA.\r\n********************************************************/\r\n\r\nexport default async function openCourtOnOffModal(event) {\r\n const $button = $(event.currentTarget);\r\n const $player = $button.parents('.court-on-off-player');\r\n const $modalButton = $player.siblings('.open-court-on-off-modal');\r\n\r\n // Remove the player\r\n $player.remove();\r\n\r\n // If the Add Player modal button is hidden show it\r\n if($modalButton.hasClass('hide')){\r\n $modalButton.removeClass('hide');\r\n }\r\n\r\n}\r\n", "/*******************************************************************************\nSEARCH INJURY ARCHIVE\nReturns matching players for a search.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../../js/universal/error-handling/show-error-notification-bar';\n\nexport default async function searchInjuryArchive(settings) {\n try {\n const response = await $.ajax({\n type: 'GET',\n url : `/basketball/ajax/search-injury-archive.php`,\n data: {\n searchTerm: settings.searchTerm,\n },\n timeout: 8000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n players: response.players,\n };\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to search for players. Please try again.', 3000);\n }\n}\n", "/*******************************************************************************\nTRIGGER INJURY ARCHIVE SEARCH\nTriggers a player search.\n*******************************************************************************/\n\nimport clearInjuryArchiveSearch from './clear-injury-archive-search';\nimport searchInjuryArchive from './injury-archive-search';\n\nexport default async function triggerInjuryArchiveSearch(e) {\n\n const $input = $(e.currentTarget);\n const searchTerm = $input.val();\n\n // Get the data attributes\n const dates = $input.data('dates') || '';\n const injury = $input.data('injury') || '';\n const lastSearch = $input.data('lastsearch') || '';\n\n // If the input is empty or the ESC key is pressed,\n // then reset everything to its initial state and exit out\n if (!searchTerm || e.which === 27) { clearInjuryArchiveSearch(); return; }\n\n // If the last search is the same as the current search, don't run it again\n if (searchTerm === lastSearch) { return; }\n\n // The container for the search results\n const $searchResults = $('.archive-search-results');\n\n // Display a message and exit out if there are fewer than 2 characters\n $searchResults.removeClass('hide').html('Please enter at least 2 characters.');\n if (searchTerm.length < 2) { return; }\n\n // Empty the search results and add a \"Searching...\" message\n $searchResults.empty().html('Searching for players...');\n\n // Set the data that gets used with the AJAX query\n const settings = {\n searchTerm,\n };\n\n try {\n // Store the current search term in a data attribute (useful for preventing duplicate AJAX calls)\n $input.data('lastsearch', searchTerm);\n\n // Search the players\n // If players is undefined, the rest of this try block won't run\n const { players } = await searchInjuryArchive(settings);\n\n // If there are no results, exit out and show the empty state\n if (players.length === 0) {\n $searchResults.html('No players matched your search.');\n return;\n }\n\n let resultsHTML = '';\n players.forEach((player) => {\n\n resultsHTML += `\n \n \n ${player.name} \n ${player.team}  ${player.position}\n \n Select\n `;\n });\n\n // Add the search results to their container\n $searchResults.safehtml(resultsHTML);\n }\n catch (err) {\n // Error message already triggered in search-players.js\n }\n}\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/hockey/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/hockey/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nNHL EVENT HANDLERS\r\nThis handles events for various interactions related to NHL.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addNHLEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-nhl', openTeamTrendsModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN SCORE CARD MODAL\r\nUsed on the tournament page for PGA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openScoreCardModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, round, tourneyid, playerurl } = $button.data();\r\n\r\n const ajaxResponse = $.ajax({\r\n type: 'GET',\r\n data: {\r\n round: round,\r\n id: id,\r\n tourneyid: tourneyid,\r\n },\r\n url: '/golf/ajax/get-player-scorecard-html.php',\r\n timeout: 5000\r\n });\r\n\r\n ajaxResponse.fail(function(response){\r\n console.log('An error happened.');\r\n });\r\n \r\n // If the AJAX request goes through\r\n ajaxResponse.done(function(response){\r\n \r\n // If the response was not succesful, or there's no HTML to use, show an error notification and exit out\r\n if (!response.success){\r\n console.log('An error happened.');\r\n return;\r\n }\r\n \r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}'s Round ${round} Scorecard\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${response.html}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n });\r\n\r\n \r\n\r\n \r\n\r\n}\r\n", "/*******************************************************\r\nPGA EVENT HANDLERS\r\nThis handles events for various interactions related to PGA.\r\n********************************************************/\r\n\r\nimport openScoreCardModal from './open-scorecard-modal';\r\n\r\nexport default function addPGAEventHandlers() {\r\n\r\n // Open team vs position modal\r\n $(document).on('click', '.sc-open', openScoreCardModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM PREVIEW MODAL\r\nUsed on the bracketology page for CBB.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nfunction imageExists(image_url){\r\n\r\n var http = new XMLHttpRequest();\r\n\r\n http.open('HEAD', image_url, false);\r\n http.send();\r\n\r\n return http.status != 404;\r\n\r\n}\r\n\r\nexport default async function openTeamPreview(event) {\r\n const $button = $(event.currentTarget);\r\n const {team, secondteam } = $button.data();\r\n\r\n const teamName = team;\r\n const secondTeamName = secondteam;\r\n\r\n const teamLogo = team.replace(\" \", \"-\");\r\n const secondTeamLogo = secondteam.replace(\" \", \"-\");\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/cbasketball/ajax/get-team-preview.php`,\r\n data : {\r\n team: teamName,\r\n secondteam: secondTeamName,\r\n },\r\n timeout: 8000,\r\n });\r\n\r\n const { previewHTML, success } = response;\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${teamName} Preview`;\r\n\r\n let modalTitle = \"\";\r\n\r\n // Build the title\r\n if ( secondteam == \"\" || secondteam == undefined || secondteam == null ) {\r\n if (imageExists(`/images/teamlogo/cbasketball/${teamLogo}.png`)) {\r\n modalTitle = `\r\n \r\n ${teamName}\r\n `;\r\n } else {\r\n modalTitle = `\r\n \r\n ${teamName}\r\n `;\r\n }\r\n } else {\r\n if (imageExists(`/images/teamlogo/cbasketball/${teamLogo}.png`)) {\r\n modalTitle = `\r\n \r\n ${teamName} / ${secondTeamName}\r\n `;\r\n } else {\r\n modalTitle = `\r\n \r\n ${teamName} / ${secondTeamName}\r\n `;\r\n }\r\n }\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${previewHTML}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: false,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve updates for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nCBB EVENT HANDLERS\r\nThis handles events for various interactions related to CBB.\r\n********************************************************/\r\n\r\nimport openTeamPreview from './open-team-preview-modal';\r\n\r\nexport default function addCBBEventHandlers() {\r\n\r\n // Open team vs position modal\r\n $(document).on('click', '.team-modal-open', openTeamPreview);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM VS POSITION MODAL\r\nUsed on the team vs. position page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { pos, team, scoringtype, year } = $button.data();\r\n const teamNameParts = ($button.siblings('a').text() || '').split(' ');\r\n const teamName = teamNameParts[teamNameParts.length - 1];\r\n const teamLogo = decodeURIComponent(team).replace(\" \", \"-\");\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${teamName} vs. ${pos} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${teamName}Vs. ${pos}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (pos === 'QB') {\r\n\r\n loadTableRW({\r\n container : `tvp-table`,\r\n url : `/cfootball/tables/defense-vs-pos-gl.php?pos=QB&team=${team}&scoringtype=${scoringtype}&year=${year}`,\r\n emptyMessage: 'There were no stats found.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n { id : 'team',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Name', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n template: '#team#',\r\n },\r\n\r\n { id : 'points',\r\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'passComp',\r\n header: [{ text: 'Passing', css: 'columns-head is-dark', colspan: 5 }, { text: 'COMP' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passAtt',\r\n header: ['', { text: 'ATT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passInt',\r\n header: ['', { text: 'INT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushAtt',\r\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 3 }, { text: 'ATT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n\r\n });\r\n }\r\n else if (pos === 'RB' || pos === 'WR' || pos === 'TE') {\r\n\r\n loadTableRW({\r\n container : `tvp-table`,\r\n url : `/cfootball/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\r\n emptyMessage: 'There were no stats found.',\r\n leftSplit : 1,\r\n columns : [\r\n\r\n { id : 'team',\r\n header: [{ text: '', css: 'columns-head is-dark' }, { text: 'Name', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n },\r\n\r\n { id : 'points',\r\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'rushAtt',\r\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 3 }, { text: 'ATT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'receptions',\r\n header: [{ text: 'Receiving', css: 'columns-head is-dark', colspan: 4 }, { text: 'REC' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'recYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'recTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'targets',\r\n header: ['', { text: 'TAR' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n ],\r\n });\r\n\r\n }\r\n else if (pos === 'K') {\r\n\r\n loadTableRW({\r\n container : `tvp-table`,\r\n url : `/cfootball/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\r\n emptyMessage: 'There were no stats found.',\r\n leftSplit : 1,\r\n columns : [\r\n\r\n { id : 'team',\r\n header: [{ text: '', css: 'columns-head is-dark' }, { text: 'Name', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n },\r\n\r\n { id : 'points',\r\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'xpm',\r\n header: [{ text: 'Extra Points', css: 'columns-head is-dark', colspan: 2 }, { text: 'XPM' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'xpa',\r\n header: ['', { text: 'XPA' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'fgm',\r\n header: [{ text: 'Field Goals', css: 'columns-head is-dark', colspan: 2 }, { text: 'FGM' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fga',\r\n header: ['', { text: 'FGA' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'fgm29',\r\n header: [{ text: 'Field Goal Distance', css: 'columns-head is-dark', colspan: 4 }, { text: '0-29' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fgm39',\r\n header: ['', { text: '30-39' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fgm49',\r\n header: ['', { text: '40-49' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fgm50',\r\n header: ['', { text: '50+' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n ],\r\n });\r\n\r\n }\r\n\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM VS POSITION MODAL\r\nUsed on the team vs. position page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, startweek, endweek, view } = $button.data();\r\n const teamLogo = decodeURIComponent(team).replace(\" \", \"-\").replace(\"+\", \"-\");\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n const $gameHeaders = $('.game-week');\r\n const weeks = [];\r\n $gameHeaders.each(function () { weeks.push($(this).text()); });\r\n\r\n const colHeaders = weeks;\r\n const colNames = weeks.map((w, i) => `${w.replace('@', '')}${i}`);\r\n\r\n function toObject(names, values) {\r\n var result = {};\r\n for (var i = 0; i < names.length; i++)\r\n result[names[i]] = values[i];\r\n return result;\r\n }\r\n\r\n const finishedCol = toObject(colHeaders, colNames);\r\n\r\n const finishedColumns = [\r\n { id : 'stat',\r\n header : [{ text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [ { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: [{ text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: [{ text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: [{ text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ];\r\n\r\n $.each( finishedCol, function(key, value){\r\n\r\n if (view === 'percent') {\r\n\r\n finishedColumns.push(\r\n { id : value,\r\n header : [ { text: key, css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n );\r\n }\r\n else {\r\n finishedColumns.push(\r\n { id : value,\r\n header : [ { text: key, css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n );\r\n\r\n }\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/cfootball/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : finishedColumns,\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/cfootball/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : finishedColumns,\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nCFB EVENT HANDLERS\r\nThis handles events for various interactions related to CFB.\r\n********************************************************/\r\n\r\nimport openTeamVsPosModal from './open-team-vs-pos-modal';\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addCFBEventHandlers() {\r\n\r\n // Open team vs position modal\r\n $(document).on('click', '.tvp-open-cfb', openTeamVsPosModal);\r\n\r\n $(document).on('click', '.tt-open-cfb', openTeamTrendsModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM VS POSITION MODAL\r\nUsed on the team vs. position page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamTrendsModalSoccer(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, league, firstname, lastname, pos, team, startweek, endweek, view, teamlogo } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/soccer/tables/team-trends-player.php?league=${league}&team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'wk1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk16',\r\n header : [{ text: '16', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk17',\r\n header : [{ text: '17', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk18',\r\n header : [{ text: '18', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk18-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk19',\r\n header : [{ text: '19', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk19-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk20',\r\n header : [{ text: '20', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk20-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk21',\r\n header : [{ text: '21', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk21-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk22',\r\n header : [{ text: '22', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk22-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk23',\r\n header : [{ text: '23', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk23-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk24',\r\n header : [{ text: '24', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk24-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk25',\r\n header : [{ text: '25', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk25-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk26',\r\n header : [{ text: '26', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk26-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk27',\r\n header : [{ text: '27', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk27-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk28',\r\n header : [{ text: '28', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk28-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk29',\r\n header : [{ text: '29', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk29-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk30',\r\n header : [{ text: '30', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk30-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk31',\r\n header : [{ text: '31', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk31-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk32',\r\n header : [{ text: '32', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk32-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk33',\r\n header : [{ text: '33', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk33-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk34',\r\n header : [{ text: '34', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk34-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk35',\r\n header : [{ text: '35', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk35-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk36',\r\n header : [{ text: '36', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk36-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk37',\r\n header : [{ text: '37', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk37-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk38',\r\n header : [{ text: '38', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk38-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/soccer/tables/team-trends-player.php?league=${league}&team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'wk1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk16',\r\n header: [{ text: '16', css: 'columns-head is-dark' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk17',\r\n header: [{ text: '17', css: 'columns-head is-dark' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk18',\r\n header : [{ text: '18', css: 'columns-head is-dark' }, { text: $allTable.find('.wk18-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk19',\r\n header : [{ text: '19', css: 'columns-head is-dark' }, { text: $allTable.find('.wk19-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk20',\r\n header : [{ text: '20', css: 'columns-head is-dark' }, { text: $allTable.find('.wk20-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk21',\r\n header : [{ text: '21', css: 'columns-head is-dark' }, { text: $allTable.find('.wk21-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk22',\r\n header : [{ text: '22', css: 'columns-head is-dark' }, { text: $allTable.find('.wk22-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk23',\r\n header : [{ text: '23', css: 'columns-head is-dark' }, { text: $allTable.find('.wk23-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk24',\r\n header : [{ text: '24', css: 'columns-head is-dark' }, { text: $allTable.find('.wk24-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk25',\r\n header : [{ text: '25', css: 'columns-head is-dark' }, { text: $allTable.find('.wk25-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk26',\r\n header : [{ text: '26', css: 'columns-head is-dark' }, { text: $allTable.find('.wk26-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk27',\r\n header : [{ text: '27', css: 'columns-head is-dark' }, { text: $allTable.find('.wk27-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk28',\r\n header : [{ text: '28', css: 'columns-head is-dark' }, { text: $allTable.find('.wk28-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk29',\r\n header : [{ text: '29', css: 'columns-head is-dark' }, { text: $allTable.find('.wk29-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk30',\r\n header : [{ text: '30', css: 'columns-head is-dark' }, { text: $allTable.find('.wk30-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk31',\r\n header : [{ text: '31', css: 'columns-head is-dark' }, { text: $allTable.find('.wk31-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk32',\r\n header : [{ text: '32', css: 'columns-head is-dark' }, { text: $allTable.find('.wk32-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk33',\r\n header : [{ text: '33', css: 'columns-head is-dark' }, { text: $allTable.find('.wk33-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk34',\r\n header : [{ text: '34', css: 'columns-head is-dark' }, { text: $allTable.find('.wk34-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk35',\r\n header : [{ text: '35', css: 'columns-head is-dark' }, { text: $allTable.find('.wk35-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk36',\r\n header : [{ text: '36', css: 'columns-head is-dark' }, { text: $allTable.find('.wk36-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk37',\r\n header : [{ text: '37', css: 'columns-head is-dark' }, { text: $allTable.find('.wk37-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk38',\r\n header : [{ text: '38', css: 'columns-head is-dark' }, { text: $allTable.find('.wk38-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nSoccer EVENT HANDLERS\r\nThis handles events for various interactions related to Soccer.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModalSoccer from './open-team-trends-modal';\r\n\r\nexport default function addSoccerEventHandlers() {\r\n\r\n\r\n $(document).on('click', '.tt-open-soccer', openTeamTrendsModalSoccer);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for MLB.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n console.log(pos);\r\n\r\n if (pos == 'P') {\r\n var $allTable = $('#trendsP');\r\n } else {\r\n var $allTable = $('#trendsB');\r\n }\r\n\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/baseball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/baseball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nMLB EVENT HANDLERS\r\nThis handles events for various interactions related to MLB.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addMLBEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-mlb', openTeamTrendsModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/wnba/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/wnba/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nWNBA EVENT HANDLERS\r\nThis handles events for various interactions related to WNBA.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addWNBAEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-wnba', openTeamTrendsModal);\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for EuroLeague.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/euro/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/euro/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nNBA EVENT HANDLERS\r\nThis handles events for various interactions related to NBA.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addEuroEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-euro', openTeamTrendsModal);\r\n\r\n}\r\n", "/*\n8888888b. 888 888 888 d8b\n888 Y88b 888 888 o 888 Y8P\n888 888 888 888 d8b 888\n888 d88P .d88b. 888888 .d88b. 888 d888b 888 888 888d888 .d88b.\n8888888P\" d88\"\"88b 888 d88\"\"88b 888d88888b888 888 888P\" d8P Y8b\n888 T88b 888 888 888 888 888 88888P Y88888 888 888 88888888\n888 T88b Y88..88P Y88b. Y88..88P 8888P Y8888 888 888 Y8b.\n888 T88b \"Y88P\" \"Y888 \"Y88P\" 888P Y888 888 888 \"Y8888\n*/\n\n/*******************************************************\nMAIN JAVASCRIPT FILE\nThis is the starting point for the javascript bundle. It's where all the interactions\nfor the site are stored. Any core modules needed by these interactions will be bundled\ninto the rotowire.min.js file by Browserify and Gulp. See gulpfile.js for specifics.\n********************************************************/\n\nimport addAlljQueryPlugins from \"./universal/jquery-plugins/all\";\nimport handlePlayerSearchEvents from \"./player-search/events\";\nimport handleNavEvents from \"./nav/events\";\nimport handleNavigationEvents from \"./navigation/events\";\nimport handleUniversalEvents from \"./universal/events\";\nimport handleNFLEvents from \"./sport-specific/nfl/events\";\nimport handleNBAEvents from \"./sport-specific/nba/events\";\nimport handleNHLEvents from \"./sport-specific/nhl/events\";\nimport handlePGAEvents from \"./sport-specific/pga/events\";\nimport handleCBBEvents from \"./sport-specific/cbb/events\";\nimport handleCFBEvents from \"./sport-specific/cfb/events\";\nimport handleSoccerEvents from \"./sport-specific/soccer/events\";\nimport handleMLBEvents from \"./sport-specific/mlb/events\";\nimport handleWNBAEvents from \"./sport-specific/wnba/events\";\nimport handleEuroEvents from \"./sport-specific/euro/events\";\n\n// Add jQuery Plugins\naddAlljQueryPlugins();\n\n$(() => {\n // Universal\n handleUniversalEvents();\n\n // Navigation\n handleNavigationEvents();\n handleNavEvents();\n\n // Player Search\n handlePlayerSearchEvents();\n\n // Sport-Specific\n handleNFLEvents();\n handleNBAEvents();\n handleNHLEvents();\n handlePGAEvents();\n handleCBBEvents();\n handleCFBEvents();\n handleSoccerEvents();\n handleMLBEvents();\n handleWNBAEvents();\n handleEuroEvents();\n});\n"], "mappings": "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", "names": ["require_purify", "__commonJSMin", "exports", "module", "factory", "root", "window", "DOMPurify", "document", "originalDocument", "DocumentFragment", "HTMLTemplateElement", "Node", "NodeFilter", "NamedNodeMap", "Text", "Comment", "DOMParser", "useDOMParser", "template", "implementation", "createNodeIterator", "getElementsByTagName", "createDocumentFragment", "importNode", "hooks", "_addToSet", "set", "array", "l", "_cloneObj", "object", "newObject", "property", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "FORBID_TAGS", "FORBID_ATTR", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "SAFE_FOR_JQUERY", "SAFE_FOR_TEMPLATES", "MUSTACHE_EXPR", "ERB_EXPR", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_DOM_IMPORT", "SANITIZE_DOM", "KEEP_CONTENT", "FORBID_CONTENTS", "DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "CONFIG", "formElement", "_parseConfig", "cfg", "_forceRemove", "node", "e", "_removeAttribute", "name", "_initDocument", "dirty", "doc", "body", "_createIterator", "_isClobbered", "elm", "_isNode", "obj", "_sanitizeElements", "currentNode", "tagName", "content", "_executeHook", "DATA_ATTR", "ARIA_ATTR", "IS_ALLOWED_URI", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "_sanitizeAttributes", "attr", "value", "lcName", "idAttr", "attributes", "hookEvent", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "entryPoint", "data", "hook", "importedNode", "oldNode", "nodeIterator", "returnNode", "hookFunction", "require_debounce", "__commonJSMin", "exports", "module", "FUNC_ERROR_TEXT", "NAN", "symbolTag", "reTrim", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "freeGlobal", "freeSelf", "root", "objectProto", "objectToString", "nativeMax", "nativeMin", "now", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "result", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "toNumber", "isObject", "invokeFunc", "time", "args", "thisArg", "leadingEdge", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "shouldInvoke", "trailingEdge", "cancel", "flush", "debounced", "isInvoking", "value", "type", "isObjectLike", "isSymbol", "other", "isBinary", "require_js_cookie", "__commonJSMin", "exports", "module", "factory", "registeredInModuleLoader", "OldCookies", "api", "extend", "i", "result", "attributes", "key", "init", "converter", "value", "expires", "e", "stringifiedAttributes", "attributeName", "cookies", "rdecode", "parts", "cookie", "name", "require_smoothscroll", "__commonJSMin", "exports", "module", "polyfill", "w", "d", "Element", "SCROLL_TIME", "original", "scrollElement", "now", "isMicrosoftBrowser", "userAgent", "userAgentPatterns", "ROUNDING_TOLERANCE", "x", "y", "ease", "k", "shouldBailOut", "firstArg", "hasScrollableSpace", "el", "axis", "canOverflow", "overflowValue", "isScrollable", "isScrollableY", "isScrollableX", "findScrollableParent", "isBody", "step", "context", "time", "value", "currentX", "currentY", "elapsed", "smoothScroll", "scrollable", "startX", "startY", "method", "startTime", "left", "top", "scrollableParent", "parentRects", "clientRects", "addjQueryPlugin", "func", "addjQueryPlugin", "func", "addjQueryPlugin", "hideClasses", "speed", "callback", "addjQueryPlugin", "hideClasses", "speed", "callback", "import_purify", "addPluginSafeHTML", "htmlString", "safeHTMLString", "addAlljQueryPlugins", "addjQueryPlugin", "addPluginSafeHTML", "touchDetected", "addHoverClass", "e", "clearSearch", "import_debounce", "handleKeyboardNavigation", "e", "$input", "searchTerm", "sport", "keyPressed", "clearSearch", "activeClass", "$results", "$current", "aResultExists", "aResultIsSelected", "$next", "searchPage", "$resultsContainer", "removeHoverClass", "showMobileSearchBox", "e", "buildSearchResult", "sport", "playerObject", "link", "logo", "alt", "name", "span", "text", "logoDefault", "logoHTML", "spanStyle", "removeErrorNotification", "$notification", "showErrorNotification", "message", "duration", "removeErrorNotification", "errorHTML", "searchPlayers", "settings", "__async", "response", "error", "showErrorNotification", "triggerSearchPlayers", "e", "__async", "searchableSports", "$input", "searchClass", "$searchSection", "sport", "searchTerm", "lastSearch", "$clearButton", "$searchResults", "settings", "players", "searchPlayers", "searchResults", "player", "buildSearchResult", "err", "addPlayerSearchEventHandlers", "showMobileSearchBox", "debounce", "triggerSearchPlayers", "handleKeyboardNavigation", "clearSearch", "addHoverClass", "removeHoverClass", "displaySideNavScreen", "screenToDisplay", "screenName", "backButtonScreen", "backButtonScreenName", "back", "backScreens", "highestScreenLevel", "s", "toggleSubNav", "e", "$selectedItem", "menuIsOpen", "$selectedSubNav", "closeDropdownMenu", "calculateDropdownPosition", "itemLeftSide", "transparentBorderOffset", "subNavWidth", "itemWidth", "pageWidth", "rightAlignPosition", "menuPosition", "triggerCloseDropdownMenu", "$wasOn", "$movedTo", "movingFromDropdownToItem", "movingFromItemToDropDown", "openSectionMenu", "menuHTML", "i", "el", "$menuItem", "name", "listID", "link", "item", "links", "menuTop", "closeSectionMenu", "e", "addNavEventHandlers", "logoutLink", "e", "$el", "isPlusButton", "$item", "screenToDisplay", "screenName", "currentScreen", "currentScreenName", "displaySideNavScreen", "$backButton", "backScreens", "backScreenNames", "screen", "toggleSubNav", "triggerCloseDropdownMenu", "openSectionMenu", "closeSectionMenu", "$group", "closingGroup", "Cookies", "adjustArrows", "$scrollArea", "$scrollTabsOuter", "width", "visibleWidth", "scrollLeft", "rightOpacityClass", "leftOpacityClass", "addScrollTabArrows", "index", "nav", "$scrollableArea", "$scrollTabsOuter", "arrows", "adjustArrows", "clearSectionSearch", "closeSideNav", "e", "clearSectionSearch", "doOnWindowResize", "functionToRun", "addSearchFeature", "numLinks", "numSections", "contentName", "searchHTML", "openSideNav", "e", "$sideNav", "menu", "menus", "addSearchFeature", "clearSectionSearch", "showSubPages", "tabName", "$subPagesContainer", "$connectedTab", "openDefault", "closeDropdownMenu", "calculateDropdownPosition", "$selectedItem", "$selectedSubNav", "itemLeftSide", "transparentBorderOffset", "subNavWidth", "itemWidth", "pageWidth", "rightAlignPosition", "menuPosition", "toggleSubNav", "e", "$selectedItem", "menuIsOpen", "$selectedSubNav", "closeDropdownMenu", "calculateDropdownPosition", "toggleSubSection", "e", "$subSection", "$subGroup", "isOpen", "triggerCloseDropdownMenu", "e", "$wasOn", "$movedTo", "movingFromDropdownToItem", "movingFromItemToDropDown", "closeDropdownMenu", "triggerItemLink", "e", "$link", "triggerScrollOnClick", "e", "$arrowButton", "$scrollableArea", "isLeft", "currentScrollPos", "triggerShowSubPages", "e", "tabName", "showSubPages", "getNoSearchResultsHTML", "watchSectionSearch", "e", "searchTerm", "itemSelector", "$items", "$sectionHeads", "enterKeyPressed", "clearSectionSearch", "visibleLinks", "$item", "$link", "linkName", "link", "$sectionHead", "sectionHeadText", "searchMatchesLink", "searchMatchesHeading", "linkAlreadyFound", "noResultsMessageHTML", "getNoSearchResultsHTML", "addNavigationEventHandlers", "addScrollTabArrows", "openDefault", "openSideNav", "closeSideNav", "triggerItemLink", "toggleSubNav", "addHoverClass", "removeHoverClass", "triggerCloseDropdownMenu", "watchSectionSearch", "clearSectionSearch", "toggleSubSection", "triggerShowSubPages", "triggerScrollOnClick", "$scrollTabs", "doOnWindowResize", "adjustArrows", "sectionLinks", "link", "pathName", "$activeContent", "section", "content", "hideHiddenImagesFromCloudinary", "restoreHiddenImages", "activateCloudinaryImages", "myBreakpoints", "width", "origUpdateFn", "hideHiddenImagesFromCloudinary", "restoreHiddenImages", "$imagesWithCredit", "index", "$image", "imageCredit", "creditLink", "imageNumber", "uniqueImageID", "creditWithLink", "creditNoLink", "creditItem", "activateRippleEffect", "e", "$button", "$div", "btnOffset", "xPos", "yPos", "removeHashesFromURL", "hash", "newURL", "activateSmartAnchorTags", "anchorHash", "removeHashesFromURL", "error", "automaticButtonProcessing", "e", "$button", "buttonHTML", "buttonText", "processingText", "newButtonHTML", "triggerCommentReply", "e", "__async", "$cancelButton", "$comments", "$form", "$submitButton", "origButtonHTML", "activateWallpaper", "event", "wallpaper", "image", "link", "code", "e", "activateCloudinaryImages", "script", "expandNewsUpdate", "e", "$newsUpdate", "expandPlayerOutlook", "fixAllWidows", "index", "element", "newHTML", "removeButtonProcessingState", "$button", "origButtonHTML", "getTabSettings", "tabSetName", "tabName", "$tab", "switchTab", "tabSettings", "targets", "add", "remove", "i", "$target", "switchTab", "tabSetName", "tabName", "$tabs", "tabSettings", "getTabSettings", "activateCloudinaryImages", "getUpdates", "e", "__async", "$showMoreButton", "sport", "type", "itemID", "lastUpdateTime", "numUpdates", "team", "position", "status", "leagueLevel", "priority", "rank", "offense", "top", "idp", "teamDef", "freeAgents", "hideLogo", "conferenceVal", "conference", "league", "competition", "nation", "nlonly", "alonly", "closers", "minors", "prospects", "injuries", "gender", "foreign", "language", "extraClasses", "settings", "sportDirectory", "response", "updatesHTML", "newLastUpdateTime", "noMoreUpdates", "success", "$activeToggleTab", "activeToggleTabName", "activeToggleTabSetName", "switchTab", "error", "showErrorNotification", "removeButtonProcessingState", "setMinGridWidth", "settings", "containers", "items", "padding", "auto", "index", "set", "$set", "itemWidths", "i", "item", "maxItemWidth", "gridFormat", "numItems", "maxWidth", "getUpdates", "e", "__async", "$showMoreButton", "sport", "pos", "type", "league", "lastRank", "settings", "sportDirectory", "response", "rankingsHTML", "newLastRank", "noMoreRankings", "success", "setMinGridWidth", "error", "showErrorNotification", "removeButtonProcessingState", "getRumors", "e", "__async", "$showMoreButton", "sport", "type", "itemID", "lastUpdateTime", "numUpdates", "team", "position", "status", "leagueLevel", "rank", "offense", "top", "idp", "teamDef", "freeAgents", "hideLogo", "conferenceVal", "conference", "league", "competition", "nation", "nlonly", "alonly", "closers", "minors", "prospects", "gender", "foreign", "language", "extraClasses", "settings", "sportDirectory", "response", "updatesHTML", "newLastUpdateTime", "noMoreUpdates", "success", "$activeToggleTab", "activeToggleTabName", "activeToggleTabSetName", "switchTab", "error", "showErrorNotification", "removeButtonProcessingState", "hideAdContainers", "adContainerClasses", "i", "adClass", "params", "qMark", "checkForMatch", "$item", "filterSettings", "tabSettings", "subset", "dataToMatch", "secDataToMatch", "mainExclude", "matchType", "secSubsetOperator", "secSubset", "secExclude", "secMatchType", "$elementToSearch", "itemValue", "subsetTargetAttribute", "mainFilterMatches", "valToMatch", "secSubsetMatches", "$secElemToSearch", "secItemValue", "secSubsetTargetAttribute", "filterItems", "settings", "$items", "hiddenClass", "index", "item", "$item", "filterMatches", "checkForMatch", "getSettings", "name", "$checkbox", "isChecked", "items", "subset", "dataToMatch", "secSubset", "secDataToMatch", "secSubsetOperator", "mainExclude", "secExclude", "action", "matchType", "secMatchType", "updateCheckboxFilter", "checkboxName", "settings", "getSettings", "filterItems", "initializeCheckBoxFilters", "index", "checkbox", "checkboxName", "$items", "updateCheckboxFilter", "isIE", "defaultConfig", "element", "img", "markAsLoaded", "isLoaded", "onIntersection", "load", "loaded", "entries", "observer", "entry", "getElements", "selector", "root", "lozad", "options", "rootMargin", "threshold", "elements", "i", "lozad_es_default", "initializeLazyLoading", "lozad_es_default", "el", "activateCloudinaryImages", "configureFreestarStickyAds", "_a", "desktopPages", "currentPage", "page", "insertFreestarStickyAds", "addLineupCardPlacements", "extraLineupsAd", "connatixAdSlot", "numHiddenLineups", "ad300Position", "numVisibleLineups", "insertConnatixAds", "playerPageAd", "numParagraphs", "adPlacement", "articleAd", "tabSets", "tabOptions", "eventsToWatch", "ts", "opt", "eventsToWatchString", "e", "tabSettings", "getSTNPlayerCode", "addLineupCardPlacements", "stnPlayerCode", "connatixAdSlot", "numHiddenLineups", "ad300Position", "numVisibleLineups", "insertSTNAds", "isLoggedInUser", "numParagraphs", "adPlacement", "tabSets", "tabOptions", "eventsToWatch", "ts", "opt", "eventsToWatchString", "e", "tabSettings", "insertVideoAds", "insertSTNAds", "insertConnatixAds", "getDataAJAX", "__async", "loadingErrorMessage", "index", "element", "ajaxURL", "targets", "emptyDataMessage", "tableDetected", "targetMissing", "target", "targetName", "response", "$target", "targetHTML", "i", "checkbox", "checkboxName", "updateCheckboxFilter", "error", "minimizeUpdate", "e", "$newsUpdate", "onData", "options", "flipDataSign", "context", "series", "data", "getKeyChartistDataPoints", "dataSets", "dataSet", "numData", "data", "maxEntry", "max", "d", "minEntry", "min", "start", "end", "keyPoints", "keyValues", "p", "getLimitMode", "chartWidthPixels", "numDataPoints", "onDrawChartist", "chartName", "dataSets", "options", "drawOptions", "labelDecimals", "labelClass", "drawLabelOffsetX", "drawLabelOffsetY", "labelStyle", "flipDataSign", "$chart", "chartWidth", "keyData", "getKeyChartistDataPoints", "numData", "a", "b", "isEveryOther", "data", "limit", "getLimitMode", "isKeyDataPoint", "d", "displayDot", "val", "getPresetsConfirmation", "options", "preset", "itemID", "title", "message", "cancelButton", "confirmButton", "confirmClass", "includeBackground", "buildConfirmationModal", "options", "title", "message", "cancelButton", "itemID", "confirmClass", "confirmButton", "includeBackground", "modalHTML", "openConfirmationModal", "e", "$triggerButton", "options", "modalOptions", "getPresetsConfirmation", "modalHTML", "buildConfirmationModal", "buildItemEditModal", "options", "title", "itemID", "itemName", "itemValue", "maxlength", "cancelButton", "saveButton", "saveClass", "includeBackground", "modalHTML", "openItemEditorModal", "e", "$triggerButton", "options", "modalHTML", "buildItemEditModal", "checkTabs", "$jumpBar", "index", "tab", "$tab", "id", "activateJumpBar", "i", "jumpBar", "waitFor", "extraWaitTime", "revealElement", "e", "$trigger", "elementSelector", "revealMode", "hideClasses", "elementsToHide", "selfDestruct", "group", "selectedClasses", "$elements", "setMinGridWidth", "revealSelectedFilter", "i", "filterLinkSet", "$filterLinkSet", "moreButtonText", "$selectedFilter", "selectedLevel", "selectedParent", "$title", "subTitle", "scrollToElementOnPageLoad", "$scrollToElements", "selectRadioButtonInRow", "e", "$rb", "rbName", "sendUserlistActivityEvent", "__async", "$userlistMetaTag", "section", "category", "error", "import_smoothscroll", "toggleCheckbox", "e", "$cb", "triggerCheckBoxFilterUpdate", "e", "checkboxName", "updateCheckboxFilter", "clearFilter", "itemSelector", "triggerClearDataFilter", "e", "itemSelector", "clearFilter", "clearInputBox", "$input", "triggerClearInputBox", "e", "$input", "clearInputBox", "triggerCloseSubNav", "e", "$moreFiltersButton", "$filterSet", "$filterWrapper", "$title", "navName", "parentName", "closeModalWindow", "triggerCloseModalWindow", "e", "closeModal", "$clickTarget", "className", "closeModalWindow", "triggerCommentReply", "e", "__async", "$comment", "$nextComment", "$commentList", "$form", "commentID", "$submitButton", "buttonHTML", "buttonText", "newButtonHTML", "openRangeEditor", "editorID", "$filterRange", "rangeWidth", "triggerRangeEditor", "e", "rangeEditorID", "openRangeEditor", "triggerSubNav", "e", "$activeNav", "activeNavName", "parentName", "$filterSet", "$filterWrapper", "$title", "navTitle", "moreButtonText", "manageEmptyState", "itemSelector", "numVisibleItems", "$emptyMessage", "emptyClass", "filterItems", "filterSettings", "tabSettings", "$items", "checkForTable", "index", "item", "$item", "checkForMatch", "tableItem", "tableID", "manageEmptyState", "getFilterSettings", "tabSetName", "$tabs", "getTabSettings", "tabName", "$tab", "dataToMatch", "secSubset", "secDataToMatch", "secSubsetOperator", "mainExclude", "secExclude", "tabTitle", "matchType", "secMatchType", "switchTab", "tabSetName", "tabName", "$tabToSelect", "filterSettings", "getFilterSettings", "tabSettings", "getTabSettings", "filterItems", "setMinGridWidth", "triggerTabOpen", "e", "$element", "tabName", "tabSetName", "switchTab", "triggerTabSwitch", "e", "$tab", "tabName", "tabSetName", "switchTab", "getArticles", "settings", "__async", "options", "response", "error", "showErrorNotification", "triggerGetArticles", "e", "__async", "$showMoreButton", "sport", "content", "column", "author", "noColumnInHeadline", "lastArticleDate", "numArticles", "settings", "i", "a", "articlesHTML", "newLastArticleDate", "noMoreArticles", "getArticles", "activateCloudinaryImages", "sportInName", "$hiddenContentFilter", "numDFS", "numTraditional", "err", "removeButtonProcessingState", "getCustomListContent", "listID", "listType", "lastContent", "excludedContentIDs", "style", "__async", "response", "error", "showErrorNotification", "triggerGetCustomListContent", "e", "__async", "$button", "listID", "lastContent", "listType", "style", "excludedContentIDs", "i", "el", "contentHTML", "newLastContent", "haveMoreContent", "getCustomListContent", "$articleList", "activateCloudinaryImages", "removeButtonProcessingState", "Store", "dbName", "storeName", "resolve", "reject", "openreq", "type", "callback", "db", "transaction", "store", "getDefaultStore", "get", "key", "req", "set", "value", "getBreakpointData", "breakpointData", "breakpointOrder", "currentBreakpoint", "currentIndex", "bp", "getTabThatShouldBeSelected", "tabSetName", "__async", "rwStore", "Store", "savedSelectedTab", "get", "val", "breakpoints", "currentBPindex", "getBreakpointData", "tabSetDataAttr", "bpSelections", "key", "obj", "newKey", "bpWithSelectedTabs", "bp", "index", "setSelectedTab", "selectedTab", "switchTab", "triggerSelectedTab", "resizeTimer", "triggerSelectedTabOnResize", "tabSetName", "triggerSelectedTab", "changeTimePeriod", "url", "triggerTimePeriodChange", "e", "urlToActivate", "changeTimePeriod", "triggerTabSwitch", "e", "$tab", "tabName", "tabSetName", "rwStore", "Store", "set", "err", "switchTab", "updateWinnings", "eventID", "centsBet", "multipliers", "multipliersMap", "el", "newWinnings", "dollars", "cents", "triggerUpdateWinnings", "e", "$input", "eventID", "centsBet", "mlHome", "mlAway", "spreadHome", "spreadAway", "ouOver", "ouUnder", "distanceYes", "distanceNo", "decisionFighter1", "decisionFighter2", "knockoutFighter1", "knockoutFighter2", "submissionFighter1", "submissionFighter2", "updateWinnings", "resizeTimer", "triggerWindowResizedListener", "getAllTabs", "tabSetName", "$tabs", "tabs", "index", "tab", "$tab", "updateFilterCounts", "$tabSets", "index", "tabSet", "tabSetName", "allTabs", "getAllTabs", "filterSettings", "getFilterSettings", "$items", "tabIndex", "tab", "counter", "tabSettings", "getTabSettings", "i", "item", "$item", "checkForMatch", "$tabCounter", "updateRangeEditor", "e", "$filterRangeEditor", "$startSelBox", "$endSelBox", "$button", "params", "start", "end", "startName", "endName", "defaultStart", "defaultEnd", "singleName", "qMark", "updatedLink", "watchItemFilterInput", "e", "$filterInput", "searchTerm", "$filterWrapper", "itemSelector", "$items", "subset", "itemsName", "$clearButton", "$noMatchesIndicator", "$item", "noMatchesLeftPad", "clearFilter", "watchItems", "items", "getFilterSettings", "updateFilterCounts", "watchInputWithClearButton", "e", "$input", "$inputWrapper", "customClearClass", "$clearButton", "clearInputBox", "addUniversalEventHandlers", "triggerWindowResizedListener", "scrollToElementOnPageLoad", "activateCloudinaryImages", "initializeLazyLoading", "activateWallpaper", "smoothScrollPolyfill", "activateRippleEffect", "addHoverClass", "removeHoverClass", "openConfirmationModal", "openItemEditorModal", "triggerCloseModalWindow", "removeErrorNotification", "revealElement", "activateSmartAnchorTags", "triggerGetArticles", "triggerCommentReply", "automaticButtonProcessing", "watchItemFilterInput", "triggerClearDataFilter", "watchInputWithClearButton", "triggerClearInputBox", "toggleCheckbox", "selectRadioButtonInRow", "getUpdates", "getRumors", "expandNewsUpdate", "minimizeUpdate", "expandPlayerOutlook", "hideAdContainers", "fixAllWidows", "triggerTabSwitch", "triggerTabOpen", "updateFilterCounts", "watchItems", "setFilterTabsGrid", "setMinGridWidth", "doOnWindowResize", "triggerSubNav", "triggerCloseSubNav", "revealSelectedFilter", "triggerRangeEditor", "updateRangeEditor", "triggerSelectedTab", "triggerSelectedTabOnResize", "e", "name", "setToggleTabsGrid", "setStatBoxesGrid", "activateJumpBar", "triggerGetCustomListContent", "initializeCheckBoxFilters", "triggerCheckBoxFilterUpdate", "insertVideoAds", "insertFreestarStickyAds", "getDataAJAX", "$inputBox", "sendUserlistActivityEvent", "onData", "onDrawChartist", "rwjsEvent", "triggerUpdateWinnings", "triggerTimePeriodChange", "buildModalWindowShell", "options", "title", "content", "isWide", "isFull", "includeBackground", "includeHeader", "modalClasses", "modalHeader", "modalHTML", "openTeamVsPosModal", "event", "$button", "pos", "team", "scoringtype", "year", "teamNameParts", "teamName", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "startweek", "endweek", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "openWinRateModal", "event", "$button", "id", "playerid", "firstname", "lastname", "pos", "team", "startweek", "endweek", "$activeTab", "tableID", "$rowData", "$weeks", "$percentages", "$barColor", "$borderColor", "i", "modalTitle", "modalHTML", "buildModalWindowShell", "ctx", "myChart", "openWinRateBySeasonModal", "event", "$button", "id", "playerid", "firstname", "lastname", "pos", "team", "startweek", "endweek", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "player", "addNFLEventHandlers", "openTeamVsPosModal", "openWinRateModal", "openWinRateBySeasonModal", "openCourtOnOffModal", "event", "__async", "$button", "player", "court", "playerId", "courtOnOff", "response", "playerHTML", "success", "$modalButton", "closeModalWindow", "error", "showErrorNotification", "clearInjuryArchiveSearch", "$input", "clearInputBox", "import_debounce", "loadCourtOnOffTable", "event", "__async", "playersOnCourt", "playersOffCourt", "team", "range", "split", "index", "modalButton", "$modalButton", "modalButtonCourt", "modalButtonTeam", "player", "playerId", "$onOffStatsTables", "mapCourtOnOffColumns", "tableData", "heatmapColumns", "maxValues", "maxList", "col", "r", "minValues", "minList", "minValue", "maxValue", "response", "totalData", "per36Data", "differenceData", "p", "a", "b", "paywall", "error", "showErrorNotification", "openCourtOnOffModal", "event", "__async", "$button", "team", "court", "teamAbbr", "courtOnOff", "excludedPlayers", "index", "player", "$player", "response", "playersHTML", "success", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "error", "showErrorNotification", "openInjuryArchiveModal", "event", "__async", "$button", "injury", "dates", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "error", "showErrorNotification", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "openCourtOnOffModal", "event", "__async", "$player", "$modalButton", "searchInjuryArchive", "settings", "__async", "response", "error", "showErrorNotification", "triggerInjuryArchiveSearch", "e", "__async", "$input", "searchTerm", "dates", "injury", "lastSearch", "clearInjuryArchiveSearch", "$searchResults", "settings", "players", "searchInjuryArchive", "resultsHTML", "player", "err", "addNBAEventHandlers", "openTeamVsPosModal", "openCourtOnOffModal", "loadCourtOnOffTable", "openInjuryArchiveModal", "debounce", "triggerInjuryArchiveSearch", "clearInjuryArchiveSearch", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addNHLEventHandlers", "openTeamVsPosModal", "openScoreCardModal", "event", "$button", "id", "firstname", "lastname", "round", "tourneyid", "playerurl", "ajaxResponse", "response", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "addPGAEventHandlers", "openScoreCardModal", "imageExists", "image_url", "http", "openTeamPreview", "event", "__async", "$button", "team", "secondteam", "teamName", "secondTeamName", "teamLogo", "secondTeamLogo", "response", "previewHTML", "success", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "error", "showErrorNotification", "addCBBEventHandlers", "openTeamPreview", "openTeamVsPosModal", "event", "$button", "pos", "team", "scoringtype", "year", "teamNameParts", "teamName", "teamLogo", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "startweek", "endweek", "view", "teamLogo", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "$gameHeaders", "weeks", "colHeaders", "colNames", "w", "i", "toObject", "names", "values", "result", "finishedCol", "finishedColumns", "key", "value", "addCFBEventHandlers", "openTeamVsPosModal", "openTeamTrendsModalSoccer", "event", "$button", "id", "league", "firstname", "lastname", "pos", "team", "startweek", "endweek", "view", "teamlogo", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addSoccerEventHandlers", "openTeamTrendsModalSoccer", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addMLBEventHandlers", "openTeamVsPosModal", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addWNBAEventHandlers", "openTeamVsPosModal", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addEuroEventHandlers", "openTeamVsPosModal", "addAlljQueryPlugins", "addUniversalEventHandlers", "addNavigationEventHandlers", "addNavEventHandlers", "addPlayerSearchEventHandlers", "addNFLEventHandlers", "addNBAEventHandlers", "addNHLEventHandlers", "addPGAEventHandlers", "addCBBEventHandlers", "addCFBEventHandlers", "addSoccerEventHandlers", "addMLBEventHandlers", "addWNBAEventHandlers", "addEuroEventHandlers"] }
');\n if (doc.querySelector('svg img')) {\n useDOMParser = true;\n }\n }());\n }\n\n /**\n * _createIterator\n *\n * @param document/fragment to create iterator for\n * @return iterator instance\n */\n var _createIterator = function(root) {\n return createNodeIterator.call(root.ownerDocument || root,\n root,\n NodeFilter.SHOW_ELEMENT\n | NodeFilter.SHOW_COMMENT\n | NodeFilter.SHOW_TEXT,\n function() { return NodeFilter.FILTER_ACCEPT; },\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n var _isClobbered = function(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n if ( typeof elm.nodeName !== 'string'\n || typeof elm.textContent !== 'string'\n || typeof elm.removeChild !== 'function'\n || !(elm.attributes instanceof NamedNodeMap)\n || typeof elm.removeAttribute !== 'function'\n || typeof elm.setAttribute !== 'function'\n ) {\n return true;\n }\n return false;\n };\n\n /**\n * _isNode\n *\n * @param object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n var _isNode = function(obj) {\n return (\n typeof Node === \"object\" ? obj instanceof Node : obj\n && typeof obj === \"object\" && typeof obj.nodeType === \"number\"\n && typeof obj.nodeName===\"string\"\n );\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param node to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n var _sanitizeElements = function(currentNode) {\n var tagName, content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n tagName = currentNode.nodeName.toLowerCase();\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for black-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]\n && typeof currentNode.insertAdjacentHTML === 'function') {\n try {\n currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML);\n } catch (e) {}\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Convert markup to cover jQuery behavior */\n if (SAFE_FOR_JQUERY && !currentNode.firstElementChild &&\n (!currentNode.content || !currentNode.content.firstElementChild) &&\n / tag that has an \"id\"\n // attribute at the time.\n if (lcName === 'name' &&\n currentNode.nodeName === 'IMG' && attributes.id) {\n idAttr = attributes.id;\n attributes = Array.prototype.slice.apply(attributes);\n _removeAttribute('id', currentNode);\n _removeAttribute(name, currentNode);\n if (attributes.indexOf(idAttr) > l) {\n currentNode.setAttribute('id', idAttr.value);\n }\n } else if (\n // This works around a bug in Safari, where input[type=file]\n // cannot be dynamically set after type has been removed\n currentNode.nodeName === 'INPUT' && lcName === 'type' &&\n value === 'file' && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {\n continue;\n } else {\n // This avoids a crash in Safari v9.0 with double-ids.\n // The trick is to first set the id to be empty and then to\n // remove the attribute\n if (name === 'id') {\n currentNode.setAttribute(name, '');\n }\n _removeAttribute(name, currentNode);\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in window || value in document || value in formElement)) {\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = value.replace(MUSTACHE_EXPR, ' ');\n value = value.replace(ERB_EXPR, ' ');\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && DATA_ATTR.test(lcName)) {\n // This attribute is safe\n }\n else if (ALLOW_ARIA_ATTR && ARIA_ATTR.test(lcName)) {\n // This attribute is safe\n }\n /* Otherwise, check the name is permitted */\n else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n continue;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n }\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n else if (IS_ALLOWED_URI.test(value.replace(ATTR_WHITESPACE,''))) {\n // This attribute is safe\n }\n /* Keep image data URIs alive if src/xlink:href is allowed */\n else if (\n (lcName === 'src' || lcName === 'xlink:href') &&\n value.indexOf('data:') === 0 &&\n DATA_URI_TAGS[currentNode.nodeName.toLowerCase()]) {\n // This attribute is safe\n }\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !IS_SCRIPT_OR_DATA.test(value.replace(ATTR_WHITESPACE,''))) {\n // This attribute is safe\n }\n /* Check for binary attributes */\n else if (!value) {\n // binary attributes are safe at this point\n }\n /* Anything else, presume unsafe, do not add it back */\n else {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n currentNode.setAttribute(name, value);\n DOMPurify.removed.pop();\n } catch (e) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n * @return void\n */\n var _sanitizeShadowDOM = function(fragment) {\n var shadowNode;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while ( (shadowNode = shadowIterator.nextNode()) ) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode\n */\n var _executeHook = function(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) { return; }\n\n hooks[entryPoint].forEach(function(hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n DOMPurify.sanitize = function(dirty, cfg) {\n var body, importedNode, currentNode, oldNode, nodeIterator, returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n if (!dirty) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString !== 'function') {\n throw new TypeError('toString is not a function');\n } else {\n dirty = dirty.toString();\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (typeof window.toStaticHTML === 'object'\n || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n } else if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else {\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {\n return dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n nodeIterator = _createIterator(body);\n\n /* Now start iterating over the created document */\n while ( (currentNode = nodeIterator.nextNode()) ) {\n\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /* adoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs. */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n };\n\n /**\n * setConfig\n * Public method to set the configuration once\n *\n * @param {Object} configuration object\n * @return void\n */\n DOMPurify.setConfig = function(cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * clearConfig\n * Public method to remove the configuration\n *\n * @return void\n */\n DOMPurify.clearConfig = function() {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * addHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint\n * @param {Function} hookFunction\n */\n DOMPurify.addHook = function(entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') { return; }\n hooks[entryPoint] = hooks[entryPoint] || [];\n hooks[entryPoint].push(hookFunction);\n };\n\n /**\n * removeHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint\n * @return void\n */\n DOMPurify.removeHook = function(entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint].pop();\n }\n };\n\n /**\n * removeHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint\n * @return void\n */\n DOMPurify.removeHooks = function(entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * removeAllHooks\n * Public method to remove all DOMPurify hooks\n *\n * @return void\n */\n DOMPurify.removeAllHooks = function() {\n hooks = {};\n };\n\n return DOMPurify;\n}));\n", "/* eslint-disable */\n/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n", "/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n", "/* eslint-disable */\n/* smoothscroll v0.4.0 - 2018 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n var isBody;\n\n do {\n el = el.parentNode;\n\n isBody = el === d.body;\n } while (isBody === false && isScrollable(el) === false);\n\n isBody = null;\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n", "/*******************************************************************************\nDO IF EXISTS\nTake action on an element if it exists and return the element so it can be chained.\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n jQuery.fn.doIfExists = function dIfE(func) {\n if (this.length) { func.apply(this); }\n return this;\n };\n}\n", "/*******************************************************************************\nDO IF NOT EXISTS\nTake action if an element does not exists and return the element so it can be chained.\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n jQuery.fn.doIfNotExists = function difNE(func) {\n if (this.length === 0) { func.apply(this); }\n return this;\n };\n}\n", "/*******************************************************************************\nFADE IN FLEXBOX ELEMENT\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n $.fn.flexFadeIn = function flexFadeIn(hideClasses, speed, callback) {\n callback = callback || function emptyCallback() {};\n hideClasses = hideClasses || 'hide';\n this.css('opacity', '0').removeClass(hideClasses).animate({ opacity: 1 }, speed || '300');\n callback();\n return this;\n };\n}\n", "/*******************************************************************************\nFADE OUT FLEXBOX ELEMENT\n*******************************************************************************/\n\nexport default function addjQueryPlugin() {\n $.fn.flexFadeOut = function flexFadeOut(hideClasses, speed, callback) {\n callback = callback || function emptyCallback() {};\n hideClasses = hideClasses || 'hide';\n this.animate({ opacity: 0 }, speed || '300', function hide() { $(this).addClass(hideClasses); callback(this); });\n\n return this;\n };\n}\n", "/*******************************************************************************\nOUTPUT SANITIZED HTML\nThis is a custom plugin written to replace jQuery's built-in html() method with something\nthat's more resistant to XSS attacks when user-generated data is added to the page.\n*******************************************************************************/\n\nimport { sanitize } from '../../../lib/_dompurify/purify';\n\nexport default function addPluginSafeHTML() {\n\n // Sanitize the HTML string before sending it through jQuery's .html() method\n jQuery.fn.safehtml = function safeHTML(htmlString) {\n const safeHTMLString = sanitize(htmlString, { SAFE_FOR_JQUERY: true });\n $(this).html(safeHTMLString);\n return this;\n };\n}\n", "/*******************************************************************************\nADD ALL jQUERY PLUGINS\nLoad all the jQuery plugins.\n*******************************************************************************/\n\nimport doIfExists from './do-if-exists';\nimport doIfNotExists from './do-if-not-exists';\nimport flexFadeIn from './flex-fade-in';\nimport flexFadeOut from './flex-fade-out';\nimport safeHTML from './safe-html';\n\nexport default function addAlljQueryPlugins() {\n doIfExists();\n doIfNotExists();\n flexFadeIn();\n flexFadeOut();\n safeHTML();\n}\n", "/*******************************************************************************\nAdd the Hover Class To An Element\nAdds the hover class to an element. Prevents touch events from triggering the hover state.\n*******************************************************************************/\n\nlet touchDetected = false;\n\nexport default function addHoverClass(e) {\n\n // 'touchstart' comes through before 'mousenter', but both will fire on IOS\n // If 'touchstart' is fired, we can set the global touchDetected variable to true\n // That way we know when to avoid trigging the hover state (which is sticky on IOS)\n if (e.type === 'touchstart') { touchDetected = true; }\n\n // As long as a touch was not detected, add the 'hovering' class which creates the hover state\n if (!touchDetected) { $(this).addClass('hovering'); }\n\n // Reset the global touchDetected variable to false so it's ready for the next time\n if (e.type === 'mouseenter') { touchDetected = false; }\n}\n", "/*******************************************************\nCLEAR SEARCH\nClears the search box and results.\n********************************************************/\n\nexport default function clearSearch() {\n\n // Clear the input, clear the last search, and remove the clear button\n $(\"input[name='playersearch']\")\n .val('')\n .data('lastsearch', '')\n .siblings('#player-search-clear').remove(); // eslint-disable-line newline-per-chained-call\n\n // Remove the search results\n $('#player-search-results').remove();\n}\n", "/*******************************************************\r\nPLAYER SEARCH EVENT HANDLERS\r\nThis handles events related to the player search boxes.\r\n********************************************************/\r\n\r\nimport addHoverClass from '../universal/hover/add-class';\r\nimport clearSearch from './clear';\r\nimport debounce from '../universal/debounce/debounce';\r\nimport handleKeyboardNavigation from './handle-keyboard-nav';\r\nimport removeHoverClass from '../universal/hover/remove-class';\r\nimport showMobileSearchBox from './show-mobile-search-box';\r\n//import showTopNavSearch from './show-top-nav-search';\r\nimport triggerSearchPlayers from './trigger-search';\r\n\r\nexport default function addPlayerSearchEventHandlers() {\r\n\r\n // Show the search box on small devices when the search icon button is tapped\r\n $(document).on('click', '.top-nav-section__search-icon', showMobileSearchBox);\r\n\r\n // Show the search input box in the top navigation when the button is clicked\r\n //$(document).on('click', '.t-nav__search-button', showTopNavSearch);\r\n\r\n // Watch for typing inside the gamer search box\r\n $(document).on('input', \"input[name='playersearch']\", debounce(triggerSearchPlayers, 300));\r\n\r\n // Watch for keyboard navigation events inside the gamer search box\r\n $(document).on('keyup', \"input[name='playersearch']\", handleKeyboardNavigation);\r\n\r\n // Clear player search box and results\r\n $(document).on('click', '#player-search-clear', clearSearch);\r\n\r\n // Control when hover effects are used on search results\r\n $(document).on('touchstart mouseenter', '.search-result', addHoverClass);\r\n $(document).on('mouseleave', '.search-result', removeHoverClass);\r\n\r\n}\r\n", "/*******************************************************\nHANDLE KEYBOARD NAVIGATION\nHandle navigating search results via keyboard and triggering actual search.\n********************************************************/\n\nimport clearSearch from './clear';\n\nexport default function handleKeyboardNavigation(e) {\n\n // Exit out if any key other than enter, esc, up or down is pressed\n if (![13, 27, 38, 40].includes(e.which)) { return; }\n\n // Get the search data\n const $input = $(e.currentTarget);\n const searchTerm = $input.val() || '';\n const sport = $input.data('sport') || '';\n\n // Check for various keyboard actions\n const keyPressed = {\n enter: (e.which === 13),\n esc : (e.which === 27),\n down : (e.which === 40),\n up : (e.which === 38),\n };\n\n // If the input is empty or the ESC key is pressed,\n // then reset everything to its initial state and exit out\n if (!searchTerm || keyPressed.esc) { clearSearch(); return; }\n\n const activeClass = 'is-active';\n const $results = $('.search-result');\n const $current = $(`.search-result.${activeClass}`);\n const aResultExists = ($results.length > 0);\n const aResultIsSelected = ($current.length > 0);\n let $next;\n\n // If the enter key is pressed while a search result is selected, go to the selected player\n // If the entry key is pressed while a search result is not selected, go the search page\n if (keyPressed.enter) {\n if(aResultIsSelected){\n window.location.href = $current.find('a').attr('href');\n return;\n } else{\n\n // The link to the search page should awlays include the current search term\n let searchPage = '/search.php?term=' + String(searchTerm).toLowerCase().replace(/[\\u2018\\u2019]/g, \"'\").replace(/[\\u201C\\u201D]/g, '\"');\n\n // Add the sport if one exists\n searchPage += ('&sport=' + sport);\n\n window.location.href = searchPage;\n return;\n }\n }\n\n // If the key pressed is up/down and a result exists\n if( (keyPressed.down || keyPressed.up) && aResultExists){\n\n // If the down key is pressed, go to the next result in the list. If we're already at the end, move to the start.\n if (keyPressed.down) {\n $next = (aResultIsSelected && $current.next().length) ? $current.next() : $results.first();\n }\n\n // If the up key is pressed, go to the previous result in the list. If we're already at the beginning, move to the end.\n if (keyPressed.up) {\n $next = (aResultIsSelected && $current.prev().length) ? $current.prev() : $results.last();\n }\n\n // Remove the active class from the current element and add to the next one\n if ($current) { $current.removeClass(activeClass); }\n $next.addClass(activeClass);\n\n // Scroll to the active search result\n const $resultsContainer = $('#player-search-results');\n $resultsContainer.animate({\n scrollTop: $next.position().top + $resultsContainer.scrollTop(),\n }, 50);\n\n }\n\n}\n", "/*******************************************************************************\nRemove Hover Class From An Element\nRemoves the 'hovering' class from an element.\n*******************************************************************************/\n\nexport default function removeHoverClass() {\n $(this).removeClass('hovering');\n}\n", "/*******************************************************\r\nShow Search Box on Devices with Small Screens\r\nShows the hidden search box on small devices when the search icon button is tapped.\r\n********************************************************/\r\n\r\nexport default function showMobileSearchBox(e) {\r\n\r\n // Hide the search icon button\r\n $(e.currentTarget).remove();\r\n\r\n // Show the expanded search box and focus the cursor inside\r\n $('.top-nav-section__search').addClass('is-visible-mobile').find('input').focus();\r\n\r\n // Add this class to the section bar so we can switch from flex row to column\r\n $('.section-bar').addClass('search-is-visible');\r\n}\r\n", "/*******************************************************\nBUILD SEARCH RESULT\nBuilds the HTML for a player search resultsHTML.\n********************************************************/\n\nexport default function buildSearchResult(sport,playerObject) {\n const { link, logo, alt, name, span, text } = playerObject;\n\n // If viewing all sports, the default logo should be at least an empty div. Othwerise it can be empty\n const logoDefault = (sport == 'All') ? '' : '';\n const logoHTML = logo ? `` : logoDefault;\n\n // Specific handler for cases where the text is not set and thus we should not have any left-margins\n const spanStyle = text ? '' : 'style=\"padding-left:0px;\"';\n\n return `\n \n \n ` + logoHTML + `\n \n ${name}\n ${text}${span}\n \n \n `;\n}\n", "/*******************************************************************************\nREMOVE ERROR NOTIFICATION\nRemoves any error notifications from the screen.\n*******************************************************************************/\n\nexport default function removeErrorNotification() {\n\n const $notification = $('.error-notification-bar');\n\n // Handle notifications in the daily section differently than the typical notification\n if ($notification.hasClass('daily-error') || $notification.hasClass('daily-success')) {\n\n // Hide notification bar\n $('.notification-bar.full-width').addClass('hide');\n\n // Hide and reset error and success message\n $notification.find('.daily-error').addClass('hide').text();\n $notification.find('.daily-success').addClass('hide').text();\n }\n\n\n // All other notification bars\n else {\n\n // Remove notification bar element\n $notification.remove();\n }\n}\n", "/*******************************************************************************\nSHOW ERROR NOTIFICATION\nShow an error notification at the bottom of the screen.\n*******************************************************************************/\n\nimport removeErrorNotificationBar from './remove-error-notification-bar';\n\nexport default function showErrorNotification(message, duration = 'forever') {\n\n // Remove any existing error bars (just in case they trigger multiple errors quickly)\n removeErrorNotificationBar();\n\n // Build the error message html\n const errorHTML = `${message}`;\n\n // Show an error message at the bottom of the screen\n $('body').append(errorHTML);\n\n // Remove the error bar from the page after a set amount of time\n // Unless the duration is set to 'forever'\n if (duration !== 'forever') { setTimeout(() => { removeErrorNotificationBar(); }, duration); }\n}\n", "/*******************************************************\nSEARCH FOR PLAYERS\nSearches for players and returns the results.\n********************************************************/\n\nimport showErrorNotificationBar from '../universal/error-handling/show-error-notification-bar';\n\nexport default async function searchPlayers(settings) {\n try {\n const response = await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/search-players.php',\n data : settings,\n timeout: 8000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n players: response.players,\n };\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to search for players. Please try again.', 3000);\n }\n}\n", "/*******************************************************\nWATCH PLAYER SEARCH INPUT\nHandle keyboard events with the player search input.\n********************************************************/\n\nimport buildSearchResult from './build-search-result';\nimport searchPlayers from './search';\n\nexport default async function triggerSearchPlayers(e) {\n\n // Searchable sports\n const searchableSports = ['All','MLB','NFL','NBA','EUR','NHL','PGA','RAC','CFB','CBB','SOC','MMA','DAY','MYROTOWIRE','CFL','WNB','TEN', 'XFL', 'ESP', 'CRI', 'KBO', 'CPB', 'AFL', 'NPB', 'USF', 'F1'];\n\n // Get the input\n const $input = $(e.currentTarget);\n\n // Get the search class from the input\n const searchClass = $input.data('search');\n\n // Get the container element\n const $searchSection = $('.'+searchClass);\n\n // Get the sport from the input\n let sport = $input.data('sport') || '';\n\n // If the sport is not searchable simply return\n if( $.inArray(sport,searchableSports) === -1 ){ return; }\n\n // Cast the special DAY and MYROTOWIRE cases to All\n if(sport === \"DAY\" || sport === \"MYROTOWIRE\"){ sport = \"All\"; }\n\n // Get the search term and convert to lowercase (to improve probability of using Redis cache) and remove any curly quotes (common problem with iPhones)\n const searchTerm = String($input.val() || '').toLowerCase().replace(/[\\u2018\\u2019]/g, \"'\").replace(/[\\u201C\\u201D]/g, '\"');\n\n // Store the last search\n const lastSearch = $input.data('lastsearch') || '';\n\n // If the last search is the same as the current search, don't run it again\n if (searchTerm === lastSearch || !searchTerm) { return; }\n\n // Add the clear button to the search box if it doesn't already exist\n const $clearButton = $('', { \n class: searchClass ? searchClass + '-clear' : '',\n id : 'player-search-clear',\n }).html('×');\n if ($('#player-search-clear').length === 0) { $searchSection.append($clearButton); }\n\n // Add the container for the search results if it doesn't already exist\n let $searchResults = $('', {\n class: searchClass ? searchClass + '-results' : '',\n id : 'player-search-results',\n });\n if ($('#player-search-results').length === 0) { $searchSection.append($searchResults); }\n\n // Grab the search results element from the page\n $searchResults = $('#player-search-results');\n\n // Display a message and exit out if there are fewer than 2 characters\n if (searchTerm.length < 2) {\n $searchResults.html('Please enter at least 2 characters.');\n return;\n }\n\n // Empty the search results and add a \"Searching...\" message\n $searchResults.html('Searching for players...');\n\n // Set the data that gets used with the AJAX query\n const settings = {\n searchTerm,\n };\n\n // If a sport was passed in, add it to the AJAX call\n if (sport) { settings.sport = sport; }\n\n try {\n // Store the current search term in a data attribute (useful for preventing duplicate AJAX calls)\n $input.data('lastsearch', searchTerm);\n\n // Search the players\n // If players is undefined, the rest of this try block won't run\n const { players } = await searchPlayers(settings);\n\n // If there are no results, exit out and show the empty state\n if (players.length === 0) {\n $searchResults.html('No players matched your search.');\n return;\n }\n\n // Build an array of search result HTML and add the results to the container\n const searchResults = players.map(player => buildSearchResult(sport,player));\n $searchResults.safehtml(searchResults.join(''));\n\n }\n catch (err) {\n // Error message already handled in search.js\n }\n}\n", "export default function displaySideNavScreen({screenToDisplay, screenName, backButtonScreen, backButtonScreenName, back }) {\r\n const $titleBar = $('.rwnav-title');\r\n\r\n // Make the title bar visible unless we're displaying the top-level menu screen\r\n $titleBar.toggleClass('hide', screenToDisplay === 'menu');\r\n\r\n // Set the screen name on the title bar\r\n $('#rwnav-title-name').text(screenName);\r\n\r\n // Add the back button screen to the back screens array\r\n const backScreens = $('#rwnav-back').data('screens') || [];\r\n const highestScreenLevel = backScreens.length === 0 ? 0 : Math.max(...backScreens.map(s => s.level));\r\n\r\n if (!back) {\r\n backScreens.push({\r\n screen: backButtonScreen,\r\n screenName: backButtonScreenName,\r\n level: highestScreenLevel + 1,\r\n });\r\n $('#rwnav-back').data('screens', backScreens); \r\n }\r\n\r\n $('.rwnav-screen').removeClass('is-open');\r\n $(`.rwnav-screen[data-list=\"${screenToDisplay}\"]`).addClass('is-open');\r\n}\r\n", "export function toggleSubNav(e) {\r\n\r\n // Get the navigation item that is being selected/hovered over\r\n const $selectedItem = $(e.currentTarget);\r\n\r\n // If this isn't a dropdown (just a single link), then exit out\r\n if ($selectedItem.find('.rwnav-section__link').length > 0) { return; }\r\n\r\n // Prevents the mouse event from occurring if the touch event is triggered (except for the side nav trigger element)\r\n if (e.type === 'touchstart') { e.preventDefault(); }\r\n\r\n // Check to see if a menu is currently open\r\n const menuIsOpen = $selectedItem.hasClass('open');\r\n\r\n // Find the sub navgations\r\n let $selectedSubNav = $(`.rwnav-section-sub__group[data-list=\"${$selectedItem.data('list')}\"]`);\r\n\r\n // Exit out if there is no sub navigation to display\r\n if ($selectedSubNav.length === 0) { return; }\r\n\r\n // Close all sub navigation menus to have a clean slate\r\n closeDropdownMenu();\r\n\r\n // If a menu was already open, then we know the user is trying to close it (which we've done above)\r\n if (menuIsOpen && e.type === 'touchstart') { return; }\r\n\r\n // Add the 'open' class to the selected item\r\n $selectedItem.addClass('open');\r\n\r\n // Make the selected sub nav visible\r\n $selectedSubNav.removeClass('hide');\r\n\r\n // Position the sub nav below the selected item\r\n $selectedSubNav.css('left', calculateDropdownPosition($selectedItem));\r\n}\r\n\r\nexport function closeDropdownMenu() {\r\n\r\n // Hide all the sub nav groups\r\n $('.rwnav-section-sub__group').addClass('hide');\r\n\r\n // Remove the 'open' class from all items\r\n $('.rwnav-section__item').removeClass('open');\r\n}\r\n\r\n// Figure out where the dropdown menu should be appear (and if it should left or right aligned)\r\nexport function calculateDropdownPosition($selectedItem) {\r\n\r\n // Find the sub navigations\r\n let $selectedSubNav = $(`.rwnav-section-sub__group[data-list=\"${$selectedItem.data('list')}\"]`);\r\n\r\n // Get the left side position of the selected item\r\n let itemLeftSide = $selectedItem.position().left;\r\n\r\n // There's a transparent border on the sub nav groups so that moving the mouse outside the\r\n // dropdown is more forgiving. This border needs to be accounted for when calculating the menu position\r\n const transparentBorderOffset = parseInt($selectedSubNav.css('border-left-width'), 10);\r\n\r\n // Get the width of the sub nav group\r\n const subNavWidth = parseInt($selectedSubNav.css('width'), 10);\r\n\r\n // Get the width of the selected item\r\n const itemWidth = parseInt($selectedItem.css('width'), 10);\r\n\r\n // Get the width of the navigation row (the page width)\r\n let pageWidth = parseInt($('.rwnav-section-sub').css('width'), 10);\r\n\r\n // Calculate where the sub nav should be positioned for right alignment\r\n const rightAlignPosition = (itemLeftSide + transparentBorderOffset + itemWidth) - subNavWidth;\r\n\r\n // Check if left-aligning the menu will make it overflow the right side of the page\r\n const overflowsRightSideOfPage = ((itemLeftSide + subNavWidth) > pageWidth);\r\n\r\n // Align the sub menu on the left unless that would make it extend past the boundaries of the right side of the page\r\n let menuPosition = overflowsRightSideOfPage ? rightAlignPosition : itemLeftSide - transparentBorderOffset;\r\n\r\n if (subNavWidth === pageWidth) { menuPosition = 0; }\r\n\r\n return menuPosition;\r\n}\r\n\r\n// Trigger the navigation menu to close (if it should)\r\nexport function triggerCloseDropdownMenu(e) {\r\n const $wasOn = $(e.currentTarget);\r\n const $movedTo = $(e.relatedTarget);\r\n\r\n // Check if the mouse was moved from a dropdown menu to a nav item\r\n const movingFromDropdownToItem = ($wasOn.hasClass('rwnav-section-sub__group') || $wasOn.hasClass('rwnav-section-sub__inner'))\r\n && ($movedTo.hasClass('rwnav-section') || $movedTo.hasClass('rwnav-section__item'));\r\n\r\n // Check if the mouse was moved from a nav item to a dropdown menu\r\n const movingFromItemToDropDown = ($wasOn.hasClass('rwnav-section__item'))\r\n && ($movedTo.hasClass('rwnav-section-sub__group') || $movedTo.hasClass('rwnav-section-sub__inner') || $movedTo.hasClass('rwnav-section-sub__link'));\r\n\r\n // If the mouse isn't on or moving to part of the selected\r\n // navigation (dropdown menu + selected nav item), then close the menu\r\n if (!movingFromDropdownToItem && !movingFromItemToDropDown) { closeDropdownMenu(); }\r\n}\r\n", "export default function openSectionMenu(){\n $('body').addClass('hide-overflow');\n $('.site-wrapper').addClass('rwnav-section-side-is-open');\n $('.fs-close-button-sticky').trigger('click');\n\n const menuStructure = $('.rwnav-section__item').map(function(i, el){\n const $menuItem = $(el);\n const name = $menuItem.text();\n const listID = $menuItem.data('list') || null;\n\n if (!listID) {\n const link = $menuItem.find('a').attr('href');\n return {\n name,\n links: [{ name, link }],\n }\n }\n\n return {\n name, \n links: $(`.rwnav-section-sub__group[data-list=\"${listID}\"] .rwnav-section-sub__link`).map(function(i, el){ \n return { name: $(el).text(), link: $(el).attr('href') }\n }).get()\n };\n }).get();\n\n // Take the menu structure and build the HTML for a right side navigation panel where items with a single link are just links, and items with multiple links are dropdowns\n const menuHTML = menuStructure.map(function(item){\n const { name, links } = item;\n if (links.length === 1) {\n return `\n ${name}`;\n }\n \n return `\n ${name} +\n \n ${links.map(function(item){\n return `${item.name}`\n }).join('')}\n \n `;\n }).join('');\n\n const sectionName = $('.rwnav-section-label:first').text();\n\n const menuTop = `\n \n All ${sectionName}\n \n \n \n \n \n `;\n\n $(\"body\").append(`\n \n ${menuTop}\n ${menuHTML}\n `);\n\n setTimeout(function(){ $('.rwnav-section-side-menu').addClass('is-open'); }, 0);\n}\n", "export default function closeSectionMenu(e){\n // Remove the menu from the screen\n $('.rwnav-section-side-menu').remove();\n\n // Remove the overflow:hidden style from the body so scrolling is possible\n $('body').removeClass('hide-overflow');\n\n // Remove the class on the site wrapper container that signals that side nav is currently open\n $('.site-wrapper').removeClass('rwnav-section-side-is-open');\n\n}\n", "import displaySideNavScreen from './display-screen';\r\nimport {toggleSubNav, triggerCloseDropdownMenu} from './section-nav-sub';\r\nimport openSectionMenu from './open-section-menu';\r\nimport closeSectionMenu from './close-section-menu';\r\n\r\nexport default function addNavEventHandlers() {\r\n //$('.site-header').append('I am experimenting with the hover setting in the top nav right now. It may break but this is temporary. - AQ');\r\n\r\n // Control top nav hover/tap dropdowns\r\n $(document).on(\"touchstart mouseenter\", \".rwnav-top-menu-wrapper\", function(){\r\n $('body').addClass(\"rwnav-dropdown-open\").attr('data-list', $(this).data(\"list\"));\r\n });\r\n\r\n $(document).on(\"mouseenter\", \".rwnav-top-account\", function(){\r\n if ($('.rwnav-logout').length >= 1) { return; }\r\n\r\n const isSmallerScreen = window.matchMedia('(max-width: 1000px)').matches;\r\n if (isSmallerScreen) { return }\r\n\r\n const logoutLink = `\r\n \r\n Account\r\n \r\n Logout \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `;\r\n\r\n $(\".rwnav-top-account\").wrap('');\r\n $('.rwnav-account-wrapper').append(logoutLink);\r\n });\r\n\r\n $(document).on(\"mouseleave\", \".rwnav-account-wrapper\", function(e){\r\n const isSmallerScreen = window.matchMedia('(max-width: 1000px)').matches;\r\n if (isSmallerScreen) { return }\r\n\r\n $('.rwnav-logout').remove();\r\n $('.rwnav-top-account').unwrap();\r\n });\r\n \r\n $(document).on(\"mouseleave\", \".site-header\", function(e){\r\n /* \r\n const $movingTo = $(e.relatedTarget);\r\n\r\n if ($movingTo.hasClass('rwnav') || $movingTo.hasClass('rwnav-top-menus')) {\r\n return; \r\n }\r\n */\r\n \r\n $('body').removeClass(\"rwnav-dropdown-open\").attr('data-list', '');\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-hamburger', function(){\r\n $('body').addClass('rwnav-is-open');\r\n $('.fs-close-button-sticky').trigger('click');\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-hamburger-close', function(){\r\n $('body').removeClass('rwnav-is-open');\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-search-icon', function(){\r\n $('body').addClass('rwnav-player-search-is-open');\r\n $('#search-for-players').focus();\r\n });\r\n\r\n $(document).on('click', '.rwnav-top-search-close', function(){\r\n $('body').removeClass('rwnav-player-search-is-open');\r\n });\r\n\r\n $(document).on('click', '.rwnav-item.has-link i, .rwnav-item:not(.has-link)', function(e){\r\n const $el = $(e.currentTarget);\r\n const isPlusButton = $el.get(0).tagName === 'I';\r\n console.log(isPlusButton);\r\n const $item = isPlusButton ? $el.parents('.rwnav-item') : $el;\r\n\r\n const screenToDisplay = $item.data('list') || '';\r\n if (!screenToDisplay) { return; }\r\n\r\n const screenName = $item.clone().find('span').remove().end().text().replace('+','');\r\n const currentScreen = $('.rwnav-screen.is-open').data('list');\r\n const currentScreenName = $('#rwnav-title-name').text();\r\n \r\n displaySideNavScreen({\r\n screenToDisplay, \r\n screenName, \r\n backButtonScreen: currentScreen, \r\n backButtonScreenName: currentScreenName,\r\n back: false,\r\n });\r\n });\r\n\r\n $(document).on('click', '#rwnav-back', function(){\r\n const $backButton = $('#rwnav-back');\r\n const backScreens = $backButton.data('screens');\r\n const backScreenNames = $backButton.data('screen-names');\r\n\r\n const {screen, screenName} = backScreens.pop();\r\n\r\n const currentScreen = $('.rwnav-screen.is-open').data('list');\r\n const currentScreenName = $('#rwnav-title-name').text();\r\n\r\n displaySideNavScreen({\r\n screenToDisplay: screen, \r\n screenName, \r\n backButtonScreen: currentScreen, \r\n backButtonScreenName: currentScreenName,\r\n back: true,\r\n });\r\n\r\n $backButton.data('screens', backScreens);\r\n $backButton.data('screen-names', backScreenNames);\r\n\r\n });\r\n\r\n // Toggles a sub navigation dropdown menu\r\n $(document).on('touchstart mouseenter', '.rwnav-section__item', toggleSubNav);\r\n\r\n // Hides a sub navigation dropdown menu\r\n $(document).on('mouseleave', '.rwnav-section__item, .rwnav-section-sub__group', triggerCloseDropdownMenu);\r\n\r\n // Open the section nav side menu\r\n $(document).on('click', '.open-section-nav', openSectionMenu);\r\n\r\n // Close the section nav side menu\r\n $(document).on('click', '.close-section-nav, .rwnav-section-side-is-open', closeSectionMenu);\r\n\r\n // Toggle a dropdown in the section nav side menu\r\n $(document).on('click', '.rwnav-section-side-menu__group.has-sub-items', function(e){\r\n if ($(e.target).hasClass('rwnav-section-side-menu__link')) { return; }\r\n\r\n const $group = $(e.currentTarget);\r\n const closingGroup = $group.hasClass('is-open');\r\n\r\n $('.rwnav-section-side-menu__group').removeClass('is-open');\r\n $('.rwnav-section-side-menu__items').addClass('hide');\r\n\r\n if (closingGroup) { return; }\r\n\r\n $group.addClass('is-open');\r\n $group.find('.rwnav-section-side-menu__items').removeClass('hide');\r\n });\r\n\r\n}\r\n", "/*******************************************************\r\nNAVIGATION EVENT HANDLERS\r\nThis handles events related to navigation interactions.\r\n********************************************************/\r\n\r\nimport * as Cookies from '../../lib/_cookie-js/js.cookie';\r\n\r\nimport addHoverClass from '../universal/hover/add-class';\r\nimport addScrollTabArrows from './scroll-tabs/arrows/add';\r\nimport adjustScrollTabArrows from './scroll-tabs/arrows/adjust';\r\nimport clearSideNavSearch from './side/search/clear';\r\nimport closeSideNav from './side/close';\r\nimport doOnWindowResize from '../universal/window-resize/do-on-window-resize';\r\nimport openSideNav from './side/open';\r\nimport removeHoverClass from '../universal/hover/remove-class';\r\nimport openDefaultTab from './scroll-tabs/toggle-default-sub-pages';\r\n//import scrollToSelectedTab from './scroll-tabs/scroll-to-selected';\r\nimport toggleDropdownMenu from './section/toggle-dropdown';\r\nimport toggleSideNavSubSection from './side/sub-section/toggle';\r\nimport triggerCloseSubDropdown from './section/trigger-close-dropdown';\r\nimport triggerItemLink from './section/trigger-item-link';\r\nimport triggerScrollViaNavArrow from './scroll-tabs/arrows/trigger-scroll';\r\nimport triggerToggleSubPages from './scroll-tabs/trigger-toggle-sub-pages';\r\nimport watchSideNavSearch from './side/search/watch';\r\n\r\nexport default function addNavigationEventHandlers() {\r\n\r\n // Add left/right arrows to all scroll tab navigation bars on the page\r\n addScrollTabArrows();\r\n\r\n // Open the default dropdown box for the section\r\n openDefaultTab();\r\n\r\n // Scroll the selected scroll tab into view (when possible) - killed by Herb <--- Haha!\r\n //scrollToSelectedTab();\r\n\r\n // Opens the offscreen navigation menu\r\n $(document).on('click', '.open-side-nav', openSideNav);\r\n\r\n // Closes the offscreen navigation menu\r\n $(document).on('click', '.side-nav-is-open, .side-nav__close', closeSideNav);\r\n\r\n // Catch taps/clicks on navigation items with a single link\r\n $(document).on('click', '.s-nav__item, .section-nav__item', triggerItemLink);\r\n\r\n // Toggles a sub navigation dropdown menu\r\n $(document).on('touchstart mouseenter', '.s-nav__item, .section-nav__item', toggleDropdownMenu);\r\n\r\n // Controls hover effect on section navigation item and dropdown links\r\n $(document).on('touchstart mouseenter', '.s-nav__item, .s-sub-nav__link, .side-nav__item, .section-nav__item, .section-sub-nav__link, .rwnav-section__item, .rwnav-section-sub__link', addHoverClass);\r\n $(document).on('mouseleave', '.s-nav__item, .s-sub-nav__link, .side-nav__item, .section-nav__item, .section-sub-nav__link, .rwnav-section__item, .rwnav-section-sub__link', removeHoverClass);\r\n\r\n // Hides a sub navigation dropdown menu\r\n $(document).on('mouseleave', '.s-nav__item, .s-sub-nav__group, .section-nav__item, .section-sub-nav__group', triggerCloseSubDropdown);\r\n\r\n // Handle typing in page search box in the section side navigation\r\n $(document).on('keyup', '.side-nav__search', watchSideNavSearch);\r\n\r\n // Clear the page search box in the section side navigation\r\n $(document).on('click', '.side-nav__clear-search', clearSideNavSearch);\r\n\r\n // Toggle a sub-section in the side nav\r\n $(document).on('click', '.side-nav__sub-section', toggleSideNavSubSection);\r\n\r\n // Show sub pages when clicking on a scroll tab\r\n $(document).on('click', '.scroll-tab', triggerToggleSubPages);\r\n\r\n // Scroll the scroll tabs navigation when an arrow is clicked/tapped\r\n $(document).on('click', '.nav-arrow-left, .nav-arrow-right', triggerScrollViaNavArrow);\r\n\r\n // Figure out of if the scroll tabs arrows should appear when the viewport is resized\r\n const $scrollTabs = $('.scroll-tabs');\r\n if ($scrollTabs.length > 0) {\r\n doOnWindowResize(() => {\r\n $scrollTabs.each(function adjustArrows() { adjustScrollTabArrows($(this)); });\r\n });\r\n }\r\n\r\n $(() => {\r\n // On page load, set the section content cookie if we're in a section/content home page\r\n // This feature persists the section content navigation even if you click on a page that technically\r\n // belongs to another contenct section (ex. if you click a /baseball/ link from the DFS nav, you'll\r\n // still continue to see the DFS nav once the new page loads)\r\n //const $activeContent = $('.top-nav-section__item.is-active');\r\n //const section = $activeContent.data('navSection') || $('#search-for-players').data('sport');\r\n //if (section === 'HOME' || section === 'All') { return; }\r\n\r\n const sectionLinks = [];\r\n $('a[data-is-section-link]').each(function loopLinks() {\r\n const link = $(this).attr('href');\r\n sectionLinks.push(link);\r\n sectionLinks.push(`${link}index.php`);\r\n });\r\n\r\n const pathName = window.location.pathname || '';\r\n\r\n if (sectionLinks.includes(pathName) || pathName.includes('/article.php') || pathName.includes('/article/')) {\r\n const $activeContent = $('.top-nav-section__item.is-active');\r\n const section = $activeContent.data('navSection') || $('#search-for-players').data('sport') || '';\r\n const content = $activeContent.data('navContent') || '';\r\n if (section && content && !['HOME', 'ALL'].includes(section)) {\r\n Cookies.set(`rwnav_${section}`, content);\r\n }\r\n }\r\n });\r\n\r\n}\r\n", "/*******************************************************************************\nADJUST ARROWS ON SCROLL\nAdjusts the display of the left/right arrows based on scroll position.\n*******************************************************************************/\n\nexport default function adjustArrows($scrollArea) {\n const $scrollTabsOuter = $scrollArea.parents('.scroll-tabs-outer');\n\n // The full width of the full scroll tabs nav bar\n const width = parseInt($scrollArea[0].scrollWidth, 10);\n\n // The width of the visible scrollable area\n const visibleWidth = parseInt($scrollArea.outerWidth(), 10);\n\n // The left scroll position inside the scrollable area\n const scrollLeft = parseInt($scrollArea.scrollLeft(), 10);\n\n // Show the right arrow if either of these apply:\n // 1. The table is scrolled all the way over to the right (with a 30px buffer to make things more smooth).\n // 2. The table does not need to be scrolled horizontally (the < 5 is to account for varying pixel calculations by browsers).\n const rightOpacityClass = ((width <= visibleWidth + scrollLeft + 30) || (width - visibleWidth) < 5) ? 'is-hidden' : 'is-visible';\n $scrollTabsOuter.find('.nav-arrow-right').removeClass('is-hidden is-visible').addClass(rightOpacityClass);\n\n // Show the left arrow if either of these apply:\n // 1. The table is scrolled all the way over to the left (with a 30px buffer to make things more smooth).\n // 2. The table does not need to be scrolled horizontally (the < 5 is to account for varying pixel calculations by browsers).\n const leftOpacityClass = (scrollLeft <= 30 || (width - visibleWidth) < 5) ? 'is-hidden' : 'is-visible';\n $scrollTabsOuter.find('.nav-arrow-left').removeClass('is-hidden is-visible').addClass(leftOpacityClass);\n}\n", "/*******************************************************************************\nADD LEFT/RIGHT ARROWS TO SCROLL TABS\nAdds arrows to the sides of the nav bar to indicate more data outside of view.\n*******************************************************************************/\n\nimport adjustArrows from './adjust';\n\nexport default function addScrollTabArrows() {\n\n $('.scroll-tabs').each((index, nav) => {\n\n // The scrollable area\n const $scrollableArea = $(nav);\n\n // If there's a visible scrollbar, we don't need the arrow indicators\n // The check below compares the height of the container (which includes any scrollbars) to the height of the first nav item\n // If they're different, then we know that scrollbars are visible on the page\n //if ($scrollableArea.outerHeight() !== $scrollableArea.find('.scroll-tab:first-child').outerHeight()) { return; }\n\n // Wrap the scroll tabs with a 'scroll-tabs-outer' div\n if ($scrollableArea.parents('.scroll-tabs-outer').length === 0) {\n $scrollableArea.wrap('');\n }\n const $scrollTabsOuter = $scrollableArea.parents('.scroll-tabs-outer');\n\n // The HTML for the left and right arrows\n const arrows = '◄►';\n\n // Add the arrow elements to the page and set the left arrow position to the edge of the fixed column\n $scrollTabsOuter.append(arrows);\n\n // Make the initial arrow adjustment\n adjustArrows($scrollableArea);\n\n // Watch the scroll position and turn the arrows on and off as necessary\n $scrollableArea.on('scroll', () => { adjustArrows($scrollableArea); });\n\n });\n\n}\n", "/*******************************************************************************\nClear The Search Box In Side Nav\nClear the section search box and show all the pages.\n*******************************************************************************/\n\n// Clear the section search box and show all the pages.\nexport default function clearSectionSearch() {\n if ($('.side-nav__search').length === 0) { return; }\n\n // Clear the search input box and hide the clear button\n $('.side-nav__search').val('').next('.side-nav__clear-search').addClass('hide');\n\n // Show all the pages and sub-section titles in the section\n $('.side-nav__item').removeClass('hide');\n $('.side-nav__sub-section').removeClass('hide');\n\n // Remove the \"No Pages Found\" message\n $('.side-nav__no-results').remove();\n\n // Make sure the menu is scrolled all the way to the top to start (possible performance issue?)\n //$('.side-nav__middle').scrollTop(0);\n\n // Remove the search class from the nav\n $('.side-nav').removeClass('is-search');\n\n // Compress all the sub nav groups\n $('.side-nav__group').removeClass('is-open is-search-result');\n}\n", "/*******************************************************************************\nClose Side Navigation\nCloses the offscreen navigation menu on the right side of the page.\n*******************************************************************************/\n\nimport clearSectionSearch from './search/clear';\n\n// Closes the side navigation menu\nexport default function closeSideNav(e) {\n\n // Prevents clicks on random elements within the site wrapper from doing anything\n e.preventDefault();\n\n // The side nav container\n const $sideNav = $('.side-nav');\n\n // Remove the class on the side nav container that signals that side nav is currently open\n $sideNav.removeClass('is-open');\n\n // Close any open sub sections\n $('.side-nav__group').removeClass('is-open');\n\n // Remove the class on the site wrapper container that signals that side nav is currently open\n $('.site-wrapper').removeClass('side-nav-is-open');\n\n // Remove the overflow:hidden style from the body so scrolling is possible\n $('body').removeClass('hide-overflow');\n\n // Clear the section search\n clearSectionSearch();\n}\n", "/*******************************************************************************\nRUN A FUNCTION WHEN THE WINDOW IS RESIZED\nTriggers a function when the window is resized.\n*******************************************************************************/\n\nexport default function doOnWindowResize(functionToRun) {\n $(window).on('rw:window-resized', functionToRun);\n}\n", "/*******************************************************************************\r\nCONDITIONALLY ADD THE SEARCH FEATURE\r\nOnly certain sports (with lots of links) will need the search feature so this\r\nadds it to only those sports.\r\n*******************************************************************************/\r\n\r\nexport default function addSearchFeature() {\r\n if ($('.side-nav__search').length > 0) { return; }\r\n\r\n const numLinks = $('.is-section .side-nav__item').length;\r\n const numSections = $('.is-section .side-nav__sub-section').length;\r\n const contentName = $('.top-nav-section__item.is-active').text();\r\n\r\n // Add search to this sport nav if it has enough links and/or sections\r\n if (numLinks >= 50 || numSections >= 10) {\r\n const searchHTML = `\r\n \r\n \r\n Search ${contentName} Pages\r\n \r\n ×\r\n \r\n `;\r\n $('.side-nav__middle').before(searchHTML);\r\n }\r\n}\r\n", "/*******************************************************************************\nOpen Side Navigation\nOpens the offscreen navigation menu on the right side of the page.\n*******************************************************************************/\n\n//import activateStickyHeaders from './sticky-headers/activate';\nimport addSearchFeature from './search/add-to-nav';\nimport clearSectionSearch from './search/clear';\n\n// Opens the side navigation menu\nexport default function openSideNav(e) {\n\n // The side nav container\n const $sideNav = $('.side-nav');\n\n // Exit out if the side nav is already open\n if ($sideNav.hasClass('is-open')) { return; }\n\n // Get the type of menu to display (Main or Section)\n const menu = $(e.currentTarget).data('menu');\n\n // Special classes for each menu type to control which items display\n const menus = {\n Main : 'viewing-main',\n Section: 'viewing-section',\n };\n\n // Set the classes on the side nav container so it opens and displays the correct menu\n $sideNav.removeClass('viewing-main viewing-section').addClass(`is-open ${menus[menu]}`);\n\n // Add a class to the site wrapper so it fades into the background when the side nav menu is open\n $('.site-wrapper').addClass('side-nav-is-open');\n\n // Set overflow:hidden on the body of the page to stop it from scrolling when scrolling the side nav (not foolproof)\n $('body').addClass('hide-overflow');\n\n // Conditionally turn on search feature\n // Only certain sports (with lots of links) will need the search feature so\n // this adds it to only those sports.\n addSearchFeature();\n\n // Clear the section search\n clearSectionSearch();\n\n // Activates sticky headers in the side navigation panel\n //activateStickyHeaders('.side-nav__sub-section', '.side-nav__middle');\n}\n", "/*******************************************************************************\nSHOW SUB PAGES\nShows the sub pages for the tab that was clicked on.\n*******************************************************************************/\n\nexport default function showSubPages(tabName) {\n const $subPagesContainer = $(`.l-boxes[data-name=\"${tabName}\"]`);\n const $connectedTab = $(`.scroll-tab[data-name=\"${tabName}\"]`);\n\n // Switch the selected tab to the one that was clicked\n $connectedTab.siblings('.scroll-tab').removeClass('is-selected hovering').end().addClass('is-selected');\n\n // Make sure all the other tabs are \"closed\"\n $connectedTab.siblings('.scroll-tab.has-more').removeClass('is-open').addClass('is-closed');\n\n // Hide all sub page sections and toggle the selected tab's sub-section\n $subPagesContainer.siblings('.l-boxes').addClass('hide');\n $subPagesContainer.toggleClass('hide');\n\n // If the selected tab was closed, scroll to the tab and open it\n if ($connectedTab.hasClass('is-closed')) {\n // $('html, body').animate({ scrollTop: $connectedTab.offset().top }, 300); -- killed by Herb\n $connectedTab.addClass('is-open').removeClass('is-closed');\n }\n\n // If the selected tab was open:\n // 1. Close it\n // 2. Restore the selected tab to it's initial state (whichever page was originally selected on page load)\n else {\n $connectedTab.addClass('is-closed').removeClass('is-open is-selected');\n $connectedTab.parents().find('.was-selected').addClass('is-selected');\n }\n}\n", "/*******************************************************************************\r\nOPEN DEFAULT TAB\r\nOpens the default tab box for scroll-tabs.\r\n*******************************************************************************/\r\n\r\nimport toggleSubPages from './toggle-sub-pages';\r\n\r\nexport default function openDefault() {\r\n const scrollTabSections = $('.scroll-tabs .scroll-tab');\r\n\r\n // Loop through all the scroll tab containers on the page\r\n scrollTabSections.each(function() {\r\n\r\n // Prevent tabs from defaulting to the wrong tab when closed.\r\n //$(this).removeClass('was-selected');\r\n //$(this).removeClass('is-selected');\r\n\r\n // Select the dropdown\r\n if ($(this).data('name') === 'Daily Sites') {\r\n $(this).addClass('is-selected');\r\n //$(this).addClass('was-selected'); // Mark as last opened tab\r\n //toggleSubPages($(this).data('name')); // Add active state\r\n }\r\n\r\n });\r\n}\r\n", "/*******************************************************\r\nClose All Sub-Navigation Dropdown Menus\r\nShows or hides the navigation menus that appear below links in the section nav.\r\n********************************************************/\r\n\r\nexport default function closeDropdownMenu() {\r\n\r\n // Hide all the sub nav groups\r\n $('.s-sub-nav__group, .section-sub-nav__group').addClass('hide');\r\n\r\n // Remove the 'open' class from all items\r\n $('.s-nav__item, .section-nav__item').removeClass('open');\r\n}\r\n", "/*******************************************************\r\nCalculate Dropdown Menu Position\r\nFigure out where the dropdown menu should be appear (and if it should left or right aligned).\r\n\r\nFiguring out when to close/position the menu is complicated because the sub nav is not a\r\nchild element of the selected item. That's how it's normally done, but it wasn't an option\r\ndue to the flexbox wrap menu for the visible navigation row (.s-nav) The required overflow: hidden\r\nsetting in the visible nav row would clip the dropdown if it was a child of a visible nav item\r\n********************************************************/\r\n\r\n// Figure out where the dropdown menu should be appear (and if it should left or right aligned)\r\nexport default function calculateDropdownPosition($selectedItem) {\r\n\r\n // Find the sub navgations\r\n let $selectedSubNav = $(`.s-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n if ($selectedSubNav.length === 0) {\r\n $selectedSubNav = $(`.section-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n }\r\n\r\n // Get the left side position of the selected item\r\n const itemLeftSide = $selectedItem.position().left;\r\n\r\n // There's a transparent border on the sub nav groups so that moving the mouse outside the\r\n // dropdown is more forgiving. This border needs to be accounted for when calculating the menu position\r\n const transparentBorderOffset = parseInt($selectedSubNav.css('border-left-width'), 10);\r\n\r\n // Get the width of the sub nav group\r\n const subNavWidth = parseInt($selectedSubNav.css('width'), 10);\r\n\r\n // Get the width of the selected item\r\n const itemWidth = parseInt($selectedItem.css('width'), 10);\r\n\r\n // Get the width of the navigation row (the page width)\r\n let pageWidth = parseInt($('.s-sub-nav').css('width'), 10);\r\n if ($('.s-sub-nav').length === 0) {\r\n pageWidth = parseInt($('.section-sub-nav').css('width'), 10);\r\n }\r\n\r\n // Calculate where the sub nav should be positioned for right alignment\r\n const rightAlignPosition = (itemLeftSide + transparentBorderOffset + itemWidth) - subNavWidth;\r\n\r\n // Check if left-aligning the menu will make it overflow the right side of the page\r\n const overflowsRightSideOfPage = ((itemLeftSide + subNavWidth) > pageWidth);\r\n\r\n // Align the sub menu on the left unless that would make it extend past the boundaries of the right side of the page\r\n let menuPosition = overflowsRightSideOfPage ? rightAlignPosition : itemLeftSide - transparentBorderOffset;\r\n\r\n if (subNavWidth === pageWidth) { menuPosition = 0; }\r\n\r\n return menuPosition;\r\n}\r\n", "/*******************************************************\r\nToggle Sub Navigation\r\nShows or hides the navigation menus that appear below links in the section nav.\r\n********************************************************/\r\n\r\nimport closeDropdownMenu from './close-dropdown';\r\nimport calculateDropdownPosition from './calculate-dropdown-pos';\r\n\r\nexport default function toggleSubNav(e) {\r\n\r\n // Get the navigation item that is being selected/hovered over\r\n const $selectedItem = $(e.currentTarget);\r\n\r\n // If this isn't a dropdown (just a single link), then exit out\r\n if ($selectedItem.find('.s-nav__link').length > 0) { return; }\r\n\r\n // Prevents the mouse event from occurring if the touch event is triggered (except for the side nav trigger element)\r\n if (e.type === 'touchstart' && !$selectedItem.hasClass('open-side-nav')) { e.preventDefault(); }\r\n\r\n // Check to see if a menu is currently open\r\n const menuIsOpen = $selectedItem.hasClass('open');\r\n\r\n // Find the sub navgations\r\n let $selectedSubNav = $(`.s-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n if ($selectedSubNav.length === 0) {\r\n $selectedSubNav = $(`.section-sub-nav__group[data-item=\"${$selectedItem.data('name')}\"]`);\r\n }\r\n\r\n // Exit out if there is no sub navigation to display\r\n if ($selectedSubNav.length === 0) { return; }\r\n\r\n // Close all sub navigation menus to have a clean slate\r\n closeDropdownMenu();\r\n\r\n // If a menu was already open, then we know the user is trying to close it (which we've done above)\r\n if (menuIsOpen && e.type === 'touchstart') { return; }\r\n\r\n // Add the 'open' class to the selected item\r\n $selectedItem.addClass('open');\r\n\r\n // Make the selected sub nav visible\r\n $selectedSubNav.removeClass('hide');\r\n\r\n // Position the sub nav below the selected item\r\n $selectedSubNav.css('left', calculateDropdownPosition($selectedItem));\r\n}\r\n", "/*******************************************************************************\nTOGGLE SIDE NAV SUB SECTION\nOpens or closes a sub-section in the side nav.\n*******************************************************************************/\n\n// Opens the side navigation menu\nexport default function toggleSubSection(e) {\n const $subSection = $(e.currentTarget);\n const $subGroup = $subSection.parents('.side-nav__group');\n\n // Exit out here if the sub section is a link\n if ($subSection.is('a') || $subGroup.hasClass('is-search-result')) { return; }\n\n // Figure out if the section is currently open or closed\n const isOpen = $subGroup.hasClass('is-open');\n\n // Close all the other sub sections and then toggle the current sub section\n $('.side-nav__group').removeClass('is-open');\n if (isOpen) {\n $subGroup.removeClass('is-open');\n }\n else {\n $subGroup.addClass('is-open');\n $subGroup.find('.side-nav__item').first().get(0).scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n}\n", "/*******************************************************\r\nToggle Sub Navigation\r\nTriggers the sub-navigation menus to show or hide.\r\n********************************************************/\r\n\r\nimport closeDropdownMenu from './close-dropdown';\r\n\r\n// Trigger the navigation menu to close (if it should)\r\nexport default function triggerCloseDropdownMenu(e) {\r\n const $wasOn = $(e.currentTarget);\r\n const $movedTo = $(e.relatedTarget);\r\n\r\n // Check if the mouse was moved from a dropdown menu to a nav item\r\n const movingFromDropdownToItem = ($wasOn.hasClass('s-sub-nav__group') || $wasOn.hasClass('section-sub-nav__group') || $wasOn.hasClass('section-sub-nav__inner'))\r\n && ($movedTo.hasClass('s-nav') || $movedTo.hasClass('s--nav__item') || $movedTo.hasClass('section-nav') || $movedTo.hasClass('section--nav__item'));\r\n\r\n // Check if the mouse was moved from a nav item to a dropdown menu\r\n const movingFromItemToDropDown = ($wasOn.hasClass('s-nav__item') || $wasOn.hasClass('section-nav__item'))\r\n && ($movedTo.hasClass('s-sub-nav__group') || $movedTo.hasClass('s-sub-nav__link') || $movedTo.hasClass('section-sub-nav__group') || $movedTo.hasClass('section-sub-nav__inner') || $movedTo.hasClass('section-sub-nav__link'));\r\n\r\n // If the mouse isn't on or moving to part of the selected\r\n // navigation (dropdown menu + selected nav item), then close the menu\r\n if (!movingFromDropdownToItem && !movingFromItemToDropDown) { closeDropdownMenu(); }\r\n}\r\n", "/*******************************************************\nTRIGGERS LINK INSIDE NAVIGATION ITEM\nThis function catches clicks on navigation items that\ncontain a single link (instead of a dropdown). Most of the\ntime, the user will tap/click the link inside, but this\ncovers the padding around the link.\n********************************************************/\n\nexport default function triggerItemLink(e) {\n const $link = $(e.currentTarget).find('.s-nav__link');\n if (!$link.length || $link.attr('target') === '_blank') { return; }\n\n window.location.href = $link.attr('href');\n}\n", "/*******************************************************************************\nTRIGGER HORIZONTAL SCROLL USING LEFT/RIGHT ARROWS\n*******************************************************************************/\n\nexport default function triggerScrollOnClick(e) {\n const $arrowButton = $(e.currentTarget);\n const $scrollableArea = $arrowButton.siblings('.scroll-tabs');\n\n // Figure out which arrow was clicked\n const isLeft = $arrowButton.hasClass('nav-arrow-left');\n\n // Stop the click event from triggering on the nav item below the arrow\n e.stopPropagation();\n\n const currentScrollPos = $scrollableArea.scrollLeft();\n\n if (isLeft) { $scrollableArea.animate({ scrollLeft: currentScrollPos - 200 }, 400); }\n if (!isLeft) { $scrollableArea.animate({ scrollLeft: currentScrollPos + 200 }, 400); }\n}\n", "/*******************************************************************************\nTRIGGERS SHOWING SUB PAGES\nTriggers showing the sub pages for the tab that was clicked on.\n*******************************************************************************/\n\nimport toggleSubPages from './toggle-sub-pages';\n\nexport default function triggerShowSubPages(e) {\n const tabName = $(e.currentTarget).data('name') || '';\n if (!tabName) { return; }\n toggleSubPages(tabName);\n}\n", "/*******************************************************************************\nGET THE NO RESULTS FOUND HTML FOR THE SEARCH FEATURE\nReturns the HTML needed to display the No Results panel.\n*******************************************************************************/\n\nexport default function getNoSearchResultsHTML() {\n return `\n No Pages Found\n Sorry, but we couldn't find any pages that matched your search.\n However, we're always looking for new ideas to improve the site so please email our team and make a suggestion if you have time:\n support@rotowire.com\n `;\n}\n", "/*******************************************************************************\nSearch Pages in Section Side Navigation\nWatch for keystrokes in the section search input box.\n*******************************************************************************/\n\nimport clearSectionSearch from './clear';\nimport getNoSearchResultsHTML from './get-no-results-html';\n\n// Watch for keystrokes in the section search input box.\nexport default function watchSectionSearch(e) {\n const $searchBox = $(e.currentTarget);\n const searchTerm = $searchBox.val();\n const itemSelector = '.side-nav__group.is-section .side-nav__item';\n const $items = $(itemSelector);\n const $sectionHeads = $('.side-nav__sub-section');\n const enterKeyPressed = e.which === 13;\n\n // Remove the No Results panel (if it's there)\n $('.side-nav__no-results').remove();\n\n // Add the search class to the nav\n $('.side-nav').addClass('is-search');\n\n // Show the clear button\n $('.side-nav__clear-search').removeClass('hide');\n\n // If the input is empty (or the ESC key is pressed, then get rid of the clear button and show everything\n if (!searchTerm || e.which === 27) {\n clearSectionSearch();\n return;\n }\n\n // A collection of the links that matched the search term\n const visibleLinks = new Set();\n\n // Hide all the sub-section titles to start\n $sectionHeads.addClass('hide');\n\n // Hide all the link items to start\n $items.addClass('hide');\n\n // If the search string does not match part of the search term, hide the item. Otherwise show it.\n $items.each(function searchPages() {\n const $item = $(this);\n\n // Get the link element, text and actual link\n const $link = $item.find('.side-nav__link');\n const linkName = $link.text();\n const link = $link.attr('href');\n\n // Get the associated section head element and text\n const $sectionHead = $item.siblings('.side-nav__sub-section');\n const sectionHeadText = $sectionHead.text();\n\n // Does the search term match the link text?\n const searchMatchesLink = linkName.search(new RegExp(searchTerm, 'i')) >= 0;\n\n // Does the search term match the section heading?\n const searchMatchesHeading = sectionHeadText.search(new RegExp(searchTerm, 'i')) >= 0;\n\n // Was this link already matched in another section? (some links are listed under multiple sections)\n const linkAlreadyFound = visibleLinks.has(link);\n\n // If the search term is found within the link text or the section header (and is not already visible):\n // 1. Add the link to the list of visible links\n // 2. Show the link\n // 3. Show the header for the link's section\n if ((searchMatchesLink || searchMatchesHeading) && !linkAlreadyFound) {\n visibleLinks.add(link);\n $item.removeClass('hide');\n $sectionHead.removeClass('hide');\n }\n\n // Expand all the sub sections\n $('.side-nav__group').addClass('is-open is-search-result');\n });\n\n // Show the \"No Results\" indicator if the search failed to match any pages\n const numResults = $(itemSelector).not(':hidden').length;\n if (numResults === 0 && $('.side-nav__no-results').length === 0) {\n const noResultsMessageHTML = getNoSearchResultsHTML();\n $('.side-nav__middle').append(noResultsMessageHTML);\n }\n\n // If you press enter when there's only one item displaying (and it's a link), then go to the link\n // Or if there's a button, trigger a click on it (and also clear the filter)\n if (enterKeyPressed) {\n if ($(itemSelector).not(':hidden').find('a').length === 1) {\n window.location.href = $(`${itemSelector}:visible`).find('a').attr('href');\n }\n }\n}\n", "/*******************************************************************************\nGET CLOUDINARY TO IGNORE HIDDEN IMAGES\nActivate the images on the page that are being loaded through Cloudinary.\n*******************************************************************************/\n\nexport default function hideHiddenImagesFromCloudinary() {\n // This prevents hidden images from being processed by Cloudinary\n $('.cld-responsive').filter(':hidden').removeClass('cld-responsive').addClass('cld-responsive-hidden');\n}\n", "/*******************************************************************************\nRESTORE HIDDEN IMAGES SO CLOUDINARY CAN PROCESS THEM\nRestore the responsive class to the hidden images so Cloudinary can process them\n*******************************************************************************/\n\nexport default function restoreHiddenImages() {\n // Restore the responsive class to the hidden images\n $('.cld-responsive-hidden').addClass('cld-responsive').removeClass('cld-responsive-hidden');\n}\n", "/*******************************************************************************\nACTIVATE CLOUDINARY IMAGES\nActivate the images on the page that are being loaded through Cloudinary.\n*******************************************************************************/\n\nimport hideHiddenImages from './hide-hidden-images';\nimport restoreHiddenImages from './restore-hidden-images';\n\nexport default function activateCloudinaryImages() {\n const $cloudinaryImages = $('.cld-responsive').filter(':visible');\n\n // If there are no Cloudinary images on the page, exit out\n if ($cloudinaryImages.length === 0) { return; }\n\n // Set the breakpoints to determine when a new image is created\n const myBreakpoints = function generateBreakpoints(width) {\n if (width <= 100) { return 10 * Math.ceil(width / 10); }\n if (width <= 1000) { return 50 * Math.ceil(width / 50); }\n return 100 * Math.ceil(width / 100);\n };\n\n if (window.cloudinary !== undefined) {\n\n if (!window.rwCloudinaryFunctionInitialized) {\n\n // keep a reference to the original function\n const origUpdateFn = window.cloudinary.Cloudinary.prototype.cloudinary_update;\n\n // This prevents hidden images from being processed by Cloudinary at a width of zero\n // Without this wrapper, a 404 error is triggered for every hidden image\n window.cloudinary.Cloudinary.prototype.cloudinary_update = function newUpdateFn() {\n hideHiddenImages();\n origUpdateFn.apply(this, arguments); // eslint-disable-line\n restoreHiddenImages();\n };\n\n window.rwCloudinaryFunctionInitialized = true;\n }\n\n window.cloudinary.Cloudinary.new({\n responsive_use_breakpoints: true,\n breakpoints : myBreakpoints,\n cloud_name : 'rotowire',\n }).responsive();\n }\n\n // Lazy load dynamically added images\n if (window.rwLazyLoader !== undefined) { window.rwLazyLoader.observe(); }\n\n // Get all the images that have a credited source attached to them\n const $imagesWithCredit = $('img[data-credit]');\n\n // If there are no Cloudinary images that have a credited source, exit out here\n if ($imagesWithCredit.length === 0) { return; }\n\n // Add photo credits section in footer\n if ($('.photo-credits').length === 0) {\n $('.site-footer').append(`\n \n Photo Credits\n \n \n `);\n }\n // Clear out the photo credit list if the section already exists\n else {\n $('.photo-credits__list').empty();\n }\n\n // Add individual photo credits to the list\n $imagesWithCredit.each(function addImageCredits(index) {\n const $image = $(this);\n const imageCredit = $image.data('credit') || '';\n const creditLink = $image.data('creditlink') || '';\n const imageNumber = index + 1;\n\n // Give the image a unique ID (or use the existing one)\n const uniqueImageID = $image.attr('id') === undefined ? `cld-img${imageNumber}` : $image.attr('id');\n $image.attr('id', uniqueImageID);\n\n if (imageCredit) {\n const creditWithLink = `${imageCredit} `;\n const creditNoLink = `${imageCredit} `;\n const creditItem = (creditLink) ? creditWithLink : creditNoLink;\n $('.photo-credits__list').append(`${creditItem}`);\n }\n });\n}\n", "/*******************************************************************************\nActivate Ripple Effect on Buttons\nCreates the ripple effect when a button is clicked.\n*******************************************************************************/\n\nexport default function activateRippleEffect(e) {\n\n // Get rid of any ripple or hover effects on all buttons to start\n $('.ripple-effect').removeClass('ripple-effect');\n //$('button').removeClass('hovering');\n\n const $button = $(this);\n\n // If the button has the 'no-ripple' class, then exit out\n if ($button.hasClass('no-ripple')) { return; }\n\n const $div = $('', { class: 'ripple-effect' });\n\n const btnOffset = $button.offset();\n const xPos = e.pageX - btnOffset.left;\n const yPos = e.pageY - btnOffset.top;\n\n // Position the ripple effect and add it to the button\n $div.css({\n top : yPos - ($div.height() / 2),\n left: xPos - ($div.width() / 2),\n }).appendTo($button);\n\n // Remove the ripple effect after 1 second (needs to match CSS animation!)\n setTimeout(() => { $div.remove(); }, 1000);\n}\n", "/*******************************************************************************\nRemove Hashes From URL\nRemoves #hashes from the URL address bar.\n*******************************************************************************/\n\nexport default function removeHashesFromURL() {\n const { hash } = window.location;\n const currentURL = window.location.href;\n const newURL = currentURL.replace(hash, '');\n\n // Keep the original hash around just in case\n window.urlHashRW = hash;\n\n window.history.replaceState('', document.title, newURL);\n}\n", "/*******************************************************************************\nSmart Anchor Tags\nWhen an anchor tag is clicked, this function:\n1. Scrolls smoothly rather than jumping to the anchor.\n2. Prevents the #hash from showing up in the URL address bar.\n3. Prevents the named element from being flush with the top of the screen.\n*******************************************************************************/\nimport removeHashesFromURL from './remove-hashes-from-url';\n\nexport default function activateSmartAnchorTags() {\n\n // Scrolls smoothly rather than jumping to the anchor.\n const anchorHash = (this) ? this.hash : window.location.hash;\n try {\n if (anchorHash && $(anchorHash).length > 0) {\n $('html, body').animate({ scrollTop: $(anchorHash).offset().top }, 300);\n }\n // Prevents the #hash from showing up in the URL address bar.\n setTimeout(() => { removeHashesFromURL(); }, 10);\n\n // Prevents the named element from being flush with the top of the screen.\n setTimeout(() => { window.scrollTo(window.scrollX, window.scrollY - 10); }, 310);\n }\n catch (error) {\n // No need to do anything. It's likely an invalid selector in which case the code above is irrelevant\n }\n\n}\n", "/*******************************************************************************\nAutomatically Add Button Processing State\nTriggers the processing state on a button.\n*******************************************************************************/\n\nexport default function automaticButtonProcessing(e) {\n\n const $button = $(e.currentTarget);\n const buttonHTML = $button.html();\n const buttonText = $button.clone().find('>*').remove().end().html(); // eslint-disable-line newline-per-chained-call\n const processingText = $button.data('inprogress') || '';\n\n const newButtonHTML = buttonHTML.replace(buttonText, processingText);\n\n // Set a data attribute with the original button html\n $button.data('origbuttonhtml', buttonHTML);\n\n // Set the button HTML\n $button.safehtml(newButtonHTML);\n\n // Disable the button\n $button.prop('disabled', true);\n\n // Remove the ripple-effect after 1 sec\n setTimeout(() => {\n $button.find('.ripple-effect').remove();\n }, 1000);\n}\n", "/*******************************************************************************\nCANCEL COMMENT REPLY\nCloses the reply form and add it back to its normal spot.\n*******************************************************************************/\n\nexport default async function triggerCommentReply(e) {\n\n // Prevents the form from submitting\n e.preventDefault();\n\n const $cancelButton = $(e.currentTarget);\n\n // Get the parent comment and our target form\n const $comments = $cancelButton.parents('.article-comments');\n const $form = $('#articleComments');\n\n // Setup the form\n $form.find('textarea').val('');\n $form.find('input[name=\"parentComment\"]').val('');\n\n // Grab the original button html from the data attribute\n const $submitButton = $form.find('.submit-reply-form');\n const origButtonHTML = $submitButton.data('origbuttonhtml');\n\n // Reset the button text\n $submitButton.safehtml(origButtonHTML);\n\n // Hide the cancel button\n $cancelButton.hide();\n\n // Move the form\n $form.detach().appendTo($comments);\n\n}\n", "/*******************************************************************************\r\nCHECK FOR WALLPAPER AD\r\nListens to see if a wallpaper ad is being served.\r\n*******************************************************************************/\r\n\r\nimport activateCloudinaryImages from '../cloudinary/activate';\r\n\r\nexport default function activateWallpaper(event) {\r\n if (!event || !event.data || !event.data.wallpaperRW) { return; }\r\n\r\n const wallpaper = event.data.wallpaperRW;\r\n const { image = '', link = '', code = null } = wallpaper;\r\n\r\n if (!image || !link) { return; }\r\n\r\n const $siteWrapper = $('.site-wrapper');\r\n\r\n $siteWrapper.addClass('wallpaper-is-active').css('background', `url(${image}) #122335 no-repeat fixed top center`);\r\n\r\n $(document).on('click', '.site-wrapper:not(.rwnav-section-side-is-open)', function listenForWallpaperClick(e) {\r\n if (e.target === this) { window.open(link, '_blank'); }\r\n });\r\n\r\n activateCloudinaryImages();\r\n\r\n // Adds a custom script tag (optional)\r\n if (code) {\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = code;\r\n\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n }\r\n\r\n // Trigger a custom event that signals the wallpaper is loaded\r\n $(document).trigger('rw:wallpaper-loaded', []);\r\n\r\n // Trigger a window resize event so elements on the page can adjust if necessary\r\n window.dispatchEvent(new Event('resize'));\r\n}\r\n\r\nwindow.addEventListener('message', activateWallpaper, false);\r\n", "/*******************************************************************************\nEXPAND A NEWS UPDATE\nExpands a news update that is in compact mode.\n*******************************************************************************/\n\nexport default function expandNewsUpdate(e) {\n\n // We don't want a click on the player link to take the user to a new page\n if (e.target.tagName.toLowerCase() === 'a') { e.preventDefault(); }\n\n // Remove the is-compact class to expand the news update and then scroll to it\n const $newsUpdate = $(e.currentTarget);\n $newsUpdate.removeClass('is-compact').addClass('was-user-expanded');\n $newsUpdate.get(0).scrollIntoView({ behavior: 'smooth', block: 'center' });\n}\n", "/*******************************************************************************\nEXPAND TOP OUTLOOK ON PLAYER PAGES\nExpands the outlook at the top of the page to display the full text.\n*******************************************************************************/\n\nexport default function expandPlayerOutlook() {\n $('.p-card__outlook-more').remove();\n $('.p-card__outlook').addClass('is-expanded');\n $('.p-card__stats').css('border-bottom', '1px solid #ddd');\n}\n", "/*******************************************************************************\nFIX ALL WIDOWS\nWidows occur when a sentence has the last word hanging out by itself on a line.\nThis should fix that problem for any selectors matched by inserting a non-breaking space in between the last two words.\nFound here: http://justinhileman.info/article/a-jquery-widont-snippet/\n*******************************************************************************/\n\nexport default function fixAllWidows() {\n $('.article__headline, .table-paywall__headline, .compact-article__link, .featured-article__title, .featured-article__desc, .compact-article__link div').each((index, element) => {\n const newHTML = $(element).html().replace(/\\s((?=(([^\\s<>]|<[^>]*>)+))\\2)\\s*$/, ' $1');\n $(element).safehtml(newHTML);\n });\n}\n", "/*******************************************************************************\nRemove Button Processing State\nRemoves the processing state from a button.\n*******************************************************************************/\n\nexport default function removeButtonProcessingState($button) {\n\n // Grab the original button html from the data attribute\n const origButtonHTML = $button.data('origbuttonhtml');\n\n // Reset the button text\n $button.safehtml(origButtonHTML);\n\n // Remove the hover state (if necessary)\n $button.removeClass('hovering');\n\n // Enable the button\n $button.prop('disabled', false);\n\n}\n", "/*******************************************************************************\r\nGET TAB SETTINGS\r\nGather all the settings related to a tab.\r\n*******************************************************************************/\r\n\r\nexport default function getTabSettings(tabSetName, tabName) {\r\n\r\n const $tab = $(`.toggle-tabs[data-name=\"${tabSetName}\"]`).find(`.toggle-tab[data-name=\"${tabName}\"]`);\r\n\r\n return {\r\n set : tabSetName,\r\n name : tabName,\r\n targets: ($tab.data('targets') || '').split('|'),\r\n add : ($tab.data('add') || '').split('|'),\r\n remove : ($tab.data('remove') || '').split('|'),\r\n };\r\n}\r\n", "/*******************************************************************************\nPERFORM ACTIONS\nPerform the action(s) associated with the selected tab.\n*******************************************************************************/\n\n/* global $$ */\nexport default function switchTab(tabSettings) {\n const { targets, add, remove } = tabSettings;\n\n // Loop through the targets and their associated actions\n for (let i = 0; i < targets.length; i++) {\n if (typeof targets[i] !== 'undefined') {\n const $target = $(targets[i]);\n if (typeof remove[i] !== 'undefined') { $target.removeClass(remove[i]); }\n if (typeof add[i] !== 'undefined') { $target.addClass(add[i]); }\n if ($target.find('.webix_dtable').length > 0 && typeof $$ !== 'undefined') {\n $$($target.find('.webix_dtable').attr('id')).resize();\n }\n }\n }\n}\n", "/*******************************************************************************\r\nSWITCH TO TAB\r\nSwitch the active filter tab.\r\n*******************************************************************************/\r\n\r\nimport getTabSettings from './get-tab-settings';\r\nimport performActions from './perform-actions';\r\nimport activateCloudinaryImages from '../cloudinary/activate';\r\n\r\nexport default function switchTab(tabSetName, tabName) {\r\n // Find the set of tabs to use\r\n const $tabs = $(`.toggle-tabs[data-name=\"${tabSetName}\"]`);\r\n\r\n // If the tab set is hidden, don't do anything\r\n if ($tabs.parents('.toggle-tabs-set').hasClass('hide') && !$tabs.data('alwaysop')) { return; }\r\n\r\n // Find the tab that was clicked on\r\n const $tabToSelect = $tabs.find(`.toggle-tab[data-name=\"${tabName}\"]`);\r\n\r\n // Add the selected class to the tab and remove it everywhere else\r\n $tabToSelect.addClass('is-selected').siblings('.toggle-tab').removeClass('is-selected');\r\n\r\n // Get all the settings for this specific tab\r\n const tabSettings = getTabSettings(tabSetName, tabName);\r\n\r\n // Perform the actions associated with the active tab\r\n performActions(tabSettings);\r\n\r\n // Trigger a custom event that signals the tab is loaded\r\n $(document).trigger(`toggleTabLoaded:${tabSetName}-${tabName.replace(/ /g, '-')}`, [tabSettings]);\r\n\r\n // Activate any Cloudinary images that may have been hidden previously\r\n activateCloudinaryImages();\r\n}\r\n", "/*******************************************************************************\nGET NEWS UPDATES\nReturns a set of updates.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\nimport switchToggleTab from '../../universal/toggle-tabs/switch-tab';\n\nexport default async function getUpdates(e) {\n const $showMoreButton = $(e.currentTarget);\n\n // Options on Show More button\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\n const type = String($showMoreButton.data('type') || '').toLowerCase();\n const itemID = $showMoreButton.data('item-id') || '';\n const lastUpdateTime = $showMoreButton.data('last-update-time') || '';\n const numUpdates = $showMoreButton.data('num-updates') || '';\n const team = String($showMoreButton.data('team') || '').toLowerCase();\n const position = String($showMoreButton.data('position') || '').toLowerCase();\n const status = String($showMoreButton.data('status') || '').toLowerCase();\n const leagueLevel = String($showMoreButton.data('leaguelevel') || '');\n const priority = $showMoreButton.data('priority') || '';\n const rank = $showMoreButton.data('rank') || '';\n const offense = $showMoreButton.data('offense') || false;\n const top = $showMoreButton.data('top') || false;\n const idp = $showMoreButton.data('idp') || false;\n const teamDef = $showMoreButton.data('teamdef') || false;\n const freeAgents = $showMoreButton.data('free-agents') || false;\n const hideLogo = $showMoreButton.data('hide-logo') || false;\n const conferenceVal = $showMoreButton.data('conference');\n const conference = (conferenceVal || conferenceVal === 0) ? conferenceVal : '';\n const league = $showMoreButton.data('league') || '';\n const competition = $showMoreButton.data('competition') || '';\n const nation = $showMoreButton.data('nation') || '';\n const nlonly = $showMoreButton.data('nlonly') || '';\n const alonly = $showMoreButton.data('alonly') || '';\n const closers = $showMoreButton.data('closers') || '';\n const minors = $showMoreButton.data('minors') || '';\n const prospects = $showMoreButton.data('prospects') || '';\n const injuries = $showMoreButton.data('injuries') || '';\n const gender = $showMoreButton.data('gender') || '';\n const foreign = $showMoreButton.data('foreign') || '';\n const language = $showMoreButton.data('language') || '';\n const extraClasses = $showMoreButton.data('extra-classes') || '';\n\n // Add the options that were set on the button\n const settings = {};\n if (type) { settings.type = type; }\n if (itemID) { settings.itemID = itemID; }\n if (lastUpdateTime) { settings.lastUpdateTime = lastUpdateTime; }\n if (numUpdates) { settings.numUpdates = numUpdates; }\n if (team) { settings.team = team; }\n if (position) { settings.position = position; }\n if (status) { settings.status = status; }\n if (leagueLevel) { settings.leagueLevel = leagueLevel; }\n if (priority) { settings.priority = priority; }\n if (rank) { settings.rank = rank; }\n if (offense) { settings.offense = offense; }\n if (top) { settings.top = top; }\n if (idp) { settings.idp = idp; }\n if (teamDef) { settings.teamDef = teamDef; }\n if (freeAgents) { settings.freeAgents = freeAgents; }\n if (hideLogo) { settings.hideLogo = hideLogo; }\n if (conference !== '') { settings.conference = conference; }\n if (league) { settings.league = league; }\n if (competition) { settings.competition = competition; }\n if (nation) { settings.nation = nation; }\n if (nlonly) { settings.nlonly = nlonly; }\n if (alonly) { settings.alonly = alonly; }\n if (closers) { settings.closers = closers; }\n if (minors) { settings.minors = minors; }\n if (prospects) { settings.prospects = prospects; }\n if (injuries) { settings.injuries = injuries; }\n if (gender) { settings.gender = gender; }\n if (foreign) { settings.foreign = foreign; }\n if (language) { settings.language = language; }\n if (extraClasses) { settings.extraClasses = extraClasses; }\n\n const sportDirectories = {\n cbb: 'cbasketball',\n cfb: 'cfootball',\n mlb: 'baseball',\n nba: 'basketball',\n nfl: 'football',\n nhl: 'hockey',\n pga: 'golf',\n cri: 'cricket',\n soc: 'soccer',\n };\n const sportDirectory = sportDirectories[sport.toLowerCase()] || sport;\n\n try {\n const response = await $.ajax({\n type : 'GET',\n url : `/${sportDirectory}/ajax/get-more-updates.php`,\n data : settings,\n timeout: 8000,\n });\n\n const { updatesHTML, newLastUpdateTime, noMoreUpdates, success } = response;\n\n // Check for errors with the data\n if (response.error || !success) { throw new Error(response.error); }\n\n $showMoreButton.data('last-update-time', newLastUpdateTime);\n $showMoreButton.before(updatesHTML);\n if (noMoreUpdates) {\n $showMoreButton.after('There are no more news updates to display.');\n $showMoreButton.remove();\n }\n\n // If there are toggle tabs in use on the news page, perform the active\n // toggle's actions on the news updates that were just added to the page\n if ($('.toggle-tabs').length > 0) {\n const $activeToggleTab = $('.toggle-tab.is-selected');\n const activeToggleTabName = $activeToggleTab.data('name');\n const activeToggleTabSetName = $activeToggleTab.parents('.toggle-tabs').data('name');\n if (activeToggleTabSetName && activeToggleTabName) {\n switchToggleTab(activeToggleTabSetName, activeToggleTabName);\n }\n }\n\n // Trigger a moreUpdatesLoaded event for use with other page resources\n $(document).trigger(`rw-moreUpdatesLoaded`, [settings]);\n\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to retrieve updates for you. Please try again.', 3000);\n }\n\n // Reset the button to its original state\n removeButtonProcessingState($showMoreButton);\n\n}\n", "/*******************************************************************************\nSET MIN GRID WIDTH\nWhen tabs have variable width content our CSS Grid styles are unable to adjust in\na way that makes the page look nice. The layout we want is essentially impossible\nto pull off with dynamic, unknown content so this javascript is necessary to make\nthe necessary layout adjustments.\n*******************************************************************************/\n\nexport default function setMinGridWidth(settings) {\n const { containers, items, padding, auto = 'fit' } = settings;\n\n // Loop through all the containers\n $(containers).each((index, set) => {\n const $set = $(set);\n\n // Reset this to start (necessary for handling window resizes correctly)\n $set.css('grid-template-columns', '');\n\n // Flip on CSS Grid\n $set.css('display', 'grid');\n\n // Get all the item widths\n const itemWidths = Array.from($set.find(items).map((i, item) => $(item).width()));\n\n // Find the maximum item content width (and allow for 10px of padding on each side)\n const maxItemWidth = Math.round(Math.max(...itemWidths)) + Number(padding);\n\n const gridFormat = auto === 'fit' ? 'auto-fit' : 'auto-fill';\n\n // Use the width of the widest item as a minimum for the tab width\n $set.css('grid-template-columns', `repeat(${gridFormat}, minmax(${maxItemWidth}px, 1fr))`);\n\n // The CSS has a max-height because the best way to let the items expand to their natural height\n // is by letting them flow into a single column. We set the max-height to avoid a content\n // jump/jitter after the page loads\n $set.css('max-height', 'none');\n\n // Special logic for specific toggle tabs sets (ones that are part of a group of filters)\n if (items === '.toggle-tab') {\n const numItems = $set.find(items).length;\n const maxWidth = (maxItemWidth + 16) * numItems;\n $(set).parents('.toggle-tabs-set.is-in-group').css('max-width', maxWidth);\n }\n\n });\n}\n", "/*******************************************************************************\r\nGET RANKINGS UPDATES\r\nReturns a set of rankings with player outlooks.\r\n*******************************************************************************/\r\n\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\r\nimport setMinGridWidth from '../../universal/css-grid/set-min-grid-width';\r\n\r\nexport default async function getUpdates(e) {\r\n const $showMoreButton = $(e.currentTarget);\r\n\r\n // Options on Show More button\r\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\r\n const pos = String($showMoreButton.data('pos') || '').toLowerCase();\r\n const type = String($showMoreButton.data('type') || '').toLowerCase();\r\n const league = String($showMoreButton.data('league') || '').toUpperCase();\r\n\r\n const lastRank = $showMoreButton.data('last-rank') || '';\r\n\r\n // Add the options that were set on the button\r\n const settings = {};\r\n if (type) { settings.type = type; }\r\n if (pos) { settings.pos = pos; }\r\n if (lastRank) { settings.lastRank = lastRank; }\r\n if (league) { settings.league = league; }\r\n\r\n const sportDirectories = {\r\n 'cbb': 'cbasketball',\r\n 'cfb': 'cfootball',\r\n 'mlb': 'baseball',\r\n 'nba': 'basketball',\r\n 'nfl': 'football',\r\n 'nhl': 'hockey',\r\n 'pga': 'golf',\r\n 'cri': 'cricket', \r\n };\r\n const sportDirectory = sportDirectories[sport.toLowerCase()] || sport;\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/${sportDirectory}/ajax/get-more-rankings.php`,\r\n data : settings,\r\n timeout: 8000,\r\n });\r\n\r\n const { rankingsHTML, newLastRank, noMoreRankings, success } = response;\r\n\r\n // Check for errors with the data\r\n if (response.error || !success) { throw new Error(response.error); }\r\n\r\n $showMoreButton.data('last-rank', newLastRank);\r\n $showMoreButton.before(rankingsHTML);\r\n if (noMoreRankings) {\r\n $showMoreButton.after('There are no more news rankings to display.');\r\n $showMoreButton.remove();\r\n }\r\n\r\n // Figure out the minimum tab width so we can add the correct CSS Grid styles for the stat boxes\r\n setMinGridWidth({\r\n containers: '.stat-boxes',\r\n items : '.stat-box',\r\n padding : '16',\r\n });\r\n\r\n\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve rankings for you. Please try again.', 3000);\r\n }\r\n\r\n // Reset the button to its original state\r\n removeButtonProcessingState($showMoreButton);\r\n\r\n}\r\n", "/*******************************************************************************\r\nGET RUMOR UPDATES\r\nReturns a set of updates.\r\n*******************************************************************************/\r\n\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\r\nimport switchToggleTab from '../../universal/toggle-tabs/switch-tab';\r\n\r\nexport default async function getRumors(e) {\r\n const $showMoreButton = $(e.currentTarget);\r\n\r\n // Options on Show More button\r\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\r\n const type = String($showMoreButton.data('type') || '').toLowerCase();\r\n const itemID = $showMoreButton.data('item-id') || '';\r\n const lastUpdateTime = $showMoreButton.data('last-update-time') || '';\r\n const numUpdates = $showMoreButton.data('num-updates') || '';\r\n const team = String($showMoreButton.data('team') || '').toLowerCase();\r\n const position = String($showMoreButton.data('position') || '').toLowerCase();\r\n const status = String($showMoreButton.data('status') || '').toLowerCase();\r\n const leagueLevel = String($showMoreButton.data('leaguelevel') || '');\r\n //const priority = $showMoreButton.data('priority') || '';\r\n const rank = $showMoreButton.data('rank') || '';\r\n const offense = $showMoreButton.data('offense') || false;\r\n const top = $showMoreButton.data('top') || false;\r\n const idp = $showMoreButton.data('idp') || false;\r\n const teamDef = $showMoreButton.data('teamdef') || false;\r\n const freeAgents = $showMoreButton.data('free-agents') || false;\r\n const hideLogo = $showMoreButton.data('hide-logo') || false;\r\n const conferenceVal = $showMoreButton.data('conference');\r\n const conference = (conferenceVal || conferenceVal === 0) ? conferenceVal : '';\r\n const league = $showMoreButton.data('league') || '';\r\n const competition = $showMoreButton.data('competition') || '';\r\n const nation = $showMoreButton.data('nation') || '';\r\n const nlonly = $showMoreButton.data('nlonly') || '';\r\n const alonly = $showMoreButton.data('alonly') || '';\r\n const closers = $showMoreButton.data('closers') || '';\r\n const minors = $showMoreButton.data('minors') || '';\r\n const prospects = $showMoreButton.data('prospects') || '';\r\n //const injuries = $showMoreButton.data('injuries') || '';\r\n const gender = $showMoreButton.data('gender') || '';\r\n const foreign = $showMoreButton.data('foreign') || '';\r\n const language = $showMoreButton.data('language') || '';\r\n const extraClasses = $showMoreButton.data('extra-classes') || '';\r\n\r\n // Add the options that were set on the button\r\n const settings = {};\r\n if (type) { settings.type = type; }\r\n if (itemID) { settings.itemID = itemID; }\r\n if (lastUpdateTime) { settings.lastUpdateTime = lastUpdateTime; }\r\n if (numUpdates) { settings.numUpdates = numUpdates; }\r\n if (team) { settings.team = team; }\r\n if (position) { settings.position = position; }\r\n if (status) { settings.status = status; }\r\n if (leagueLevel) { settings.leagueLevel = leagueLevel; }\r\n //if (priority) { settings.priority = priority; }\r\n if (rank) { settings.rank = rank; }\r\n if (offense) { settings.offense = offense; }\r\n if (top) { settings.top = top; }\r\n if (idp) { settings.idp = idp; }\r\n if (teamDef) { settings.teamDef = teamDef; }\r\n if (freeAgents) { settings.freeAgents = freeAgents; }\r\n if (hideLogo) { settings.hideLogo = hideLogo; }\r\n if (conference !== '') { settings.conference = conference; }\r\n if (league) { settings.league = league; }\r\n if (competition) { settings.competition = competition; }\r\n if (nation) { settings.nation = nation; }\r\n if (nlonly) { settings.nlonly = nlonly; }\r\n if (alonly) { settings.alonly = alonly; }\r\n if (closers) { settings.closers = closers; }\r\n if (minors) { settings.minors = minors; }\r\n if (prospects) { settings.prospects = prospects; }\r\n //if (injuries) { settings.injuries = injuries; }\r\n if (gender) { settings.gender = gender; }\r\n if (foreign) { settings.foreign = foreign; }\r\n if (language) { settings.language = language; }\r\n if (extraClasses) { settings.extraClasses = extraClasses; }\r\n\r\n const sportDirectories = {\r\n //cbb: 'cbasketball',\r\n //cfb: 'cfootball',\r\n mlb: 'baseball',\r\n nba: 'basketball',\r\n //nfl: 'football',\r\n nhl: 'hockey',\r\n //pga: 'golf',\r\n //cri: 'cricket',\r\n //soc: 'soccer',\r\n };\r\n const sportDirectory = sportDirectories[sport.toLowerCase()] || sport;\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/${sportDirectory}/ajax/get-more-rumors.php`,\r\n data : settings,\r\n timeout: 8000,\r\n });\r\n\r\n const { updatesHTML, newLastUpdateTime, noMoreUpdates, success } = response;\r\n\r\n // Check for errors with the data\r\n if (response.error || !success) { throw new Error(response.error); }\r\n\r\n $showMoreButton.data('last-update-time', newLastUpdateTime);\r\n $showMoreButton.before(updatesHTML);\r\n if (noMoreUpdates) {\r\n $showMoreButton.after('There are no more news updates to display.');\r\n $showMoreButton.remove();\r\n }\r\n\r\n // If there are toggle tabs in use on the news page, perform the active\r\n // toggle's actions on the news updates that were just added to the page\r\n if ($('.toggle-tabs').length > 0) {\r\n const $activeToggleTab = $('.toggle-tab.is-selected');\r\n const activeToggleTabName = $activeToggleTab.data('name');\r\n const activeToggleTabSetName = $activeToggleTab.parents('.toggle-tabs').data('name');\r\n if (activeToggleTabSetName && activeToggleTabName) {\r\n switchToggleTab(activeToggleTabSetName, activeToggleTabName);\r\n }\r\n }\r\n\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve updates for you. Please try again.', 3000);\r\n }\r\n\r\n // Reset the button to its original state\r\n removeButtonProcessingState($showMoreButton);\r\n\r\n}\r\n", "/*******************************************************************************\nHides Ad Containers When Ads Have Been Shut Off\n*******************************************************************************/\n\nexport default function hideAdContainers() {\n const numAdsInHeader = $('.site-header').data('num-ads');\n if (numAdsInHeader !== 'off') { return; }\n\n\n // Hide the ad containers\n const adContainerClasses = ['ad', 'ad-standard', 'ad-footer', 'ad-article', 'ad-tall__sidebar', 'ad-container-side', 'ad-container-side-lg', 'in-article-text-ad'];\n $.each(adContainerClasses, (i, adClass) => { $(`.${adClass}`).remove(); });\n\n // If the \"plp\" parameter exists, remove the ad containers and the plp parameter from the URL\n const params = new URLSearchParams(location.search);\n\n // Remove the \"plp\" parameter from the URL if it exists\n if (params.get('plp')) {\n params.delete('plp');\n const paramsLength = Array.from(params).length;\n const qMark = (paramsLength !== 0) ? '?' : '';\n window.history.replaceState({}, '', `${location.pathname}${qMark}${params}`);\n }\n}\n", "/*******************************************************************************\nCHECK FOR MATCH\nChecks if an item matches the current filter.\n*******************************************************************************/\n\nexport default function checkForMatch($item, filterSettings, tabSettings) {\n\n // This is done purely for code readabilty\n const subset = filterSettings.subset;\n const { dataToMatch, secDataToMatch, mainExclude, matchType, secSubsetOperator, secSubset, secExclude, secMatchType } = tabSettings;\n\n // If the 'All' option (*) is passed in, then everything matches\n if (dataToMatch[0] === '*') { return true; }\n\n let $elementToSearch = $item;\n\n // If there's a subset (and it's not targeting a data attribute) then use that when the searching the item\n if (subset && subset[0] !== '[') { $elementToSearch = $item.find(subset); }\n\n // This is where we'll store the value to match against\n let itemValue = '';\n\n // If the subset starts with '[' then you know it's targeting a data attribute instead of a normal selector\n // This gets set in the subset data attribute in the HMTL like this \"[attrname]\"\n if (subset[0] === '[') {\n const subsetTargetAttribute = subset.replace('[', '').replace(']', '');\n itemValue = $.trim($item.data(subsetTargetAttribute)) || '';\n }\n else {\n\n // Find the value of the text to match against\n itemValue = $.trim($elementToSearch.text()) || '';\n\n // Find the value from an input\n if ($elementToSearch.is(':input')) { itemValue = $.trim($elementToSearch.val()); }\n\n // Find the value from a radio button\n if ($elementToSearch.next('input').is('[type=\"radio\"]')) { itemValue = $.trim($elementToSearch.next('input').val()); }\n }\n\n // Check if the item matches the main filter\n let mainFilterMatches = false;\n\n // If the data needs to be an exact match\n if (matchType === 'exact') {\n mainFilterMatches = (mainExclude) ? $.inArray(itemValue, dataToMatch) === -1 : $.inArray(itemValue, dataToMatch) > -1;\n }\n\n // If the data only needs to be contained in the value\n if (matchType === 'contains') {\n dataToMatch.forEach((valToMatch) => {\n const valMatched = (mainExclude) ? !itemValue.includes(valToMatch) : itemValue.includes(valToMatch);\n if (valMatched) { mainFilterMatches = true; }\n });\n }\n\n // Defaults for when there is no secondary filter in use\n let secSubsetMatches = (secSubsetOperator === 'AND');\n\n // If we're using a secondary filter, this handles that matching\n if (secSubset) {\n secSubsetMatches = false;\n\n // Use the secondary filter when the searching the item\n const $secElemToSearch = $item.find(secSubset);\n\n // This is where we'll store the value to match against\n let secItemValue = '';\n\n // If the secondary subset starts with '[' then you know it's targeting a data attribute instead of a normal selector\n // This gets set in the secondary subset data attribute in the HMTL like this \"[attrname]\"\n if (secSubset[0] === '[') {\n const secSubsetTargetAttribute = secSubset.replace('[', '').replace(']', '');\n secItemValue = $.trim($item.data(secSubsetTargetAttribute)) || '';\n }\n else {\n\n // Find the value of the text to match against\n secItemValue = $.trim($secElemToSearch.text()) || '';\n\n // Find the value from an input\n if ($secElemToSearch.is(':input')) { secItemValue = $.trim($secElemToSearch.val()); }\n\n // Find the value from a radio button\n if ($secElemToSearch.next('input').is('[type=\"radio\"]')) { secItemValue = $.trim($secElemToSearch.next('input').val()); }\n }\n\n // If the data needs to be an exact match\n if (secMatchType === 'exact') {\n secSubsetMatches = (secExclude) ? $.inArray(secItemValue, secDataToMatch) === -1 : $.inArray(secItemValue, secDataToMatch) > -1;\n }\n\n // If the data only needs to be contained in the value\n if (secMatchType === 'contains') {\n secDataToMatch.forEach((valToMatch) => {\n const valMatched = (secExclude) ? !secItemValue.includes(valToMatch) : secItemValue.includes(valToMatch);\n if (valMatched) { secSubsetMatches = true; }\n });\n }\n }\n\n // These are the two options for the secondary operator (defaults to AND)\n const filterOptions = {\n AND: () => mainFilterMatches && secSubsetMatches,\n OR : () => mainFilterMatches || secSubsetMatches,\n };\n\n // See if the item matches the filter(s) using AND or OR (depending on what the secondary operator is)\n const filterMatches = filterOptions[secSubsetOperator]();\n\n // Returns true if the item matched the filter, false if it doesn't\n return filterMatches;\n}\n", "/*******************************************************************************\nFILTERS DATA TO MATCH CHECKBOX FILTER\nRuns the filter against a set of items attached to a checkbox filter.\n*******************************************************************************/\n\nimport checkForMatch from '../filter-tabs/check-for-match';\n\nexport default function filterItems(settings) {\n\n const $items = $(settings.items);\n const hiddenClass = `hide--${settings.name}`;\n\n // Check each item to see if it matches the filter tab criteria\n $items.each((index, item) => {\n const $item = $(item);\n\n // Check to see if the current item matches the filter\n const filterMatches = checkForMatch($item, settings, settings);\n\n // Hide matching items if the checkbox is checked and the action is 'hide' OR if the checkbox is NOT checked and the action is 'show'\n if (filterMatches && ((settings.isChecked && settings.action === 'hide') || (!settings.isChecked && settings.action === 'show'))) {\n $item.addClass(hiddenClass);\n }\n\n // Show matching items if the checkbox is checked and the action is 'show' OR if the checkbox is NOT checked and the action is 'hide'\n if (filterMatches && ((settings.isChecked && settings.action === 'show') || (!settings.isChecked && settings.action === 'hide'))) {\n $item.removeClass(hiddenClass);\n }\n });\n}\n", "/*******************************************************************************\nGET CHECKBOX FILTER SETTINGS\nReturns all the options set on a checkbox filter.\n*******************************************************************************/\n\nexport default function getSettings(name) {\n\n const $checkbox = $(`.filter-checkbox[data-name=\"${name}\"]`);\n\n // Is the checkbox checked or not\n const isChecked = $checkbox.hasClass('checked');\n\n // The selector that matches all the items we're filtering on\n const items = `${$checkbox.data('items')}`;\n\n // This optional attribute is used if the content that needs to be searched is something specific inside the item\n // Ex. If an item is a table row, but you only want to filter the results based on the first column's content\n const subset = $checkbox.data('subset') || '';\n\n // The data to match against. Only data matching this value will appear when the checkbox is checked.\n let dataToMatch = String($checkbox.data('match')) || '';\n\n // If the checkbox is not checked, then we want to remove the filter\n // To remove the filter, we just set the data to match all items\n // Because we're using a custom hide class, using the wildcard selector won't interfere with other filters.\n //if ($checkbox.hasClass('checked')) { dataToMatch = '*'; }\n\n // On an individual checkbox, you can optionally add a secondary subsset along with the data to match against\n const secSubset = $checkbox.data('secondary-subset') || '';\n let secDataToMatch = String($checkbox.data('ss-match')) || '';\n\n // By default, both the main filter AND the secondary subset have to match for an item to match\n // If this is set to OR, then it would only have to match one or the other\n const secSubsetOperator = ($checkbox.data('ss-operator') || 'AND').toUpperCase();\n\n // Check if we want to include matching items or exclude them\n const mainExclude = (dataToMatch.charAt(0) === '!');\n const secExclude = (secDataToMatch.charAt(0) === '!');\n\n // Strip off the ! character at the beginning of the match data (if it exists)\n dataToMatch = (mainExclude) ? dataToMatch.slice(1) : dataToMatch;\n secDataToMatch = (secExclude) ? secDataToMatch.slice(1) : secDataToMatch;\n\n // Convert the match criteria to an array (if it's not already)\n dataToMatch = (dataToMatch.includes(',')) ? dataToMatch.split(',') : [dataToMatch];\n secDataToMatch = (secDataToMatch.includes(',')) ? secDataToMatch.split(',') : [secDataToMatch];\n\n // Trim all the values in the arrays\n dataToMatch = $.map(dataToMatch, $.trim);\n secDataToMatch = $.map(secDataToMatch, $.trim);\n\n // Should we \"show\" or \"hide\" the items when checked\n const action = $checkbox.data('action') || 'hide';\n\n /* The matchType options below control how the filtering works. There are two options:\n --------------------------------------------------------------------------\n 1. exact - [default] The data has to exactly match the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would NOT match\n 2. contains - If this option is used, the data just needs to be somewhere in the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would match\n ----------------------------------------------------------------------------*/\n const matchType = $checkbox.data('match-type') || 'exact';\n const secMatchType = $checkbox.data('ss-match-type') || 'exact';\n\n return {\n action, // Should we \"show\" or \"hide\" the items when checked?\n isChecked, // Returns true if the checkbox is checked\n items, // The selector that matches all the items we're filtering on\n name, // The name of the checkboxFilter\n subset, // Optional attribute to add the ability to match against something inside the item\n dataToMatch, // Only items matching this value will be affected by the checkbox.\n mainExclude, // Should the main filter match using the !== operator?\n matchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n secSubset, // A secondary subset (in the form of a selector) for this checkbox\n secDataToMatch, // The data that the secondary subset should try to match against\n secExclude, // Should the secondary filter match using the !== operator?\n secSubsetOperator, // [AND/OR] Do the main AND secondary filters have to match or just one OR the other?\n secMatchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n };\n\n}\n", "/*******************************************************************************\nUPDATE DATA BASED ON CHECKBOX FILTER STATUS\nHandles a change to a checkbox filter.\n*******************************************************************************/\n\nimport filterItems from './filter-items';\nimport getFilterSettings from './get-settings';\n\nexport default function updateCheckboxFilter(checkboxName) {\n\n // Get the settings for the filter\n const settings = getFilterSettings(checkboxName);\n\n // Filter the items using the checkbox's settings\n filterItems(settings);\n}\n", "/*******************************************************************************\nTRIGGER ALL THE CHECKBOX FILTERS ON A PAGE\nUsed to run the filters on page load based on their initial state (checked or unchecked).\n*******************************************************************************/\n\nimport updateCheckboxFilter from './update-filter';\n\nexport default function initializeCheckBoxFilters() {\n\n $('.filter-checkbox').each((index, checkbox) => {\n const checkboxName = $(checkbox).data('name');\n const $items = $($(checkbox).data('items'));\n\n // Don't initialize the filter if the items are still loading via AJAX\n // Instead add a 'waiting-for-ajax' class and let the AJAX loader handle the initialization\n if ($items.find('.loading').length > 0 || $items.parent().find('.loading').length > 0) {\n $(checkbox).addClass('waiting-for-ajax');\n return;\n }\n\n updateCheckboxFilter(checkboxName);\n });\n\n}\n", "/*! lozad.js - v1.7.0 - 2018-11-08\n* https://github.com/ApoorvSaxena/lozad.js\n* Copyright (c) 2018 Apoorv Saxena; Licensed MIT */\n\n\n/**\n * Detect IE browser\n * @const {boolean}\n * @private\n */\nconst isIE = typeof document !== 'undefined' && document.documentMode;\n\nconst defaultConfig = {\n rootMargin: '0px',\n threshold : 0,\n load(element) {\n if (element.nodeName.toLowerCase() === 'picture') {\n const img = document.createElement('img');\n if (isIE && element.getAttribute('data-iesrc')) {\n img.src = element.getAttribute('data-iesrc');\n }\n if (element.getAttribute('data-alt')) {\n img.alt = element.getAttribute('data-alt');\n }\n element.appendChild(img);\n }\n if (element.getAttribute('data-src')) {\n element.src = element.getAttribute('data-src');\n }\n if (element.getAttribute('data-srcset')) {\n element.setAttribute('srcset', element.getAttribute('data-srcset'));\n }\n if (element.getAttribute('data-background-image')) {\n element.style.backgroundImage = `url('${element.getAttribute('data-background-image')}')`;\n }\n if (element.getAttribute('data-toggle-class')) {\n element.classList.toggle(element.getAttribute('data-toggle-class'));\n }\n },\n loaded() {},\n};\n\nfunction markAsLoaded(element) {\n element.setAttribute('data-loaded', true);\n}\n\nconst isLoaded = element => element.getAttribute('data-loaded') === 'true';\n\nconst onIntersection = (load, loaded) => (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0 || entry.isIntersecting) {\n observer.unobserve(entry.target);\n\n if (!isLoaded(entry.target)) {\n load(entry.target);\n markAsLoaded(entry.target);\n loaded(entry.target);\n }\n }\n });\n};\n\nconst getElements = (selector, root = document) => {\n if (selector instanceof Element) {\n return [selector];\n }\n if (selector instanceof NodeList) {\n return selector;\n }\n return root.querySelectorAll(selector);\n};\n\nfunction lozad(selector = '.lozad', options = {}) {\n const {\n root, rootMargin, threshold, load, loaded,\n } = Object.assign({}, defaultConfig, options);\n let observer;\n\n if (window.IntersectionObserver) {\n observer = new IntersectionObserver(onIntersection(load, loaded), {\n root,\n rootMargin,\n threshold,\n });\n }\n\n return {\n observe() {\n const elements = getElements(selector, root);\n\n for (let i = 0; i < elements.length; i++) {\n if (isLoaded(elements[i])) {\n continue;\n }\n if (observer) {\n observer.observe(elements[i]);\n continue;\n }\n load(elements[i]);\n markAsLoaded(elements[i]);\n loaded(elements[i]);\n }\n },\n triggerLoad(element) {\n if (isLoaded(element)) {\n return;\n }\n\n load(element);\n markAsLoaded(element);\n loaded(element);\n },\n observer,\n };\n}\n\nexport default lozad;\n", "/*******************************************************************************\nLAZY LOAD CLOUDINARY IMAGES\nWe're using the Lozad libary with some adaptations.\n*******************************************************************************/\n\nimport lozad from '../../../lib/_lozad/lozad.es';\nimport activateCloudinaryImages from './activate';\n\nexport default function initializeLazyLoading() {\n window.rwLazyLoader = lozad('.lozad', {\n // We don't want to do anything here since the Cloudinary library\n // takes care of loading the image.\n load : () => {},\n loaded: (el) => {\n el.classList.add('cld-responsive');\n activateCloudinaryImages();\n },\n rootMargin: '150px 0px',\n });\n window.rwLazyLoader.observe();\n}\n", "/*******************************************************************************\r\nInsert Freestar Sticky Ads\r\nAdd sticky ads to the page on mobile and on some desktop pages\r\n*******************************************************************************/\r\n\r\nfunction configureFreestarStickyAds(){\r\n if (!window.freestar?.queue) { return; }\r\n\r\n // Add sticky ad to the bottom of the page on mobile\r\n window.freestar.queue.push(function(){\r\n window.freestar.newStickyFooter(\"rotowire_adhesion\");\r\n });\r\n\r\n const isLoggedInUser = $('.rwnav-top-account').length > 0;\r\n\r\n // Add sticky ad to the bottom of the page on desktop (if the user is not logged in)\r\n if (!isLoggedInUser) {\r\n const desktopPages = [\r\n '/basketball/nba-lineups.php',\r\n '/baseball/daily-lineups.php',\r\n '/soccer/lineups.php',\r\n '/football/lineups.php',\r\n '/wnba/lineups.php',\r\n '/euro/daily-lineups.php',\r\n ];\r\n const currentPage = window.location.pathname;\r\n const desktopStickyShouldAppear = desktopPages.some(page => currentPage.includes(page));\r\n\r\n if (desktopStickyShouldAppear) {\r\n window.freestar.queue.push(function(){\r\n window.freestar.newStickyFooter(\"rotowire_adhesion_desktop\");\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default function insertFreestarStickyAds(){\r\n if (window.freestar?.queue) { return configureFreestarStickyAds(); }\r\n $(window).on(\"load\", configureFreestarStickyAds);\r\n}\r\n", "/*******************************************************************************\r\nInsert Connatix Ads\r\nAdd Connatix ads to articles and lineup pages\r\n*******************************************************************************/\r\n\r\n// Add a connatix ad in the set of lineups making sure to have some space between the existing 300x250 ad\r\nfunction addLineupCardPlacements() {\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 5 && $('.is-connatix').length === 0) {\r\n const extraLineupsAd = `\r\n `;\r\n let connatixAdSlot = 3;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 2 : ad300Position + 2;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${extraLineupsAd}`);\r\n }\r\n\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 10 && $('.is-connatix').length === 1) {\r\n console.log('hello');\r\n const extraLineupsAd = `\r\n `;\r\n let connatixAdSlot = 9;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 3 : ad300Position + 3;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${extraLineupsAd}`);\r\n }\r\n\r\n}\r\n\r\nexport default function insertConnatixAds() {\r\n if (!window.cnxps) { return; }\r\n\r\n // PLAYER PAGES\r\n if ($('.pp-connatix-section').length > 0) {\r\n const playerPageAd = `\r\n `;\r\n $('.pp-connatix-section').html(playerPageAd);\r\n }\r\n\r\n // ARTICLES\r\n if ($('.article__body').length > 0 && $('.article-preview-fader').length === 0) {\r\n const numParagraphs = $('.article__body > p').length;\r\n let adPlacement = 3;\r\n if (numParagraphs < adPlacement) { adPlacement = Math.max(numParagraphs - 1, 1); }\r\n\r\n const articleAd = `\r\n `;\r\n $(`.article__body > p:nth-of-type(${adPlacement})`).after(`${articleAd}`);\r\n return;\r\n }\r\n\r\n // LINEUPS\r\n if ($('.lineups').length > 0) {\r\n\r\n // Add ad to bottom of lineups page\r\n /*\r\n const lineupsAd = `\r\n `;\r\n if ($('.page.has-gdc').length === 0) {\r\n $('.page').append(`${lineupsAd}`);\r\n }\r\n */\r\n\r\n // Add ad as a lineup card\r\n // We have to watch for the toggle-tab event on the \"Hide Games That Have Started\" option for each sport because\r\n // it messes with the positioning of the ads\r\n const tabSets = [\r\n 'lineups-nfl-hidestarted',\r\n 'lineups-mlb-hidestarted',\r\n 'lineups-nba-hidestarted',\r\n 'lineups-nhl-hidestarted',\r\n 'lineups-euro-hidestarted',\r\n 'lineups-soccer-hidestarted',\r\n 'lineups-cricket-hidestarted',\r\n ];\r\n const tabOptions = ['Yes', 'No'];\r\n const eventsToWatch = [];\r\n tabSets.forEach((ts) => {\r\n tabOptions.forEach((opt) => { eventsToWatch.push(`toggleTabLoaded:${ts}-${opt}`); });\r\n });\r\n const eventsToWatchString = eventsToWatch.join(' ');\r\n $(document).on(eventsToWatchString, (e, tabSettings) => { addLineupCardPlacements(); });\r\n }\r\n}\r\n", "/*******************************************************************************\r\nInsert Connatix Ads\r\nAdd Connatix ads to articles and lineup pages\r\n*******************************************************************************/\r\n\r\nfunction getSTNPlayerCode(){\r\n return ``;\r\n}\r\n\r\n// Add a connatix ad in the set of lineups making sure to have some space between the existing 300x250 ad\r\nfunction addLineupCardPlacements() {\r\n const stnPlayerCode = getSTNPlayerCode();\r\n\r\n // Add CSS to make the ad take up the full width of the container\r\n document.head.appendChild(document.createElement(\"style\")).innerHTML = \".lineup.is-ad.is-connatix > div[data-stn-player] { min-width: 100%; }\";\r\n\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 5 && $('.is-connatix').length === 0) {\r\n let connatixAdSlot = 3;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 2 : ad300Position + 2;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${stnPlayerCode}`);\r\n }\r\n\r\n if ($('.lineup:not(.hide):not(.is-tools)').length >= 10 && $('.is-connatix').length === 1) {\r\n let connatixAdSlot = 9;\r\n const numHiddenLineups = $('.lineup.hide').length;\r\n if (numHiddenLineups > 0) {\r\n const ad300Position = $('.lineup.is-ad').index();\r\n const numVisibleLineups = $('.lineup:not(.hide):not(.is-tools)').length;\r\n connatixAdSlot = numHiddenLineups > ad300Position ? numHiddenLineups + 3 : ad300Position + 3;\r\n connatixAdSlot = Math.min(numVisibleLineups - 1, connatixAdSlot);\r\n }\r\n $(`.lineup:nth-child(${connatixAdSlot})`).after(`${stnPlayerCode}`);\r\n }\r\n\r\n}\r\n\r\nexport default function insertSTNAds() { \r\n const isLoggedInUser = $('.rwnav-top-account').length > 0;\r\n //if (isLoggedInUser) { return; }\r\n console.log('Loading STN ads');\r\n\r\n // ARTICLES\r\n if ($('.article__body').length > 0 && $('.article-preview-fader').length === 0) {\r\n const numParagraphs = $('.article__body > p').length;\r\n let adPlacement = 3;\r\n if (numParagraphs < adPlacement) { adPlacement = Math.max(numParagraphs - 1, 1); }\r\n $(`.article__body > p:nth-of-type(${adPlacement})`).after(`${getSTNPlayerCode()}`);\r\n return;\r\n }\r\n\r\n // LINEUPS\r\n if ($('.lineups').length > 0) {\r\n\r\n // Add ad as a lineup card\r\n // We have to watch for the toggle-tab event on the \"Hide Games That Have Started\" option for each sport because\r\n // it messes with the positioning of the ads\r\n const tabSets = [\r\n 'lineups-nfl-hidestarted',\r\n 'lineups-mlb-hidestarted',\r\n 'lineups-nba-hidestarted',\r\n 'lineups-nhl-hidestarted',\r\n 'lineups-euro-hidestarted',\r\n 'lineups-soccer-hidestarted',\r\n 'lineups-cricket-hidestarted',\r\n ];\r\n const tabOptions = ['Yes', 'No'];\r\n const eventsToWatch = [];\r\n tabSets.forEach((ts) => {\r\n tabOptions.forEach((opt) => { eventsToWatch.push(`toggleTabLoaded:${ts}-${opt}`); });\r\n });\r\n const eventsToWatchString = eventsToWatch.join(' ');\r\n $(document).on(eventsToWatchString, (e, tabSettings) => { addLineupCardPlacements(); });\r\n }\r\n}\r\n", "import insertConnatixAds from './insert-connatix';\nimport insertSTNAds from './insert-stn';\n\nexport default function insertVideoAds(){\n if (window.location.host.includes('dev') || window.location.host.includes('localhost')) { \n return insertSTNAds();\n }\n insertConnatixAds();\n}\n", "/*******************************************************************************\nLOAD ALL AJAX URLS\nLook for any \"ajax-load\" data attributes and use them to load data into the targeted elements.\n*******************************************************************************/\n/* eslint-disable no-console */\n\nimport updateCheckboxFilter from '../filter-checkboxes/update-filter';\n\nexport default async function getDataAJAX() {\n const loadingErrorMessage = 'We were unable to load this data. Please try again.';\n\n // Find all the AJAX urls to load\n $('[data-ajax-load]').each(async (index, element) => {\n const ajaxURL = $(element).data('ajax-load');\n const targets = $(element).data('ajax-targets').split(',');\n const emptyDataMessage = $(element).data('ajax-empty') || '';\n\n // Tables need to be handled differently than everything else.\n // So if any of the target elements are a table, then we need to exit without running an AJAX request.\n let tableDetected = false;\n let targetMissing = false;\n targets.forEach((target) => {\n if ($(target).length === 0) { targetMissing = true; }\n\n if ($(target).is('table')) {\n const targetName = target.replace('#', '');\n tableDetected = true;\n\n // Set the AJAX url, AJAX data source and (optionally) the 'noresults' data attribute on the table element\n // Both these attributes are used when loading the table with DataTables\n $(target).data('ajaxsource', ajaxURL);\n $(target).data('datasource', targetName);\n if (emptyDataMessage) { $(target).data('noresults', emptyDataMessage); }\n }\n });\n if (targetMissing || tableDetected) { return; }\n\n // Run the AJAX request and load the data returned into the target elements\n try {\n const response = await $.ajax({\n type : 'GET',\n url : ajaxURL,\n timeout: 120000, // 2 minute timeout to accommodate slow MyRotoWire query (reduce later?)\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Load the data into the targets\n targets.forEach((target) => {\n const $target = $(target);\n const targetName = target.replace('#', '');\n const targetHTML = (targetName in response) ? response[targetName] : 'data not returned';\n\n if ($target.get(0).tagName === \"META\") { return; }\n\n // If the target element does not exists, let the developer know in the console\n if ($target.length === 0) {\n console.log('The element you are targeting does not exist on the page.');\n }\n\n // If the data for the targeted element does not exist, let the developer and user know.\n if (targetHTML === 'data not returned') {\n $target.replaceWith(loadingErrorMessage);\n console.log('The data for your targeted element is not being returned.');\n }\n\n // If the AJAX call was successful, but the data came back empty, display a message to the user.\n if (!targetHTML) {\n $target.replaceWith(emptyDataMessage || 'No data was found.');\n }\n\n // Load the data into the target\n $target.replaceWith(targetHTML);\n });\n\n // Initialize the checkbox filters that were waiting for the AJAX to finish\n $('.filter-checkbox.waiting-for-ajax').each((i, checkbox) => {\n const checkboxName = $(checkbox).data('name');\n updateCheckboxFilter(checkboxName);\n });\n }\n catch (error) {\n targets.forEach((target) => { $(target).replaceWith(loadingErrorMessage); });\n }\n });\n}\n", "/*******************************************************************************\nMINIMIZE A NEWS UPDATE\nShrinks a news update down to just its headline.\n*******************************************************************************/\n\nexport default function minimizeUpdate(e) {\n const $newsUpdate = $(e.currentTarget);\n\n // We need links inside the news update to continue to work\n if (e.target.className === 'news-update__top') {\n $newsUpdate.removeClass('was-user-expanded').addClass('is-compact');\n }\n}\n", "/*******************************************************************************\nCHARTIST DATA PROCESSING\nThis returns a function that can be used to manipulate a chart's data set.\n*******************************************************************************/\n\nexport default function onData(options = {}) {\n const {\n flipDataSign = false,\n } = options;\n\n return (context) => {\n context.data.series = context.data.series.map(series => series.map((data) => {\n if (flipDataSign) { data.value = -data.value; }\n return data;\n }));\n };\n //TEST\n}\n", "/*******************************************************************************\nGET KEY DATA POINTS FOR CHART\nThis calculates the start, end, max and min data points from a chart's data set.\n*******************************************************************************/\n\nexport default function getKeyChartistDataPoints(dataSets) {\n return dataSets.map((dataSet) => {\n const numData = dataSet.length;\n if (numData === 0) { return []; }\n\n const data = $.extend(true, [], dataSet);\n\n const maxEntry = data.reduce((max, d) => ((Number(d.value) >= Number(max.value)) ? d : max));\n const minEntry = data.reduce((min, d) => ((Number(d.value) < Number(min.value)) ? d : min));\n const start = data[0];\n const end = data[numData - 1];\n\n const keyPoints = [start, end];\n const keyValues = keyPoints.map(p => p.value);\n\n if (!keyValues.includes(minEntry.value)) { keyPoints.push(minEntry); }\n if (!keyValues.includes(maxEntry.value)) { keyPoints.push(maxEntry); }\n\n return keyPoints;\n });\n}\n", "/*******************************************************************************\nGET LIMIT MODE\nThere can be limited space to display data points on chart so this function adapts how\nthe chart is displayed based on the number of data points and the available width.\nIt flips between showing all data points (\"all\"), showing every other data point (\"everyOther\"),\nor showing only key data points [start, end, min, max] (\"key\").\n*******************************************************************************/\n\nexport default function getLimitMode(chartWidthPixels, numDataPoints) {\n if (chartWidthPixels < 350) {\n if (numDataPoints > 10) { return 'key'; }\n return 'all';\n }\n if (chartWidthPixels < 450) {\n if (numDataPoints > 15) { return 'key'; }\n return 'all';\n }\n if (chartWidthPixels < 700) {\n if (numDataPoints > 40) { return 'key'; }\n if (numDataPoints > 20) { return 'everyOther'; }\n return 'all';\n }\n if (chartWidthPixels < 800) {\n if (numDataPoints > 50) { return 'key'; }\n if (numDataPoints > 25) { return 'everyOther'; }\n return 'all';\n }\n if (chartWidthPixels < 950) {\n if (numDataPoints > 60) { return 'key'; }\n if (numDataPoints > 30) { return 'everyOther'; }\n return 'all';\n }\n if (chartWidthPixels < 1050) {\n if (numDataPoints > 70) { return 'key'; }\n if (numDataPoints > 35) { return 'everyOther'; }\n return 'all';\n }\n if (numDataPoints > 80) { return 'key'; }\n if (numDataPoints > 40) { return 'everyOther'; }\n return 'all';\n}\n", "/*******************************************************************************\nCHARTIST DRAW PROCESSING\nThis returns a function that can be used to change how a chart is drawn on screen.\n*******************************************************************************/\n\nimport getKeyData from './get-key-data-points';\nimport getLimitMode from './get-limit-mode';\n\nexport default function onDrawChartist(chartName, dataSets, options = {}) {\n const drawOptions = $.extend(true, {}, options.rw);\n drawOptions.labelClass = options.labelClass;\n\n const {\n labelDecimals = 0,\n labelClass = 'ct-point-label',\n drawLabelOffsetX = -10,\n drawLabelOffsetY = -10,\n labelStyle = '',\n flipDataSign = false,\n } = drawOptions;\n const $chart = $(`#chart${chartName}`);\n let chartWidth;\n\n const keyData = getKeyData(dataSets);\n const numData = dataSets.reduce((a, b) => (a.length > b.length ? a : b), []).length;\n\n let isEveryOther = true;\n\n return (data) => {\n if (data.type === 'point') {\n if (data.index === 0) { chartWidth = $chart.width(); }\n\n const limit = getLimitMode(chartWidth, numData);\n const isKeyDataPoint = keyData.flat().map(d => d.meta).includes(data.meta);\n\n // Figure out if the data point dot should be displayed\n const displayDot = (limit === 'all') || (limit === 'key' && isKeyDataPoint) || (limit === 'everyOther' && isEveryOther === true);\n\n // Flip the isEveryOther variable so the next dot has the opposite visibility\n isEveryOther = !isEveryOther;\n\n if (displayDot) {\n const val = flipDataSign ? -data.value.y : data.value.y;\n data.group\n .elem('text', {\n x : data.x + Number(drawLabelOffsetX),\n y : data.y + Number(drawLabelOffsetY),\n style: labelStyle,\n }, labelClass)\n .text(Number(val).toFixed(labelDecimals));\n }\n else {\n data.element.remove();\n }\n }\n };\n}\n", "/*******************************************************************************\nGET CONFIRMATION MODAL SETTINGS\nThis function determines a confirmation modal functions.\n1) If any values were passed in as data attributes, those take precedence over the presets and default options.\n2) If a preset name was passed in, then any options that were not set via data attribute are filled in with the preset values.\n3) If no preset name was passed in, then the default options are used to fill in any missing options.\n*******************************************************************************/\n\nexport default function getPresetsConfirmation(options) {\n\n // All the different options that can be passed in\n const { preset, itemID, title, message, cancelButton, confirmButton, confirmClass, includeBackground } = options;\n\n if (preset === 'delete-watchlist') {\n return {\n itemID : itemID || '',\n title : title || 'Delete Watchlist?',\n message : message || 'Are you sure you want to delete this watchlist?',\n cancelButton : cancelButton || 'Cancel',\n confirmButton : confirmButton || 'Delete',\n confirmClass : confirmClass || 'delete-watchlist',\n includeBackground: includeBackground || 'Yes',\n };\n }\n\n if (preset === 'delete-profile') {\n return {\n itemID : itemID || '',\n title : title || 'Delete Profile?',\n message : message || 'Are you sure you want to delete this profile?',\n cancelButton : cancelButton || 'Cancel',\n confirmButton : confirmButton || 'Delete',\n confirmClass : confirmClass || 'delete-profile',\n includeBackground: includeBackground || 'Yes',\n };\n }\n\n\n // Default Options\n return {\n itemID : itemID || '',\n title : title || 'Are You Sure?',\n message : message || 'Are you sure you want to do this?',\n cancelButton : cancelButton || 'No',\n confirmButton : confirmButton || 'Yes',\n confirmClass : confirmClass || '',\n includeBackground: includeBackground || 'Yes',\n };\n}\n", "/*******************************************************************************\nBUILD A ITEM EDIT MODAL WINDOW\n*******************************************************************************/\n\nexport default function buildConfirmationModal(options) {\n const { title, message, cancelButton, itemID, confirmClass, confirmButton, includeBackground } = options;\n\n const modalHTML = `\n \n ${title}\n \n ${message}\n \n ${cancelButton}\n ${confirmButton}\n \n \n `;\n\n return (includeBackground === 'Yes') ? `${modalHTML}` : modalHTML;\n}\n", "/*******************************************************************************\nOPEN CONFIRMATION MODAL WINDOW\nOpens a confirmation modal window\n*******************************************************************************/\n\nimport getConfirmationModalSettings from './get-presets-confirmation';\nimport buildConfirmationModal from './build-modal-confirmation';\n\nexport default function openConfirmationModal(e) {\n\n // Get any confirmation modal settings that exist on the button that triggered the modal\n const $triggerButton = $(e.currentTarget);\n const options = {\n preset : $triggerButton.data('preset'),\n itemID : $triggerButton.data('id'),\n title : $triggerButton.data('title'),\n message : $triggerButton.data('message'),\n cancelButton : $triggerButton.data('cancel-button'),\n confirmButton : $triggerButton.data('confirm-button'),\n confirmClass : $triggerButton.data('confirm-class'),\n includeBackground: $triggerButton.data('include-bg'),\n };\n\n // Get the editoroptions for the confirmation modal\n const modalOptions = getConfirmationModalSettings(options);\n\n // Build the rename watchlist editor modal window\n const modalHTML = buildConfirmationModal(modalOptions);\n\n // Add the modal window to the page\n $('.page').after(modalHTML);\n}\n", "/*******************************************************************************\nBUILD A ITEM EDIT MODAL WINDOW\n*******************************************************************************/\n\nexport default function buildItemEditModal(options) {\n\n // All the different options that can be passed in\n const title = options.title || 'Edit Item';\n const itemID = options.itemID || '';\n const itemName = options.itemName || 'item';\n const itemValue = options.itemValue || '';\n const maxlength = options.maxlength || '';\n const cancelButton = options.cancelButton || 'Cancel';\n const saveButton = options.saveButton || 'Save';\n const saveClass = options.saveClass || '';\n const includeBackground = (options.includeBackground === undefined) ? true : options.includeBackground;\n\n const modalHTML = `\n \n ${title}\n \n \n \n \n ${cancelButton}\n ${saveButton}\n \n \n `;\n\n return (includeBackground) ? `${modalHTML}` : modalHTML;\n}\n", "/*******************************************************************************\r\nOPEN CONFIRMATION MODAL WINDOW\r\nOpens a confirmation modal window\r\n*******************************************************************************/\r\n\r\nimport buildItemEditModal from './build-modal-item-editor';\r\n\r\nexport default function openItemEditorModal(e) {\r\n\r\n // Get any confirmation modal settings that exist on the button that triggered the modal\r\n const $triggerButton = $(e.currentTarget);\r\n const options = {\r\n title : $triggerButton.data('title'),\r\n itemID : $triggerButton.data('id'),\r\n itemName : $triggerButton.data('item-name'),\r\n itemValue : $triggerButton.data('item-value'),\r\n maxlength : $triggerButton.data('maxlength'),\r\n cancelButton : $triggerButton.data('cancel-button'),\r\n saveButton : $triggerButton.data('save-button'),\r\n saveClass : $triggerButton.data('save-class'),\r\n includeBackground: $triggerButton.data('include-bg'),\r\n };\r\n\r\n // Build the rename watchlist editor modal window\r\n const modalHTML = buildItemEditModal(options);\r\n\r\n // Add the modal window to the page\r\n $('.page').after(modalHTML);\r\n}\r\n", "/*******************************************************************************\nACTIVATE JUMP BAR\nRemoves tabs that are associated with section IDs that do not exist and un-hide the bar.\n*******************************************************************************/\n\n// This checks if the sections exist for each tab\nfunction checkTabs($jumpBar) {\n $jumpBar.find('.jump-link').each((index, tab) => {\n const $tab = $(tab);\n const id = $tab.attr('href');\n if ($(id).length === 0) { $tab.remove(); }\n });\n $jumpBar.removeClass('hide');\n}\n\nexport default function activateJumpBar() {\n $('.jump-bar').each((i, jumpBar) => {\n const $jumpBar = $(jumpBar);\n\n // This is an event to wait for before checking the tabs\n const waitFor = $jumpBar.data('waitFor');\n const extraWaitTime = $jumpBar.data('extraTime');\n\n if (waitFor) {\n $(document).on(waitFor, () => {\n if (extraWaitTime) {\n setTimeout(() => { checkTabs($jumpBar); }, extraWaitTime);\n }\n else {\n checkTabs($jumpBar);\n }\n });\n }\n else {\n checkTabs($jumpBar);\n }\n });\n}\n", "/*******************************************************************************\nREVEALS AN ELEMENT THAT WAS HIDDEN\n*******************************************************************************/\n\nimport setMinGridWidth from '../css-grid/set-min-grid-width';\n\nexport default function revealElement(e) {\n const $trigger = $(e.currentTarget);\n\n // Grab the element selector. Exit out if none exists.\n const elementSelector = $trigger.data('show');\n if (!elementSelector) { return; }\n\n // Options\n const revealMode = $trigger.data('mode') || 'fade';\n const hideClasses = $trigger.data('hideClasses') || 'hide';\n const elementsToHide = $trigger.data('hide') || '';\n const selfDestruct = ($trigger.data('selfDestruct') || '').toLowerCase() !== 'no';\n const group = $trigger.data('group') || '';\n const selectedClasses = $trigger.data('selected-classes') || '';\n\n // Elements\n const $elements = $(elementSelector);\n\n // Perform actions based on the settings\n if (selfDestruct) { $trigger.remove(); }\n if (revealMode === 'show') { $elements.removeClass(hideClasses); }\n if (revealMode === 'fade') { $elements.flexFadeIn(hideClasses); }\n if (elementsToHide) { $(elementsToHide).addClass(hideClasses); }\n\n // Handle changes to the selected trigger/trigger group (if set)\n if (group && selectedClasses) {\n $(group).removeClass(selectedClasses);\n $trigger.addClass(selectedClasses);\n }\n\n if ($elements.find('.filter-tab').length) {\n setMinGridWidth({ containers: '.filter-tabs', items: '.filter-tab', padding: '20' });\n }\n}\n", "/*******************************************************************************\nREVEAL THE SELECTED FILTER FOR A SET OF FILTER LINKS\nOn page load we need to drill down to the selected filter if it's not at the top level.\n*******************************************************************************/\n\nexport default function revealSelectedFilter(i, filterLinkSet) {\n const $filterLinkSet = $(filterLinkSet);\n const moreButtonText = $filterLinkSet.data('moreButton') || 'More Filters';\n const $selectedFilter = $filterLinkSet.find('.is-selected');\n const selectedLevel = +$selectedFilter.data('level') || 1;\n const selectedParent = $selectedFilter.data('parent');\n\n // Hide all the filter links to start\n $filterLinkSet.find('.filter-link').addClass('hide');\n\n if (selectedLevel > 1) {\n const $title = $filterLinkSet.parents('.filter-links-wrapper').siblings('.filter-links-title');\n\n // Add the active sub nav wrapper class and the More Filters button\n $filterLinkSet.parents('.filter-links-wrapper').addClass('is-showing-sub-nav');\n $filterLinkSet.before(`${moreButtonText}`);\n\n // Only show the filter links that are in the same group as the selected filter\n $(`.filter-link[data-level=\"${selectedLevel}\"][data-parent=\"${selectedParent}\"]`).removeClass('hide');\n\n // Update the sub-title\n let subTitle = selectedParent;\n if (selectedLevel === 3) {\n subTitle = `${$(`.filter-link[data-name=\"${selectedParent}\"]`).data('parent')}: ${selectedParent}`;\n }\n $title.html(`${$title.html()}${subTitle}`);\n }\n else {\n $filterLinkSet.find('.filter-link:not(.is-sub-link)').removeClass('hide');\n }\n}\n", "/*******************************************************************************\nSCROLL TO ELEMENT ON PAGE LOAD\n*******************************************************************************/\n\nexport default function scrollToElementOnPageLoad() {\n const $scrollToElements = $(\".scroll-to-here-on-load\").first();\n if ($scrollToElements.length === 0) {\n return;\n }\n\n $(\"html, body\").animate({ scrollTop: $scrollToElements.offset().top }, 300);\n}\n", "/*******************************************************************************\r\nselect Radio Button In row\r\nselects a radio butt and deseslects another in a radio row\r\n*******************************************************************************/\r\n\r\n// Selects a custom radio button (horizontal)\r\nexport default function selectRadioButtonInRow(e) {\r\n\tvar $rb = $(e.currentTarget);\r\n\tvar rbName = $rb.data('name');\r\n\r\n\t// De-select all the radio buttons with the same name\r\n\t$('.radio-box[data-name=\"' + rbName + '\"]').removeClass('radio-box-sel').prop('checked',false);\r\n\r\n\t// Select the box that was clicked on\r\n\t$rb.addClass('radio-box-sel');\r\n\t$rb.next('.radio-box-real').prop('checked',true).trigger('change');\r\n}\r\n", "export default async function sendUserlistActivityEvent() {\n const $userlistMetaTag = $('meta[name=\"rotowire-content\"]');\n if ($userlistMetaTag.length === 0) { return; }\n\n const section = $userlistMetaTag.data('section');\n const category = $userlistMetaTag.data('category');\n if (!section || !category) { return; }\n\n try {\n await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/trigger-site-use.php',\n data : { section, category },\n timeout: 10000,\n });\n }\n catch (error) {\n // Fail silently\n }\n}\n", "/*******************************************************\r\nUNIVERSAL EVENT HANDLERS\r\nThis handles events for various interactions.\r\n********************************************************/\r\n\r\nimport activateCloudinaryImages from \"./cloudinary/activate\";\r\nimport activateRippleEffect from \"./ripple-effect/activate\";\r\nimport activateSmartAnchorTags from \"./smart-anchor-tags/activate\";\r\nimport addHoverClass from \"./hover/add-class\";\r\nimport automaticButtonProcessing from \"./button-state/automatic-button-processing\";\r\nimport cancelCommentReply from \"./articles/cancel-comment-reply\";\r\nimport checkForWallpaperAd from \"./ads/check-for-wallpaper\";\r\nimport doOnWindowResize from \"./window-resize/do-on-window-resize\";\r\nimport expandNewsUpdate from \"./player-news/expand-update\";\r\nimport expandPlayerOutlook from \"./player-outlooks/expand\";\r\nimport fixAllWidows from \"./widows/fix-all\";\r\nimport getPlayerNews from \"./player-news/get\";\r\nimport getPlayerRankings from \"./player-rankings/get\";\r\nimport getPlayerRumors from \"./player-rumors/get\";\r\nimport hideAdContainersIfAdsAreOff from \"./ads/hide-ad-containers\";\r\nimport initializeCheckBoxFilters from \"./filter-checkboxes/initialize\";\r\nimport initializeLazyLoading from \"./cloudinary/lazy-loader\";\r\nimport insertFreestarStickyAds from './ads/insert-freestar-sticky-ads';\r\nimport insertVideoAds from './ads/insert-video-ads';\r\nimport loadAJAXData from \"./ajax-loader/get-data\";\r\nimport minimizeNewsUpdate from \"./player-news/minimize-update\";\r\nimport onDataChartist from \"./charts/on-data\";\r\nimport onDrawChartist from \"./charts/on-draw\";\r\nimport openConfirmationModal from \"./modal-window/open-confirmation\";\r\nimport openItemEditorModal from \"./modal-window/open-item-editor\";\r\nimport removeErrorNotificationBar from \"./error-handling/remove-error-notification-bar\";\r\nimport removeHoverClass from \"./hover/remove-class\";\r\nimport removeMissingJumpBarSectionTabs from \"./jump-bar/activate\";\r\nimport revealElement from \"./reveal/reveal-element\";\r\nimport revealSelectedFilterLink from \"./filter-links/reveal-selected-filter\";\r\nimport scrollToElementOnPageLoad from \"./scroll-on-load/scroll-to-element-on-load\";\r\nimport selectRadioButtonInRow from \"./radio-button/select-radio-button-in-row\";\r\nimport sendUserlistActivityEvent from \"./userlist/send-activity-event\";\r\nimport setMinGridWidth from \"./css-grid/set-min-grid-width\";\r\nimport smoothScrollPolyfill from \"../../lib/_smooth-scroll-polyfill/smoothscroll\";\r\nimport toggleCheckbox from \"./checkboxes/toggle\";\r\nimport triggerCheckBoxFilterUpdate from \"./filter-checkboxes/trigger-filter-update\";\r\nimport triggerClearDataFilter from \"./data-filter/trigger-clear\";\r\nimport triggerClearInputBox from \"./input-with-clear/trigger-clear\";\r\nimport triggerCloseFilterLinkSubNav from \"./filter-links/trigger-close-sub-nav\";\r\nimport triggerCloseModalWindow from \"./modal-window/trigger-close\";\r\nimport triggerCommentReply from \"./articles/trigger-comment-reply\";\r\nimport triggerFilterLinksRangeEditor from \"./filter-links/trigger-range-editor\";\r\nimport triggerFilterLinkSubNav from \"./filter-links/trigger-sub-nav\";\r\nimport triggerFilterTabOpen from \"./filter-tabs/trigger-tab-open\";\r\nimport triggerFilterTabSwitch from \"./filter-tabs/trigger-tab-switch\";\r\nimport triggerGetArticles from \"./articles/trigger-get-articles\";\r\nimport triggerGetCustomListContent from \"./custom-lists/trigger-get-content\";\r\nimport triggerSelectedToggleTab from \"./toggle-tabs/trigger-selected-tab\";\r\nimport triggerSelectedToggleTabOnResize from \"./toggle-tabs/trigger-selected-on-resize\";\r\nimport triggerTimePeriodChange from \"./time-period-selector/trigger-time-period-change\";\r\nimport triggerToggleTabSwitch from \"./toggle-tabs/trigger-tab-switch\";\r\nimport triggerUpdateWinnings from \"./bet-calc/trigger-update-winnings\";\r\nimport triggerWindowResizedListener from \"./window-resize/trigger-window-resized-listener\";\r\nimport updateFilterTabCounts from \"./filter-tabs/update-filter-counts\";\r\nimport updateRangeEditor from \"./filter-links/update-range-editor\";\r\nimport watchDataFilterInput from \"./data-filter/watch-input\";\r\nimport watchFilterTabItems from \"./filter-tabs/watch-items\";\r\nimport watchInputWithClearButton from \"./input-with-clear/watch-input\";\r\n\r\nexport default function addUniversalEventHandlers() {\r\n // Move debugging info from PHP into a console\r\n //createDebuggingConsole();\r\n\r\n // Sends out a custom event 'rw:window-resized' whenever the window is resized\r\n triggerWindowResizedListener();\r\n\r\n // Scroll to the first element on the page with this class (if any exist)\r\n scrollToElementOnPageLoad();\r\n\r\n // Activate Cloudinary images on the page\r\n activateCloudinaryImages();\r\n\r\n // Turn on lazy loading\r\n initializeLazyLoading();\r\n\r\n // Check for wallpaper ad\r\n checkForWallpaperAd();\r\n\r\n // Smooth Scrolling Polyfill\r\n // http://iamdustan.com/smoothscroll/\r\n smoothScrollPolyfill.polyfill();\r\n\r\n // Activate the ripple effect when buttons are clicked\r\n $(document).on(\"click\", \".btn, .scroll-tab:not(.has-more)\", activateRippleEffect);\r\n\r\n // Control when hover effects are used on buttons\r\n $(document).on(\r\n \"touchstart mouseenter\",\r\n \"button, .btn, .news-headline, .side-nav__sub-section, .side-nav__item, .jump-link, .show-myleagues-for-player\",\r\n addHoverClass\r\n );\r\n $(document).on(\r\n \"mouseleave\",\r\n \"button, .btn, .news-headline, .side-nav__sub-section, .side-nav__item, .jump-link, .show-myleagues-for-player\",\r\n removeHoverClass\r\n );\r\n\r\n // Control when hover effects are used on scroll tabs\r\n $(document).on(\"touchstart mouseenter\", \".scroll-tab:not(.is-selected)\", addHoverClass);\r\n $(document).on(\"mouseleave\", \".scroll-tab:not(.is-selected)\", removeHoverClass);\r\n\r\n // Open confirmation modal (set options via data attributes on trigger element and/or presets)\r\n $(document).on(\"click\", \".open-confirm-modal\", openConfirmationModal);\r\n\r\n // Open item editor modal\r\n $(document).on(\"click\", \".open-item-editor-modal\", openItemEditorModal);\r\n\r\n // Close a modal window\r\n $(document).on(\"click\", \".modal-background\", triggerCloseModalWindow);\r\n\r\n // Hide error notification bar if it's clicked on\r\n $(document).on(\"click\", \".error-notification-bar\", removeErrorNotificationBar);\r\n\r\n // Reveals an element or elements depending on the selector passed via data attribute\r\n $(document).on(\"click\", \".revealer\", revealElement);\r\n\r\n // Smart Anchor Tags\r\n // When an anchor tag is clicked (or the page loads), this function:\r\n // 1. Scrolls smoothly rather than jumping to the anchor.\r\n // 2. Prevents the named element from being flush with the top of the screen.\r\n // 3. Prevents the #hash from showing up in the URL address bar.\r\n $(document).on(\"click\", 'a[href^=\"#\"]', activateSmartAnchorTags);\r\n activateSmartAnchorTags();\r\n\r\n // Load More articles\r\n $(document).on(\"click\", \".show-more-articles\", triggerGetArticles);\r\n\r\n // Show the reply form\r\n $(document).on(\"click\", \".show-reply-form\", triggerCommentReply);\r\n\r\n // Hide the reply form\r\n $(document).on(\"click\", \".hide-reply-form\", cancelCommentReply);\r\n\r\n // Automatically add the processing state on click for buttons/links with the 'inprogress' data attribute\r\n $(document).on(\"click\", \"a[data-inprogress], button[data-inprogress]\", automaticButtonProcessing);\r\n\r\n // Watch for keystrokes in a data filter input\r\n $(document).on(\"keyup\", \".data-filter input\", watchDataFilterInput);\r\n\r\n // Clear data filter input\r\n $(document).on(\"click\", \".filter-clear\", triggerClearDataFilter);\r\n\r\n // Watch for keystrokes in a input box that's using a clear button\r\n $(document).on(\"keyup\", \".input-wrapper:not(.no-clear) input\", watchInputWithClearButton);\r\n\r\n // Clear the input box (for input boxes using a clear button)\r\n $(document).on(\"click\", \".input-clear\", triggerClearInputBox);\r\n\r\n // Toggle a custom checkbox\r\n $(document).on(\"click\", \".checkbox\", toggleCheckbox);\r\n\r\n // Select a custom radio button (horizontal)\r\n $(document).on(\"click\", \".radio-box\", selectRadioButtonInRow);\r\n\r\n // Get more gamer news\r\n $(document).on(\"click\", \".get-more-player-news\", getPlayerNews);\r\n\r\n // Get more player rumors\r\n $(document).on(\"click\", \".get-more-player-rumors\", getPlayerRumors);\r\n\r\n // Get more player rankings with outlooks\r\n $(document).on(\"click\", \".get-more-player-rankings-outlooks\", getPlayerRankings);\r\n\r\n // Expand News Update in Compact Mode\r\n $(document).on(\"click\", \".news-update.is-compact\", expandNewsUpdate);\r\n\r\n // Minimize News Update\r\n $(document).on(\"click\", \".news-update:not(.is-compact).allow-minimize\", minimizeNewsUpdate);\r\n\r\n // Expand player outlook (on player pages)\r\n $(document).on(\"click\", \".p-card__outlook-more:not(.is-not-subscribed)\", expandPlayerOutlook);\r\n\r\n // Check the number of ads displayed to make sure it matches what's in the header\r\n //checkNumAds();\r\n\r\n // Hide ad containers if ads are shut off (via the \"plp\" url parameter)\r\n hideAdContainersIfAdsAreOff();\r\n\r\n // Fix widows in text (for specific selectors)\r\n fixAllWidows();\r\n\r\n /*****************************************************************************/\r\n // FILTER TABS\r\n // A way to filter a set of items using tabs to show only items that match a certain shared condition.\r\n // Example Item Set: List of players. Example set of tabs: Positions (QB, RB, WR, TE, K)\r\n\r\n // Handle a filter tab switch\r\n $(document).on(\"click\", \".filter-tab\", triggerFilterTabSwitch);\r\n\r\n // Handle click on element that controls a filter tab\r\n $(document).on(\"click\", \".switch-to-filter-tab\", triggerFilterTabOpen);\r\n\r\n // If there are filter tab counters in use on the page, update the counters for each tab\r\n $('.filter-tab[data-count=\"Yes\"]').doIfExists(updateFilterTabCounts);\r\n\r\n // If there are filter tab counters in use on the page, watch the items for changes\r\n $('.filter-tab[data-count=\"Yes\"]').doIfExists(watchFilterTabItems);\r\n\r\n // On window resize and page load, figure out the minimum tab width so we can add\r\n // the correct CSS Grid styles\r\n const setFilterTabsGrid = () => {\r\n setMinGridWidth({\r\n containers: \".filter-tabs\",\r\n items: \".filter-tab\",\r\n padding: \"20\",\r\n });\r\n };\r\n setFilterTabsGrid();\r\n doOnWindowResize(setFilterTabsGrid);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // FILTER LINKS\r\n\r\n // Trigger expanding a sub-nav\r\n $(document).on(\"click\", \".filter-link.has-sub-nav\", triggerFilterLinkSubNav);\r\n\r\n // Trigger closing a sub-nav\r\n $(document).on(\"click\", \".more-filter-links\", triggerCloseFilterLinkSubNav);\r\n\r\n // Loop through all the filter link sets on the page and make sure the selected filter is visible\r\n $(\".filter-links-wrapper > .filter-links\").each(revealSelectedFilterLink);\r\n\r\n // Trigger the filter links range editor\r\n $(document).on(\"click\", \".filter-range__edit\", triggerFilterLinksRangeEditor);\r\n\r\n // When the filter range editor select box changes, update the \"Go\" button link\r\n $(document).on(\"change\", \".filter-range__select-box\", updateRangeEditor);\r\n\r\n /*****************************************************************************/\r\n // TOGGLE TABS\r\n\r\n // Handle a toggle tab switch\r\n $(\".toggle-tabs\").on(\"click\", \".toggle-tab\", triggerToggleTabSwitch);\r\n\r\n // Determine the correct toggle tab to be selected at the current screen size\r\n triggerSelectedToggleTab();\r\n\r\n // Determine the correct toggle tab to be selected when the screen is resized\r\n $(window).on(\"resize\", triggerSelectedToggleTabOnResize);\r\n\r\n // Refresh one or all toggle tabs via this custom event (passing in a tab set name is optional)\r\n $(document).on(\"toggleTabs:refresh\", (e, name) => {\r\n triggerSelectedToggleTab(name);\r\n });\r\n\r\n // On window resize and page load, figure out the minimum tab width so we can add\r\n // the correct CSS Grid styles\r\n const setToggleTabsGrid = () => {\r\n setMinGridWidth({\r\n containers: \".toggle-tabs-set.is-many .toggle-tabs\",\r\n items: \".toggle-tab\",\r\n padding: \"10\",\r\n });\r\n };\r\n setToggleTabsGrid();\r\n doOnWindowResize(setToggleTabsGrid);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // STAT BOXES\r\n\r\n // On window resize and page load, figure out the minimum box width so we can add\r\n // the correct CSS Grid styles\r\n const setStatBoxesGrid = () => {\r\n setMinGridWidth({\r\n containers: \".stat-boxes\",\r\n items: \".stat-box\",\r\n padding: \"16\",\r\n });\r\n };\r\n setStatBoxesGrid();\r\n doOnWindowResize(setStatBoxesGrid);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // JUMP BAR\r\n removeMissingJumpBarSectionTabs();\r\n\r\n /*****************************************************************************/\r\n // CUSTOM LISTS\r\n $(document).on(\"click\", \".get-more-custom-list\", triggerGetCustomListContent);\r\n\r\n /******************************************************************************/\r\n\r\n // Run all checkbox filters once the page loads (sets the initial state)\r\n initializeCheckBoxFilters();\r\n\r\n // Handle toggling a checkbox filter\r\n $(document).on(\"click\", \".filter-checkbox\", triggerCheckBoxFilterUpdate);\r\n\r\n // Add automated in-article text ads (if applicable)\r\n //$('.article').each(addInArticleTextAds);\r\n\r\n // Add video ads\r\n insertVideoAds();\r\n\r\n // Add Freestar Sticky Ads\r\n insertFreestarStickyAds();\r\n\r\n // Load data from all AJAX URLs set in the top of the page (this needs to run before loadTableData)\r\n loadAJAXData();\r\n\r\n // Listen for keypresses in the Webix table search boxes (if any exist)\r\n $(document).on(\"keyup\", \".auto-search input\", (e) => {\r\n const $inputBox = $(e.currentTarget);\r\n\r\n // Check for various keyboard actions\r\n const keyPressed = {\r\n esc: e.which === 27,\r\n };\r\n\r\n // Clear the input box if the ESC key is pressed\r\n if (keyPressed.esc) {\r\n $inputBox.val(\"\");\r\n }\r\n });\r\n\r\n // USERLIST USER ACTIVITY EVENT\r\n // This triggers an activity event in Userlist if a specific meta tag exists on the page\r\n sendUserlistActivityEvent();\r\n\r\n // GLOBAL CHARTIST FUNCTIONS\r\n // Making these global so they can be used with inline scripts\r\n window.rwChartist = {};\r\n window.rwChartist.onData = onDataChartist;\r\n window.rwChartist.onDraw = onDrawChartist;\r\n\r\n // This custom event lets anyone know when the core javascript is done loading (useful for tables)\r\n const rwjsEvent = document.createEvent(\"Event\");\r\n rwjsEvent.initEvent(\"rwjs:ready\", true, true);\r\n document.dispatchEvent(rwjsEvent);\r\n\r\n /*****************************************************************************/\r\n // BET CALCULATORS\r\n\r\n $(document).on(\"keyup change\", \".event__bet\", triggerUpdateWinnings);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // SPORTSBOOK CHOOSER\r\n\r\n //$(document).on('click', '.switch-to-book', triggerChooseBook);\r\n\r\n /******************************************************************************/\r\n\r\n /*****************************************************************************/\r\n // TIME PERIOD CHOOSER\r\n\r\n $(document).on(\"change\", \".time-period-selector\", triggerTimePeriodChange);\r\n\r\n /******************************************************************************/\r\n}\r\n", "/*******************************************************************************\nToggle Custom Checkbox State\nChecks or unchecks a custom checkbox.\n*******************************************************************************/\n\nexport default function toggleCheckbox(e) {\n const $cb = $(e.currentTarget);\n if ($cb.hasClass('checked')) {\n $cb.removeClass('checked').find('input[type=\"checkbox\"]').prop('checked', false).change();\n }\n else {\n $cb.addClass('checked').find('input[type=\"checkbox\"]').prop('checked', true).change();\n }\n}\n", "/*******************************************************************************\nTRIGER CHANGE TO CHECKBOX FILTER\nHandles a click on a checkbox filter.\n*******************************************************************************/\n\nimport updateCheckboxFilter from './update-filter';\n\nexport default function triggerCheckBoxFilterUpdate(e) {\n const checkboxName = $(e.currentTarget).data('name');\n updateCheckboxFilter(checkboxName);\n}\n", "/*******************************************************************************\nCLEAR DATA FILTER\nResets the data filter to its empty state.\n*******************************************************************************/\n\nexport default function clearFilter(itemSelector) {\n const $input = $(`input[data-items=\"${itemSelector}\"]`);\n\n // Clear the input, remove the clear button, and show all the items\n $input.val('').parents('.data-filter').find('.filter-clear').remove();\n $(itemSelector).removeClass('hide-filter');\n $('.filter-empty').remove();\n}\n", "/*******************************************************************************\nTRIGGER CLEAR DATA FILTER\nTriggers clearing the data filter.\n*******************************************************************************/\n\nimport clearFilter from './clear';\n\nexport default function triggerClearDataFilter(e) {\n const itemSelector = $(e.currentTarget).prev('input').data('items');\n clearFilter(itemSelector);\n}\n", "/*******************************************************************************\nCLEAR INPUT BOX\nResets the input box to its empty state.\n*******************************************************************************/\n\nexport default function clearInputBox($input) {\n\n // Clear the input and remove the clear button\n $input.val('').parents('.input-wrapper').find('.input-clear').remove();\n}\n", "/*******************************************************************************\nTRIGGER CLEAR INPUT BOX\nTriggers clearing the input box.\n*******************************************************************************/\n\nimport clearInputBox from './clear';\n\nexport default function triggerClearInputBox(e) {\n const $input = $(e.currentTarget).prev('input');\n clearInputBox($input);\n}\n", "/*******************************************************************************\nTRIGGER A SUB NAVIGATION LIST\nHandles a click on a link with sub-navigation.\n*******************************************************************************/\n\nexport default function triggerCloseSubNav(e) {\n const $moreFiltersButton = $(e.currentTarget);\n const $filterSet = $moreFiltersButton.siblings('.filter-links');\n const $filterWrapper = $filterSet.parents('.filter-links-wrapper');\n const $title = $filterWrapper.siblings('.filter-links-title');\n const level = $('.is-sub-link:not(.hide):first').data('level');\n const inDeepNav = level > 2;\n\n // If we're two levels deep, just go up one level\n if (inDeepNav) {\n const navName = $filterSet.find('.filter-link:not(.hide):first').data('parent');\n const parentName = $filterSet.find(`.is-sub-link[data-name=\"${navName}\"]:first`).data('parent');\n\n // Hide all the sub nav items\n $filterSet.find('.is-sub-link').addClass('hide');\n\n // Show the sub-items for the active filter\n $(`.is-sub-link[data-parent=\"${parentName}\"]`).removeClass('hide');\n\n // Update the secondary title\n $title.find('.filter-links-sub-title').text(parentName);\n\n }\n else {\n // Remove the sub nav class to the wrapper (used for adjusting styles)\n $filterWrapper.addClass('is-showing-sub-nav');\n\n // Remove the \"more filters\" button\n $moreFiltersButton.remove();\n\n // Show all the top level filters\n $filterSet.find('.filter-link').removeClass('hide');\n\n // Hide all the sub nav items\n $filterSet.find('.is-sub-link').addClass('hide');\n\n // Remove the secondary title\n $title.find('.filter-links-sub-title').remove();\n }\n}\n", "/*******************************************************************************\nClose A Modal Window\n*******************************************************************************/\n\nexport default function closeModalWindow() {\n\n $('body').removeClass('hide-overflow');\n $('.modal-background').remove();\n\n}\n", "/*******************************************************************************\nTrigger Closing A Modal Window\n*******************************************************************************/\n\nimport closeModalWindow from './close';\n\nexport default function triggerCloseModalWindow(e) {\n\n // This variable determines whether the modal window should be closed\n let closeModal = false;\n\n // The element that the user clicked on\n const $clickTarget = $(e.target);\n\n // If the user clicked on an element that has one of these classes, then we should close the modal\n const targetsToClose = ['modal-background', 'close-modal'];\n\n // Check the click target against all the classes that should trigger the modal to close\n targetsToClose.forEach((className) => { if ($clickTarget.hasClass(className)) { closeModal = true; } });\n\n // Close the modal window if a class matched\n if (closeModal) { closeModalWindow(); }\n}\n", "/*******************************************************************************\nTRIGGER COMMENT REPLY\nTrigger moving the form after the selected comment\n*******************************************************************************/\n\nexport default async function triggerCommentReply(e) {\n const $replyButton = $(e.currentTarget);\n\n // Get the parent comment, the following comment ad our target form\n const $comment = $replyButton.parents('.article-comment');\n const $nextComment = $comment.nextAll('.article-comment:not(.is-reply):first');\n const $commentList = $comment.parents('.article-comments__list');\n const $form = $('#articleComments');\n\n // Setup the form\n const commentID = $comment.data('id');\n $form.find('textarea').val('');\n $form.find('input[name=\"parentComment\"]').val(commentID);\n\n // Change the button text to a reply message\n const $submitButton = $form.find('.submit-reply-form');\n const buttonHTML = $submitButton.html();\n const buttonText = $submitButton.clone().find('>*').remove().end().html(); // eslint-disable-line newline-per-chained-call\n const newButtonHTML = buttonHTML.replace(buttonText, 'Add Your Reply');\n\n // Set a data attribute with the original button html\n $submitButton.data('origbuttonhtml', buttonHTML);\n\n // Set the button HTML\n $submitButton.safehtml(newButtonHTML);\n\n // Show the cancel button\n const $cancelButton = $form.find('.hide-reply-form');\n $cancelButton.show();\n\n if($nextComment.length){\n $form.detach().insertBefore($nextComment);\n } else {\n $form.detach().appendTo($commentList);\n }\n\n // Make sure the user can see the form\n $('html, body').animate({ scrollTop: $('#articleComments').offset().top }, 300);\n\n}\n", "/*******************************************************************************\nTRIGGER THE FILTER RANGE UI\nHandles a click on the filter range edit button.\n*******************************************************************************/\n\nexport default function openRangeEditor(editorID) {\n const $filterRange = $(`#${editorID}`);\n\n // We get the current width of the filter range so if the editor is more narrow it doesn't jump\n // up to the previous line (in a multiple filter set scenario)\n const rangeWidth = `${$filterRange.outerWidth()}px`;\n\n $filterRange.css('min-width', rangeWidth).addClass('is-open').parents('.filter-links-set');\n}\n", "import openRangeEditor from './open-range-editor';\n\n/*******************************************************************************\nTRIGGER THE FILTER RANGE UI\nHandles a click on the filter range edit button.\n*******************************************************************************/\n\nexport default function triggerRangeEditor(e) {\n const rangeEditorID = $(e.currentTarget).parents('.filter-range').attr('id');\n openRangeEditor(rangeEditorID);\n}\n", "/*******************************************************************************\nTRIGGER A SUB NAVIGATION LIST\nHandles a click on a link with sub-navigation.\n*******************************************************************************/\n\nexport default function triggerSubNav(e) {\n const $activeNav = $(e.currentTarget);\n const activeNavName = $activeNav.data('name');\n const parentName = $activeNav.data('parent');\n const $filterSet = $activeNav.parents('.filter-links');\n const $filterWrapper = $filterSet.parents('.filter-links-wrapper');\n const $title = $filterWrapper.siblings('.filter-links-title');\n const navTitle = (parentName) ? `${parentName}: ${activeNavName}` : `${activeNavName}`;\n const moreButtonText = $filterSet.data('moreButton') || 'More Filters';\n\n // Add the sub nav class to the wrapper (used for adjusting styles)\n $filterWrapper.addClass('is-showing-sub-nav');\n\n // Hide all the top level filters\n $filterSet.find('.filter-link').addClass('hide');\n\n // Show the sub-items for the active filter\n $(`.is-sub-link[data-parent=\"${activeNavName}\"]`).removeClass('hide');\n\n // Add a button that lets you go back to the parent level filters (if it's not already there)\n if ($filterSet.siblings('.more-filter-links').length === 0) {\n $filterSet.before(`${moreButtonText}`);\n }\n\n // Scroll the sub nav filter all the way to the left to start\n $filterSet[0].scrollLeft = 0;\n\n // Remove any existing secondary titles\n $title.find('.filter-links-sub-title').remove();\n\n // Add a secondary title to the filter title that shows which parent filter is active\n $title.html(`${$title.html()}${navTitle}`);\n}\n", "/*******************************************************************************\nMANAGE EMPTY STATE\nFigure out if the empty state should be displayed or not.\n*******************************************************************************/\n\nexport default function manageEmptyState(itemSelector) {\n const numVisibleItems = $(`${itemSelector}:not(.hide-filtertab)`).length;\n const $emptyMessage = $(itemSelector).parent().find('.filter-tab-empty');\n const emptyClass = 'hide-filtertab';\n\n // Hide the empty message if there are any visible items, otherwise show it\n if (numVisibleItems > 0) {\n $emptyMessage.addClass(emptyClass);\n }\n else {\n $emptyMessage.removeClass(emptyClass);\n }\n}\n", "/*******************************************************************************\nFILTER ITEMS\nHandles a click on a tab.\n*******************************************************************************/\n\nimport checkForMatch from './check-for-match';\nimport manageEmptyState from './manage-empty-state';\n\nexport default function filterItems(filterSettings, tabSettings) {\n\n const $items = $(filterSettings.items);\n\n // If the match criteria is '*', then all rows should be shown and we can exit out\n if (tabSettings.dataToMatch === '*') {\n $items.removeClass('hide-filtertab');\n $('.filter-tab-empty').addClass('hide-filtertab');\n return;\n }\n\n // Check to see if there are any tables on the page\n const checkForTable = $('.webix_dtable').length > 0;\n\n // Check each item to see if it matches the filter tab criteria\n $items.each((index, item) => {\n const $item = $(item);\n\n // Check to see if the current item matches the filter\n const filterMatches = checkForMatch($item, filterSettings, tabSettings);\n\n // Filter the items so that only the matching ones are visible\n if (filterMatches) {\n $item.removeClass('hide-filtertab');\n\n // Check to see if the item contains a table.\n // If it does, fire off a custom event letting us know that the table may need to be refreshed\n if (checkForTable) {\n $item.find('.webix_dtable').each((index, tableItem) => {\n const tableID = $(tableItem).attr('id');\n $(document).trigger(`tableNeedsRefresh:${tableID}`);\n });\n }\n }\n else {\n $item.addClass('hide-filtertab');\n }\n });\n\n // Figure out if the empty state should be displayed or not\n manageEmptyState(filterSettings.items);\n}\n", "/*******************************************************************************\nGET FILTER SETTINGS\nGet the settings for the main filter.\n*******************************************************************************/\n\nexport default function getFilterSettings(tabSetName) {\n const $tabs = $(`.filter-tabs[data-name=\"${tabSetName}\"]`);\n\n return {\n // The selector that matches all the items we're filtering on\n items: `${$tabs.data('items')}:not(.filter-tab-empty)`,\n\n // The name of the tab set\n name: tabSetName,\n\n // This optional attribute is used if the content that needs to be searched is something specific inside the item\n // Ex. If an item is a table row, but you only want to filter the results based on the first column's content\n subset: $tabs.data('subset') || '',\n\n // This is a selector that identifies the element whose text gets replaced with a tab's title data attribute value\n // It's mostly useful for changing the title of a section based on which filter tab is selected\n titleTarget: $tabs.data('title-target') || '',\n };\n}\n", "/*******************************************************************************\nGET TAB SETTINGS\nGather all the settings related to a tab.\n*******************************************************************************/\n\nexport default function getTabSettings(tabName) {\n\n const $tab = $(`.filter-tab[data-name=\"${tabName}\"]`);\n\n // The data to match against\n let dataToMatch = $tab.data('match').toString() || '';\n \n // On an individual tab, you can optionally add a secondary filter along with the data to match against\n const secSubset = $tab.data('secondary-subset') || '';\n let secDataToMatch = $tab.data('ss-match') || '';\n\n // By default, both the main filter AND the secondary filter have to match for an item to match\n // If this is set to OR, then it would only have to match one or the other\n const secSubsetOperator = ($tab.data('ss-operator') || 'AND').toUpperCase();\n\n // Check if we want to include matching items or exclude them\n const mainExclude = (dataToMatch.charAt(0) === '!');\n const secExclude = (secDataToMatch.charAt(0) === '!');\n\n // Strip off the ! character at the beginning of the match data (if it exists)\n dataToMatch = (mainExclude) ? dataToMatch.slice(1) : dataToMatch;\n secDataToMatch = (secExclude) ? secDataToMatch.slice(1) : secDataToMatch;\n\n // Convert the match criteria to an array (if it's not already)\n dataToMatch = (dataToMatch.includes(',')) ? dataToMatch.split(',') : [dataToMatch];\n secDataToMatch = (secDataToMatch.includes(',')) ? secDataToMatch.split(',') : [secDataToMatch];\n\n // Trim all the values in the arrays\n dataToMatch = $.map(dataToMatch, $.trim);\n secDataToMatch = $.map(secDataToMatch, $.trim);\n\n // Get the title text associated with the tab.\n // This is used in combination with the \"title-target\" data attribute on the set of tabs.\n const tabTitle = $tab.data('title') || '';\n\n /* The matchType options below control how the filtering works. There are two options:\n --------------------------------------------------------------------------\n 1. exact - [default] The data has to exactly match the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would NOT match\n 2. contains - If this option is used, the data just needs to be somewhere in the value. Examples:\n Looking for \"1B\" and value is \"1B\", then it would match\n Looking for \"1B\" and value is \"1B/2B\", it would match\n ----------------------------------------------------------------------------*/\n const matchType = $tab.data('match-type') || 'exact';\n const secMatchType = $tab.data('ss-match-type') || 'exact';\n\n return {\n dataToMatch, // The data that the main filter should try to match against\n mainExclude, // Should the main filter match using the !== operator?\n matchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n secSubset, // A secondary filter (in the form of a selector) just for this tab\n secDataToMatch, // The data that the secondary filter should try to match against\n secExclude, // Should the secondary filter match using the !== operator?\n secSubsetOperator, // [AND/OR] Do the main AND secondary filters have to match or just one OR the other?\n secMatchType, // Determines how the filtering works. Does the value have to exactly match or just appear within?\n tabTitle, // The title text that appears when this tab is selected.\n };\n}\n", "/*******************************************************************************\nSWITCH TO TAB\nSwitch the active filter tab.\n*******************************************************************************/\n\nimport filterItems from './filter-items';\nimport getFilterSettings from './get-filter-settings';\nimport getTabSettings from './get-tab-settings';\nimport setMinGridWidth from '../css-grid/set-min-grid-width';\n\nexport default function switchTab(tabSetName, tabName) {\n\n // Find the set of tabs to use\n const $tabs = $(`.filter-tabs[data-name=\"${tabSetName}\"]`);\n\n // Find the tab that was clicked on\n const $tabToSelect = $tabs.find(`.filter-tab[data-name=\"${tabName}\"]`);\n\n // Add the selected class to the tab and remove it everywhere else\n $tabToSelect.addClass('is-selected').siblings('.filter-tab').removeClass('is-selected');\n\n // Get the settings for the filter\n const filterSettings = getFilterSettings(tabSetName);\n\n // Get all the settings for this specific tab\n const tabSettings = getTabSettings(tabName);\n\n // Show only the items that match the active filter\n filterItems(filterSettings, tabSettings);\n\n // If the option is in use, dynamically change the title of the section based on the tab that was clicked on\n if (filterSettings.titleTarget) {\n $(filterSettings.titleTarget).safehtml($tabToSelect.data('title'));\n }\n\n // If there are hidden filter tabs sets, we need to run this so they display correctly when made visible\n if ($('.filter-tabs:hidden').length > 0) {\n setMinGridWidth({ containers: '.filter-tabs', items: '.filter-tab', padding: '20' });\n }\n\n // Trigger a custom event that signals the tab is loaded\n $(document).trigger(`filterTabLoaded:${tabSetName}-${tabName}`, [tabSettings]);\n}\n", "/*******************************************************************************\nTRIGGER TAB OPEN\nHandles a click on any element and switches to the desired filter tab.\n*******************************************************************************/\n\nimport switchTab from './switch-tab';\n\nexport default function triggerTabOpen(e) {\n\n // Get the name of the element that was clicked on and switch to it\n const $element = $(e.currentTarget);\n const tabName = $element.data('name');\n const tabSetName = $element.data('set');\n\n switchTab(tabSetName, tabName);\n}\n", "/*******************************************************************************\nTRIGGER TAB SWITCH\nHandles a click on a tab.\n*******************************************************************************/\n\nimport switchTab from './switch-tab';\n\nexport default function triggerTabSwitch(e) {\n\n // Get the name of the tab that was clicked on and switch to it\n const $tab = $(e.currentTarget);\n const tabName = $tab.data('name');\n const tabSetName = $tab.parents('.filter-tabs').data('name');\n\n switchTab(tabSetName, tabName);\n}\n", "/*******************************************************************************\nGET ARTICLES\nReturns a set of articles.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\n\nexport default async function getArticles(settings) {\n try {\n\n // Optional Settings\n const options = {};\n if (settings.content) { options.content = settings.content; }\n if (settings.sport) { options.sport = settings.sport; }\n if (settings.column) { options.column = settings.column; }\n if (settings.author) { options.author = settings.author; }\n if (settings.noColumnInHeadline) { options.noColumnInHeadline = settings.noColumnInHeadline; }\n if (settings.lastArticleDate) { options.lastArticleDate = settings.lastArticleDate; }\n if (settings.numArticles) { options.numArticles = settings.numArticles; }\n if (settings.exclude) { options.exclude = settings.exclude; }\n\n const response = await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/get-articles.php',\n data : options,\n timeout: 8000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n articles : response.articles,\n articlesHTML : response.articlesHTML,\n newLastArticleDate: response.lastArticleDate,\n noMoreArticles : response.noMoreArticles,\n };\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to retrieve articles for you. Please try again.', 3000);\n }\n}\n", "/*******************************************************************************\nTRIGGER GET MORE TEAM NEWS\nTrigger appending more team news updates to the page.\n*******************************************************************************/\n\nimport getArticles from './get-articles';\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\nimport activateCloudinaryImages from '../../universal/cloudinary/activate';\n\nexport default async function triggerGetArticles(e) {\n const $showMoreButton = $(e.currentTarget);\n\n // Options on Show More button\n const sport = String($showMoreButton.data('sport') || '').toLowerCase();\n const content = $showMoreButton.data('content') || '';\n const column = $showMoreButton.data('column') || '';\n const author = $showMoreButton.data('author') || '';\n const noColumnInHeadline = $showMoreButton.data('no-column-in-headline') || '';\n const lastArticleDate = $showMoreButton.data('last-article-date') || '';\n const numArticles = $showMoreButton.data('num-articles') || '';\n\n // Add the options that were set on the button\n const settings = {};\n if (sport) { settings.sport = sport; }\n if (content) { settings.content = content; }\n if (column) { settings.column = column; }\n if (author) { settings.author = author; }\n if (noColumnInHeadline) { settings.noColumnInHeadline = noColumnInHeadline; }\n if (lastArticleDate) { settings.lastArticleDate = lastArticleDate; }\n if (numArticles) { settings.numArticles = numArticles; }\n\n try {\n // Find the articles that match the last article date on the page\n // We're going to send a list of these IDs to getArticles() so we don't get back duplicates\n // We have to do this because articles don't have real timestamps (just dates) and IDs don't necessarily correspond to publish time :-(\n settings.exclude = [];\n $(`.content-preview[data-article-date=\"${lastArticleDate}\"]`).each((i, a) => {\n settings.exclude.push($(a).data('articleid'));\n });\n\n // Get the set of articles\n // If any of the values below are undefined, the rest of this try block won't run\n const { articlesHTML, newLastArticleDate, noMoreArticles } = await getArticles(settings);\n\n // Update the button's \"lastarticledate\" data attribute\n $showMoreButton.data('last-article-date', newLastArticleDate);\n\n // Add the articles to the page\n $showMoreButton.prevAll('.article-list').append(articlesHTML);\n\n // load the images\n activateCloudinaryImages();\n\n // Check if a hidden content type filter (DFS/Traditional) should be made visible\n const sportInName = sport ? `-${sport.toUpperCase()}` : '';\n const $hiddenContentFilter = $(`.toggle-tabs-set[data-name=\"article-type-${sportInName}\"].hide`);\n if ($hiddenContentFilter.length) {\n const numDFS = $('.article-preview.is-dfs').length;\n const numTraditional = $('.article-preview.is-traditional').length;\n if (numDFS > 0 && numTraditional > 0) { $hiddenContentFilter.removeClass('hide'); }\n }\n\n // If there were no articles returned, hide the show more button (since there is no more)\n if (noMoreArticles) { $showMoreButton.remove(); }\n }\n catch (err) {\n // Error message already triggered in get-articles.js\n }\n\n // Reset the button to its original state\n removeButtonProcessingState($showMoreButton);\n}\n", "/*******************************************************************************\nTRIGGER GET CUSTOM LIST CONTENT\nTrigger appending more custom list content to the page.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\n\nexport default async function getCustomListContent(listID, listType, lastContent, excludedContentIDs, style) {\n try {\n const response = await $.ajax({\n type : 'GET',\n url : '/frontend/ajax/get-custom-list-content.php',\n data : { listID, listType, lastContent, excludedContentIDs, style },\n timeout: 20000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n contentHTML : response.contentHTML,\n newLastContent : response.newLastContent,\n haveMoreContent: response.haveMoreContent,\n };\n }\n catch (error) {\n showErrorNotificationBar('We were unable to retrieve more content for you. Please try again.', 3000);\n }\n}\n", "import getCustomListContent from './get-content';\nimport removeButtonProcessingState from '../../universal/button-state/remove-button-processing-state';\nimport activateCloudinaryImages from '../../universal/cloudinary/activate';\n\n/*******************************************************************************\nTRIGGER GET CUSTOM LIST CONTENT\nTrigger appending more custom list content to the page.\n*******************************************************************************/\n\nexport default async function triggerGetCustomListContent(e) {\n const $button = $(e.currentTarget);\n const listID = $button.data('list');\n const lastContent = $button.data('last');\n const listType = $button.data('type');\n const style = $button.data('style');\n let excludedContentIDs = [];\n if (listType === 'auto') {\n excludedContentIDs = $button.parents('.custom-list').find(`.custom-list__item[data-last=\"${lastContent}\"]`).map((i, el) => $(el).data('item')).get();\n }\n\n const { contentHTML, newLastContent, haveMoreContent } = await getCustomListContent(listID, listType, lastContent, excludedContentIDs, style);\n\n // Add the articles to the page\n const $articleList = $button.prevAll('.article-list');\n\n if ($articleList.length > 0) {\n $articleList.append(contentHTML);\n }\n else {\n $button.before(contentHTML);\n }\n\n\n // Load the images\n activateCloudinaryImages();\n\n if (haveMoreContent) {\n // Update the button's \"last\" data attribute\n $button.data('last', newLastContent);\n\n // Reset the button to its original state\n removeButtonProcessingState($button);\n }\n else {\n $button.after('There are no more articles to display.').remove();\n }\n}\n", "/* eslint-disable */\nclass Store {\n constructor(dbName = 'keyval-store', storeName = 'keyval') {\n this.storeName = storeName;\n this._dbp = new Promise((resolve, reject) => {\n const openreq = indexedDB.open(dbName, 1);\n openreq.onerror = () => reject(openreq.error);\n openreq.onsuccess = () => resolve(openreq.result);\n // First time setup: create an empty object store\n openreq.onupgradeneeded = () => {\n openreq.result.createObjectStore(storeName);\n };\n });\n }\n _withIDBStore(type, callback) {\n return this._dbp.then(db => new Promise((resolve, reject) => {\n const transaction = db.transaction(this.storeName, type);\n transaction.oncomplete = () => resolve();\n transaction.onabort = transaction.onerror = () => reject(transaction.error);\n callback(transaction.objectStore(this.storeName));\n }));\n }\n}\nlet store;\nfunction getDefaultStore() {\n if (!store)\n store = new Store();\n return store;\n}\nfunction get(key, store = getDefaultStore()) {\n let req;\n return store._withIDBStore('readonly', store => {\n req = store.get(key);\n }).then(() => req.result);\n}\nfunction set(key, value, store = getDefaultStore()) {\n return store._withIDBStore('readwrite', store => {\n store.put(value, key);\n });\n}\nfunction del(key, store = getDefaultStore()) {\n return store._withIDBStore('readwrite', store => {\n store.delete(key);\n });\n}\nfunction clear(store = getDefaultStore()) {\n return store._withIDBStore('readwrite', store => {\n store.clear();\n });\n}\nfunction keys(store = getDefaultStore()) {\n const keys = [];\n return store._withIDBStore('readonly', store => {\n // This would be store.getAllKeys(), but it isn't supported by Edge or Safari.\n // And openKeyCursor isn't supported by Safari.\n (store.openKeyCursor || store.openCursor).call(store).onsuccess = function () {\n if (!this.result)\n return;\n keys.push(this.result.key);\n this.result.continue();\n };\n }).then(() => keys);\n}\n\nexport { Store, get, set, del, clear, keys };\n", "/*******************************************************************************\nRETURN THE BREAKPOINT DATA\nPairs with /frontend/sass/misc/_breakpoint-detect.scss\nSee here for why this is needed: https://www.fourfront.us/blog/jquery-window-width-and-media-queries\nAnd this for the implementation: https://www.lullabot.com/articles/importing-css-breakpoints-into-javascript\n*******************************************************************************/\n\nexport default function getBreakpointData() {\n const breakpointData = window.getComputedStyle(document.querySelector('.logo-bar'), ':before').getPropertyValue('content').replace(/['\"]+/g, '').split('|', 2);\n\n const breakpointOrder = (breakpointData[1] || '').split(',');\n breakpointOrder.unshift('xxs');\n\n const currentBreakpoint = breakpointData[0] || '';\n const currentIndex = breakpointOrder.findIndex(bp => bp === currentBreakpoint);\n\n return {\n current: currentBreakpoint,\n currentIndex,\n order : breakpointOrder,\n };\n}\n", "/*******************************************************************************\nTRIGGER THE SELECTED TAB\nActivates the tab that is designated as the selected one for the current screen size.\n*******************************************************************************/\n\n// https://www.npmjs.com/package/idb-keyval\nimport { Store, get } from '../../../lib/_idb-keyval/idb-keyval';\n\nimport getBreakpointData from '../breakpoints/get-data';\nimport switchTab from './switch-tab';\n\nasync function getTabThatShouldBeSelected(tabSetName) {\n\n // Check for saved preference in IndexDB first\n const rwStore = new Store('rotowire', 'toggletabs');\n const savedSelectedTab = await get(tabSetName, rwStore).then(val => val);\n if (savedSelectedTab) { return savedSelectedTab; }\n\n // Get the breakpoint data\n const { order: breakpoints, currentIndex: currentBPindex } = getBreakpointData();\n\n // Get the data attributes and filter them down to just the breakpoint-related values\n const $tabSet = $(`.toggle-tabs[data-name=\"${tabSetName}\"]`);\n const tabSetDataAttr = $tabSet.data() || {};\n const bpSelections = Object.keys(tabSetDataAttr)\n .filter(key => key.includes('sel') && !key.includes('Exists'))\n .reduce((obj, key) => {\n const newKey = key.replace('sel', '', key).toLowerCase();\n obj[newKey] = tabSetDataAttr[key];\n return obj;\n }, {});\n\n // Find all the breakpoints at or below the current one (order from largest screen to smallest)\n const relevantBreakpoints = breakpoints.filter((bp, index) => index <= currentBPindex).reverse();\n\n // Filter that list down to only breakpoints that have selected tab values (it's possible there are none)\n const bpWithSelectedTabs = relevantBreakpoints.filter(bp => bpSelections.hasOwnProperty(bp));\n\n // Find the correct selected tab for this breakpoint by using the largest matching breakpoint value\n // If no matching breakpoint was found, then default to the xxs value (which is always there)\n return (bpWithSelectedTabs.length > 0) ? bpSelections[bpWithSelectedTabs[0]] : bpSelections.xxs;\n}\n\n// Figure out the correct selected tab and activate it\nasync function setSelectedTab(tabSetName) {\n const selectedTab = await getTabThatShouldBeSelected(tabSetName);\n switchTab(tabSetName, selectedTab);\n}\n\nexport default function triggerSelectedTab(tabSetName) {\n\n // If we have a specific tab set, activate its selected tab\n if (tabSetName) { return setSelectedTab(tabSetName); }\n\n // If we don't have a specific tab set, then we know we need to loop through all of them\n $('.toggle-tabs').filter(':visible').each(function loopAllSets() { setSelectedTab($(this).data('name')); });\n\n $('.toggle-tabs').each(function() { \n if ($(this).data(\"alwaysop\") == 1) {\n setSelectedTab($(this).data('name')); \n }\n });\n}\n", "/*******************************************************************************\nTRIGGER THE SELECTED TAB ON WINDOW RESIZE\nActivates the tab that is designated as the selected one for the current screen size.\n*******************************************************************************/\n\nimport triggerSelectedTab from './trigger-selected-tab';\n\nconst resizeTimer = {};\n\nexport default function triggerSelectedTabOnResize() {\n\n // Loop through all the toggle tab sets that have responsive breakpoints on them\n $('.toggle-tabs[data-sel-bp-exists]').each(function loopToggleTabSets() {\n const $tabs = $(this);\n const tabSetName = $tabs.data('name');\n\n clearTimeout(resizeTimer[tabSetName]);\n resizeTimer[tabSetName] = setTimeout(() => { triggerSelectedTab(tabSetName); }, 250);\n });\n}\n", "/*******************************************************************************\r\nCHANGE TIME PERIOD\r\nNavigates to the desired URL.\r\n*******************************************************************************/\r\n\r\nexport default function changeTimePeriod(url) {\r\n if (url) {\r\n window.location.href = url;\r\n }\r\n}\r\n", "/*******************************************************************************\r\nTRIGGER TIME PERIOD CHANGE\r\nTriggers the time period to change.\r\n*******************************************************************************/\r\nimport changeTimePeriod from './change-time-period';\r\n\r\nexport default function triggerTimePeriodChange(e) {\r\n\r\n const $selectedOption = $(e.currentTarget);\r\n const urlToActivate = $selectedOption.find(':selected').data('url');\r\n\r\n changeTimePeriod(urlToActivate);\r\n}\r\n", "/*******************************************************************************\nTRIGGER TAB SWITCH\nHandles a click on a tab.\n*******************************************************************************/\n\n// https://www.npmjs.com/package/idb-keyval\nimport { Store, set } from '../../../lib/_idb-keyval/idb-keyval';\n\nimport switchTab from './switch-tab';\n\nexport default function triggerTabSwitch(e) {\n\n // Get the name of the tab that was clicked on and switch to it\n const $tab = $(e.currentTarget);\n const tabName = $tab.data('name');\n const tabSetName = $tab.parents('.toggle-tabs').data('name');\n\n // Save the selected tab to the browser's indexDB storage\n const rwStore = new Store('rotowire', 'toggletabs');\n set(tabSetName, tabName, rwStore).catch((err) => {\n console.log(`IDB KeyVal Error: ${err}`); // eslint-disable-line\n });\n\n switchTab(tabSetName, tabName);\n}\n", "/*******************************************************************************\r\nUpdates the winnings amounts displayed on a betting event card.\r\n*******************************************************************************/\r\n\r\nexport default function updateWinnings(eventID, centsBet, multipliers) {\r\n\r\n // Map the elements to update to their multiplier value\r\n const multipliersMap = {\r\n '.ml-home' : multipliers.ml.home,\r\n '.ml-away' : multipliers.ml.away,\r\n '.spread-home': multipliers.spread.home,\r\n '.spread-away': multipliers.spread.away,\r\n '.ou-over' : multipliers.ou.over,\r\n '.ou-under' : multipliers.ou.under,\r\n '.distance-yes' : multipliers.distance.yes,\r\n '.distance-no' : multipliers.distance.no,\r\n '.decision-fighter1' : multipliers.decision.fighter1,\r\n '.decision-fighter2' : multipliers.decision.fighter2,\r\n '.knockout-fighter1' : multipliers.knockout.fighter1,\r\n '.knockout-fighter2' : multipliers.knockout.fighter2,\r\n '.submission-fighter1' : multipliers.submission.fighter1,\r\n '.submission-fighter2' : multipliers.submission.fighter2,\r\n };\r\n\r\n const elementsToUpdate = Object.keys(multipliersMap);\r\n elementsToUpdate.forEach((el) => {\r\n const newWinnings = Number((centsBet * multipliersMap[el]) / 100).toFixed(2).toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,');\r\n const dollars = newWinnings.split('.')[0] || 0;\r\n const cents = newWinnings.split('.')[1] || 0;\r\n\r\n // Update the element with the new winnings value\r\n $(`.event[data-id=\"${eventID}\"]`).find(el)\r\n .safehtml(`$${dollars}.${cents}`);\r\n });\r\n}\r\n", "/*******************************************************************************\r\nTriggers an update to the winnings amounts displayed on a betting event card.\r\n*******************************************************************************/\r\n\r\nimport updateWinnings from './update-winnings';\r\n\r\nexport default function triggerUpdateWinnings(e) {\r\n const $input = $(e.currentTarget);\r\n const eventID = Number($input.parents('.event').data('id')) || '';\r\n\r\n // We're converting to cents to potentially limit issues with JS and decimal values\r\n const centsBet = Math.round(Math.max(Number($input.val().replace(/[^0-9.]/g, '')) * 100, 0));\r\n\r\n // Get the multiplier values from the input data attributes\r\n const {\r\n mlHome, mlAway, spreadHome, spreadAway, ouOver, ouUnder, distanceYes, distanceNo, decisionFighter1, decisionFighter2, knockoutFighter1, knockoutFighter2, submissionFighter1, submissionFighter2\r\n } = $input.data();\r\n\r\n // Bundle all the multipliers into an object\r\n const multipliers = {\r\n ml : { home: mlHome, away: mlAway },\r\n spread: { home: spreadHome, away: spreadAway },\r\n ou : { over: ouOver, under: ouUnder },\r\n distance : { yes: distanceYes, no: distanceNo },\r\n decision : { fighter1: decisionFighter1, fighter2: decisionFighter2 },\r\n knockout : { fighter1: knockoutFighter1, fighter2: knockoutFighter2 },\r\n submission : { fighter1: submissionFighter1, fighter2: submissionFighter2 },\r\n };\r\n\r\n // Update the winnings on screen\r\n updateWinnings(eventID, centsBet, multipliers);\r\n}\r\n", "/*******************************************************************************\nTRIGGER CUSTOM WINDOW RESIZED LISTENER\nTriggers a custom event to let any function know when the window has been resized.\n*******************************************************************************/\n\nlet resizeTimer;\n\nexport default function triggerWindowResizedListener() {\n $(window).on('resize', () => {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(() => { $(window).trigger('rw:window-resized'); }, 250);\n });\n}\n", "/*******************************************************************************\nGET ALL TABS\nGet the tab element, name and counter setting for every tab within a specific set of tabs.\n*******************************************************************************/\n\nexport default function getAllTabs(tabSetName) {\n const $tabs = $(`.filter-tabs[data-name=\"${tabSetName}\"]`);\n\n const tabs = [];\n $tabs.find('.filter-tab').each((index, tab) => {\n const $tab = $(tab);\n tabs.push({\n $element : $tab, // The tab element as a jQuery selector\n name : $tab.data('name'), // The name of the tab filter\n showCount: ($tab.data('count') === 'Yes'), // [true/false] Should we show a count of matching items?\n });\n });\n\n return tabs;\n}\n", "/*******************************************************************************\nUPDATE FILTER COUNTS\nCount the number of items that each filter tab matches (if that feature is turned on).\n*******************************************************************************/\n\nimport checkForMatch from './check-for-match';\nimport getAllTabs from './get-all-tabs';\nimport getFilterSettings from './get-filter-settings';\nimport getTabSettings from './get-tab-settings';\n\nexport default function updateFilterCounts() {\n const $tabSets = $('.filter-tabs');\n\n // If there are no tabs on screen, exit out\n if ($tabSets.length === 0) { return; }\n\n // Loop through all the sets of tabs\n $tabSets.each((index, tabSet) => {\n const $tabs = $(tabSet);\n const tabSetName = $tabs.data('name') || '';\n\n // Get an array of tab objects to loop through\n const allTabs = getAllTabs(tabSetName);\n\n // Get the settings for the filter\n const filterSettings = getFilterSettings(tabSetName);\n\n // Get the all items to filter on\n const $items = $(filterSettings.items);\n\n // Loop through all the tabs\n $.each(allTabs, (tabIndex, tab) => {\n\n // If the counter feature is turned on\n if (tab.showCount) {\n let counter = 0;\n\n // Gather all the settings related to the current filter\n const tabSettings = getTabSettings(tab.name);\n\n // Check each item to see if it matches the filter tab criteria\n $items.each((i, item) => {\n const $item = $(item);\n\n // Check to see if the current item matches the filter\n const filterMatches = checkForMatch($item, filterSettings, tabSettings);\n\n // Increment the match counter\n if (filterMatches) { counter += 1; }\n });\n\n // Get the counter element (which may not exist) for current tab element\n const $tabCounter = tab.$element.find('.filter-tab-count');\n\n // If the counter element is already there, then update the counter\n if ($tabCounter.length) {\n $tabCounter.text(counter);\n }\n // Otherwise add the counter to the page\n else {\n tab.$element.append(`${counter}`);\n }\n }\n });\n });\n\n}\n", "/*******************************************************************************\r\nTRIGGER THE FILTER RANGE UI\r\nHandles a click on the filter range edit button.\r\n*******************************************************************************/\r\n\r\nexport default function updateRangeEditor(e) {\r\n const $filterRangeEditor = $(e.currentTarget).parents('.filter-range__editor');\r\n const $startSelBox = $filterRangeEditor.find('.is-start');\r\n const $endSelBox = $filterRangeEditor.find('.is-end');\r\n const $button = $filterRangeEditor.find('.filter-range__go');\r\n\r\n // Get the current URL's params\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n // Grab the selected start and end values\r\n const start = $startSelBox.val();\r\n const end = $endSelBox.val();\r\n\r\n // Get the URL param names to use\r\n const startName = $startSelBox.data('name') || 'start';\r\n const endName = $endSelBox.data('name') || 'end';\r\n\r\n // Find the defaults + single unit label\r\n const defaultStart = $filterRangeEditor.data('defaultStart') || '';\r\n const defaultEnd = $filterRangeEditor.data('defaultEnd') || '';\r\n const singleName = $filterRangeEditor.data('single') || null;\r\n\r\n // Update the start/end values in the URL parameters array\r\n if (singleName && start === end) {\r\n params.set(singleName, start);\r\n params.delete(startName);\r\n params.delete(endName);\r\n }\r\n else {\r\n params.set(startName, start);\r\n params.set(endName, end);\r\n }\r\n\r\n // If the default values match the start or end, omit their respective URL params\r\n if (Number(defaultStart) === Number(start)) { params.delete(startName); }\r\n if (Number(defaultEnd) === Number(end)) { params.delete(endName); }\r\n\r\n // Sort the params so they're in alphabetical order (for URL consistency)\r\n params.sort();\r\n\r\n // Build the updated link\r\n const paramsLength = Array.from(params).length;\r\n const qMark = (paramsLength !== 0) ? '?' : '';\r\n const updatedLink = `${window.location.pathname}${qMark}${params}`;\r\n\r\n // Update the \"go\" button link\r\n $button.attr('href', updatedLink);\r\n}\r\n", "/*******************************************************************************\nWATCH DATA FILTER INPUT\nWatch for keystrokes inside the data filter text input box.\n*******************************************************************************/\n\nimport clearFilter from './clear';\n\nexport default function watchItemFilterInput(e) {\n const $filterInput = $(e.currentTarget);\n const searchTerm = $filterInput.val();\n const $filterWrapper = $filterInput.parents('.filter');\n\n // The CSS selector that determines what an \"item\" is\n const itemSelector = $filterInput.data('items');\n const $items = $(itemSelector);\n\n // This optional attribute is used if the content that needs to be searched is something specific inside the item\n // Ex. If you want to filter table rows, but you only want to filter the results based on the first column's content\n const subset = $filterInput.data('subset') || '';\n\n // This is the name that's used in the \"No [items name] found\" empty state message. Defaults to \"matches\".\n const itemsName = $filterInput.data('item') || 'matches';\n\n // Build the clear button\n const $clearButton = $('', { class: 'filter-clear' }).text('Clear');\n\n // Build the \"no matches found\" indicator\n const $noMatchesIndicator = $('', { class: 'filter-empty' }).text(`No ${itemsName} found.`);\n\n // Remove the previous \"no matches found\" indicator (if applicable)\n $('.filter-empty').remove();\n\n // Add the clear button if it doesn't exist\n $filterWrapper.find('.filter-clear').doIfNotExists(() => { $filterWrapper.append($clearButton); });\n\n // If the input is empty (or the ESC key is pressed, then get rid of the clear button and show everything\n if (!searchTerm || e.which === 27) {\n $filterInput.val('');\n $filterWrapper.find('.filter-clear').remove();\n $items.removeClass('hide-filter');\n return;\n }\n\n // If the search string does not match part of the search term, hide the item. Otherwise show it.\n $items.each(function filterItems() {\n const $item = $(this);\n\n // If there's an optional subset, use that when the searching the item\n const $itemToSearch = (subset) ? $item.find(subset).text() : $item.text();\n\n // Filter the items\n if ($itemToSearch.search(new RegExp(searchTerm, 'i')) < 0) {\n $item.addClass('hide-filter');\n }\n else {\n $item.removeClass('hide-filter');\n }\n });\n\n // If there no matching items, display the message explaining that\n if ($(`${itemSelector}:not(.hide-filter)`).length === 0) {\n $filterWrapper.after($noMatchesIndicator);\n\n // Adjust the left padding to fit the input position\n const noMatchesLeftPad = parseInt($filterWrapper.css('padding-left'), 10) + parseInt($noMatchesIndicator.css('padding-left'), 10);\n $noMatchesIndicator.css('padding-left', `${noMatchesLeftPad}px`);\n }\n\n // If you press enter when there's only one item displaying (and it's a link), then go to the link\n // Or if there's a button, trigger a click on it (and also clear the filter)\n if (e.which === 13) {\n if ($(itemSelector).not('.hide-filter').find('a').length === 1) {\n window.location.href = $(`${itemSelector}:visible`).find('a').attr('href');\n return;\n }\n if ($(itemSelector).not('.hide-filter').find('button:visible').length === 1) {\n $(`${itemSelector}:visible`).find('button').trigger('click');\n clearFilter(itemSelector);\n }\n }\n}\n", "/*******************************************************************************\nWATCH ITEMS\nWatch the items being filtered and react to any input changes.\n*******************************************************************************/\n\nimport getFilterSettings from './get-filter-settings';\nimport updateFilterCounts from './update-filter-counts';\n\nexport default function watchItems() {\n const { items } = getFilterSettings();\n\n // Set up an event handler to update the tab counts whenever a change is made to an input within an item\n $(items).on('change', ':input', () => { updateFilterCounts(); });\n}\n", "/*******************************************************************************\nWATCH INPUT BOX THAT USES CLEAR BUTTON\nWatch for keystrokes inside the input box.\n*******************************************************************************/\n\nimport clearInputBox from './clear';\n\nexport default function watchInputWithClearButton(e) {\n const $input = $(e.currentTarget);\n const $inputWrapper = $input.parents('.input-wrapper');\n const customClearClass = $inputWrapper.data('clear-class');\n\n // Build the clear button\n const $clearButton = $('', { class: `input-clear ${customClearClass}` }).text('Clear');\n\n // Add the clear button if it doesn't exist\n $inputWrapper.find('.input-clear').doIfNotExists(() => { $inputWrapper.append($clearButton); });\n\n // If the input is empty (or the ESC key is pressed, then get rid of the clear button\n if (!$input.val() || e.which === 27) { clearInputBox($input); }\n}\n", "/*******************************************************************************\nBUILD A MODAL WINDOW SHELL\nThis is essentially an empty shell to put content inside.\n*******************************************************************************/\n\nexport default function buildModalWindowShell(options) {\n\n // All the different options that can be passed in\n const title = options.title || '';\n const content = options.content || 'This modal window needs some content';\n const isWide = (options.wide === undefined) ? false : options.wide;\n const isFull = (options.fullWidth === undefined) ? false : options.fullWidth;\n //const modalType = options.modalType || 'basic';\n const includeBackground = (options.includeBackground === undefined) ? true : options.includeBackground;\n const includeHeader = (options.includeHeader === undefined) ? true : options.includeHeader;\n\n // Default modal classes (for basic modal)\n const modalClasses = {\n main : 'modal',\n head : 'modal__head',\n close: 'modal__close',\n };\n\n const modalHeader = (!includeHeader) ? '' : `\n \n ${title}\n ×\n `;\n\n const modalHTML = `\n \n ${modalHeader}\n ${content}\n `;\n\n return (includeBackground) ? `${modalHTML}` : modalHTML;\n}\n", "/*******************************************************\nOPEN TEAM VS POSITION MODAL\nUsed on the team vs. position page for NFL.\n********************************************************/\n\nimport buildModal from '../../universal/modal-window/build-modal';\n\nexport default function openTeamVsPosModal(event) {\n const $button = $(event.currentTarget);\n const { pos, team, scoringtype, year } = $button.data();\n const teamNameParts = ($button.siblings('a').text() || '').split(' ');\n const teamName = teamNameParts[teamNameParts.length - 1];\n\n // Set the table loading message\n const loadingMessage = `Loading ${teamName} vs. ${pos} Stats`;\n\n // Build the title\n const modalTitle = `\n \n ${teamName}Vs. ${pos}\n `;\n\n // Build the content of the modal\n const modalContent = `\n \n ${loadingMessage}\n `;\n\n // Get the modal window HTML\n const modalHTML = buildModal({\n fullWidth: true,\n title : modalTitle,\n content : modalContent,\n });\n\n // Append the modal window to the page\n $('.page').append(modalHTML);\n\n if (pos === 'QB') {\n\n loadTableRW({\n container : `tvp-table${team}`,\n url : `/football/tables/defense-vs-pos-gl.php?pos=QB&team=${team}&scoringtype=${scoringtype}&year=${year}`,\n emptyMessage: 'There were no stats found.',\n leftSplit : 2,\n css : 'no-border',\n columns : [\n { id : 'team',\n header : [{ text: '', css: 'columns-head is-dark', colspan: 2 }, { text: 'Name', css: 'align-l' }],\n css : 'align-l',\n sort : 'text-string',\n template: '#team#',\n },\n { id : 'week',\n header: ['', { text: 'Week' }],\n sort : 'number',\n },\n\n { id : 'points', startOfGroup: true,\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'passComp', startOfGroup: true,\n header: [{ text: 'Passing', css: 'columns-head is-dark', colspan: 6 }, { text: 'COMP' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passAtt',\n header: ['', { text: 'ATT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'passInt',\n header: ['', { text: 'INT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypa',\n header: ['', { text: 'YPA' }],\n css: 'align-r', \n sort: 'number',\n },\n { id : 'rushAtt', startOfGroup: true,\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 4 }, { text: 'ATT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypc',\n header: ['', { text: 'YPC' }],\n css: 'align-r', \n sort: 'number',\n },\n ],\n\n });\n }\n else if (pos === 'RB' || pos === 'WR' || pos === 'TE') {\n\n loadTableRW({\n container : `tvp-table${team}`,\n url : `/football/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\n emptyMessage: 'There were no stats found.',\n leftSplit : 2,\n columns : [\n\n { id : 'team',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 2 }, { text: 'Name', css: 'align-l' }],\n css : 'align-l',\n sort : 'text-string',\n },\n { id : 'week',\n header: ['', { text: 'Week' }],\n sort : 'number',\n },\n\n { id : 'points', startOfGroup: true,\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'rushAtt', startOfGroup: true,\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 4 }, { text: 'ATT' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'rushTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypc',\n header: ['', { text: 'YPC' }],\n css: 'align-r', \n sort: 'number',\n },\n\n { id : 'receptions', startOfGroup: true,\n header: [{ text: 'Receiving', css: 'columns-head is-dark', colspan: 5 }, { text: 'REC' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'recYds',\n header: ['', { text: 'YDS' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'recTD',\n header: ['', { text: 'TD' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'targets',\n header: ['', { text: 'TAR' }],\n css : 'align-r',\n sort : 'number',\n },\n { id: 'ypt',\n header: ['', { text: 'YPT' }],\n css: 'align-r', \n sort: 'number',\n },\n\n ],\n });\n\n }\n else if (pos === 'K') {\n\n loadTableRW({\n container : `tvp-table${team}`,\n url : `/football/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\n emptyMessage: 'There were no stats found.',\n leftSplit : 2,\n columns : [\n\n { id : 'team',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 2 }, { text: 'Name', css: 'align-l' }],\n css : 'align-l',\n sort : 'text-string',\n },\n { id : 'week',\n header: ['', { text: 'Week' }],\n sort : 'number',\n },\n\n { id : 'points', startOfGroup: true,\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'xpm', startOfGroup: true,\n header: [{ text: 'Extra Points', css: 'columns-head is-dark', colspan: 2 }, { text: 'XPM' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'xpa',\n header: ['', { text: 'XPA' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'fgm', startOfGroup: true,\n header: [{ text: 'Field Goals', css: 'columns-head is-dark', colspan: 2 }, { text: 'FGM' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fga',\n header: ['', { text: 'FGA' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'fgm29', startOfGroup: true,\n header: [{ text: 'Field Goal Distance', css: 'columns-head is-dark', colspan: 4 }, { text: '0-29' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fgm39',\n header: ['', { text: '30-39' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fgm49',\n header: ['', { text: '40-49' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'fgm50',\n header: ['', { text: '50+' }],\n css : 'align-r',\n sort : 'number',\n },\n\n ],\n });\n\n }\n\n\n}\n", "/*******************************************************\nOPEN TEAM VS POSITION MODAL\nUsed on the team vs. position page for NFL.\n********************************************************/\n\nimport buildModal from '../../universal/modal-window/build-modal';\n\nexport default function openTeamVsPosModal(event) {\n const $button = $(event.currentTarget);\n const { id, firstname, lastname, pos, team, startweek, endweek, view } = $button.data();\n\n\n // Set the table loading message\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\n\n // Build the title\n const modalTitle = `\n \n ${firstname} ${lastname}\n `;\n\n // Build the content of the modal\n const modalContent = `\n \n ${loadingMessage}\n `;\n\n // Get the modal window HTML\n const modalHTML = buildModal({\n fullWidth: true,\n title : modalTitle,\n content : modalContent,\n });\n\n const $allTable = $('#trendsALL');\n\n // Append the modal window to the page\n $('.page').append(modalHTML);\n\n if (view === 'percent') {\n\n loadTableRW({\n container : `tt-table${id}`,\n url : `/football/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\n emptyMessage: 'We do not have any stats to display at the moment.',\n leftSplit : 1,\n css : 'no-border',\n columns : [\n\n { id : 'stat',\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\n sort : 'text-string',\n sortDirection: 'asc',\n },\n\n { id : 'avgStat',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'total',\n header: ['', { text: 'Total' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'minStat',\n header: ['', { text: 'Min' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'maxStat',\n header: ['', { text: 'Max' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'wk1',\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk2',\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk3',\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk4',\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk5',\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk6',\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk7',\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk8',\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk9',\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk10',\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk11',\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk12',\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk13',\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk14',\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk15',\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk16',\n header : [{ text: '16', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n { id : 'wk17',\n header : [{ text: '17', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\n },\n ],\n });\n\n }\n else {\n\n loadTableRW({\n container : `tt-table${id}`,\n url : `/football/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\n emptyMessage: 'We do not have any stats to display at the moment.',\n leftSplit : 1,\n css : 'no-border',\n columns : [\n\n { id : 'stat',\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\n sort : 'text-string',\n sortDirection: 'asc',\n },\n\n { id : 'avgStat',\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'total',\n header: ['', { text: 'Total' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'minStat',\n header: ['', { text: 'Min' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'maxStat',\n header: ['', { text: 'Max' }],\n css : 'align-r',\n sort : 'number',\n },\n\n { id : 'wk1',\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk2',\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk3',\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk4',\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk5',\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk6',\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk7',\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk8',\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk9',\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk10',\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk11',\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk12',\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk13',\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk14',\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk15',\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk16',\n header: [{ text: '16', css: 'columns-head is-dark' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n { id : 'wk17',\n header: [{ text: '17', css: 'columns-head is-dark' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\n css : 'align-r',\n sort : 'number',\n },\n ],\n });\n\n }\n\n}\n", "/*******************************************************\r\nOPEN WIN RATE MODAL\r\nUsed on the win rate page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openWinRateModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, playerid, firstname, lastname, pos, team, startweek, endweek } = $button.data();\r\n\r\n // Get the table data\r\n let $activeTab = $('.bestball:not(.hide-filtertab)').data('pos').toUpperCase();\r\n let tableID = $('#bestball'+$activeTab).find('.webix_dtable').attr('id');\r\n let table = $$(tableID);\r\n let $rowData = table.getItem(id);\r\n\r\n // Build label name + bar data\r\n let $weeks = [];\r\n let $percentages = [];\r\n let $barColor = [];\r\n let $borderColor = [];\r\n for (let i = startweek; i <= endweek; ++i) {\r\n $weeks.push(i);\r\n $percentages.push($rowData['wk'+i]);\r\n $barColor.push('rgba(18, 108, 211, 0.2)');\r\n $borderColor.push('rgba(18, 108, 211, 1)');\r\n }\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n \r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n // Add bar chart\r\n var ctx = document.getElementById('myChart').getContext('2d');\r\n var myChart = new Chart(ctx, {\r\n type: 'bar',\r\n data: {\r\n labels: $weeks,\r\n datasets: [{\r\n data: $percentages,\r\n backgroundColor: $barColor,\r\n borderColor: $borderColor,\r\n borderWidth: 1\r\n }]\r\n },\r\n options: {\r\n scales: {\r\n yAxes: [{\r\n ticks: {\r\n beginAtZero: true\r\n },\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'Win Rate %',\r\n fontSize: 12,\r\n fontColor: '#000',\r\n fontStyle: 'bold',\r\n },\r\n }],\r\n xAxes: [{\r\n scaleLabel: {\r\n display: true,\r\n labelString: 'Weeks',\r\n fontSize: 12,\r\n fontColor: '#000',\r\n fontStyle: 'bold',\r\n },\r\n }],\r\n },\r\n title: {\r\n display: true,\r\n text: 'Win Rate By Week',\r\n fontSize: 15,\r\n fontColor: '#000',\r\n fontStyle: 'bold',\r\n },\r\n legend: {\r\n display: false,\r\n }\r\n }\r\n });\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN WIN RATE SEASON MODAL\r\nUsed on the win rate page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openWinRateBySeasonModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, playerid, firstname, lastname, pos, team, startweek, endweek } = $button.data();\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n loadTableRW({\r\n container : `win-rate-table${playerid}`,\r\n url : `/football/tables/win-rate-player.php?&playerid=${playerid}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id: 'player',\r\n header: [{ text: 'Player', css: 'align-l' },],\r\n sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n },\r\n },\r\n { id: 'team',\r\n header: [{ text: 'Team' }, ],\r\n sort: 'text-string',\r\n },\r\n { id: 'pos',\r\n header: [{ text: 'Pos' }, ],\r\n sort: 'text-string',\r\n },\r\n { id: 'season',\r\n header: [{ text: 'Season' }, ],\r\n sort: 'number', sortDirection: 'asc',\r\n },\r\n { id: 'winPct',\r\n header: [{ text: 'Win %' }, ],\r\n sort: 'number'\r\n },\r\n { id: 'adp',\r\n header: [{ text: 'ADP' }, ],\r\n sort: 'number', sortDirection: 'asc',\r\n },\r\n { id: 'fpts',\r\n header: [{ text: 'FPTS' }, ],\r\n sort: 'number'\r\n },\r\n { id: 'score',\r\n header: [{ text: 'Avg Score' }, ],\r\n sort: 'number'\r\n },\r\n\r\n ],\r\n });\r\n}\r\n", "/*******************************************************\nNFL EVENT HANDLERS\nThis handles events for various interactions related to NFL.\n********************************************************/\n\nimport openTeamVsPosModal from './open-team-vs-pos-modal';\nimport openTeamTrendsModal from './open-team-trends-modal';\nimport openWinRateModal from './open-win-rate-modal';\nimport openWinRateBySeasonModal from './open-win-rate-by-season-modal';\n\nexport default function addNFLEventHandlers() {\n\n // Open team vs position modal\n $(document).on('click', '.tvp-open', openTeamVsPosModal);\n\n $(document).on('click', '.tt-open', openTeamTrendsModal);\n\n // Open win rate graph\n $(document).on('click', '.win-rate-graph-open', openWinRateModal);\n\n // Open win rate by season table\n $(document).on('click', '.win-rate-by-season-open', openWinRateBySeasonModal);\n\n}\n", "/*******************************************************\r\nADD FIVE MAN PLAYER\r\nUsed on the five man stats page for NBA.\r\n********************************************************/\r\n\r\nimport closeModalWindow from '../../universal/modal-window/close';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function openCourtOnOffModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { player, court } = $button.data();\r\n\r\n const playerId = player;\r\n const courtOnOff = court;\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/basketball/ajax/get-court-on-off-player.php`,\r\n data : {\r\n player: playerId,\r\n },\r\n timeout: 10000,\r\n });\r\n\r\n const { playerHTML, success } = response;\r\n\r\n // Get the modal button\r\n const $modalButton = $('.open-court-on-off-modal[data-court=\"' + courtOnOff + '\"]');\r\n\r\n // Prepend the player HTML to the add player button\r\n $modalButton.before(playerHTML);\r\n\r\n // If we have 5 or more players and we in the ON court section than hide the modal\r\n if($modalButton.siblings('.court-on-off-player').length >= 5 && courtOnOff === \"on\"){\r\n $modalButton.addClass('hide');\r\n }\r\n\r\n // Close the modal\r\n closeModalWindow();\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to add that player for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************************************\nCLEAR INJURY ARCHIVE SEARCH\nResets the player search input to its empty state.\n*******************************************************************************/\n\nimport clearInputBox from '../../../js/universal/input-with-clear/clear';\n\nexport default function clearInjuryArchiveSearch() {\n const $input = $('#injury-archive-search');\n\n // Sets the last search to nothing\n $input.data('lastsearch', '');\n\n // Clears the search results\n $('.archive-search-results').empty();\n\n // Clear the input box and remove the clear button\n // This is normally handled by the universal input box with clear button scripts in the /universal/ folder,\n // but clearPlayerSearch() is triggered in other contexts, so it's necessary to call it manually here too\n clearInputBox($input);\n}\n", "/*******************************************************\r\nNBA EVENT HANDLERS\r\nThis handles events for various interactions related to NBA.\r\n********************************************************/\r\n\r\nimport addCourtOnOffPlayer from './add-court-on-off-player';\r\nimport clearInjuryArchiveSearch from './clear-injury-archive-search';\r\nimport debounce from '../../../js/universal/debounce/debounce';\r\nimport loadCourtOnOffTable from './load-court-on-off-table';\r\nimport openCourtOnOffModal from './open-court-on-off-modal';\r\nimport openInjuryArchiveModal from './open-injury-archive-modal';\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\nimport removeCourtOnOffPlayer from './remove-court-on-off-player';\r\nimport triggerInjuryArchiveSearch from './trigger-injury-archive-search';\r\n\r\nexport default function addNBAEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-nba', openTeamTrendsModal);\r\n\r\n $(document).on('click', '.open-court-on-off-modal', openCourtOnOffModal);\r\n\r\n $(document).on('click', '.add-court-on-off-player', addCourtOnOffPlayer);\r\n\r\n $(document).on('click', '.remove-court-on-off-player', removeCourtOnOffPlayer);\r\n\r\n $(document).on('click', '.load-court-on-off-table', loadCourtOnOffTable);\r\n\r\n $(document).on('click', '.open-injury-archive-modal', openInjuryArchiveModal);\r\n\r\n $(document).on('keyup', '#injury-archive-search', debounce(triggerInjuryArchiveSearch, 300));\r\n\r\n $(document).on('click', '.clear-injury-archive-search', clearInjuryArchiveSearch);\r\n\r\n}\r\n", "/*******************************************************\r\nLOAD ON/OFF COURT TABLE\r\nUsed on the on/off court stats page for NBA.\r\n********************************************************/\r\n\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function loadCourtOnOffTable(event) {\r\n\r\n // The data to collect to build our table\r\n let playersOnCourt = [];\r\n let playersOffCourt = [];\r\n let team = null;\r\n let range = null;\r\n let split = null;\r\n\r\n // Iterate over the modal buttons to get the list of on players and off players\r\n $('.open-court-on-off-modal').each((index, modalButton) => {\r\n const $modalButton = $(modalButton);\r\n const modalButtonCourt = $modalButton.data('court');\r\n const modalButtonTeam = $modalButton.data('team');\r\n\r\n // Set the team\r\n if(!team){ team = modalButtonTeam; }\r\n\r\n // Get each player and add them to the appropriate array\r\n $modalButton.siblings('.court-on-off-player').each((index, player) => {\r\n const $player = $(player);\r\n const playerId = $player.data('player');\r\n\r\n if(modalButtonCourt === \"on\"){\r\n playersOnCourt.push(playerId);\r\n } else {\r\n playersOffCourt.push(playerId);\r\n }\r\n\r\n });\r\n });\r\n\r\n // Get the date range\r\n range = $('#reportrange').val();\r\n\r\n // Get the split\r\n split = $(\"input[name='split']:checked\").val();\r\n\r\n // Show the toggle tabs\r\n $('.court-on-off-view-toggle').removeClass('hide');\r\n\r\n // Remove any existing tables and headers\r\n $('#court-on-off-totals').remove();\r\n $('#court-on-off-per-36').remove();\r\n $('#court-on-off-difference-header').remove();\r\n $('#court-on-off-difference').remove();\r\n\r\n // Build the new table placeholders\r\n let $onOffStatsTables =\r\n `\r\n \r\n \r\n Loading Stats\r\n \r\n \r\n \r\n \r\n \r\n \r\n Loading Stats\r\n \r\n \r\n `;\r\n\r\n // If we supplied any player parameters then show the differential table\r\n if(playersOnCourt.length > 0 || playersOffCourt.length > 0){\r\n $onOffStatsTables +=\r\n `DIFFERENTIAL PER 36\r\n \r\n \r\n \r\n Loading Stats\r\n \r\n \r\n `;\r\n }\r\n\r\n // Add the table placeholders\r\n $('.page').append($onOffStatsTables);\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : '/basketball/tables/court-on-off-stats.php',\r\n data : {\r\n team: team,\r\n on: playersOnCourt,\r\n off: playersOffCourt,\r\n range: range,\r\n split: split,\r\n },\r\n timeout: 25000,\r\n });\r\n\r\n // Build the totals table data\r\n let totalData = {\r\n container: 'court-on-off-totals',\r\n data: response.players,\r\n emptyMessage: 'There were no stats found with those settings.',\r\n leftSplit: 1,\r\n customFilters: {\r\n visible: false,\r\n },\r\n columns: [\r\n { id: 'player',\r\n header: [{ text: '', css: 'columns-head', },{ text: 'Player', css: 'align-l' }],\r\n css: 'align-l',sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n }\r\n },\r\n { id: 'games',\r\n header: [{ text: 'Basic Stats', css: 'columns-head', colspan: 12}, { text: 'G' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'minutes',\r\n header: ['', { text: 'MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'plusMinus',\r\n header: ['', { text: '+/-' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'points',\r\n header: ['', { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'rebounds',\r\n header: ['', { text: 'REB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'offensiveRebounds',\r\n header: ['', { text: 'OREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'defensiveRebounds',\r\n header: ['', { text: 'DREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'assists',\r\n header: ['', { text: 'AST' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'steals',\r\n header: ['', { text: 'STL' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'blocks',\r\n header: ['', { text: 'BLK' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'turnovers',\r\n header: ['', { text: 'TO' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fouls',\r\n header: ['', { text: 'PF' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fieldGoalsMade',\r\n header: [{ text: 'Shooting', css: 'columns-head align-c', colspan: 6 }, { text: 'FGM' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fieldGoalAttempts',\r\n header: ['', { text: 'FGA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointersMade',\r\n header: ['', { text: '3PM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointerAttempts',\r\n header: ['', { text: '3PA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowsMade',\r\n header: ['', { text: 'FTM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowAttempts',\r\n header: ['', { text: 'FTA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'usage',\r\n header: [{ text: 'Usage', css: 'columns-head align-c', colspan: 1 }, { text: 'USG %' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPoints',\r\n header: [{ text: 'FanDuel', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'draftkingsPoints',\r\n header: [{ text: 'DraftKings', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'draftkingsPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n ],\r\n }\r\n\r\n // Build the per36 table data\r\n let per36Data = {\r\n container: 'court-on-off-per-36',\r\n data: response.players,\r\n emptyMessage: 'There were no stats found with those settings.',\r\n leftSplit: 1,\r\n customFilters: {\r\n visible: false,\r\n },\r\n columns: [\r\n { id: 'player',\r\n header: [{ text: '', css: 'columns-head', },{ text: 'Player', css: 'align-l' }],\r\n css: 'align-l',sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n }\r\n },\r\n { id: 'games',\r\n header: [{ text: 'Basic Stats', css: 'columns-head', colspan: 12}, { text: 'G' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'minutes',\r\n header: ['', { text: 'MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'plusMinusPer36',\r\n header: ['', { text: '+/-' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'pointsPer36',\r\n header: ['', { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'reboundsPer36',\r\n header: ['', { text: 'REB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'offensiveReboundsPer36',\r\n header: ['', { text: 'OREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'defensiveReboundsPer36',\r\n header: ['', { text: 'DREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'assistsPer36',\r\n header: ['', { text: 'AST' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'stealsPer36',\r\n header: ['', { text: 'STL' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'blocksPer36',\r\n header: ['', { text: 'BLK' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'turnoversPer36',\r\n header: ['', { text: 'TO' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'foulsPer36',\r\n header: ['', { text: 'PF' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fieldGoalsMadePer36',\r\n header: [{ text: 'Shooting', css: 'columns-head align-c', colspan: 6 }, { text: 'FGM' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fieldGoalAttemptsPer36',\r\n header: ['', { text: 'FGA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointersMadePer36',\r\n header: ['', { text: '3PM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointerAttemptsPer36',\r\n header: ['', { text: '3PA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowsMadePer36',\r\n header: ['', { text: 'FTM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowAttemptsPer36',\r\n header: ['', { text: 'FTA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'usage',\r\n header: [{ text: 'Usage', css: 'columns-head align-c', colspan: 1 }, { text: 'USG %' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPer36',\r\n header: [{ text: 'FanDuel', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'draftkingsPointsPer36',\r\n header: [{ text: 'DraftKings', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'draftkingsPointsPerMinute',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n ],\r\n }\r\n\r\n // Build the difference table data\r\n let differenceData = {\r\n container: 'court-on-off-difference',\r\n data: response.players,\r\n emptyMessage: 'There were no differential stats found with those settings.',\r\n leftSplit: 1,\r\n customFilters: {\r\n visible: false,\r\n },\r\n columns: [\r\n { id: 'player',\r\n header: [{ text: '', css: 'columns-head', },{ text: 'Player', css: 'align-l' }],\r\n css: 'align-l',sort: 'linked-name', sortDirection: 'asc',\r\n template: function (player) {\r\n return '' + player.firstname + '' + player.firstname[0] + '. ' + player.lastname + '';\r\n }\r\n },\r\n { id: 'pointsDifference',\r\n header: [{ text: 'Basic Stats', css: 'columns-head', colspan: 9}, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'reboundsDifference',\r\n header: ['', { text: 'REB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'offensiveReboundsDifference',\r\n header: ['', { text: 'OREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'defensiveReboundsDifference',\r\n header: ['', { text: 'DREB' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'assistsDifference',\r\n header: ['', { text: 'AST' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'stealsDifference',\r\n header: ['', { text: 'STL' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'blocksDifference',\r\n header: ['', { text: 'BLK' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'turnoversDifference',\r\n header: ['', { text: 'TO' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'foulsDifference',\r\n header: ['', { text: 'PF' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'fieldGoalsMadeDifference',\r\n header: [{ text: 'Shooting', css: 'columns-head align-c', colspan: 6 }, { text: 'FGM' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fieldGoalAttemptsDifference',\r\n header: ['', { text: 'FGA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointersMadeDifference',\r\n header: ['', { text: '3PM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'threePointerAttemptsDifference',\r\n header: ['', { text: '3PA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowsMadeDifference',\r\n header: ['', { text: 'FTM' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'freeThrowAttemptsDifference',\r\n header: ['', { text: 'FTA' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'usageDifference',\r\n header: [{ text: 'Usage', css: 'columns-head align-c', colspan: 1 }, { text: 'USG %' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsDifference',\r\n header: [{ text: 'FanDuel', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'fanduelPointsPerMinuteDifference',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n { id: 'draftkingsPointsDifference',\r\n header: [{ text: 'DraftKings', css: 'columns-head align-c', colspan: 2 }, { text: 'PTS' }],\r\n css: 'align-r',sort: 'number',\r\n startOfGroup: true,\r\n },\r\n { id: 'draftkingsPointsPerMinuteDifference',\r\n header: ['', { text: 'PTS/MIN' }],\r\n css: 'align-r',sort: 'number',\r\n },\r\n ],\r\n }\r\n\r\n // Filter empty rows from the difference table data\r\n differenceData.data = $.grep(differenceData.data, function(p) {\r\n return p.usageDifference !== '';\r\n });\r\n\r\n // Sort the difference table data by usage\r\n differenceData.data.sort(function(a, b){\r\n return ((a.usageDifference < b.usageDifference) ? 1 : ((a.usageDifference > b.usageDifference) ? -1 : 0));\r\n });\r\n\r\n function mapCourtOnOffColumns(tableData){\r\n var heatmapColumns = ['usage','usageDifference'];\r\n\r\n var maxValues = Object.keys(tableData[0] || []).reduce(function(maxList, col){\r\n if (!heatmapColumns.includes(col)) { return maxList; }\r\n maxList[col] = Math.max.apply(null, tableData.map(function(r){ return Number(r[col]); }));\r\n return maxList;\r\n }, {});\r\n\r\n var minValues = Object.keys(tableData[0] || []).reduce(function(minList, col){\r\n if (!heatmapColumns.includes(col)) { return minList; }\r\n minList[col] = Math.min.apply(null, tableData.map(function(r){ return Number(r[col]); }));\r\n return minList;\r\n }, {});\r\n\r\n return function(col){\r\n if (!col.sort) { col.sort = 'number'; }\r\n if (!col.sortDirection) { col.sortDirection = 'desc'; }\r\n if (!col.css) { col.css = 'align-r'; }\r\n if (heatmapColumns.includes(col.id)) {\r\n\r\n var minValue = minValues[col.id] || 0;\r\n var maxValue = maxValues[col.id] || 1000;\r\n\r\n if(col.sortDirection === 'asc'){\r\n col.cssFormat = formatCellRW('heatmap', { min: maxValue , max: minValue });\r\n } else {\r\n col.cssFormat = formatCellRW('heatmap', { min: minValue , max: maxValue });\r\n }\r\n }\r\n return col;\r\n }\r\n }\r\n\r\n totalData.columns = totalData.columns.map(mapCourtOnOffColumns(response.players));\r\n per36Data.columns = per36Data.columns.map(mapCourtOnOffColumns(response.players));\r\n differenceData.columns = differenceData.columns.map(mapCourtOnOffColumns(response.players));\r\n\r\n if(!response.paid){\r\n const paywall = {\r\n headline: 'Want to see stats for every player?',\r\n text: 'We\\'ve only included a limited number of players in the section above. The rest of our sortable on/off court stats are reserved for RotoWire subscribers.',\r\n cta: {\r\n text: 'Unlock Our Full Stats',\r\n link: '/subscribe/',\r\n }\r\n }\r\n\r\n totalData.paywall = paywall;\r\n per36Data.paywall = paywall;\r\n differenceData.paywall = paywall;\r\n }\r\n\r\n\r\n //Load the tables to the screen\r\n loadTableRW(totalData);\r\n\r\n loadTableRW(per36Data);\r\n\r\n if(playersOnCourt.length > 0 || playersOffCourt.length > 0){\r\n loadTableRW(differenceData);\r\n }\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'There was an error. Please try again.', 3000);\r\n }\r\n}\r\n", "/*******************************************************\r\nOPEN FIVE MAN MODAL\r\nUsed on the five man stats page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function openCourtOnOffModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { team, court } = $button.data();\r\n\r\n const teamAbbr = team;\r\n const courtOnOff = court;\r\n\r\n // Get the list of excluded players who have already been added\r\n const excludedPlayers = [];\r\n $('.court-on-off-player').each((index, player) => {\r\n const $player = $(player);\r\n excludedPlayers.push($player.data('player'));\r\n });\r\n\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/basketball/ajax/get-court-on-off-team.php`,\r\n data : {\r\n team: teamAbbr,\r\n court: courtOnOff,\r\n exclude: excludedPlayers,\r\n },\r\n timeout: 10000,\r\n });\r\n\r\n const { playersHTML, success } = response;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n Add Player\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n \r\n ${playersHTML}\r\n \r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve that info for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN INJURY ARCHIVE MODAL\r\nUsed on the injury archive page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nexport default async function openInjuryArchiveModal(event) {\r\n\r\n const $button = $(event.currentTarget);\r\n const { injury, dates } = $button.data();\r\n\r\n try {\r\n // Build the title\r\n const modalTitle = `\r\n \r\n Search Players\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve that info for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/basketball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/basketball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nREMOVE COURT ON/OFF PLAYER\r\nUsed on the five man stats page for NBA.\r\n********************************************************/\r\n\r\nexport default async function openCourtOnOffModal(event) {\r\n const $button = $(event.currentTarget);\r\n const $player = $button.parents('.court-on-off-player');\r\n const $modalButton = $player.siblings('.open-court-on-off-modal');\r\n\r\n // Remove the player\r\n $player.remove();\r\n\r\n // If the Add Player modal button is hidden show it\r\n if($modalButton.hasClass('hide')){\r\n $modalButton.removeClass('hide');\r\n }\r\n\r\n}\r\n", "/*******************************************************************************\nSEARCH INJURY ARCHIVE\nReturns matching players for a search.\n*******************************************************************************/\n\nimport showErrorNotificationBar from '../../../js/universal/error-handling/show-error-notification-bar';\n\nexport default async function searchInjuryArchive(settings) {\n try {\n const response = await $.ajax({\n type: 'GET',\n url : `/basketball/ajax/search-injury-archive.php`,\n data: {\n searchTerm: settings.searchTerm,\n },\n timeout: 8000,\n });\n\n // Check for errors with the data\n if (response.error || !response.success) { throw new Error(response.error); }\n\n // Return the data\n return {\n players: response.players,\n };\n }\n catch (error) {\n showErrorNotificationBar(error.message || 'We were unable to search for players. Please try again.', 3000);\n }\n}\n", "/*******************************************************************************\nTRIGGER INJURY ARCHIVE SEARCH\nTriggers a player search.\n*******************************************************************************/\n\nimport clearInjuryArchiveSearch from './clear-injury-archive-search';\nimport searchInjuryArchive from './injury-archive-search';\n\nexport default async function triggerInjuryArchiveSearch(e) {\n\n const $input = $(e.currentTarget);\n const searchTerm = $input.val();\n\n // Get the data attributes\n const dates = $input.data('dates') || '';\n const injury = $input.data('injury') || '';\n const lastSearch = $input.data('lastsearch') || '';\n\n // If the input is empty or the ESC key is pressed,\n // then reset everything to its initial state and exit out\n if (!searchTerm || e.which === 27) { clearInjuryArchiveSearch(); return; }\n\n // If the last search is the same as the current search, don't run it again\n if (searchTerm === lastSearch) { return; }\n\n // The container for the search results\n const $searchResults = $('.archive-search-results');\n\n // Display a message and exit out if there are fewer than 2 characters\n $searchResults.removeClass('hide').html('Please enter at least 2 characters.');\n if (searchTerm.length < 2) { return; }\n\n // Empty the search results and add a \"Searching...\" message\n $searchResults.empty().html('Searching for players...');\n\n // Set the data that gets used with the AJAX query\n const settings = {\n searchTerm,\n };\n\n try {\n // Store the current search term in a data attribute (useful for preventing duplicate AJAX calls)\n $input.data('lastsearch', searchTerm);\n\n // Search the players\n // If players is undefined, the rest of this try block won't run\n const { players } = await searchInjuryArchive(settings);\n\n // If there are no results, exit out and show the empty state\n if (players.length === 0) {\n $searchResults.html('No players matched your search.');\n return;\n }\n\n let resultsHTML = '';\n players.forEach((player) => {\n\n resultsHTML += `\n \n \n ${player.name} \n ${player.team}  ${player.position}\n \n Select\n `;\n });\n\n // Add the search results to their container\n $searchResults.safehtml(resultsHTML);\n }\n catch (err) {\n // Error message already triggered in search-players.js\n }\n}\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/hockey/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/hockey/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nNHL EVENT HANDLERS\r\nThis handles events for various interactions related to NHL.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addNHLEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-nhl', openTeamTrendsModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN SCORE CARD MODAL\r\nUsed on the tournament page for PGA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openScoreCardModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, round, tourneyid, playerurl } = $button.data();\r\n\r\n const ajaxResponse = $.ajax({\r\n type: 'GET',\r\n data: {\r\n round: round,\r\n id: id,\r\n tourneyid: tourneyid,\r\n },\r\n url: '/golf/ajax/get-player-scorecard-html.php',\r\n timeout: 5000\r\n });\r\n\r\n ajaxResponse.fail(function(response){\r\n console.log('An error happened.');\r\n });\r\n \r\n // If the AJAX request goes through\r\n ajaxResponse.done(function(response){\r\n \r\n // If the response was not succesful, or there's no HTML to use, show an error notification and exit out\r\n if (!response.success){\r\n console.log('An error happened.');\r\n return;\r\n }\r\n \r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}'s Round ${round} Scorecard\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${response.html}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n });\r\n\r\n \r\n\r\n \r\n\r\n}\r\n", "/*******************************************************\r\nPGA EVENT HANDLERS\r\nThis handles events for various interactions related to PGA.\r\n********************************************************/\r\n\r\nimport openScoreCardModal from './open-scorecard-modal';\r\n\r\nexport default function addPGAEventHandlers() {\r\n\r\n // Open team vs position modal\r\n $(document).on('click', '.sc-open', openScoreCardModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM PREVIEW MODAL\r\nUsed on the bracketology page for CBB.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\nimport showErrorNotificationBar from '../../universal/error-handling/show-error-notification-bar';\r\n\r\nfunction imageExists(image_url){\r\n\r\n var http = new XMLHttpRequest();\r\n\r\n http.open('HEAD', image_url, false);\r\n http.send();\r\n\r\n return http.status != 404;\r\n\r\n}\r\n\r\nexport default async function openTeamPreview(event) {\r\n const $button = $(event.currentTarget);\r\n const {team, secondteam } = $button.data();\r\n\r\n const teamName = team;\r\n const secondTeamName = secondteam;\r\n\r\n const teamLogo = team.replace(\" \", \"-\");\r\n const secondTeamLogo = secondteam.replace(\" \", \"-\");\r\n\r\n try {\r\n const response = await $.ajax({\r\n type : 'GET',\r\n url : `/cbasketball/ajax/get-team-preview.php`,\r\n data : {\r\n team: teamName,\r\n secondteam: secondTeamName,\r\n },\r\n timeout: 8000,\r\n });\r\n\r\n const { previewHTML, success } = response;\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${teamName} Preview`;\r\n\r\n let modalTitle = \"\";\r\n\r\n // Build the title\r\n if ( secondteam == \"\" || secondteam == undefined || secondteam == null ) {\r\n if (imageExists(`/images/teamlogo/cbasketball/${teamLogo}.png`)) {\r\n modalTitle = `\r\n \r\n ${teamName}\r\n `;\r\n } else {\r\n modalTitle = `\r\n \r\n ${teamName}\r\n `;\r\n }\r\n } else {\r\n if (imageExists(`/images/teamlogo/cbasketball/${teamLogo}.png`)) {\r\n modalTitle = `\r\n \r\n ${teamName} / ${secondTeamName}\r\n `;\r\n } else {\r\n modalTitle = `\r\n \r\n ${teamName} / ${secondTeamName}\r\n `;\r\n }\r\n }\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${previewHTML}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: false,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n }\r\n catch (error) {\r\n showErrorNotificationBar(error.message || 'We were unable to retrieve updates for you. Please try again.', 3000);\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nCBB EVENT HANDLERS\r\nThis handles events for various interactions related to CBB.\r\n********************************************************/\r\n\r\nimport openTeamPreview from './open-team-preview-modal';\r\n\r\nexport default function addCBBEventHandlers() {\r\n\r\n // Open team vs position modal\r\n $(document).on('click', '.team-modal-open', openTeamPreview);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM VS POSITION MODAL\r\nUsed on the team vs. position page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { pos, team, scoringtype, year } = $button.data();\r\n const teamNameParts = ($button.siblings('a').text() || '').split(' ');\r\n const teamName = teamNameParts[teamNameParts.length - 1];\r\n const teamLogo = decodeURIComponent(team).replace(\" \", \"-\");\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${teamName} vs. ${pos} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${teamName}Vs. ${pos}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (pos === 'QB') {\r\n\r\n loadTableRW({\r\n container : `tvp-table`,\r\n url : `/cfootball/tables/defense-vs-pos-gl.php?pos=QB&team=${team}&scoringtype=${scoringtype}&year=${year}`,\r\n emptyMessage: 'There were no stats found.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n { id : 'team',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Name', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n template: '#team#',\r\n },\r\n\r\n { id : 'points',\r\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'passComp',\r\n header: [{ text: 'Passing', css: 'columns-head is-dark', colspan: 5 }, { text: 'COMP' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passAtt',\r\n header: ['', { text: 'ATT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'passInt',\r\n header: ['', { text: 'INT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushAtt',\r\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 3 }, { text: 'ATT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n\r\n });\r\n }\r\n else if (pos === 'RB' || pos === 'WR' || pos === 'TE') {\r\n\r\n loadTableRW({\r\n container : `tvp-table`,\r\n url : `/cfootball/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\r\n emptyMessage: 'There were no stats found.',\r\n leftSplit : 1,\r\n columns : [\r\n\r\n { id : 'team',\r\n header: [{ text: '', css: 'columns-head is-dark' }, { text: 'Name', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n },\r\n\r\n { id : 'points',\r\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'rushAtt',\r\n header: [{ text: 'Rushing', css: 'columns-head is-dark', colspan: 3 }, { text: 'ATT' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'rushTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'receptions',\r\n header: [{ text: 'Receiving', css: 'columns-head is-dark', colspan: 4 }, { text: 'REC' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'recYds',\r\n header: ['', { text: 'YDS' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'recTD',\r\n header: ['', { text: 'TD' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'targets',\r\n header: ['', { text: 'TAR' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n ],\r\n });\r\n\r\n }\r\n else if (pos === 'K') {\r\n\r\n loadTableRW({\r\n container : `tvp-table`,\r\n url : `/cfootball/tables/defense-vs-pos-gl.php?pos=${pos}&team=${team}&scoringtype=${scoringtype}&year=${year}`,\r\n emptyMessage: 'There were no stats found.',\r\n leftSplit : 1,\r\n columns : [\r\n\r\n { id : 'team',\r\n header: [{ text: '', css: 'columns-head is-dark' }, { text: 'Name', css: 'align-l' }],\r\n css : 'align-l',\r\n sort : 'text-string',\r\n },\r\n\r\n { id : 'points',\r\n header: [{ text: 'Fantasy', css: 'columns-head is-dark' }, { text: 'Points' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'xpm',\r\n header: [{ text: 'Extra Points', css: 'columns-head is-dark', colspan: 2 }, { text: 'XPM' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'xpa',\r\n header: ['', { text: 'XPA' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'fgm',\r\n header: [{ text: 'Field Goals', css: 'columns-head is-dark', colspan: 2 }, { text: 'FGM' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fga',\r\n header: ['', { text: 'FGA' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'fgm29',\r\n header: [{ text: 'Field Goal Distance', css: 'columns-head is-dark', colspan: 4 }, { text: '0-29' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fgm39',\r\n header: ['', { text: '30-39' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fgm49',\r\n header: ['', { text: '40-49' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'fgm50',\r\n header: ['', { text: '50+' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n ],\r\n });\r\n\r\n }\r\n\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM VS POSITION MODAL\r\nUsed on the team vs. position page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, startweek, endweek, view } = $button.data();\r\n const teamLogo = decodeURIComponent(team).replace(\" \", \"-\").replace(\"+\", \"-\");\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n const $gameHeaders = $('.game-week');\r\n const weeks = [];\r\n $gameHeaders.each(function () { weeks.push($(this).text()); });\r\n\r\n const colHeaders = weeks;\r\n const colNames = weeks.map((w, i) => `${w.replace('@', '')}${i}`);\r\n\r\n function toObject(names, values) {\r\n var result = {};\r\n for (var i = 0; i < names.length; i++)\r\n result[names[i]] = values[i];\r\n return result;\r\n }\r\n\r\n const finishedCol = toObject(colHeaders, colNames);\r\n\r\n const finishedColumns = [\r\n { id : 'stat',\r\n header : [{ text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [ { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: [{ text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: [{ text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: [{ text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ];\r\n\r\n $.each( finishedCol, function(key, value){\r\n\r\n if (view === 'percent') {\r\n\r\n finishedColumns.push(\r\n { id : value,\r\n header : [ { text: key, css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n );\r\n }\r\n else {\r\n finishedColumns.push(\r\n { id : value,\r\n header : [ { text: key, css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n );\r\n\r\n }\r\n });\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/cfootball/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : finishedColumns,\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/cfootball/tables/team-trends-player.php?team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : finishedColumns,\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nCFB EVENT HANDLERS\r\nThis handles events for various interactions related to CFB.\r\n********************************************************/\r\n\r\nimport openTeamVsPosModal from './open-team-vs-pos-modal';\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addCFBEventHandlers() {\r\n\r\n // Open team vs position modal\r\n $(document).on('click', '.tvp-open-cfb', openTeamVsPosModal);\r\n\r\n $(document).on('click', '.tt-open-cfb', openTeamTrendsModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM VS POSITION MODAL\r\nUsed on the team vs. position page for NFL.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamTrendsModalSoccer(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, league, firstname, lastname, pos, team, startweek, endweek, view, teamlogo } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/soccer/tables/team-trends-player.php?league=${league}&team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'wk1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk16',\r\n header : [{ text: '16', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk17',\r\n header : [{ text: '17', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk18',\r\n header : [{ text: '18', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk18-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk19',\r\n header : [{ text: '19', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk19-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk20',\r\n header : [{ text: '20', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk20-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk21',\r\n header : [{ text: '21', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk21-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk22',\r\n header : [{ text: '22', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk22-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk23',\r\n header : [{ text: '23', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk23-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk24',\r\n header : [{ text: '24', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk24-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk25',\r\n header : [{ text: '25', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk25-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk26',\r\n header : [{ text: '26', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk26-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk27',\r\n header : [{ text: '27', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk27-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk28',\r\n header : [{ text: '28', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk28-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk29',\r\n header : [{ text: '29', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk29-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk30',\r\n header : [{ text: '30', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk30-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk31',\r\n header : [{ text: '31', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk31-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk32',\r\n header : [{ text: '32', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk32-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk33',\r\n header : [{ text: '33', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk33-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk34',\r\n header : [{ text: '34', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk34-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk35',\r\n header : [{ text: '35', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk35-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk36',\r\n header : [{ text: '36', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk36-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk37',\r\n header : [{ text: '37', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk37-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'wk38',\r\n header : [{ text: '38', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.wk38-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/soccer/tables/team-trends-player.php?league=${league}&team=${team}&pos=${pos}&startweek=${startweek}&endweek=${endweek}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'wk1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.wk1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.wk2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.wk3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.wk4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.wk5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.wk6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.wk7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.wk8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.wk9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.wk10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.wk11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.wk12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.wk13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.wk14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.wk15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk16',\r\n header: [{ text: '16', css: 'columns-head is-dark' }, { text: $allTable.find('.wk16-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk17',\r\n header: [{ text: '17', css: 'columns-head is-dark' }, { text: $allTable.find('.wk17-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk18',\r\n header : [{ text: '18', css: 'columns-head is-dark' }, { text: $allTable.find('.wk18-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk19',\r\n header : [{ text: '19', css: 'columns-head is-dark' }, { text: $allTable.find('.wk19-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk20',\r\n header : [{ text: '20', css: 'columns-head is-dark' }, { text: $allTable.find('.wk20-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk21',\r\n header : [{ text: '21', css: 'columns-head is-dark' }, { text: $allTable.find('.wk21-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk22',\r\n header : [{ text: '22', css: 'columns-head is-dark' }, { text: $allTable.find('.wk22-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk23',\r\n header : [{ text: '23', css: 'columns-head is-dark' }, { text: $allTable.find('.wk23-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk24',\r\n header : [{ text: '24', css: 'columns-head is-dark' }, { text: $allTable.find('.wk24-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk25',\r\n header : [{ text: '25', css: 'columns-head is-dark' }, { text: $allTable.find('.wk25-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk26',\r\n header : [{ text: '26', css: 'columns-head is-dark' }, { text: $allTable.find('.wk26-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk27',\r\n header : [{ text: '27', css: 'columns-head is-dark' }, { text: $allTable.find('.wk27-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk28',\r\n header : [{ text: '28', css: 'columns-head is-dark' }, { text: $allTable.find('.wk28-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk29',\r\n header : [{ text: '29', css: 'columns-head is-dark' }, { text: $allTable.find('.wk29-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk30',\r\n header : [{ text: '30', css: 'columns-head is-dark' }, { text: $allTable.find('.wk30-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk31',\r\n header : [{ text: '31', css: 'columns-head is-dark' }, { text: $allTable.find('.wk31-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk32',\r\n header : [{ text: '32', css: 'columns-head is-dark' }, { text: $allTable.find('.wk32-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk33',\r\n header : [{ text: '33', css: 'columns-head is-dark' }, { text: $allTable.find('.wk33-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk34',\r\n header : [{ text: '34', css: 'columns-head is-dark' }, { text: $allTable.find('.wk34-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk35',\r\n header : [{ text: '35', css: 'columns-head is-dark' }, { text: $allTable.find('.wk35-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk36',\r\n header : [{ text: '36', css: 'columns-head is-dark' }, { text: $allTable.find('.wk36-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk37',\r\n header : [{ text: '37', css: 'columns-head is-dark' }, { text: $allTable.find('.wk37-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'wk38',\r\n header : [{ text: '38', css: 'columns-head is-dark' }, { text: $allTable.find('.wk38-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nSoccer EVENT HANDLERS\r\nThis handles events for various interactions related to Soccer.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModalSoccer from './open-team-trends-modal';\r\n\r\nexport default function addSoccerEventHandlers() {\r\n\r\n\r\n $(document).on('click', '.tt-open-soccer', openTeamTrendsModalSoccer);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for MLB.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n console.log(pos);\r\n\r\n if (pos == 'P') {\r\n var $allTable = $('#trendsP');\r\n } else {\r\n var $allTable = $('#trendsB');\r\n }\r\n\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/baseball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/baseball/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nMLB EVENT HANDLERS\r\nThis handles events for various interactions related to MLB.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addMLBEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-mlb', openTeamTrendsModal);\r\n\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for NBA.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/wnba/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/wnba/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nWNBA EVENT HANDLERS\r\nThis handles events for various interactions related to WNBA.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addWNBAEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-wnba', openTeamTrendsModal);\r\n}\r\n", "/*******************************************************\r\nOPEN TEAM TRENDS MODAL\r\nUsed on the team trends page for EuroLeague.\r\n********************************************************/\r\n\r\nimport buildModal from '../../universal/modal-window/build-modal';\r\n\r\nexport default function openTeamVsPosModal(event) {\r\n const $button = $(event.currentTarget);\r\n const { id, firstname, lastname, pos, team, view } = $button.data();\r\n\r\n\r\n // Set the table loading message\r\n const loadingMessage = `Loading ${firstname} ${lastname} Stats`;\r\n\r\n // Build the title\r\n const modalTitle = `\r\n \r\n ${firstname} ${lastname}\r\n `;\r\n\r\n // Build the content of the modal\r\n const modalContent = `\r\n \r\n ${loadingMessage}\r\n `;\r\n\r\n // Get the modal window HTML\r\n const modalHTML = buildModal({\r\n fullWidth: true,\r\n title : modalTitle,\r\n content : modalContent,\r\n });\r\n\r\n const $allTable = $('#trendsALL');\r\n\r\n // Append the modal window to the page\r\n $('.page').append(modalHTML);\r\n\r\n if (view === 'percent') {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/euro/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header : [{ text: '1', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm2',\r\n header : [{ text: '2', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm3',\r\n header : [{ text: '3', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm4',\r\n header : [{ text: '4', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm5',\r\n header : [{ text: '5', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm6',\r\n header : [{ text: '6', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm7',\r\n header : [{ text: '7', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm8',\r\n header : [{ text: '8', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm9',\r\n header : [{ text: '9', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm10',\r\n header : [{ text: '10', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm11',\r\n header : [{ text: '11', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm12',\r\n header : [{ text: '12', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm13',\r\n header : [{ text: '13', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm14',\r\n header : [{ text: '14', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n { id : 'gm15',\r\n header : [{ text: '15', css: 'columns-head is-dark no-border-right' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n cssFormat: formatCellRW('heatmap', { min: 0, max: 100, color: 'ro' }),\r\n },\r\n ],\r\n });\r\n\r\n }\r\n else {\r\n\r\n loadTableRW({\r\n container : `tt-table${id}`,\r\n url : `/euro/tables/team-trends-player.php?team=${team}&pos=${pos}&view=${view}&playerid=${id}`,\r\n emptyMessage: 'We do not have any stats to display at the moment.',\r\n leftSplit : 1,\r\n css : 'no-border',\r\n columns : [\r\n\r\n { id : 'stat',\r\n header : [{ text: '', css: 'columns-head is-dark' }, { text: 'Stat', css: 'align-l' }],\r\n sort : 'text-string',\r\n sortDirection: 'asc',\r\n },\r\n\r\n { id : 'avgStat',\r\n header: [{ text: '', css: 'columns-head is-dark', colspan: 4 }, { text: 'Avg' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'total',\r\n header: ['', { text: 'Total' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'minStat',\r\n header: ['', { text: 'Min' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'maxStat',\r\n header: ['', { text: 'Max' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n\r\n { id : 'gm1',\r\n header: [{ text: '1', css: 'columns-head is-dark' }, { text: $allTable.find('.gm1-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm2',\r\n header: [{ text: '2', css: 'columns-head is-dark' }, { text: $allTable.find('.gm2-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm3',\r\n header: [{ text: '3', css: 'columns-head is-dark' }, { text: $allTable.find('.gm3-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm4',\r\n header: [{ text: '4', css: 'columns-head is-dark' }, { text: $allTable.find('.gm4-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm5',\r\n header: [{ text: '5', css: 'columns-head is-dark' }, { text: $allTable.find('.gm5-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm6',\r\n header: [{ text: '6', css: 'columns-head is-dark' }, { text: $allTable.find('.gm6-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm7',\r\n header: [{ text: '7', css: 'columns-head is-dark' }, { text: $allTable.find('.gm7-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm8',\r\n header: [{ text: '8', css: 'columns-head is-dark' }, { text: $allTable.find('.gm8-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm9',\r\n header: [{ text: '9', css: 'columns-head is-dark' }, { text: $allTable.find('.gm9-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm10',\r\n header: [{ text: '10', css: 'columns-head is-dark' }, { text: $allTable.find('.gm10-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm11',\r\n header: [{ text: '11', css: 'columns-head is-dark' }, { text: $allTable.find('.gm11-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm12',\r\n header: [{ text: '12', css: 'columns-head is-dark' }, { text: $allTable.find('.gm12-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm13',\r\n header: [{ text: '13', css: 'columns-head is-dark' }, { text: $allTable.find('.gm13-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm14',\r\n header: [{ text: '14', css: 'columns-head is-dark' }, { text: $allTable.find('.gm14-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n { id : 'gm15',\r\n header: [{ text: '15', css: 'columns-head is-dark' }, { text: $allTable.find('.gm15-game').text(), css: 'normal' }],\r\n css : 'align-r',\r\n sort : 'number',\r\n },\r\n ],\r\n });\r\n\r\n }\r\n\r\n}\r\n", "/*******************************************************\r\nNBA EVENT HANDLERS\r\nThis handles events for various interactions related to NBA.\r\n********************************************************/\r\n\r\nimport openTeamTrendsModal from './open-team-trends-modal';\r\n\r\nexport default function addEuroEventHandlers() {\r\n\r\n $(document).on('click', '.tt-open-euro', openTeamTrendsModal);\r\n\r\n}\r\n", "/*\n8888888b. 888 888 888 d8b\n888 Y88b 888 888 o 888 Y8P\n888 888 888 888 d8b 888\n888 d88P .d88b. 888888 .d88b. 888 d888b 888 888 888d888 .d88b.\n8888888P\" d88\"\"88b 888 d88\"\"88b 888d88888b888 888 888P\" d8P Y8b\n888 T88b 888 888 888 888 888 88888P Y88888 888 888 88888888\n888 T88b Y88..88P Y88b. Y88..88P 8888P Y8888 888 888 Y8b.\n888 T88b \"Y88P\" \"Y888 \"Y88P\" 888P Y888 888 888 \"Y8888\n*/\n\n/*******************************************************\nMAIN JAVASCRIPT FILE\nThis is the starting point for the javascript bundle. It's where all the interactions\nfor the site are stored. Any core modules needed by these interactions will be bundled\ninto the rotowire.min.js file by Browserify and Gulp. See gulpfile.js for specifics.\n********************************************************/\n\nimport addAlljQueryPlugins from \"./universal/jquery-plugins/all\";\nimport handlePlayerSearchEvents from \"./player-search/events\";\nimport handleNavEvents from \"./nav/events\";\nimport handleNavigationEvents from \"./navigation/events\";\nimport handleUniversalEvents from \"./universal/events\";\nimport handleNFLEvents from \"./sport-specific/nfl/events\";\nimport handleNBAEvents from \"./sport-specific/nba/events\";\nimport handleNHLEvents from \"./sport-specific/nhl/events\";\nimport handlePGAEvents from \"./sport-specific/pga/events\";\nimport handleCBBEvents from \"./sport-specific/cbb/events\";\nimport handleCFBEvents from \"./sport-specific/cfb/events\";\nimport handleSoccerEvents from \"./sport-specific/soccer/events\";\nimport handleMLBEvents from \"./sport-specific/mlb/events\";\nimport handleWNBAEvents from \"./sport-specific/wnba/events\";\nimport handleEuroEvents from \"./sport-specific/euro/events\";\n\n// Add jQuery Plugins\naddAlljQueryPlugins();\n\n$(() => {\n // Universal\n handleUniversalEvents();\n\n // Navigation\n handleNavigationEvents();\n handleNavEvents();\n\n // Player Search\n handlePlayerSearchEvents();\n\n // Sport-Specific\n handleNFLEvents();\n handleNBAEvents();\n handleNHLEvents();\n handlePGAEvents();\n handleCBBEvents();\n handleCFBEvents();\n handleSoccerEvents();\n handleMLBEvents();\n handleWNBAEvents();\n handleEuroEvents();\n});\n"], "mappings": "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", "names": ["require_purify", "__commonJSMin", "exports", "module", "factory", "root", "window", "DOMPurify", "document", "originalDocument", "DocumentFragment", "HTMLTemplateElement", "Node", "NodeFilter", "NamedNodeMap", "Text", "Comment", "DOMParser", "useDOMParser", "template", "implementation", "createNodeIterator", "getElementsByTagName", "createDocumentFragment", "importNode", "hooks", "_addToSet", "set", "array", "l", "_cloneObj", "object", "newObject", "property", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "FORBID_TAGS", "FORBID_ATTR", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "SAFE_FOR_JQUERY", "SAFE_FOR_TEMPLATES", "MUSTACHE_EXPR", "ERB_EXPR", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_DOM_IMPORT", "SANITIZE_DOM", "KEEP_CONTENT", "FORBID_CONTENTS", "DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "CONFIG", "formElement", "_parseConfig", "cfg", "_forceRemove", "node", "e", "_removeAttribute", "name", "_initDocument", "dirty", "doc", "body", "_createIterator", "_isClobbered", "elm", "_isNode", "obj", "_sanitizeElements", "currentNode", "tagName", "content", "_executeHook", "DATA_ATTR", "ARIA_ATTR", "IS_ALLOWED_URI", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "_sanitizeAttributes", "attr", "value", "lcName", "idAttr", "attributes", "hookEvent", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "entryPoint", "data", "hook", "importedNode", "oldNode", "nodeIterator", "returnNode", "hookFunction", "require_debounce", "__commonJSMin", "exports", "module", "FUNC_ERROR_TEXT", "NAN", "symbolTag", "reTrim", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "freeGlobal", "freeSelf", "root", "objectProto", "objectToString", "nativeMax", "nativeMin", "now", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "result", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "toNumber", "isObject", "invokeFunc", "time", "args", "thisArg", "leadingEdge", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "shouldInvoke", "trailingEdge", "cancel", "flush", "debounced", "isInvoking", "value", "type", "isObjectLike", "isSymbol", "other", "isBinary", "require_js_cookie", "__commonJSMin", "exports", "module", "factory", "registeredInModuleLoader", "OldCookies", "api", "extend", "i", "result", "attributes", "key", "init", "converter", "value", "expires", "e", "stringifiedAttributes", "attributeName", "cookies", "rdecode", "parts", "cookie", "name", "require_smoothscroll", "__commonJSMin", "exports", "module", "polyfill", "w", "d", "Element", "SCROLL_TIME", "original", "scrollElement", "now", "isMicrosoftBrowser", "userAgent", "userAgentPatterns", "ROUNDING_TOLERANCE", "x", "y", "ease", "k", "shouldBailOut", "firstArg", "hasScrollableSpace", "el", "axis", "canOverflow", "overflowValue", "isScrollable", "isScrollableY", "isScrollableX", "findScrollableParent", "isBody", "step", "context", "time", "value", "currentX", "currentY", "elapsed", "smoothScroll", "scrollable", "startX", "startY", "method", "startTime", "left", "top", "scrollableParent", "parentRects", "clientRects", "addjQueryPlugin", "func", "addjQueryPlugin", "func", "addjQueryPlugin", "hideClasses", "speed", "callback", "addjQueryPlugin", "hideClasses", "speed", "callback", "import_purify", "addPluginSafeHTML", "htmlString", "safeHTMLString", "addAlljQueryPlugins", "addjQueryPlugin", "addPluginSafeHTML", "touchDetected", "addHoverClass", "e", "clearSearch", "import_debounce", "handleKeyboardNavigation", "e", "$input", "searchTerm", "sport", "keyPressed", "clearSearch", "activeClass", "$results", "$current", "aResultExists", "aResultIsSelected", "$next", "searchPage", "$resultsContainer", "removeHoverClass", "showMobileSearchBox", "e", "buildSearchResult", "sport", "playerObject", "link", "logo", "alt", "name", "span", "text", "logoDefault", "logoHTML", "spanStyle", "removeErrorNotification", "$notification", "showErrorNotification", "message", "duration", "removeErrorNotification", "errorHTML", "searchPlayers", "settings", "__async", "response", "error", "showErrorNotification", "triggerSearchPlayers", "e", "__async", "searchableSports", "$input", "searchClass", "$searchSection", "sport", "searchTerm", "lastSearch", "$clearButton", "$searchResults", "settings", "players", "searchPlayers", "searchResults", "player", "buildSearchResult", "err", "addPlayerSearchEventHandlers", "showMobileSearchBox", "debounce", "triggerSearchPlayers", "handleKeyboardNavigation", "clearSearch", "addHoverClass", "removeHoverClass", "displaySideNavScreen", "screenToDisplay", "screenName", "backButtonScreen", "backButtonScreenName", "back", "backScreens", "highestScreenLevel", "s", "toggleSubNav", "e", "$selectedItem", "menuIsOpen", "$selectedSubNav", "closeDropdownMenu", "calculateDropdownPosition", "itemLeftSide", "transparentBorderOffset", "subNavWidth", "itemWidth", "pageWidth", "rightAlignPosition", "menuPosition", "triggerCloseDropdownMenu", "$wasOn", "$movedTo", "movingFromDropdownToItem", "movingFromItemToDropDown", "openSectionMenu", "menuHTML", "i", "el", "$menuItem", "name", "listID", "link", "item", "links", "menuTop", "closeSectionMenu", "e", "addNavEventHandlers", "logoutLink", "e", "$el", "isPlusButton", "$item", "screenToDisplay", "screenName", "currentScreen", "currentScreenName", "displaySideNavScreen", "$backButton", "backScreens", "backScreenNames", "screen", "toggleSubNav", "triggerCloseDropdownMenu", "openSectionMenu", "closeSectionMenu", "$group", "closingGroup", "Cookies", "adjustArrows", "$scrollArea", "$scrollTabsOuter", "width", "visibleWidth", "scrollLeft", "rightOpacityClass", "leftOpacityClass", "addScrollTabArrows", "index", "nav", "$scrollableArea", "$scrollTabsOuter", "arrows", "adjustArrows", "clearSectionSearch", "closeSideNav", "e", "clearSectionSearch", "doOnWindowResize", "functionToRun", "addSearchFeature", "numLinks", "numSections", "contentName", "searchHTML", "openSideNav", "e", "$sideNav", "menu", "menus", "addSearchFeature", "clearSectionSearch", "showSubPages", "tabName", "$subPagesContainer", "$connectedTab", "openDefault", "closeDropdownMenu", "calculateDropdownPosition", "$selectedItem", "$selectedSubNav", "itemLeftSide", "transparentBorderOffset", "subNavWidth", "itemWidth", "pageWidth", "rightAlignPosition", "menuPosition", "toggleSubNav", "e", "$selectedItem", "menuIsOpen", "$selectedSubNav", "closeDropdownMenu", "calculateDropdownPosition", "toggleSubSection", "e", "$subSection", "$subGroup", "isOpen", "triggerCloseDropdownMenu", "e", "$wasOn", "$movedTo", "movingFromDropdownToItem", "movingFromItemToDropDown", "closeDropdownMenu", "triggerItemLink", "e", "$link", "triggerScrollOnClick", "e", "$arrowButton", "$scrollableArea", "isLeft", "currentScrollPos", "triggerShowSubPages", "e", "tabName", "showSubPages", "getNoSearchResultsHTML", "watchSectionSearch", "e", "searchTerm", "itemSelector", "$items", "$sectionHeads", "enterKeyPressed", "clearSectionSearch", "visibleLinks", "$item", "$link", "linkName", "link", "$sectionHead", "sectionHeadText", "searchMatchesLink", "searchMatchesHeading", "linkAlreadyFound", "noResultsMessageHTML", "getNoSearchResultsHTML", "addNavigationEventHandlers", "addScrollTabArrows", "openDefault", "openSideNav", "closeSideNav", "triggerItemLink", "toggleSubNav", "addHoverClass", "removeHoverClass", "triggerCloseDropdownMenu", "watchSectionSearch", "clearSectionSearch", "toggleSubSection", "triggerShowSubPages", "triggerScrollOnClick", "$scrollTabs", "doOnWindowResize", "adjustArrows", "sectionLinks", "link", "pathName", "$activeContent", "section", "content", "hideHiddenImagesFromCloudinary", "restoreHiddenImages", "activateCloudinaryImages", "myBreakpoints", "width", "origUpdateFn", "hideHiddenImagesFromCloudinary", "restoreHiddenImages", "$imagesWithCredit", "index", "$image", "imageCredit", "creditLink", "imageNumber", "uniqueImageID", "creditWithLink", "creditNoLink", "creditItem", "activateRippleEffect", "e", "$button", "$div", "btnOffset", "xPos", "yPos", "removeHashesFromURL", "hash", "newURL", "activateSmartAnchorTags", "anchorHash", "removeHashesFromURL", "error", "automaticButtonProcessing", "e", "$button", "buttonHTML", "buttonText", "processingText", "newButtonHTML", "triggerCommentReply", "e", "__async", "$cancelButton", "$comments", "$form", "$submitButton", "origButtonHTML", "activateWallpaper", "event", "wallpaper", "image", "link", "code", "e", "activateCloudinaryImages", "script", "expandNewsUpdate", "e", "$newsUpdate", "expandPlayerOutlook", "fixAllWidows", "index", "element", "newHTML", "removeButtonProcessingState", "$button", "origButtonHTML", "getTabSettings", "tabSetName", "tabName", "$tab", "switchTab", "tabSettings", "targets", "add", "remove", "i", "$target", "switchTab", "tabSetName", "tabName", "$tabs", "tabSettings", "getTabSettings", "activateCloudinaryImages", "getUpdates", "e", "__async", "$showMoreButton", "sport", "type", "itemID", "lastUpdateTime", "numUpdates", "team", "position", "status", "leagueLevel", "priority", "rank", "offense", "top", "idp", "teamDef", "freeAgents", "hideLogo", "conferenceVal", "conference", "league", "competition", "nation", "nlonly", "alonly", "closers", "minors", "prospects", "injuries", "gender", "foreign", "language", "extraClasses", "settings", "sportDirectory", "response", "updatesHTML", "newLastUpdateTime", "noMoreUpdates", "success", "$activeToggleTab", "activeToggleTabName", "activeToggleTabSetName", "switchTab", "error", "showErrorNotification", "removeButtonProcessingState", "setMinGridWidth", "settings", "containers", "items", "padding", "auto", "index", "set", "$set", "itemWidths", "i", "item", "maxItemWidth", "gridFormat", "numItems", "maxWidth", "getUpdates", "e", "__async", "$showMoreButton", "sport", "pos", "type", "league", "lastRank", "settings", "sportDirectory", "response", "rankingsHTML", "newLastRank", "noMoreRankings", "success", "setMinGridWidth", "error", "showErrorNotification", "removeButtonProcessingState", "getRumors", "e", "__async", "$showMoreButton", "sport", "type", "itemID", "lastUpdateTime", "numUpdates", "team", "position", "status", "leagueLevel", "rank", "offense", "top", "idp", "teamDef", "freeAgents", "hideLogo", "conferenceVal", "conference", "league", "competition", "nation", "nlonly", "alonly", "closers", "minors", "prospects", "gender", "foreign", "language", "extraClasses", "settings", "sportDirectory", "response", "updatesHTML", "newLastUpdateTime", "noMoreUpdates", "success", "$activeToggleTab", "activeToggleTabName", "activeToggleTabSetName", "switchTab", "error", "showErrorNotification", "removeButtonProcessingState", "hideAdContainers", "adContainerClasses", "i", "adClass", "params", "qMark", "checkForMatch", "$item", "filterSettings", "tabSettings", "subset", "dataToMatch", "secDataToMatch", "mainExclude", "matchType", "secSubsetOperator", "secSubset", "secExclude", "secMatchType", "$elementToSearch", "itemValue", "subsetTargetAttribute", "mainFilterMatches", "valToMatch", "secSubsetMatches", "$secElemToSearch", "secItemValue", "secSubsetTargetAttribute", "filterItems", "settings", "$items", "hiddenClass", "index", "item", "$item", "filterMatches", "checkForMatch", "getSettings", "name", "$checkbox", "isChecked", "items", "subset", "dataToMatch", "secSubset", "secDataToMatch", "secSubsetOperator", "mainExclude", "secExclude", "action", "matchType", "secMatchType", "updateCheckboxFilter", "checkboxName", "settings", "getSettings", "filterItems", "initializeCheckBoxFilters", "index", "checkbox", "checkboxName", "$items", "updateCheckboxFilter", "isIE", "defaultConfig", "element", "img", "markAsLoaded", "isLoaded", "onIntersection", "load", "loaded", "entries", "observer", "entry", "getElements", "selector", "root", "lozad", "options", "rootMargin", "threshold", "elements", "i", "lozad_es_default", "initializeLazyLoading", "lozad_es_default", "el", "activateCloudinaryImages", "configureFreestarStickyAds", "_a", "desktopPages", "currentPage", "page", "insertFreestarStickyAds", "addLineupCardPlacements", "extraLineupsAd", "connatixAdSlot", "numHiddenLineups", "ad300Position", "numVisibleLineups", "insertConnatixAds", "playerPageAd", "numParagraphs", "adPlacement", "articleAd", "tabSets", "tabOptions", "eventsToWatch", "ts", "opt", "eventsToWatchString", "e", "tabSettings", "getSTNPlayerCode", "addLineupCardPlacements", "stnPlayerCode", "connatixAdSlot", "numHiddenLineups", "ad300Position", "numVisibleLineups", "insertSTNAds", "isLoggedInUser", "numParagraphs", "adPlacement", "tabSets", "tabOptions", "eventsToWatch", "ts", "opt", "eventsToWatchString", "e", "tabSettings", "insertVideoAds", "insertSTNAds", "insertConnatixAds", "getDataAJAX", "__async", "loadingErrorMessage", "index", "element", "ajaxURL", "targets", "emptyDataMessage", "tableDetected", "targetMissing", "target", "targetName", "response", "$target", "targetHTML", "i", "checkbox", "checkboxName", "updateCheckboxFilter", "error", "minimizeUpdate", "e", "$newsUpdate", "onData", "options", "flipDataSign", "context", "series", "data", "getKeyChartistDataPoints", "dataSets", "dataSet", "numData", "data", "maxEntry", "max", "d", "minEntry", "min", "start", "end", "keyPoints", "keyValues", "p", "getLimitMode", "chartWidthPixels", "numDataPoints", "onDrawChartist", "chartName", "dataSets", "options", "drawOptions", "labelDecimals", "labelClass", "drawLabelOffsetX", "drawLabelOffsetY", "labelStyle", "flipDataSign", "$chart", "chartWidth", "keyData", "getKeyChartistDataPoints", "numData", "a", "b", "isEveryOther", "data", "limit", "getLimitMode", "isKeyDataPoint", "d", "displayDot", "val", "getPresetsConfirmation", "options", "preset", "itemID", "title", "message", "cancelButton", "confirmButton", "confirmClass", "includeBackground", "buildConfirmationModal", "options", "title", "message", "cancelButton", "itemID", "confirmClass", "confirmButton", "includeBackground", "modalHTML", "openConfirmationModal", "e", "$triggerButton", "options", "modalOptions", "getPresetsConfirmation", "modalHTML", "buildConfirmationModal", "buildItemEditModal", "options", "title", "itemID", "itemName", "itemValue", "maxlength", "cancelButton", "saveButton", "saveClass", "includeBackground", "modalHTML", "openItemEditorModal", "e", "$triggerButton", "options", "modalHTML", "buildItemEditModal", "checkTabs", "$jumpBar", "index", "tab", "$tab", "id", "activateJumpBar", "i", "jumpBar", "waitFor", "extraWaitTime", "revealElement", "e", "$trigger", "elementSelector", "revealMode", "hideClasses", "elementsToHide", "selfDestruct", "group", "selectedClasses", "$elements", "setMinGridWidth", "revealSelectedFilter", "i", "filterLinkSet", "$filterLinkSet", "moreButtonText", "$selectedFilter", "selectedLevel", "selectedParent", "$title", "subTitle", "scrollToElementOnPageLoad", "$scrollToElements", "selectRadioButtonInRow", "e", "$rb", "rbName", "sendUserlistActivityEvent", "__async", "$userlistMetaTag", "section", "category", "error", "import_smoothscroll", "toggleCheckbox", "e", "$cb", "triggerCheckBoxFilterUpdate", "e", "checkboxName", "updateCheckboxFilter", "clearFilter", "itemSelector", "triggerClearDataFilter", "e", "itemSelector", "clearFilter", "clearInputBox", "$input", "triggerClearInputBox", "e", "$input", "clearInputBox", "triggerCloseSubNav", "e", "$moreFiltersButton", "$filterSet", "$filterWrapper", "$title", "navName", "parentName", "closeModalWindow", "triggerCloseModalWindow", "e", "closeModal", "$clickTarget", "className", "closeModalWindow", "triggerCommentReply", "e", "__async", "$comment", "$nextComment", "$commentList", "$form", "commentID", "$submitButton", "buttonHTML", "buttonText", "newButtonHTML", "openRangeEditor", "editorID", "$filterRange", "rangeWidth", "triggerRangeEditor", "e", "rangeEditorID", "openRangeEditor", "triggerSubNav", "e", "$activeNav", "activeNavName", "parentName", "$filterSet", "$filterWrapper", "$title", "navTitle", "moreButtonText", "manageEmptyState", "itemSelector", "numVisibleItems", "$emptyMessage", "emptyClass", "filterItems", "filterSettings", "tabSettings", "$items", "checkForTable", "index", "item", "$item", "checkForMatch", "tableItem", "tableID", "manageEmptyState", "getFilterSettings", "tabSetName", "$tabs", "getTabSettings", "tabName", "$tab", "dataToMatch", "secSubset", "secDataToMatch", "secSubsetOperator", "mainExclude", "secExclude", "tabTitle", "matchType", "secMatchType", "switchTab", "tabSetName", "tabName", "$tabToSelect", "filterSettings", "getFilterSettings", "tabSettings", "getTabSettings", "filterItems", "setMinGridWidth", "triggerTabOpen", "e", "$element", "tabName", "tabSetName", "switchTab", "triggerTabSwitch", "e", "$tab", "tabName", "tabSetName", "switchTab", "getArticles", "settings", "__async", "options", "response", "error", "showErrorNotification", "triggerGetArticles", "e", "__async", "$showMoreButton", "sport", "content", "column", "author", "noColumnInHeadline", "lastArticleDate", "numArticles", "settings", "i", "a", "articlesHTML", "newLastArticleDate", "noMoreArticles", "getArticles", "activateCloudinaryImages", "sportInName", "$hiddenContentFilter", "numDFS", "numTraditional", "err", "removeButtonProcessingState", "getCustomListContent", "listID", "listType", "lastContent", "excludedContentIDs", "style", "__async", "response", "error", "showErrorNotification", "triggerGetCustomListContent", "e", "__async", "$button", "listID", "lastContent", "listType", "style", "excludedContentIDs", "i", "el", "contentHTML", "newLastContent", "haveMoreContent", "getCustomListContent", "$articleList", "activateCloudinaryImages", "removeButtonProcessingState", "Store", "dbName", "storeName", "resolve", "reject", "openreq", "type", "callback", "db", "transaction", "store", "getDefaultStore", "get", "key", "req", "set", "value", "getBreakpointData", "breakpointData", "breakpointOrder", "currentBreakpoint", "currentIndex", "bp", "getTabThatShouldBeSelected", "tabSetName", "__async", "rwStore", "Store", "savedSelectedTab", "get", "val", "breakpoints", "currentBPindex", "getBreakpointData", "tabSetDataAttr", "bpSelections", "key", "obj", "newKey", "bpWithSelectedTabs", "bp", "index", "setSelectedTab", "selectedTab", "switchTab", "triggerSelectedTab", "resizeTimer", "triggerSelectedTabOnResize", "tabSetName", "triggerSelectedTab", "changeTimePeriod", "url", "triggerTimePeriodChange", "e", "urlToActivate", "changeTimePeriod", "triggerTabSwitch", "e", "$tab", "tabName", "tabSetName", "rwStore", "Store", "set", "err", "switchTab", "updateWinnings", "eventID", "centsBet", "multipliers", "multipliersMap", "el", "newWinnings", "dollars", "cents", "triggerUpdateWinnings", "e", "$input", "eventID", "centsBet", "mlHome", "mlAway", "spreadHome", "spreadAway", "ouOver", "ouUnder", "distanceYes", "distanceNo", "decisionFighter1", "decisionFighter2", "knockoutFighter1", "knockoutFighter2", "submissionFighter1", "submissionFighter2", "updateWinnings", "resizeTimer", "triggerWindowResizedListener", "getAllTabs", "tabSetName", "$tabs", "tabs", "index", "tab", "$tab", "updateFilterCounts", "$tabSets", "index", "tabSet", "tabSetName", "allTabs", "getAllTabs", "filterSettings", "getFilterSettings", "$items", "tabIndex", "tab", "counter", "tabSettings", "getTabSettings", "i", "item", "$item", "checkForMatch", "$tabCounter", "updateRangeEditor", "e", "$filterRangeEditor", "$startSelBox", "$endSelBox", "$button", "params", "start", "end", "startName", "endName", "defaultStart", "defaultEnd", "singleName", "qMark", "updatedLink", "watchItemFilterInput", "e", "$filterInput", "searchTerm", "$filterWrapper", "itemSelector", "$items", "subset", "itemsName", "$clearButton", "$noMatchesIndicator", "$item", "noMatchesLeftPad", "clearFilter", "watchItems", "items", "getFilterSettings", "updateFilterCounts", "watchInputWithClearButton", "e", "$input", "$inputWrapper", "customClearClass", "$clearButton", "clearInputBox", "addUniversalEventHandlers", "triggerWindowResizedListener", "scrollToElementOnPageLoad", "activateCloudinaryImages", "initializeLazyLoading", "activateWallpaper", "smoothScrollPolyfill", "activateRippleEffect", "addHoverClass", "removeHoverClass", "openConfirmationModal", "openItemEditorModal", "triggerCloseModalWindow", "removeErrorNotification", "revealElement", "activateSmartAnchorTags", "triggerGetArticles", "triggerCommentReply", "automaticButtonProcessing", "watchItemFilterInput", "triggerClearDataFilter", "watchInputWithClearButton", "triggerClearInputBox", "toggleCheckbox", "selectRadioButtonInRow", "getUpdates", "getRumors", "expandNewsUpdate", "minimizeUpdate", "expandPlayerOutlook", "hideAdContainers", "fixAllWidows", "triggerTabSwitch", "triggerTabOpen", "updateFilterCounts", "watchItems", "setFilterTabsGrid", "setMinGridWidth", "doOnWindowResize", "triggerSubNav", "triggerCloseSubNav", "revealSelectedFilter", "triggerRangeEditor", "updateRangeEditor", "triggerSelectedTab", "triggerSelectedTabOnResize", "e", "name", "setToggleTabsGrid", "setStatBoxesGrid", "activateJumpBar", "triggerGetCustomListContent", "initializeCheckBoxFilters", "triggerCheckBoxFilterUpdate", "insertVideoAds", "insertFreestarStickyAds", "getDataAJAX", "$inputBox", "sendUserlistActivityEvent", "onData", "onDrawChartist", "rwjsEvent", "triggerUpdateWinnings", "triggerTimePeriodChange", "buildModalWindowShell", "options", "title", "content", "isWide", "isFull", "includeBackground", "includeHeader", "modalClasses", "modalHeader", "modalHTML", "openTeamVsPosModal", "event", "$button", "pos", "team", "scoringtype", "year", "teamNameParts", "teamName", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "startweek", "endweek", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "openWinRateModal", "event", "$button", "id", "playerid", "firstname", "lastname", "pos", "team", "startweek", "endweek", "$activeTab", "tableID", "$rowData", "$weeks", "$percentages", "$barColor", "$borderColor", "i", "modalTitle", "modalHTML", "buildModalWindowShell", "ctx", "myChart", "openWinRateBySeasonModal", "event", "$button", "id", "playerid", "firstname", "lastname", "pos", "team", "startweek", "endweek", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "player", "addNFLEventHandlers", "openTeamVsPosModal", "openWinRateModal", "openWinRateBySeasonModal", "openCourtOnOffModal", "event", "__async", "$button", "player", "court", "playerId", "courtOnOff", "response", "playerHTML", "success", "$modalButton", "closeModalWindow", "error", "showErrorNotification", "clearInjuryArchiveSearch", "$input", "clearInputBox", "import_debounce", "loadCourtOnOffTable", "event", "__async", "playersOnCourt", "playersOffCourt", "team", "range", "split", "index", "modalButton", "$modalButton", "modalButtonCourt", "modalButtonTeam", "player", "playerId", "$onOffStatsTables", "mapCourtOnOffColumns", "tableData", "heatmapColumns", "maxValues", "maxList", "col", "r", "minValues", "minList", "minValue", "maxValue", "response", "totalData", "per36Data", "differenceData", "p", "a", "b", "paywall", "error", "showErrorNotification", "openCourtOnOffModal", "event", "__async", "$button", "team", "court", "teamAbbr", "courtOnOff", "excludedPlayers", "index", "player", "$player", "response", "playersHTML", "success", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "error", "showErrorNotification", "openInjuryArchiveModal", "event", "__async", "$button", "injury", "dates", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "error", "showErrorNotification", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "openCourtOnOffModal", "event", "__async", "$player", "$modalButton", "searchInjuryArchive", "settings", "__async", "response", "error", "showErrorNotification", "triggerInjuryArchiveSearch", "e", "__async", "$input", "searchTerm", "dates", "injury", "lastSearch", "clearInjuryArchiveSearch", "$searchResults", "settings", "players", "searchInjuryArchive", "resultsHTML", "player", "err", "addNBAEventHandlers", "openTeamVsPosModal", "openCourtOnOffModal", "loadCourtOnOffTable", "openInjuryArchiveModal", "debounce", "triggerInjuryArchiveSearch", "clearInjuryArchiveSearch", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addNHLEventHandlers", "openTeamVsPosModal", "openScoreCardModal", "event", "$button", "id", "firstname", "lastname", "round", "tourneyid", "playerurl", "ajaxResponse", "response", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "addPGAEventHandlers", "openScoreCardModal", "imageExists", "image_url", "http", "openTeamPreview", "event", "__async", "$button", "team", "secondteam", "teamName", "secondTeamName", "teamLogo", "secondTeamLogo", "response", "previewHTML", "success", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "error", "showErrorNotification", "addCBBEventHandlers", "openTeamPreview", "openTeamVsPosModal", "event", "$button", "pos", "team", "scoringtype", "year", "teamNameParts", "teamName", "teamLogo", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "startweek", "endweek", "view", "teamLogo", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "$gameHeaders", "weeks", "colHeaders", "colNames", "w", "i", "toObject", "names", "values", "result", "finishedCol", "finishedColumns", "key", "value", "addCFBEventHandlers", "openTeamVsPosModal", "openTeamTrendsModalSoccer", "event", "$button", "id", "league", "firstname", "lastname", "pos", "team", "startweek", "endweek", "view", "teamlogo", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addSoccerEventHandlers", "openTeamTrendsModalSoccer", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addMLBEventHandlers", "openTeamVsPosModal", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addWNBAEventHandlers", "openTeamVsPosModal", "openTeamVsPosModal", "event", "$button", "id", "firstname", "lastname", "pos", "team", "view", "loadingMessage", "modalTitle", "modalContent", "modalHTML", "buildModalWindowShell", "$allTable", "addEuroEventHandlers", "openTeamVsPosModal", "addAlljQueryPlugins", "addUniversalEventHandlers", "addNavigationEventHandlers", "addNavEventHandlers", "addPlayerSearchEventHandlers", "addNFLEventHandlers", "addNBAEventHandlers", "addNHLEventHandlers", "addPGAEventHandlers", "addCBBEventHandlers", "addCFBEventHandlers", "addSoccerEventHandlers", "addMLBEventHandlers", "addWNBAEventHandlers", "addEuroEventHandlers"] }
There are no more news updates to display.
There are no more news rankings to display.
${articleAd}
${getSTNPlayerCode()}
There are no more articles to display.