{"version":3,"file":"PageComponents.bundle.js","mappings":"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","sources":["webpack://advfnweb/webpack/runtime/chunk loaded","webpack://advfnweb/./advfn3/content/_common/elements/cryptocurrency/src/js/CryptoBase.js","webpack://advfnweb/./advfn3/content/_common/elements/cryptocurrency/src/js/CryptoBoardPosts.js","webpack://advfnweb/./advfn3/content/_common/elements/cryptocurrency/src/js/CryptoToggleDescription.js","webpack://advfnweb/./advfn3/content/_common/elements/cryptocurrency/src/js/CryptocurrencyNavbar.js","webpack://advfnweb/./advfn3/content/_common/elements/ih-board-posts/src/js/ih-board-posts.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/js/MarketSwitcher.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/js/MarketStatus.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/js/MoversTable.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/js/live-trades/TradeElement.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/js/live-trades/LiveTrades.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/js/MarketMovers.js","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/app.js","webpack://advfnweb/./advfn3/content/_common/elements/site-toplists/src/js/ToplistSelector.js","webpack://advfnweb/./advfn3/content/_common/elements/site-toplists/src/js/ToplistTableRow.js","webpack://advfnweb/./advfn3/content/_common/elements/site-toplists/src/js/ToplistTable.js","webpack://advfnweb/./advfn3/content/_common/elements/site-toplists/src/js/SiteToplists.js","webpack://advfnweb/./advfn3/content/_common/elements/site-toplists/src/app.js","webpack://advfnweb/./advfn3/content/_common/elements/cryptocurrency/src/js/CryptocurrencyConverter.js","webpack://advfnweb/./advfn3/content/_common/elements/cryptocurrency/src/js/CryptoSidebarConverter.js","webpack://advfnweb/./advfn3/content/_common/elements/thread-list/src/app.js","webpack://advfnweb/./advfn3/content/_common/elements/ticker-buzz-cloud/src/js/ticker-buzz-cloud.js","webpack://advfnweb/./advfn3/content/_common/elements/ih-board-posts/src/scss/main.scss?335e","webpack://advfnweb/./advfn3/content/_common/elements/market-movers/src/scss/main.scss?96b7","webpack://advfnweb/./advfn3/content/_common/elements/site-toplists/src/scss/main.scss?f5b2","webpack://advfnweb/./advfn3/content/_common/elements/src/scss/page-components.scss?6cb4","webpack://advfnweb/./advfn3/content/_common/elements/ticker-buzz-cloud/src/scss/main.scss?2742","webpack://advfnweb/webpack/bootstrap","webpack://advfnweb/webpack/runtime/compat get default export","webpack://advfnweb/webpack/runtime/define property getters","webpack://advfnweb/webpack/runtime/global","webpack://advfnweb/webpack/runtime/hasOwnProperty shorthand","webpack://advfnweb/webpack/runtime/make namespace object","webpack://advfnweb/webpack/runtime/node module decorator","webpack://advfnweb/webpack/runtime/runtimeId","webpack://advfnweb/webpack/runtime/jsonp chunk loading","webpack://advfnweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","document.addEventListener('DOMContentLoaded', () =>\n{\n const anchors = document.querySelectorAll('[data-page=\"currency-overview\"] .crypto-tabs a.anchor-page-link');\n anchors.forEach((anchor) =>\n {\n anchor.addEventListener('click', function (event)\n {\n event.preventDefault();\n\n const href = this.getAttribute('href');\n const targetId = `#${href.substring(href.indexOf('#') + 1)}`;\n console.log(targetId);\n const targetElement = document.querySelector(targetId);\n if (targetElement)\n {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n });\n }\n });\n });\n\n const { hash } = window.location;\n if (hash)\n {\n const targetId = hash.substring(1);\n const targetElement = document.getElementById(targetId);\n if (targetElement)\n {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n });\n }\n }\n\n if (document.getElementById('etoro_buy_btc') !== null)\n {\n const box = document.getElementById('etoro_box');\n document.getElementById('etoro_buy_btc').addEventListener('click', () =>\n {\n box.style.display = 'block';\n setTimeout(() =>\n {\n box.classList.add('etoro_visible');\n }, 10);\n document.addEventListener('click', (e) =>\n {\n if (!document.getElementById('etoro_box').contains(e.target) && e.target.id !== 'etoro_buy_btc')\n {\n box.classList.remove('etoro_visible');\n setTimeout(() =>\n {\n box.style.display = 'none';\n }, 350);\n }\n });\n });\n }\n});\n","/* eslint no-unused-vars: 0 */\n/* eslint max-len: 0 */\n/* eslint no-script-url: 0 */\n/* eslint no-undef: 0 */\n/* eslint no-use-before-define: 0 */\n\nconst stickyost = false;\nconst hubOrigId = 0;\nconst stickyPost = 0;\nconst checksum = 0;\nconst startpost = 0;\nconst threaded = 0;\nconst API_ENDPOINT = '/common/ih/getLastBoardPostsFull';\nconst MAX_STREAM_POSTS = 10;\nlet latestPostElement;\n\nfunction truncateText(text, maxLength)\n{\n const plainText = text.replace(/<[^>]*>/g, '');\n const truncated = plainText.length > maxLength ? `${plainText.substring(0, maxLength)}...` : plainText;\n return truncated;\n}\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n latestPostElement = document.getElementById('post-stream-items');\n if (latestPostElement)\n {\n const { boardId } = latestPostElement.dataset;\n axiosRequest(boardId);\n }\n});\n\nfunction axiosRequest(boardId)\n{\n const requestOptions = {\n withCredentials: true,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n const params = {};\n params.hubOrigId = hubOrigId;\n params.stickypost = stickyPost;\n params.checksum = checksum;\n params.boardid = boardId;\n params.startpost = startpost;\n params.threaded = threaded;\n\n requestOptions.params = params;\n\n axios.get(API_ENDPOINT, requestOptions)\n .then(({ status, data }) =>\n {\n if (status === 200)\n {\n if (data.result === 'OK')\n {\n this._loadPostsStreamItems(data.rows);\n }\n }\n })\n .catch((error) => { });\n}\n\nfunction _loadPostsStreamItems(postStream)\n{\n if (postStream.length === 0) return;\n const stickyIndex = postStream.findIndex((row) => row.stickyPost === true);\n\n if (stickyIndex !== -1)\n {\n stickypost = true;\n postStream.splice(stickyIndex, 1);\n }\n postStream = postStream.slice(0, MAX_STREAM_POSTS);\n latestPostElement.innerHTML = '';\n\n postStream.forEach((item) =>\n {\n const now = new Date();\n const msgDate = new Date(item.msgDate * 1000);\n const diffInSeconds = Math.floor((now - msgDate) / 1000);\n\n if (diffInSeconds >= 86400)\n {\n const days = Math.floor(diffInSeconds / 86400);\n item.HowLongAgo = days + (days === 1 ? ' day ago' : ' days ago');\n }\n else if (diffInSeconds >= 3600)\n {\n const hours = Math.floor(diffInSeconds / 3600);\n item.HowLongAgo = hours + (hours === 1 ? ' hour ago' : ' hours ago');\n }\n else if (diffInSeconds >= 60)\n {\n const minutes = Math.floor(diffInSeconds / 60);\n item.HowLongAgo = minutes + (minutes === 1 ? ' minute ago' : ' minutes ago');\n }\n else\n {\n item.HowLongAgo = diffInSeconds + (diffInSeconds === 1 ? ' second ago' : ' seconds ago');\n }\n\n const postStreamBodyItem = document.createElement('div');\n postStreamBodyItem.classList.add('post-stream-body-item');\n\n const postStreamBodyItemHeader = document.createElement('div');\n postStreamBodyItemHeader.classList.add('post-stream-body-item-header');\n\n const postStreamBodyItemHeaderImg = document.createElement('img');\n postStreamBodyItemHeaderImg.src = item.iconUrl;\n postStreamBodyItemHeaderImg.alt = item.originatorAlias;\n\n const postStreamBodyItemHeaderSpan1 = document.createElement('span');\n postStreamBodyItemHeaderSpan1.classList.add('body-m', 'text-semibold', 'text-default-primary');\n postStreamBodyItemHeaderSpan1.innerText = item.originatorAlias;\n\n const postStreamBodyItemHeaderSpan2 = document.createElement('span');\n postStreamBodyItemHeaderSpan2.classList.add('body-s', 'text-regular', 'text-default-tertiary', 'ml-a');\n postStreamBodyItemHeaderSpan2.innerText = item.HowLongAgo;\n\n postStreamBodyItemHeader.appendChild(postStreamBodyItemHeaderImg);\n postStreamBodyItemHeader.appendChild(postStreamBodyItemHeaderSpan1);\n postStreamBodyItemHeader.appendChild(postStreamBodyItemHeaderSpan2);\n\n const postStreamBodyItemBody = document.createElement('div');\n postStreamBodyItemBody.classList.add('post-stream-body-item-body');\n postStreamBodyItemBody.innerText = truncateText(item.fullMessage, 80);\n\n const postStreamBodyItemFooter = document.createElement('div');\n postStreamBodyItemFooter.classList.add('post-stream-body-item-footer');\n\n const postStreamBodyItemFooterA = document.createElement('a');\n postStreamBodyItemFooterA.href = '#';\n postStreamBodyItemFooterA.classList.add('like-btn');\n\n const postStreamBodyItemFooterSpan = document.createElement('span');\n postStreamBodyItemFooterSpan.classList.add('body-s', 'text-semibold', 'text-default-primary');\n postStreamBodyItemFooterSpan.innerText = item.likescount;\n\n postStreamBodyItemFooterA.appendChild(postStreamBodyItemFooterSpan);\n\n const postStreamBodyItemFooterSocialsLinks = document.createElement('div');\n postStreamBodyItemFooterSocialsLinks.classList.add('post-stream-body-item-footer-socials-links');\n\n const postStreamBodyItemFooterSocialsLinksShare = document.createElement('div');\n postStreamBodyItemFooterSocialsLinksShare.classList.add('post-stream-body-item-footer-socials-links-share');\n\n const postStreamBodyItemFooterSocialsLinksShareA = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksShareA.href = '#';\n postStreamBodyItemFooterSocialsLinksShareA.classList.add('icon-chat-20', 'icon-color-primary');\n\n const postStreamBodyItemFooterSocialsLinksShareSpan = document.createElement('span');\n postStreamBodyItemFooterSocialsLinksShareSpan.innerText = item.repliesCount;\n\n postStreamBodyItemFooterSocialsLinksShare.appendChild(postStreamBodyItemFooterSocialsLinksShareA);\n postStreamBodyItemFooterSocialsLinksShare.appendChild(postStreamBodyItemFooterSocialsLinksShareSpan);\n\n const postStreamBodyItemFooterSocialsLinksShareContainer = document.createElement('div');\n postStreamBodyItemFooterSocialsLinksShareContainer.classList.add('share-container');\n\n const postStreamBodyItemFooterSocialsLinksShareContainerA = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksShareContainerA.href = 'javascript:void(0)';\n postStreamBodyItemFooterSocialsLinksShareContainerA.classList.add('icon-share-20', 'icon-color-primary');\n\n const postStreamBodyItemFooterSocialsLinksShareContainerUl = document.createElement('ul');\n postStreamBodyItemFooterSocialsLinksShareContainerUl.classList.add('share-list');\n\n const postStreamBodyItemFooterSocialsLinksShareContainerUlLi1 = document.createElement('li');\n const postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A.href = '#';\n const postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg = document.createElement('img');\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg.src = 'images/twitter-share.svg';\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg.alt = '';\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg);\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A);\n\n postStreamBodyItemFooterSocialsLinksShareContainerUl.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUlLi1);\n\n postStreamBodyItemFooterSocialsLinksShareContainerA.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUl);\n postStreamBodyItemFooterSocialsLinksShareContainer.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerA);\n\n const postStreamBodyItemFooterSocialsLinksA = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksA.href = '#';\n postStreamBodyItemFooterSocialsLinksA.classList.add('icon-bookmark-20', 'icon-color-primary');\n\n postStreamBodyItemFooterSocialsLinks.appendChild(postStreamBodyItemFooterSocialsLinksShare);\n postStreamBodyItemFooterSocialsLinks.appendChild(postStreamBodyItemFooterSocialsLinksShareContainer);\n postStreamBodyItemFooterSocialsLinks.appendChild(postStreamBodyItemFooterSocialsLinksA);\n\n postStreamBodyItemFooter.appendChild(postStreamBodyItemFooterA);\n postStreamBodyItemFooter.appendChild(postStreamBodyItemFooterSocialsLinks);\n\n postStreamBodyItem.appendChild(postStreamBodyItemHeader);\n postStreamBodyItem.appendChild(postStreamBodyItemBody);\n postStreamBodyItem.appendChild(postStreamBodyItemFooter);\n\n latestPostElement.appendChild(postStreamBodyItem);\n });\n}\n","document.addEventListener('DOMContentLoaded', () =>\n{\n // For Chat\n const shortDescriptions = document.querySelectorAll('.short-description');\n const toggleDescBtns = document.querySelectorAll('.less-more');\n\n function toggleDescription(event)\n {\n event.preventDefault();\n const index = Array.from(toggleDescBtns).indexOf(event.target);\n shortDescriptions[index].style.display = 'none';\n shortDescriptions[index].nextElementSibling.style.display = 'block';\n toggleDescBtns[index].style.display = 'none';\n }\n\n toggleDescBtns.forEach((btn) =>\n {\n btn.addEventListener('click', toggleDescription);\n });\n\n // For Description\n const shortFundamentalsDescription = document.querySelector('.description .short-fundamentals-description');\n const fullFundamentalsDescription = document.querySelector('.description .full-fundamentals-description');\n const toggleFundamentalsDescBtn = document.querySelector('.description .less-more');\n\n function toggleFundamentalsDescription(event)\n {\n event.preventDefault();\n shortFundamentalsDescription.style.display = 'none';\n fullFundamentalsDescription.style.display = 'inline';\n toggleFundamentalsDescBtn.style.display = 'none';\n }\n\n if (toggleFundamentalsDescBtn)\n {\n toggleFundamentalsDescBtn.addEventListener('click', toggleFundamentalsDescription);\n }\n});\n","document.addEventListener('DOMContentLoaded', () =>\n{\n function showMenu(menu)\n {\n menu.style.display = 'block';\n }\n\n function hideMenu(menu)\n {\n menu.style.display = 'none';\n }\n\n function hidePreviousMenus()\n {\n const allMenus = document.querySelectorAll('.crypto-dropdown-menu');\n allMenus.forEach((menu) =>\n {\n hideMenu(menu);\n });\n }\n\n function toggleMenu(menu)\n {\n if (menu.style.display === 'block')\n {\n hideMenu(menu);\n }\n else\n {\n hidePreviousMenus();\n showMenu(menu);\n }\n }\n\n const dropdownItems = document.querySelectorAll('[data-theme=\"dark\"] .dropdown-item.crypto-nav-item');\n\n if ((/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)))\n {\n dropdownItems.forEach((item) =>\n {\n item.addEventListener('click', (event) =>\n {\n event.stopPropagation();\n const dropdownMenu = item.querySelector('.crypto-dropdown-menu');\n toggleMenu(dropdownMenu);\n });\n });\n }\n else\n {\n dropdownItems.forEach((item) =>\n {\n item.addEventListener('mouseover', function ()\n {\n const dropdownMenu = this.querySelector('.crypto-dropdown-menu');\n showMenu(dropdownMenu);\n });\n\n item.addEventListener('mouseout', function ()\n {\n const dropdownMenu = this.querySelector('.crypto-dropdown-menu');\n hideMenu(dropdownMenu);\n });\n });\n }\n\n document.addEventListener('click', () =>\n {\n hidePreviousMenus();\n });\n});\n","/* eslint no-unused-vars: 0 */\n/* eslint max-len: 0 */\n/* eslint no-script-url: 0 */\n/* eslint no-undef: 0 */\n/* eslint no-use-before-define: 0 */\n\nconst stickyost = false;\nconst hubOrigId = 0;\nconst stickyPost = 0;\nconst checksum = 0;\nconst startpost = 0;\nconst threaded = 0;\nconst API_ENDPOINT = '/common/ih/getLastBoardPostsFull';\nconst MAX_STREAM_POSTS = 10;\nlet latestPostElement;\n\nfunction truncateText(text, maxLength)\n{\n const plainText = text.replace(/<[^>]*>/g, '');\n const truncated = plainText.length > maxLength ? `${plainText.substring(0, maxLength)}...` : plainText;\n return truncated;\n}\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n latestPostElement = document.getElementById('post-stream-items');\n if (latestPostElement)\n {\n const { boardId } = latestPostElement.dataset;\n axiosRequest(boardId);\n }\n});\n\nfunction axiosRequest(boardId)\n{\n const requestOptions = {\n withCredentials: true,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n const params = {};\n params.hubOrigId = hubOrigId;\n params.stickypost = stickyPost;\n params.checksum = checksum;\n params.boardid = boardId;\n params.startpost = startpost;\n params.threaded = threaded;\n\n requestOptions.params = params;\n\n axios.get(API_ENDPOINT, requestOptions)\n .then(({ status, data }) =>\n {\n if (status === 200)\n {\n if (data.result === 'OK')\n {\n this._loadPostsStreamItems(data.rows);\n }\n }\n })\n .catch((error) => { });\n}\n\nfunction _loadPostsStreamItems(postStream)\n{\n if (postStream.length === 0) return;\n const stickyIndex = postStream.findIndex((row) => row.stickyPost === true);\n\n if (stickyIndex !== -1)\n {\n stickypost = true;\n postStream.splice(stickyIndex, 1);\n }\n postStream = postStream.slice(0, MAX_STREAM_POSTS);\n latestPostElement.innerHTML = '';\n\n postStream.forEach((item) =>\n {\n const now = new Date();\n const msgDate = new Date(item.msgDate * 1000);\n const diffInSeconds = Math.floor((now - msgDate) / 1000);\n\n if (diffInSeconds >= 86400)\n {\n const days = Math.floor(diffInSeconds / 86400);\n item.HowLongAgo = days + (days === 1 ? ' day ago' : ' days ago');\n }\n else if (diffInSeconds >= 3600)\n {\n const hours = Math.floor(diffInSeconds / 3600);\n item.HowLongAgo = hours + (hours === 1 ? ' hour ago' : ' hours ago');\n }\n else if (diffInSeconds >= 60)\n {\n const minutes = Math.floor(diffInSeconds / 60);\n item.HowLongAgo = minutes + (minutes === 1 ? ' minute ago' : ' minutes ago');\n }\n else\n {\n item.HowLongAgo = diffInSeconds + (diffInSeconds === 1 ? ' second ago' : ' seconds ago');\n }\n\n const postStreamBodyItem = document.createElement('div');\n postStreamBodyItem.classList.add('post-stream-body-item');\n\n const postStreamBodyItemHeader = document.createElement('div');\n postStreamBodyItemHeader.classList.add('post-stream-body-item-header');\n\n const postStreamBodyItemHeaderImg = document.createElement('img');\n postStreamBodyItemHeaderImg.src = item.iconUrl;\n postStreamBodyItemHeaderImg.alt = item.originatorAlias;\n\n const postStreamBodyItemHeaderSpan1 = document.createElement('span');\n postStreamBodyItemHeaderSpan1.classList.add('body-m', 'text-semibold', 'text-default-primary');\n postStreamBodyItemHeaderSpan1.innerText = item.originatorAlias;\n\n const postStreamBodyItemHeaderSpan2 = document.createElement('span');\n postStreamBodyItemHeaderSpan2.classList.add('body-s', 'text-regular', 'text-default-tertiary', 'ml-a');\n postStreamBodyItemHeaderSpan2.innerText = item.HowLongAgo;\n\n postStreamBodyItemHeader.appendChild(postStreamBodyItemHeaderImg);\n postStreamBodyItemHeader.appendChild(postStreamBodyItemHeaderSpan1);\n postStreamBodyItemHeader.appendChild(postStreamBodyItemHeaderSpan2);\n\n const postStreamBodyItemBody = document.createElement('div');\n postStreamBodyItemBody.classList.add('post-stream-body-item-body');\n postStreamBodyItemBody.innerText = truncateText(item.fullMessage, 80);\n\n const postStreamBodyItemFooter = document.createElement('div');\n postStreamBodyItemFooter.classList.add('post-stream-body-item-footer');\n\n const postStreamBodyItemFooterA = document.createElement('a');\n postStreamBodyItemFooterA.href = '#';\n postStreamBodyItemFooterA.classList.add('like-btn');\n\n const postStreamBodyItemFooterSpan = document.createElement('span');\n postStreamBodyItemFooterSpan.classList.add('body-s', 'text-semibold', 'text-default-primary');\n postStreamBodyItemFooterSpan.innerText = item.likescount;\n\n postStreamBodyItemFooterA.appendChild(postStreamBodyItemFooterSpan);\n\n const postStreamBodyItemFooterSocialsLinks = document.createElement('div');\n postStreamBodyItemFooterSocialsLinks.classList.add('post-stream-body-item-footer-socials-links');\n\n const postStreamBodyItemFooterSocialsLinksShare = document.createElement('div');\n postStreamBodyItemFooterSocialsLinksShare.classList.add('post-stream-body-item-footer-socials-links-share');\n\n const postStreamBodyItemFooterSocialsLinksShareA = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksShareA.href = '#';\n postStreamBodyItemFooterSocialsLinksShareA.classList.add('icon-chat-20', 'icon-color-primary');\n\n const postStreamBodyItemFooterSocialsLinksShareSpan = document.createElement('span');\n postStreamBodyItemFooterSocialsLinksShareSpan.innerText = item.repliesCount;\n\n postStreamBodyItemFooterSocialsLinksShare.appendChild(postStreamBodyItemFooterSocialsLinksShareA);\n postStreamBodyItemFooterSocialsLinksShare.appendChild(postStreamBodyItemFooterSocialsLinksShareSpan);\n\n const postStreamBodyItemFooterSocialsLinksShareContainer = document.createElement('div');\n postStreamBodyItemFooterSocialsLinksShareContainer.classList.add('share-container');\n\n const postStreamBodyItemFooterSocialsLinksShareContainerA = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksShareContainerA.href = 'javascript:void(0)';\n postStreamBodyItemFooterSocialsLinksShareContainerA.classList.add('icon-share-20', 'icon-color-primary');\n\n const postStreamBodyItemFooterSocialsLinksShareContainerUl = document.createElement('ul');\n postStreamBodyItemFooterSocialsLinksShareContainerUl.classList.add('share-list');\n\n const postStreamBodyItemFooterSocialsLinksShareContainerUlLi1 = document.createElement('li');\n const postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A.href = '#';\n const postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg = document.createElement('img');\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg.src = 'images/twitter-share.svg';\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg.alt = '';\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUlLi1AImg);\n postStreamBodyItemFooterSocialsLinksShareContainerUlLi1.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUlLi1A);\n\n postStreamBodyItemFooterSocialsLinksShareContainerUl.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUlLi1);\n\n postStreamBodyItemFooterSocialsLinksShareContainerA.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerUl);\n postStreamBodyItemFooterSocialsLinksShareContainer.appendChild(postStreamBodyItemFooterSocialsLinksShareContainerA);\n\n const postStreamBodyItemFooterSocialsLinksA = document.createElement('a');\n postStreamBodyItemFooterSocialsLinksA.href = '#';\n postStreamBodyItemFooterSocialsLinksA.classList.add('icon-bookmark-20', 'icon-color-primary');\n\n postStreamBodyItemFooterSocialsLinks.appendChild(postStreamBodyItemFooterSocialsLinksShare);\n postStreamBodyItemFooterSocialsLinks.appendChild(postStreamBodyItemFooterSocialsLinksShareContainer);\n postStreamBodyItemFooterSocialsLinks.appendChild(postStreamBodyItemFooterSocialsLinksA);\n\n postStreamBodyItemFooter.appendChild(postStreamBodyItemFooterA);\n postStreamBodyItemFooter.appendChild(postStreamBodyItemFooterSocialsLinks);\n\n postStreamBodyItem.appendChild(postStreamBodyItemHeader);\n postStreamBodyItem.appendChild(postStreamBodyItemBody);\n postStreamBodyItem.appendChild(postStreamBodyItemFooter);\n\n latestPostElement.appendChild(postStreamBodyItem);\n });\n}\n","/**\n * @typedef {import('./MoversTable').default} MoversTable\n */\n\nclass MarketSwitcher\n{\n /**\n * @param {HTMLElement} element\n * @param {MoversTable} moversTable\n */\n constructor(element, moversTable)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {MoversTable} */\n this._moversTable = moversTable;\n\n /** @type {Object\n {\n const marketID = element.getAttribute('data-market-id');\n\n if (element.classList.contains('active'))\n {\n this._activeMarket = marketID;\n }\n\n element.addEventListener('click', (event) =>\n {\n event.preventDefault();\n this.fireMarketIDChanged(marketID);\n });\n\n this._marketSwitches[marketID] = element;\n });\n }\n\n disable()\n {\n Object.keys(this._marketSwitches).forEach((marketID) =>\n {\n this._marketSwitches[marketID].classList.remove('active');\n this._marketSwitches[marketID].classList.add('disabled');\n });\n }\n\n enable()\n {\n Object.keys(this._marketSwitches).forEach((marketID) =>\n {\n this._marketSwitches[marketID].classList.remove('disabled');\n });\n }\n\n /**\n * @param {string} marketID\n */\n setActiveSwitch(marketID)\n {\n Object.keys(this._marketSwitches).forEach((key) =>\n {\n this._marketSwitches[key].classList.remove('active');\n });\n this._marketSwitches[marketID].classList.add('active');\n }\n\n /**\n * @param {string} marketID\n */\n fireMarketIDChanged(marketID)\n {\n if (this._activeMarket === marketID) return;\n\n this._activeMarket = marketID;\n\n this._moversTable.handleMarketIDChanged(marketID);\n }\n\n setEmbedTitle()\n {\n const title = this._element.querySelector('.toggle span');\n const name = this._element.querySelector(`.list a[data-market-id=\"${this._activeMarket}\"]`).innerText;\n title.innerText = `${title.getAttribute('data-title')} - ${name}`;\n }\n}\n\nexport default MarketSwitcher;\n","/**\n * @typedef {import('../../../../locale-format/src/lib/LocaleFormat').default} LocaleFormat\n */\n\nclass MarketStatus\n{\n /**\n * @param {HTMLElement} element\n * @param {MoversTable} moversTable\n */\n constructor(element, moversTable)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {MoversTable} */\n this._moversTable = moversTable;\n\n /** @type {HTMLDivElement} */\n this._headingElement = this._element.querySelector('.scale-heading h3');\n\n /** @type {HTMLSpanElement} */\n this._headingTitle = this._headingElement.querySelector('span');\n\n /** @type {HTMLSpanElement} */\n this._hintIcon = this._headingElement.querySelector('i');\n\n /** @type {LocaleFormat} */\n this._lf = window.LocaleFormat;\n\n // Default title and hint\n this._titleTemplate = this._element.dataset.titleTemplate;\n this._hintTemplate = this._element.dataset.hintTemplate;\n\n // Current Session\n this._currentSession = this._element.dataset.session;\n\n // Percentages\n this._gainersPercentage = this._element.dataset.gainersPercentage;\n this._losersPercentage = this._element.dataset.losersPercentage;\n this._unchangedPercentage = this._element.dataset.unchangedPercentage;\n\n // Totals\n this._gainersTotal = this._element.dataset.gainersTotal;\n this._losersTotal = this._element.dataset.losersTotal;\n this._unchangedTotal = this._element.dataset.unchangedTotal;\n\n this._loadScaleInfographic();\n this._loadDataGrid();\n }\n\n /**\n * @param {string} marketName\n */\n setMarketName(marketName)\n {\n this._headingElement.style.opacity = 0;\n\n const title = this._titleTemplate.replace('[MARKET_NAME]', marketName);\n this.setHeadingTitle(title);\n\n const hint = this._hintTemplate.replace('[MARKET_NAME]', marketName);\n this.setHint(hint);\n\n setTimeout(() =>\n {\n this._headingElement.style.opacity = 1;\n }, 200);\n }\n\n /**\n * @param {string} title\n */\n setHeadingTitle(title)\n {\n this._headingTitle.textContent = title;\n }\n\n /**\n * @param {string} hint\n */\n setHint(hint)\n {\n this._hintIcon.title = hint;\n }\n\n _loadScaleInfographic()\n {\n this._scaleInfographic = this._element.querySelector('.scale-infographic');\n\n this._infographicAdvancing = this._scaleInfographic.querySelector('.scale-advancing');\n this._infographicDeclining = this._scaleInfographic.querySelector('.scale-declining');\n\n this._setInfographicPercentages(this._gainersPercentage, this._losersPercentage);\n }\n\n _loadDataGrid()\n {\n const dataGridElement = this._element.querySelector('.status-data');\n\n /** @type {HTMLSpanElement} */\n this._advancingTotalText = dataGridElement.querySelector('.gainers-total');\n\n /** @type {HTMLSpanElement} */\n this._advancingPercentageText = dataGridElement.querySelector('.gainers-percentage');\n\n /** @type {HTMLSpanElement} */\n this._decliningTotalText = dataGridElement.querySelector('.losers-total');\n\n /** @type {HTMLSpanElement} */\n this._decliningPercentageText = dataGridElement.querySelector('.losers-percentage');\n\n /** @type {HTMLSpanElement} */\n this._unchangedTotalText = dataGridElement.querySelector('.unchanged-total');\n\n /** @type {HTMLSpanElement} */\n this._unchangedPercentageText = dataGridElement.querySelector('.unchanged-percentage');\n }\n\n /**\n * @param {MoversStats} stats\n */\n setMoversStats({ gainers, losers, unchanged })\n {\n this._gainersTotal = gainers.total;\n this._losersTotal = losers.total;\n this._unchangedTotal = unchanged.total;\n\n this._gainersPercentage = gainers.percentage;\n this._losersPercentage = losers.percentage;\n this._unchangedPercentage = unchanged.percentage;\n\n this._refreshDataGridValues();\n\n this._setInfographicPercentages(this._gainersPercentage, this._losersPercentage);\n }\n\n /**\n * @param {number} advancing\n * @param {number} declining\n */\n _setInfographicPercentages(advancing, declining)\n {\n this._infographicAdvancing.style.width = `${advancing}%`;\n this._infographicDeclining.style.width = `${declining}%`;\n }\n\n _refreshDataGridValues()\n {\n this._advancingTotalText.innerText = `${this._lf.formatForInstrumentType(this._gainersTotal, 'CS', 'volume')}`;\n this._decliningTotalText.innerText = `${this._lf.formatForInstrumentType(this._losersTotal, 'CS', 'volume')}`;\n this._unchangedTotalText.innerText = `${this._lf.formatForInstrumentType(this._unchangedTotal, 'CS', 'volume')}`;\n\n this._advancingPercentageText.innerText = `(${this._lf.formatForInstrumentType(this._gainersPercentage, 'CS', 'change', 'percent')}%)`;\n this._decliningPercentageText.innerText = `(${this._lf.formatForInstrumentType(this._losersPercentage, 'CS', 'change', 'percent')}%)`;\n this._unchangedPercentageText.innerText = `(${this._lf.formatForInstrumentType(this._unchangedPercentage, 'CS', 'change', 'percent')}%)`;\n }\n}\n\nexport default MarketStatus;\n","import axios from 'axios';\nimport MarketSwitcher from './MarketSwitcher';\nimport MarketStatus from './MarketStatus';\n\nconst API_ENDPOINT = '/common/api/markets/Movers';\nconst NUM_ROWS = 11;\nconst SUPPORTED_TOP_LISTS = ['percentage-gainers', 'percentage-losers', 'volume'];\n\n/**\n * @typedef {import('../../../../locale-format/src/lib/LocaleFormat').default} LocaleFormat\n */\n\nclass MoversTable\n{\n /**\n * @param {HTMLElement} element\n */\n constructor(element)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {Object} */\n this._toplistData = {};\n\n /** @type {MarketSession} */\n this._currentSession = this._element.dataset.session;\n\n /** @type {HTMLSpanElement} */\n this._sessionText = this._element.querySelector('.session-text');\n\n /** @type {Object} */\n this._lang = {\n sessionRegular: this._element.dataset.langSessionRegular,\n sessionPremarket: this._element.dataset.langSessionPremarket,\n sessionAfterhours: this._element.dataset.langSessionAfterhours,\n sessionClosed: this._element.dataset.langSessionClosed,\n };\n\n /** @type {MarketSwitcher|null} */\n this._marketSwitcher = null;\n const marketSwitcherElement = this._element.querySelector('[data-app=\"market-switcher\"]');\n if (marketSwitcherElement)\n {\n this._marketSwitcher = new MarketSwitcher(marketSwitcherElement, this);\n }\n\n /** @type {MarketStatus|null} */\n this._marketStatus = null;\n const marketStatusElement = this._element.querySelector('[data-app=\"market-status\"]');\n if (marketStatusElement)\n {\n this._marketStatus = new MarketStatus(marketStatusElement, this);\n }\n\n /** @type {LiveTrades|null} */\n this._liveTrades = null;\n\n /** @type {MoversToplistType} */\n // eslint-disable-next-line prefer-destructuring\n this._currentToplist = SUPPORTED_TOP_LISTS[0];\n\n /** @type {LocaleFormat} */\n this._lf = window.LocaleFormat;\n\n this._loadToplistTabs();\n\n /** @type {string} */\n this._colOrder = [];\n\n this._loadMoversTable();\n\n /** @type {boolean} */\n this._restartStreaming = false;\n this._restartStreamingInterval = setInterval(() =>\n {\n if (this._restartStreaming)\n {\n this._restartStreaming = false;\n $AFNStreamer.init(); // eslint-disable-line no-undef\n }\n }, 1000);\n }\n\n /**\n * @param {MarketSession} session\n */\n setCurrentSession(session)\n {\n this._currentSession = session.toLowerCase();\n\n let displaySession = '';\n switch (session)\n {\n case 'regular':\n displaySession = this._lang.sessionRegular;\n break;\n case 'premarket':\n displaySession = this._lang.sessionPremarket;\n break;\n case 'afterhours':\n displaySession = this._lang.sessionAfterhours;\n break;\n case 'closed':\n displaySession = this._lang.sessionClosed;\n break;\n }\n\n if (this._sessionText) this._sessionText.innerText = `(${displaySession})`;\n }\n\n /**\n * @param marketID\n * @param session\n */\n _setSessionIcon(marketID, session)\n {\n if (this._element.getAttribute('data-mode') === 'embed')\n {\n const switcherElement = document.querySelector('[data-app=\"market-switcher\"]');\n const icon = switcherElement.querySelector('.icon-session');\n if (icon) icon.remove();\n\n if (['N', 'NY', 'A'].indexOf(marketID) !== -1)\n {\n const sessionIcon = document.createElement('span');\n switch (session)\n {\n case 'premarket':\n sessionIcon.classList.add('icon-market-close-16', 'icon-color-tertiary', 'icon-session');\n switcherElement.appendChild(sessionIcon);\n break;\n case 'afterhours':\n sessionIcon.classList.add('icon-market-close-20', 'icon-color-tertiary', 'icon-session');\n switcherElement.appendChild(sessionIcon);\n break;\n }\n }\n }\n }\n\n /**\n * @param {LiveTrades} liveTrades\n */\n connectLiveTrades(liveTrades)\n {\n this._liveTrades = liveTrades;\n }\n\n getCurrentToplist()\n {\n return this._currentToplist;\n }\n\n setCurrentToplist(toplist)\n {\n this._currentToplist = toplist;\n\n if (this._liveTrades !== null)\n {\n this._liveTrades.setCurrentToplist(toplist);\n }\n }\n\n /**\n * @param {string} marketID\n */\n handleMarketIDChanged(marketID)\n {\n if (this._marketSwitcher === null) return;\n\n this._marketSwitcher.disable();\n\n this._loadMarket(marketID).then((data) =>\n {\n this._marketSwitcher.setActiveSwitch(marketID);\n\n if (this._marketStatus !== null)\n {\n // Update Market Status\n this._marketStatus.setMarketName(data.info.marketSymbol);\n this._marketStatus.setMoversStats(data.stats);\n }\n\n // Update Session\n this.setCurrentSession(data.info.currentSession);\n this._setSessionIcon(marketID, data.info.currentSession);\n\n // Render Rows\n this._renderRows(data.info, data.toplists).then(() =>\n {\n if (this._liveTrades !== null)\n {\n // Refresh Live Trades\n this._liveTrades.triggerRefresh();\n }\n\n if (this._element.getAttribute('data-mode') === 'embed')\n {\n const tableEmbed = document.querySelector('div[data-app=\"table-embed\"]');\n\n this._marketSwitcher.setEmbedTitle();\n this._hideEmbedList(tableEmbed);\n }\n\n this._marketSwitcher.enable();\n this._restartStreaming = true;\n });\n\n }).catch((error) => console.error(error));\n }\n\n /**\n * @param {string} marketID\n * @returns {Promise}\n */\n _loadMarket(marketID)\n {\n return new Promise((resolve, reject) =>\n {\n if (typeof this._toplistData[marketID] !== 'undefined')\n {\n resolve(this._toplistData[marketID]);\n return;\n }\n\n let endpoint = `${API_ENDPOINT}/${marketID}`;\n endpoint += `?session=${this._currentSession}`;\n endpoint += `&toplists=${SUPPORTED_TOP_LISTS.join(',')}`;\n endpoint += `&rows=${NUM_ROWS}`;\n\n axios.get(endpoint).then(({ status, data }) =>\n {\n if (status === 200)\n {\n if (data.status === 'success')\n {\n this._toplistData[marketID] = data.result;\n\n resolve(this._toplistData[marketID]);\n }\n else\n {\n reject(data);\n }\n }\n\n reject(status);\n }).catch((error) => reject(error));\n });\n }\n\n /**\n * @param {MarketInfo} market\n * @param {MoversToplists} toplists\n */\n _renderRows(market, toplists)\n {\n this._tableElement.style.opacity = 0.2;\n\n return new Promise((resolve) =>\n {\n setTimeout(() =>\n {\n this._tableBody.innerHTML = '';\n this._tableRows = [];\n\n Object.keys(toplists).forEach((toplist) =>\n {\n if (!SUPPORTED_TOP_LISTS.includes(toplist)) return;\n\n /** @type {MoversToplistRow[]} */\n let { rows } = toplists[toplist];\n\n if (typeof rows === 'object') rows = Object.values(rows);\n\n rows.forEach((row) =>\n {\n const rowElement = this._getRowElement(market, toplist, row);\n this._tableRows.push(rowElement);\n this._tableBody.appendChild(rowElement);\n });\n });\n\n this._tableElement.style.opacity = 1;\n\n this.switchTab(SUPPORTED_TOP_LISTS[0]);\n\n resolve();\n }, 250);\n });\n }\n\n /**\n * @param {MarketInfo} market\n * @param {MoversToplistType} toplist\n * @param {MoversToplistRow} row\n * @returns {HTMLTableRowElement}\n */\n _getRowElement(market, toplist, row)\n {\n const rowElement = document.createElement('tr');\n rowElement.style.display = this._currentToplist === toplist ? '' : 'none';\n rowElement.dataset.toplist = toplist;\n rowElement.dataset.feedSymbol = row.feed_symbol;\n\n if (this._currentSession === 'afterhours')\n {\n row.feed_symbol += '_A';\n }\n\n for (let i = 0; i < this._colOrder.length; i++)\n {\n const col = this._colOrder[i];\n switch (col)\n {\n case 'ticker': {\n const tickerCell = document.createElement('td');\n tickerCell.classList.add('col-ticker');\n\n const logoImage = document.createElement('img');\n logoImage.src = `/common/images/company/${market.marketID}_${row.symbol}.png`;\n logoImage.classList.add('logo-img');\n logoImage.alt = `${row.symbol} Logo`;\n tickerCell.appendChild(logoImage);\n\n const tickerLink = document.createElement('a');\n tickerLink.href = row.links.quote;\n tickerLink.textContent = row.symbol;\n tickerCell.appendChild(tickerLink);\n\n rowElement.appendChild(tickerCell);\n break;\n }\n case 'name': {\n const nameCell = document.createElement('td');\n nameCell.classList.add('col-name');\n\n const nameLink = document.createElement('a');\n nameLink.href = row.links.quote;\n nameLink.textContent = row.name;\n nameCell.appendChild(nameLink);\n\n rowElement.appendChild(nameCell);\n break;\n }\n\n case 'embed-price':\n case 'price': {\n const priceCell = document.createElement('td');\n priceCell.classList.add('col-price');\n priceCell.dataset.ascParam = 'CUR_PRICE';\n priceCell.dataset.ascSymbol = row.feed_symbol;\n priceCell.dataset.ascRender = '$AFNStreamingRenderer.renderPrice';\n priceCell.dataset.asrAnimate = 'flashing-price';\n priceCell.classList.add('nowrap');\n const priceFormatted = this._lf.formatForInstrumentType(\n row.current_price,\n row.type,\n 'price',\n row.currency,\n );\n priceCell.textContent = priceFormatted;\n rowElement.appendChild(priceCell);\n break;\n }\n\n case 'embed-change':\n case 'change': {\n const changeCell = document.createElement('td');\n changeCell.classList.add('col-change');\n changeCell.classList.add(row.change > 0 ? 'positive' : 'negative');\n changeCell.classList.add('nowrap');\n changeCell.dataset.ascParam = 'CHANGE';\n changeCell.dataset.ascSymbol = row.feed_symbol;\n changeCell.dataset.ascRender = '$AFNStreamingRenderer.renderChange';\n changeCell.dataset.asrAnimate = 'flashing-price';\n const changeFormatted = this._lf.formatForInstrumentType(\n row.change,\n row.type,\n 'change',\n row.currency,\n );\n changeCell.textContent = changeFormatted;\n rowElement.appendChild(changeCell);\n break;\n }\n\n case 'embed-change_pc':\n case 'change_pc': {\n const changePcCell = document.createElement('td');\n changePcCell.classList.add('col-change-pc');\n changePcCell.classList.add(row.change > 0 ? 'positive' : 'negative');\n changePcCell.classList.add('nowrap');\n changePcCell.dataset.ascParam = 'CHANGE_PC';\n changePcCell.dataset.ascSymbol = row.feed_symbol;\n changePcCell.dataset.ascRender = '$AFNStreamingRenderer.renderChangePercentage';\n changePcCell.dataset.asrAnimate = 'flashing-price';\n const changePcFormatted = this._lf.formatForInstrumentType(row.change_percentage, row.type, 'change', 'percent');\n changePcCell.textContent = `${changePcFormatted}%`;\n rowElement.appendChild(changePcCell);\n break;\n }\n case 'volume': {\n const volumeCell = document.createElement('td');\n volumeCell.classList.add('col-volume');\n volumeCell.classList.add('nowrap');\n volumeCell.dataset.ascParam = 'VOLUME';\n volumeCell.dataset.ascSymbol = row.feed_symbol;\n volumeCell.dataset.ascRender = '$AFNStreamingRenderer.renderVolume';\n volumeCell.dataset.asrAnimate = 'flashing-price';\n const volumeFormatted = this._lf.formatForInstrumentType(row.volume, row.type, 'volume', row.currency);\n volumeCell.textContent = volumeFormatted;\n rowElement.appendChild(volumeCell);\n break;\n }\n\n case 'trade_count': {\n const tradeCell = document.createElement('td');\n tradeCell.classList.add('col-trades');\n tradeCell.classList.add('nowrap');\n tradeCell.dataset.ascParam = 'NUM_TRADES';\n tradeCell.dataset.ascSymbol = row.feed_symbol;\n tradeCell.dataset.ascRender = '$AFNStreamingRenderer.renderTrades';\n tradeCell.dataset.asrAnimate = 'flashing-price';\n const tradeFormatted = this._lf.formatForInstrumentType(row.trade_count, row.type, 'volume', row.currency);\n tradeCell.textContent = tradeFormatted;\n rowElement.appendChild(tradeCell);\n break;\n }\n\n case 'embed-symbol': {\n const tickerCell = document.createElement('td');\n tickerCell.title = `${row.name} - (${row.symbol})`;\n tickerCell.classList.add('col-ticker');\n tickerCell.dataset.symbol = row.feed_symbol;\n const tickerSpan = document.createElement('span');\n tickerSpan.textContent = row.symbol;\n tickerCell.appendChild(tickerSpan);\n\n rowElement.appendChild(tickerCell);\n break;\n }\n }\n }\n\n return rowElement;\n }\n\n /**\n * @private\n */\n _loadToplistTabs()\n {\n /** @type {HTMLElement[]} */\n this._tabs = [];\n\n /** @type {HTMLDivElement} */\n const tableTabs = this._element.querySelectorAll('[data-app=\"table-tabs\"] [data-tab]');\n tableTabs.forEach((tab) =>\n {\n const tabID = tab.getAttribute('data-tab');\n\n tab.addEventListener('click', (event) =>\n {\n event.preventDefault();\n this.switchTab(tabID);\n });\n\n if (tab.classList.contains('active'))\n {\n this._currentToplist = tabID;\n }\n\n this._tabs[tabID] = tab;\n });\n }\n\n /**\n * @private\n */\n _loadMoversTable()\n {\n /** @type {HTMLTableElement} */\n this._tableElement = this._element.querySelector('table');\n this._tableElement.style.height = `${this._tableElement.offsetHeight}px`;\n\n /** @type {HTMLTableSectionElement} */\n this._tableBody = this._tableElement.querySelector('tbody');\n\n /** @type {HTMLTableRowElement[]} */\n this._tableRows = this._tableBody.querySelectorAll('tr');\n\n const headings = this._tableElement.querySelectorAll('thead th');\n headings.forEach((heading) =>\n {\n this._colOrder.push(heading.dataset.col);\n });\n }\n\n /**\n * @private\n */\n _hideEmbedList(tableEmbed)\n {\n tableEmbed.classList.remove('active');\n }\n\n /**\n * @param {string} tabID\n */\n switchTab(tabID)\n {\n if (this._currentToplist === tabID) return;\n\n Object.keys(this._tabs).forEach((tab) =>\n {\n this._tabs[tab].classList.remove('active');\n });\n\n const tab = this._tabs[tabID];\n if (tab)\n {\n tab.classList.add('active');\n }\n\n this.setCurrentToplist(tabID);\n\n this._tableRows.forEach((row) =>\n {\n const { toplist } = row.dataset;\n row.style.display = (toplist === tabID) ? '' : 'none';\n });\n }\n\n /**\n * @param {string} toplist\n * @returns {HTMLTableRowElement[]}\n */\n getRowsForToplist(toplist)\n {\n const rows = [];\n\n this._tableRows.forEach((row) =>\n {\n if (row.dataset.toplist === toplist)\n {\n rows.push(row);\n }\n });\n\n return rows;\n }\n}\n\nexport default MoversTable;\n","/**\n * @typedef {import('../../../../../locale-format/src/lib/LocaleFormat').default} LocaleFormat\n */\n\nclass TradeElement\n{\n /**\n * @param {HTMLElement} element\n * @param {TradeResponse} trade\n * @param {Object} lang\n * @param {LocaleFormat} localeFormat\n */\n constructor(element, trade, lang, localeFormat)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {TradeResponse} */\n this._trade = trade;\n\n /** @type {Object} */\n this._lang = lang;\n\n /** @type {LocaleFormat} */\n this._lf = localeFormat;\n\n /** @type {boolean} */\n this._rendered = false;\n }\n\n /**\n * @param {TradeResponse} trade\n * @param {Object} lang\n */\n static get(trade, lang)\n {\n return new TradeElement(\n document.createElement('div'),\n trade,\n lang,\n window.LocaleFormat,\n );\n }\n\n /**\n * @returns {HTMLElement}\n */\n getElement()\n {\n if (!this._rendered)\n {\n this._renderForTrade();\n this._rendered = true;\n }\n\n return this._element;\n }\n\n /**\n * @private\n */\n _renderForTrade()\n {\n this._element.classList.add('live-trades-item');\n this._element.classList.add('new-item');\n\n this._element.style.cursor = 'pointer';\n\n this._element.addEventListener('click', () =>\n {\n window.location = `/p.php?pid=trades&symbol=${this._trade.symbol}`;\n });\n\n let sideText = this._lang.unknown; let\n sideCss = 'text-default-primary';\n if (this._trade.side === 'B')\n {\n sideText = this._lang.buy;\n sideCss = 'text-success-primary';\n }\n else if (this._trade.side === 'S')\n {\n sideText = this._lang.sell;\n sideCss = 'text-error-primary';\n }\n\n const logoImg = `/common/images/company/${this._trade.market}_${this._trade.symbol}.png`;\n\n const tradeTime = new Date(this._trade.time * 1000);\n const timeDisplay = tradeTime.toLocaleTimeString('en-US', { hour12: false });\n\n // Top section\n const topSection = document.createElement('div');\n topSection.classList.add('item-top');\n\n const logoImgElement = document.createElement('img');\n logoImgElement.classList.add('logo-img');\n logoImgElement.setAttribute('src', logoImg);\n logoImgElement.setAttribute('alt', `${this._trade.symbol} Logo`);\n topSection.appendChild(logoImgElement);\n\n const symbolElement = document.createElement('span');\n symbolElement.classList.add('body-xs', 'text-bold', 'text-default-primary');\n symbolElement.textContent = this._trade.symbol;\n topSection.appendChild(symbolElement);\n\n const sideElement = document.createElement('span');\n sideElement.classList.add('body-xs', 'text-bold', sideCss, 'ml-a');\n sideElement.textContent = sideText;\n topSection.appendChild(sideElement);\n\n this._element.appendChild(topSection);\n\n // Bottom section\n const bottomSection = document.createElement('div');\n bottomSection.classList.add('item-bottom');\n\n const priceElement = document.createElement('span');\n priceElement.classList.add('body-s', 'text-regular', 'text-default-tertiary');\n const priceFormatted = this._lf.formatForInstrumentType(this._trade.price, 'CS', 'price');\n priceElement.textContent = `$${priceFormatted}`;\n bottomSection.appendChild(priceElement);\n\n const sizeElement = document.createElement('span');\n sizeElement.classList.add('body-s', 'text-regular', 'text-default-tertiary');\n const sizeFormatted = this._lf.formatForInstrumentType(this._trade.size, 'CS', 'volume');\n sizeElement.textContent = `${this._lang.size}: ${sizeFormatted}`;\n bottomSection.appendChild(sizeElement);\n\n const timeElement = document.createElement('span');\n timeElement.classList.add('body-s', 'text-regular', 'text-default-tertiary');\n timeElement.textContent = timeDisplay;\n bottomSection.appendChild(timeElement);\n\n this._element.appendChild(bottomSection);\n\n setTimeout(() =>\n {\n this._element.classList.remove('new-item');\n }, 2000);\n }\n}\n\nexport default TradeElement;\n","import axios from 'axios';\nimport md5 from 'md5';\nimport TradeElement from './TradeElement';\n\nconst API_ENDPOINT = '/common/api/trades/GetLatest';\nconst MAX_TRADES = 12;\nconst POLLING_INTERVAL = 10000;\n\nclass LiveTrades\n{\n /**\n * @param {HTMLElement} element\n * @param {MoversTable} moversTable\n */\n constructor(element, moversTable)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {MoversTable} */\n this._moversTable = moversTable;\n\n /** @type {HTMLDivElement} */\n this._itemsContainer = this._element.querySelector('.live-trades-items');\n\n /** @type {MarketMoversToplist} */\n this._currentToplist = this._moversTable.getCurrentToplist();\n\n /** @type {Object} */\n this._lang = {\n buy: this._element.dataset.langBuy,\n sell: this._element.dataset.langSell,\n unknown: this._element.dataset.langUnknown,\n size: this._element.dataset.langSize,\n };\n\n /** @type {Object} */\n this._tradesList = {};\n\n this._pollingInterval = setInterval(() =>\n {\n this._handlePolling();\n }, POLLING_INTERVAL);\n\n this._refreshTradesFromTable();\n }\n\n /**\n * @param {MarketMoversToplist} toplist\n */\n setCurrentToplist(toplist)\n {\n this._currentToplist = toplist;\n\n this._refreshTradesFromTable();\n }\n\n /**\n * @private\n */\n _handlePolling()\n {\n this._refreshTradesFromTable();\n }\n\n triggerRefresh()\n {\n this._refreshTradesFromTable();\n }\n\n /**\n * @private\n */\n _refreshTradesFromTable()\n {\n const requestSymbols = this._getTableFeedSymbols();\n\n const tradesListID = this._genTradesListID(requestSymbols);\n\n if (typeof this._tradesList[tradesListID] === 'undefined')\n {\n this._tradesList[tradesListID] = [];\n }\n\n const requestEndpoint = `${API_ENDPOINT}?symbols=${requestSymbols.join(',')}`;\n axios.get(requestEndpoint).then(({ status, data }) =>\n {\n if (status === 200)\n {\n if (data.status === 'success')\n {\n this._handleTradesResponse(data.result.trades, tradesListID);\n }\n }\n }).catch((error) => console.error(error));\n }\n\n /**\n * @param {TradeResponse[]} trades\n * @param {string} tradesListID\n */\n _handleTradesResponse(trades, tradesListID)\n {\n trades.forEach((trade) =>\n {\n const tradeID = LiveTrades._getTradeHash(trade);\n if (typeof this._tradesList[tradesListID][tradeID] === 'undefined')\n {\n this._tradesList[tradesListID][tradeID] = TradeElement.get(trade, this._lang);\n }\n });\n\n this._renderTradeRows(this._sortTradesList(tradesListID), MAX_TRADES);\n }\n\n _sortTradesList(tradesListID)\n {\n const sortedTradesList = {};\n Object.keys(this._tradesList[tradesListID]).reverse().forEach((key) =>\n {\n sortedTradesList[key] = this._tradesList[tradesListID][key];\n });\n return sortedTradesList;\n }\n\n /**\n * @param {TradeResponse} trade\n * @returns {string}\n * @private\n */\n static _getTradeHash(trade)\n {\n return `${trade.time}_${md5(trade.symbol + trade.id)}`;\n }\n\n /**\n * @returns {string[]}\n */\n _getTableFeedSymbols()\n {\n /** @type {string[]} */\n const feedSymbols = [];\n\n this._moversTable.getRowsForToplist(this._currentToplist).forEach((row) =>\n {\n const { feedSymbol } = row.dataset;\n if (feedSymbol)\n {\n feedSymbols.push(feedSymbol);\n }\n });\n\n return feedSymbols;\n }\n\n /**\n * @param {string[]} feedSymbols\n * @returns {string}\n */\n _genTradesListID(feedSymbols)\n {\n return md5(feedSymbols.join(','));\n }\n\n /**\n * @param {Object} trades\n * @param {number} limit\n */\n _renderTradeRows(trades, limit)\n {\n this._itemsContainer.innerHTML = '';\n\n let i = 0;\n Object.keys(trades).forEach((tradeID) =>\n {\n if (i < limit)\n {\n this._itemsContainer.appendChild(\n trades[tradeID].getElement(),\n );\n }\n i++;\n });\n }\n}\n\nexport default LiveTrades;\n","import MoversTable from './MoversTable';\nimport LiveTrades from './live-trades/LiveTrades';\n\nclass MarketMovers\n{\n /**\n * @param {HTMLElement} tableElement\n * @param {HTMLElement} liveTradesElement\n */\n constructor(tableElement, liveTradesElement)\n {\n this._moversTable = new MoversTable(tableElement);\n\n if (liveTradesElement)\n {\n this._liveTrades = new LiveTrades(\n liveTradesElement,\n this._moversTable,\n );\n\n this._moversTable.connectLiveTrades(this._liveTrades);\n }\n }\n}\n\nexport default MarketMovers;\n","import MarketMovers from './js/MarketMovers';\n\nimport './scss/main.scss';\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n const marketMoversElement = document.querySelector('[data-app=\"market-movers\"]');\n if (marketMoversElement)\n {\n const liveTradesElement = document.querySelector('[data-app=\"live-trades\"]');\n new MarketMovers(\n marketMoversElement,\n liveTradesElement,\n );\n }\n\n // Dropdown mobile menu\n const dropdown = document.querySelector('.movers_menu_item.dropdown');\n const dropdownButton = document.querySelector('.movers_menu_item.dropdown .name', '.movers_menu_item.dropdown .flag');\n if (dropdownButton)\n {\n dropdownButton.addEventListener('click', (e) =>\n {\n e.preventDefault();\n dropdown.classList.add('active');\n });\n }\n const close = document.querySelector('.movers_menu_item.dropdown .close_icon');\n if (close)\n {\n close.addEventListener('click', () =>\n {\n dropdown.classList.remove('active');\n });\n }\n});\n","/**\n * @typedef {import('./SiteToplists').default} SiteToplists\n */\n\nclass ToplistSelector\n{\n /**\n * @param {HTMLElement} element\n * @param {Function} onSelectedToplist\n */\n constructor(element, onSelectedToplist)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n this._onSelectedToplist = onSelectedToplist;\n\n /** @type {string} */\n this._selectedTab = null;\n\n /** @type {Object} */\n this._tabs = {};\n\n this._loadTabs();\n }\n\n /**\n * @private\n */\n _loadTabs()\n {\n const tabElements = this._element.querySelectorAll('.tab-item');\n\n tabElements.forEach((tabElement) =>\n {\n const tabToplist = tabElement.dataset.toplist;\n\n this._tabs[tabToplist] = tabElement;\n\n if (tabElement.classList.contains('active'))\n {\n this._selectedTab = tabToplist;\n }\n\n tabElement.addEventListener('click', () =>\n {\n this._selectTab(tabToplist);\n });\n });\n }\n\n /**\n * @param {string} tabToplist\n */\n _selectTab(tabToplist)\n {\n this._selectedTab = tabToplist;\n\n Object.keys(this._tabs).forEach((toplist) =>\n {\n this._tabs[toplist].classList.remove('active');\n });\n\n this._tabs[tabToplist].classList.add('active');\n\n this._onSelectedToplist(tabToplist);\n }\n}\n\nexport default ToplistSelector;\n","/**\n * @typedef {import('./ToplistTable').default} ToplistTable\n */\n\nclass ToplistTableRow\n{\n /**\n *\n * @param {HTMLTableRowElement} element\n * @param {ToplistTable} parentTable\n */\n constructor(element, parentTable)\n {\n /** @type {HTMLTableRowElement} */\n this._element = element;\n\n /** @type {ToplistTable} */\n this._parentTable = parentTable;\n\n /** @type {string} */\n this._symbol = this._element.dataset.symbol;\n\n /** @type {Function} */\n this._clickEvent = () => {};\n\n this._element.addEventListener('click', (event) =>\n {\n this._clickEvent(this, event);\n });\n }\n\n /**\n * @returns {string}\n */\n getSymbol()\n {\n return this._symbol;\n }\n\n /**\n * @param {Function} callback\n */\n setOnClickEvent(callback)\n {\n this._clickEvent = callback;\n }\n\n select()\n {\n this._element.classList.add('selected');\n }\n\n unselect()\n {\n this._element.classList.remove('selected');\n }\n}\n\nexport default ToplistTableRow;\n","import ToplistTableRow from './ToplistTableRow';\n\nclass ToplistTable\n{\n /**\n * @param {HTMLElement} element\n * @param {Function} onRowClicked\n */\n constructor(element, onRowClicked)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {ToplistTableRow[]} */\n this._rows = [];\n\n this._element.querySelectorAll('tbody tr').forEach((rowElement) =>\n {\n const tableRow = new ToplistTableRow(rowElement, this);\n\n tableRow.setOnClickEvent((row) =>\n {\n this.selectRow(this.getRowIndexBySymbol(row.getSymbol()));\n onRowClicked(row.getSymbol());\n });\n\n this._rows.push(tableRow);\n });\n }\n\n show()\n {\n this._element.style.display = '';\n }\n\n hide()\n {\n this._element.style.display = 'none';\n }\n\n /**\n * @param {string} symbol\n */\n getRowIndexBySymbol(symbol)\n {\n return this._rows.findIndex((row) => row.getSymbol() === symbol);\n }\n\n /**\n * @param {number} index\n */\n getRowSymbol(index)\n {\n return this._rows[index].getSymbol();\n }\n\n /**\n * @param {number} index\n */\n selectRow(index)\n {\n this._rows.forEach((row) =>\n {\n row.unselect();\n });\n\n this._rows[index].select();\n }\n}\n\nexport default ToplistTable;\n","import ToplistSelector from './ToplistSelector';\nimport ToplistTable from './ToplistTable';\n\nclass SiteToplists\n{\n /**\n * @param {HTMLElement} element\n */\n constructor(element)\n {\n /** @type {HTMLElement} */\n this._element = element;\n\n /** @type {string} */\n this._selectedToplist = this._element.dataset.selectedToplist;\n\n /** @type {ToplistSelector} */\n this._toplistSelector = new ToplistSelector(\n this._element.querySelector('[data-app=\"toplist-selector\"]'),\n this.setSelectedToplist.bind(this),\n );\n\n const onRowClicked = this.onRowClicked.bind(this);\n\n /** @type {Record} */\n this._toplists = {};\n\n const indicesTable = this._element.querySelector('table[data-toplist=\"indices\"]');\n if (indicesTable)\n {\n this._toplists.indices = new ToplistTable(indicesTable, onRowClicked);\n }\n\n const commoditiesTable = this._element.querySelector('table[data-toplist=\"commodities\"]');\n if (commoditiesTable)\n {\n this._toplists.commodities = new ToplistTable(commoditiesTable, onRowClicked);\n }\n\n const forexTable = this._element.querySelector('table[data-toplist=\"forex\"]');\n if (forexTable)\n {\n this._toplists.forex = new ToplistTable(forexTable, onRowClicked);\n }\n\n this.setSelectedToplist(this._selectedToplist);\n }\n\n /**\n * @param {string} symbol\n */\n onRowClicked(symbol)\n {\n this.setChartSymbol(symbol);\n }\n\n /**\n * @param {string} symbol\n */\n setChartSymbol(symbol)\n {\n if (window.ADVFN_CHARTS_MANAGER.hasChart('chart-toplist'))\n {\n window.ADVFN_CHARTS_MANAGER.updateChart('chart-toplist', {\n symbol,\n });\n }\n }\n\n /**\n * @param {string} toplist\n */\n setSelectedToplist(toplist)\n {\n if (this._selectedToplist)\n {\n this._toplists[this._selectedToplist].hide();\n }\n\n this._toplists[toplist].show();\n this._selectedToplist = toplist;\n\n const symbol = this._toplists[this._selectedToplist].getRowSymbol(0);\n this._toplists[this._selectedToplist].selectRow(0);\n this.setChartSymbol(symbol);\n }\n}\n\nexport default SiteToplists;\n","import SiteToplists from './js/SiteToplists';\nimport './scss/main.scss';\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n const siteToplistsElement = document.querySelector('[data-app=\"site-toplists\"]');\n if (siteToplistsElement)\n {\n new SiteToplists(siteToplistsElement);\n }\n});\n","import axios from 'axios';\n\nconst apis = {\n autosuggestURL: '/common/crypto/api/search',\n conversionURL: '/common/cryptocurrency/converter/api/getConversion',\n};\n\n// Validate input\nfunction validateInput(input)\n{\n input.value = input.value.replace(/[^0-9.]/g, '');\n const parts = input.value.split('.');\n if (parts.length > 1)\n {\n parts[1] = parts[1].slice(0, 7);\n input.value = parts.join('.');\n }\n}\n\n// Set shareable url\nfunction setURL(from, to, amountFrom)\n{\n const pathArray = window.location.pathname.split('/');\n const hasParams = pathArray.includes(from) && pathArray.includes(to) && pathArray.includes(amountFrom);\n\n if (!hasParams)\n {\n if (!amountFrom)\n {\n amountFrom = 1;\n }\n\n pathArray.splice(3);\n pathArray.push(from, to, amountFrom);\n\n const newURL = `${window.location.protocol}//${window.location.host}${pathArray.join('/')}`;\n window.history.replaceState(null, null, newURL);\n }\n else\n {\n pathArray.splice(-3, 3, from, to, amountFrom);\n const newURL = `${window.location.protocol}//${window.location.host}${pathArray.join('/')}`;\n window.history.replaceState(null, null, newURL);\n }\n}\n\n// Set title tag\nfunction setSEO(title, description)\n{\n const newTitle = title;\n const newDescription = description;\n document.title = document.title.replace(document.title, newTitle);\n document.querySelector('h1').textContent = document.title.replace(document.title, newTitle);\n document.querySelector('meta[name=\"description\"]').setAttribute('content', newDescription);\n\n if (!(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)))\n {\n document.querySelector('meta[property=\"og:title\"]').setAttribute('content', newTitle);\n document.querySelector('meta[property=\"og:description\"]').setAttribute('content', newDescription);\n document.querySelector('meta[name=\"twitter:title\"]').setAttribute('content', newTitle);\n document.querySelector('meta[name=\"twitter:description\"]').setAttribute('content', newDescription);\n }\n}\n\nfunction searchCoins(symbolBySearch)\n{\n axios.get(apis.autosuggestURL, {\n params: {\n query: symbolBySearch,\n },\n })\n .then((response) =>\n {\n const { data } = response;\n\n if (data.status === 'success')\n {\n const res = data.results;\n\n for (let i = 0; i < res.length; i++)\n {\n const itemElementFrom = document.querySelector(`.convert-from .token-menu-item[data-symbol=\"${res[i].symbol}\"]`);\n const itemElementTo = document.querySelector(`.convert-to .token-menu-item[data-symbol=\"${res[i].symbol}\"]`);\n if (itemElementFrom)\n {\n itemElementFrom.classList.remove('hidden-item');\n }\n if (itemElementTo)\n {\n itemElementTo.classList.remove('hidden-item');\n }\n }\n }\n })\n .catch((error) =>\n {\n console.error('Error fetching data:', error);\n });\n}\n\nasync function callConversionAPI(from, to, amount, callback)\n{\n amount = (amount === '') ? 0 : amount;\n\n if (Number.isNaN(Number(amount)))\n {\n console.error('Invalid amount');\n return false;\n }\n\n const conversionURL = `${apis.conversionURL}?from=${from}&to=${to}&amount=${amount.toString().replace(/,/g, '')}`;\n\n try\n {\n const response = await axios.get(conversionURL);\n const { data } = response;\n\n if (data.status === 'Success')\n {\n callback(data);\n return true;\n }\n\n console.error('Conversion API returned an error:', data.error);\n return false;\n }\n catch (error)\n {\n console.error('Error fetching conversion data', error);\n return false;\n }\n}\n\nfunction handleConversionDropdownData(data, isDropdownToggleFrom = false, isDropdownToggleTo = false)\n{\n const {\n from, to, amount, conversion, from_coin_link: fromCoinLink, to_coin_link: toCoinLink, seo,\n } = data;\n const dropdownToggleFrom = document.querySelector('.convert-from .dropdown-toggle');\n const dropdownToggleTo = document.querySelector('.convert-to .dropdown-toggle');\n const convertFromResult = document.querySelector('.crypto-converter-result .convert_from_result');\n const convertToResult = document.querySelector('.crypto-converter-result .converted_price');\n const calculateToInput = document.querySelector('.calculate-to input');\n\n convertFromResult.innerHTML = `${amount} ${from.currency}`;\n convertToResult.innerHTML = `${conversion} ${to.currency}`;\n\n const updateDropdown = (dropdownToggle, currency, coinLink, isConvertFrom) =>\n {\n dropdownToggle.querySelector('.currency-name').innerHTML = `${currency}`;\n\n const flagLink = isConvertFrom\n ? dropdownToggle.querySelector('.convert-from .flag-link')\n : dropdownToggle.querySelector('.convert-to .flag-link');\n\n if (flagLink)\n {\n flagLink.innerHTML = coinLink !== null\n ? coinLink\n : `\"${currency}\"`;\n }\n };\n\n if (isDropdownToggleFrom)\n {\n updateDropdown(dropdownToggleFrom, from.currency, fromCoinLink, true);\n }\n\n if (isDropdownToggleTo)\n {\n updateDropdown(dropdownToggleTo, to.currency, toCoinLink, false);\n }\n\n setSEO(seo.title, seo.description);\n\n calculateToInput.value = conversion;\n}\n\nfunction handleConversionInputData(data, reverse = false)\n{\n const {\n from, to, amount, conversion, seo,\n } = data;\n const convertFromResult = document.querySelector('.crypto-converter-result .convert_from_result');\n const convertToResult = document.querySelector('.crypto-converter-result .converted_price');\n const calculateFromInput = document.querySelector('.calculate-from input');\n const calculateToInput = document.querySelector('.calculate-to input');\n\n if (!reverse)\n {\n document.querySelector('.crypto-converter-top').dataset.convertAmountFrom = amount;\n convertFromResult.innerHTML = `${amount} ${from.currency}`;\n convertToResult.innerHTML = `${conversion} ${to.currency}`;\n calculateToInput.value = conversion;\n\n setURL(from.currency, to.currency, amount);\n }\n else\n {\n document.querySelector('.crypto-converter-top').dataset.convertAmountFrom = conversion;\n convertFromResult.innerHTML = `${conversion} ${from.currency}`;\n convertToResult.innerHTML = `${amount} ${to.currency}`;\n calculateFromInput.value = conversion;\n\n setURL(to.currency, from.currency, conversion);\n }\n\n setSEO(seo.title, seo.description);\n}\n\nfunction handleInputChange(input, symbolFrom, symbolTo, reverse)\n{\n validateInput(input);\n const { value } = input;\n\n if (value.length !== 0 || value !== '0')\n {\n const fromSymbol = reverse ? symbolTo : symbolFrom;\n const toSymbol = reverse ? symbolFrom : symbolTo;\n\n callConversionAPI(fromSymbol, toSymbol, value, (data) =>\n {\n handleConversionInputData(data, reverse);\n });\n }\n}\n\nfunction changeChartByValidSymbol(chartId, symbolFrom, symbolTo)\n{\n const noChartContainer = document.querySelector('.no-chart-container');\n noChartContainer.textContent = noChartContainer.textContent.replace('', symbolFrom).replace('', symbolTo);\n const symbol = `COIN^${symbolFrom}${symbolTo}`;\n const chartContainer = document.querySelector('[data-app=\"interactive-chart-container\"]');\n\n axios.get(`/common/api/charts/ValidSymbol?symbol=${symbol}`)\n .then(({ data, status }) =>\n {\n if (status === 200)\n {\n if (data.status === 'success')\n {\n if (data.result.valid === true)\n {\n window.ADVFN_CHARTS_MANAGER.updateChart(chartId, {\n symbol,\n });\n if (chartContainer.classList.contains('hidden-chart'))\n {\n chartContainer.classList.remove('hidden-chart');\n }\n else\n {\n noChartContainer.style.display = 'none';\n window.ADVFN_CHARTS_MANAGER.showChart(chartId);\n }\n return;\n }\n }\n }\n window.ADVFN_CHARTS_MANAGER.hideChart(chartId);\n noChartContainer.style.display = '';\n })\n .catch(() =>\n {\n window.ADVFN_CHARTS_MANAGER.hideChart(chartId);\n noChartContainer.style.display = '';\n });\n}\n\nfunction delayedSearch(inputElement)\n{\n let timeout = null;\n const idByClass = inputElement.closest('.calculate-input').id;\n const dropdownId = document.getElementById(idByClass);\n const allElements = dropdownId.querySelectorAll('.token-menu-item');\n inputElement.addEventListener('input', function ()\n {\n clearTimeout(timeout);\n\n if (this.value.length > 0)\n {\n const input = this.value.trim().toLowerCase();\n timeout = setTimeout(() =>\n {\n allElements.forEach((element) =>\n {\n element.classList.add('hidden-item');\n });\n searchCoins(input);\n }, 600);\n }\n else\n {\n allElements.forEach((element) =>\n {\n element.classList.remove('hidden-item');\n });\n }\n });\n}\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n const currencyConverterPage = document.querySelector('[data-page=\"currency-converter\"]');\n\n if (currencyConverterPage)\n {\n const CRYPTO_CHART_ID = 'chart-converter-currency';\n const dropdownMenuFrom = document.querySelectorAll('.convert-from .token-menu-item');\n const dropdownMenuTo = document.querySelectorAll('.convert-to .token-menu-item');\n let symbolFrom = document.querySelector('.crypto-converter-top').dataset.convertFrom;\n let symbolTo = document.querySelector('.crypto-converter-top').dataset.convertTo;\n const { convertText, description } = document.querySelector('.crypto-converter-top').dataset;\n let { convertAmountFrom } = document.querySelector('.crypto-converter-top').dataset;\n const inputConvertFrom = document.getElementById('convert-from').querySelector('input');\n const inputConvertTo = document.getElementById('convert-to').querySelector('input');\n const converterChangeBtn = document.querySelector('.converter-arrows-change');\n\n const searchFrom = document.getElementById('search-from');\n const searchTo = document.getElementById('search-to');\n\n setURL(symbolFrom, symbolTo, convertAmountFrom);\n setSEO(convertText, description);\n\n delayedSearch(searchFrom);\n delayedSearch(searchTo);\n\n inputConvertFrom.addEventListener('input', () =>\n {\n handleInputChange(inputConvertFrom, symbolFrom, symbolTo, false);\n });\n\n inputConvertTo.addEventListener('input', () =>\n {\n handleInputChange(inputConvertTo, symbolFrom, symbolTo, true);\n });\n\n converterChangeBtn.addEventListener('click', () =>\n {\n [symbolFrom, symbolTo] = [symbolTo, symbolFrom];\n convertAmountFrom = document.querySelector('.crypto-converter-top').dataset.convertAmountFrom;\n\n setURL(symbolFrom, symbolTo, convertAmountFrom);\n\n changeChartByValidSymbol(CRYPTO_CHART_ID, symbolFrom, symbolTo);\n\n callConversionAPI(symbolFrom, symbolTo, convertAmountFrom, (data) =>\n {\n handleConversionDropdownData(data, true, true);\n });\n });\n\n dropdownMenuFrom.forEach((menu) =>\n {\n menu.addEventListener('click', () =>\n {\n symbolFrom = menu.dataset.symbol;\n\n setURL(symbolFrom, symbolTo, convertAmountFrom);\n\n changeChartByValidSymbol(CRYPTO_CHART_ID, symbolFrom, symbolTo);\n\n callConversionAPI(symbolFrom, symbolTo, convertAmountFrom, (data) =>\n {\n handleConversionDropdownData(data, true);\n });\n });\n });\n\n dropdownMenuTo.forEach((menu) =>\n {\n menu.addEventListener('click', () =>\n {\n symbolTo = menu.dataset.symbol;\n setURL(symbolFrom, symbolTo, convertAmountFrom);\n\n changeChartByValidSymbol(CRYPTO_CHART_ID, symbolFrom, symbolTo);\n\n callConversionAPI(symbolFrom, symbolTo, convertAmountFrom, (data) =>\n {\n handleConversionDropdownData(data, false, true);\n });\n });\n });\n }\n});\n","import axios from 'axios';\n\nconst apis = {\n autosuggestURL: '/common/crypto/api/search',\n conversionURL: '/common/cryptocurrency/converter/api/getConversion',\n};\n\n// Validate input\nfunction validateInput(input)\n{\n input.value = input.value.replace(/[^0-9.]/g, '');\n const parts = input.value.split('.');\n if (parts.length > 1)\n {\n parts[1] = parts[1].slice(0, 7);\n input.value = parts.join('.');\n }\n}\n\nfunction searchCoins(symbolBySearch)\n{\n axios.get(apis.autosuggestURL, {\n params: {\n query: symbolBySearch,\n },\n })\n .then((response) =>\n {\n const { data } = response;\n\n if (data.status === 'success')\n {\n const res = data.results;\n\n for (let i = 0; i < res.length; i++)\n {\n const itemElementFrom = document.querySelector(`.convert-from .token-menu-item[data-symbol=\"${res[i].symbol}\"]`);\n const itemElementTo = document.querySelector(`.convert-to .token-menu-item[data-symbol=\"${res[i].symbol}\"]`);\n if (itemElementFrom)\n {\n itemElementFrom.classList.remove('hidden-item');\n }\n if (itemElementTo)\n {\n itemElementTo.classList.remove('hidden-item');\n }\n }\n }\n })\n .catch((error) =>\n {\n console.error('Error fetching data:', error);\n });\n}\n\nasync function callConversionAPI(from, to, amount, callback)\n{\n amount = (amount === '') ? 0 : amount;\n\n if (Number.isNaN(Number(amount)))\n {\n console.error('Invalid amount');\n return false;\n }\n\n const conversionURL = `${apis.conversionURL}?from=${from}&to=${to}&amount=${amount.toString().replace(/,/g, '')}`;\n\n try\n {\n const response = await axios.get(conversionURL);\n const { data } = response;\n\n if (data.status === 'Success')\n {\n callback(data);\n return true;\n }\n\n console.error('Conversion API returned an error:', data.error);\n return false;\n }\n catch (error)\n {\n console.error('Error fetching conversion data', error);\n return false;\n }\n}\n\nfunction handleConversionDropdownData(data, isDropdownToggleFrom = false, isDropdownToggleTo = false)\n{\n const {\n from, to, conversion, from_coin_link: fromCoinLink, to_coin_link: toCoinLink, header_title: headerTitle,\n } = data;\n const dropdownToggleFrom = document.querySelector('.convert-from .dropdown-toggle');\n const convertSymbolTitle = document.querySelector('.crypto-converter-top h1');\n const dropdownToggleTo = document.querySelector('.convert-to .dropdown-toggle');\n const calculateToInput = document.querySelector('.calculate-to input');\n\n const updateDropdown = (dropdownToggle, currency, coinLink, isConvertFrom) =>\n {\n dropdownToggle.querySelector('.currency-name').innerHTML = `${currency}`;\n convertSymbolTitle.innerHTML = `${headerTitle.sidebar_title}`;\n\n const flagLink = isConvertFrom\n ? dropdownToggle.querySelector('.convert-from .flag-link')\n : dropdownToggle.querySelector('.convert-to .flag-link');\n\n if (flagLink)\n {\n flagLink.innerHTML = coinLink !== null\n ? coinLink\n : `\"${currency}\"`;\n }\n };\n\n if (isDropdownToggleFrom)\n {\n updateDropdown(dropdownToggleFrom, from.currency, fromCoinLink, true);\n }\n\n if (isDropdownToggleTo)\n {\n updateDropdown(dropdownToggleTo, to.currency, toCoinLink, false);\n }\n\n calculateToInput.value = conversion;\n}\n\nfunction handleConversionInputData(data, reverse = false)\n{\n const {\n amount, conversion, header_title: headerTitle,\n } = data;\n const convertSymbolTitle = document.querySelector('.crypto-converter-top h1');\n const calculateFromInput = document.querySelector('.calculate-from input');\n const calculateToInput = document.querySelector('.calculate-to input');\n\n if (!reverse)\n {\n document.querySelector('.crypto-converter-top').dataset.convertAmountFrom = amount;\n convertSymbolTitle.innerHTML = `${headerTitle.sidebar_title}`;\n calculateToInput.value = conversion;\n }\n else\n {\n document.querySelector('.crypto-converter-top').dataset.convertAmountFrom = conversion;\n convertSymbolTitle.innerHTML = `${headerTitle.sidebar_title}`;\n calculateFromInput.value = conversion;\n }\n}\n\nfunction handleInputChange(input, symbolFrom, symbolTo, reverse)\n{\n validateInput(input);\n const { value } = input;\n\n if (value.length !== 0 || value !== '0')\n {\n const fromSymbol = reverse ? symbolTo : symbolFrom;\n const toSymbol = reverse ? symbolFrom : symbolTo;\n\n callConversionAPI(fromSymbol, toSymbol, value, (data) =>\n {\n handleConversionInputData(data, reverse);\n });\n }\n}\n\nfunction delayedSearch(inputElement)\n{\n let timeout = null;\n const idByClass = inputElement.closest('.calculate-input').id;\n const dropdownId = document.getElementById(idByClass);\n const allElements = dropdownId.querySelectorAll('.token-menu-item');\n inputElement.addEventListener('input', function ()\n {\n clearTimeout(timeout);\n\n if (this.value.length > 0)\n {\n const input = this.value.trim().toLowerCase();\n timeout = setTimeout(() =>\n {\n allElements.forEach((element) =>\n {\n element.classList.add('hidden-item');\n });\n searchCoins(input);\n }, 600);\n }\n else\n {\n allElements.forEach((element) =>\n {\n element.classList.remove('hidden-item');\n });\n }\n });\n}\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n const converterSidebar = document.querySelector('#crypto-converter-container');\n\n if (converterSidebar)\n {\n const dropdownMenuFrom = document.querySelectorAll('.convert-from .token-menu-item');\n const dropdownMenuTo = document.querySelectorAll('.convert-to .token-menu-item');\n let symbolFrom = document.querySelector('.crypto-converter-top').dataset.convertFrom;\n let symbolTo = document.querySelector('.crypto-converter-top').dataset.convertTo;\n const { convertAmountFrom } = document.querySelector('.crypto-converter-top').dataset;\n const inputConvertFrom = document.getElementById('convert-from').querySelector('input');\n const inputConvertTo = document.getElementById('convert-to').querySelector('input');\n const searchFrom = document.getElementById('search-from');\n const searchTo = document.getElementById('search-to');\n\n delayedSearch(searchFrom);\n delayedSearch(searchTo);\n\n inputConvertFrom.addEventListener('input', () =>\n {\n handleInputChange(inputConvertFrom, symbolFrom, symbolTo, false);\n });\n\n inputConvertTo.addEventListener('input', () =>\n {\n handleInputChange(inputConvertTo, symbolFrom, symbolTo, true);\n });\n\n dropdownMenuFrom.forEach((menu) =>\n {\n menu.addEventListener('click', () =>\n {\n symbolFrom = menu.dataset.symbol;\n\n callConversionAPI(symbolFrom, symbolTo, convertAmountFrom, (data) =>\n {\n handleConversionDropdownData(data, true);\n });\n });\n });\n\n dropdownMenuTo.forEach((menu) =>\n {\n menu.addEventListener('click', () =>\n {\n symbolTo = menu.dataset.symbol;\n\n callConversionAPI(symbolFrom, symbolTo, convertAmountFrom, (data) =>\n {\n handleConversionDropdownData(data, false, true);\n });\n });\n });\n }\n});\n","const axios = require('axios');\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n function showDialog(element, width)\n {\n element.style.width = `${width}px`;\n element.style.display = 'block';\n }\n\n function vote(obj, direction)\n {\n const bbVotePopup = document.getElementById('bb-vote-popup');\n bbVotePopup.innerHTML = 'Loading...';\n showDialog(bbVotePopup, 500);\n\n const bbId = obj.getAttribute('bb_id');\n const threadId = obj.getAttribute('thread_id');\n const number = obj.getAttribute('number');\n const hash = obj.getAttribute('hash');\n\n const dataString = `bb_id=${bbId}&thread_id=${threadId}&number=${number}&hash=${hash}&vote=${direction}`;\n const theLink = '/common/bb/vote';\n\n axios.post(theLink, dataString, {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) =>\n {\n bbVotePopup.innerHTML = response.data;\n showDialog(bbVotePopup, 500);\n }).catch((error) =>\n {\n console.error(error);\n });\n }\n\n document.querySelectorAll('.bb-vote-up').forEach((button) =>\n {\n button.addEventListener('click', () =>\n {\n vote(button, 'up');\n });\n });\n\n document.querySelectorAll('.bb-vote-down').forEach((button) =>\n {\n button.addEventListener('click', () =>\n {\n vote(button, 'down');\n });\n });\n});\n","const axios = require('axios');\n\nconst API_ENDPOINT = '/common/api/trending/GetTickerBuzz';\n\nfunction _loadTickerBuzzCloud(data)\n{\n const tickerBuzzSymbolsContainer = document.querySelector('[data-app=\"ticker-cloud-symbols-container\"]');\n tickerBuzzSymbolsContainer.innerHTML = '';\n\n data.forEach((item) =>\n {\n const { rank } = item;\n const change = Number(item.change);\n let changeCss = 'text-default-secondary';\n if (change > 0)\n {\n changeCss = 'element-up-color';\n }\n else if (change < 0)\n {\n changeCss = 'element-down-color';\n }\n\n const tickerSymbolContainer = document.createElement('li');\n tickerSymbolContainer.classList.add('ticker-symbol-container');\n\n const symbolLink = document.createElement('a');\n symbolLink.classList.add('ticker-symbol');\n symbolLink.style = `--token-weight: ${rank}`;\n symbolLink.href = item.quoteLink;\n\n const symbolSpan = document.createElement('span');\n symbolSpan.classList.add(changeCss);\n symbolSpan.innerText = item.boardTicker;\n\n symbolLink.appendChild(symbolSpan);\n\n tickerSymbolContainer.appendChild(symbolLink);\n\n tickerBuzzSymbolsContainer.appendChild(tickerSymbolContainer);\n });\n}\n\nfunction _loadTickerBuzzCloudUK(data)\n{\n const tickerBuzzSymbolsContainer = document.querySelector('[data-app=\"ticker-cloud-symbols-container\"]');\n tickerBuzzSymbolsContainer.innerHTML = '';\n\n data.forEach((item) =>\n {\n const { rank } = item;\n const change = Number(item.changePc);\n let changeCss = 'text-default-secondary';\n if (change > 0)\n {\n changeCss = 'element-up-color';\n }\n else if (change < 0)\n {\n changeCss = 'element-down-color';\n }\n\n const tickerSymbolContainer = document.createElement('li');\n tickerSymbolContainer.classList.add('ticker-symbol-container');\n\n const symbolLink = document.createElement('a');\n symbolLink.classList.add('ticker-symbol');\n symbolLink.style = `--token-weight: ${rank}`;\n symbolLink.href = item.quoteLink;\n\n const symbolSpan = document.createElement('span');\n symbolSpan.classList.add(changeCss);\n symbolSpan.innerText = item.symbol;\n\n symbolLink.appendChild(symbolSpan);\n\n tickerSymbolContainer.appendChild(symbolLink);\n\n tickerBuzzSymbolsContainer.appendChild(tickerSymbolContainer);\n });\n}\n\nfunction getTickerBuzzCloudData(tickerBuzzSite, interval)\n{\n const requestOptions = {\n withCredentials: true,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n const params = {};\n params.hubOrigId = 0;\n params.checksum = 0;\n params.interval = interval;\n params.site = tickerBuzzSite;\n requestOptions.params = params;\n\n axios.get(API_ENDPOINT, requestOptions)\n .then(({ status, data }) =>\n {\n if (status === 200)\n {\n if (tickerBuzzSite === 'uk')\n {\n _loadTickerBuzzCloudUK(data.result.ticker_buzz);\n }\n else\n {\n _loadTickerBuzzCloud(data.result.ticker_buzz);\n }\n }\n })\n .catch(() => {});\n}\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n const tickerBuzzElement = document.querySelector('[data-app=\"ticker-buzz-cloud\"]');\n if (tickerBuzzElement)\n {\n const tickerBuzzSite = tickerBuzzElement.getAttribute('data-site');\n\n const tickerBuzzBody = tickerBuzzElement.querySelector('.container-buzz-cloud-body');\n tickerBuzzBody.style.width = `${tickerBuzzBody.offsetWidth}px`;\n\n const tickerBuzzSymbolsContainer = document.querySelector('[data-app=\"ticker-cloud-symbols-container\"]');\n const tickerBuzzIntervals = document.querySelectorAll('[data-name=\"ticker-buzz-cloud-interval\"]');\n tickerBuzzIntervals.forEach((tickerBuzzInterval) =>\n {\n tickerBuzzInterval.addEventListener('click', (e) =>\n {\n tickerBuzzIntervals.forEach((tickerBuzzIntervalClicked) =>\n {\n tickerBuzzIntervalClicked.classList.remove('active');\n });\n const html = '

';\n tickerBuzzSymbolsContainer.innerHTML = html;\n e.preventDefault();\n const { interval } = tickerBuzzInterval.dataset;\n tickerBuzzInterval.classList.add('active');\n getTickerBuzzCloudData(tickerBuzzSite, interval);\n });\n });\n }\n});\n","// style-loader: Adds some css to the DOM by adding a