{"version":3,"file":"Watchlist.bundle.js","mappings":"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","sources":["webpack://advfnweb/webpack/runtime/chunk loaded","webpack://advfnweb/./advfn3/content/_common/elements/translator/js/BaseTranslationService.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/resources/TranslationService.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/ApiWrapper.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/AddSymbol.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/RemoveSymbol.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/GetList.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorAddSymbolModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/resources/ColumnsTranslationService.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/UpdateColumns.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorChangeColumnsModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/GetLists.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/CreateMonitor.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorSelector.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/SetDefaultList.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/SetConfig.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorSettings.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/DeleteList.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorDeleteModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/api/RenameList.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorUpdateModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorEdit.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/charts/ChartSettings.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/news/MonitorNews.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorSettingsMobile.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorEditModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorChangeColumnsModalMobile.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/modals/MonitorNewsAlertModal.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/delight.js","webpack://advfnweb/./advfn3/content/_common/onboarding/src/TranslationService.js","webpack://advfnweb/./advfn3/content/_common/onboarding/src/Onboarding.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/onboarding/TranslationService.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/js/onboarding/MonitorOnboarding.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/app.js","webpack://advfnweb/./advfn3/content/_common/watchlist/src/scss/main.scss?b2cf","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};","const DEFAULT_LOCALE = 'en_GB';\n\nconst FALLBACK_LOCALES = {\n en_CA: ['en_US', 'en_GB'],\n en_AU: ['en_US', 'en_GB'],\n // Add other specific fallbacks for each language as needed\n // Default fallback is en_GB\n};\n\nclass BaseTranslationService\n{\n setLocale(locale)\n {\n this.locale = this.getValidLocale(locale);\n }\n\n setLangFile(file)\n {\n this.lang = file;\n }\n\n getLangFile()\n {\n return this.lang ? this.lang : null;\n }\n\n getResource()\n {\n return this.lang[this.locale];\n }\n\n getValidLocale(locale)\n {\n const localesToCheck = [locale, ...(FALLBACK_LOCALES[locale] || [])];\n const validLocale = localesToCheck.find((fallbackLocale) => (this.lang).hasOwnProperty(fallbackLocale));\n return validLocale || DEFAULT_LOCALE;\n }\n\n getLocale()\n {\n return this.locale ? this.locale : DEFAULT_LOCALE;\n }\n\n getTranslation(txt)\n {\n if ((this.lang[this.locale]).hasOwnProperty(txt))\n {\n return this.lang[this.locale][txt];\n }\n if ((this.lang[this.locale].general).hasOwnProperty(txt))\n {\n return this.lang[this.locale].general[txt];\n }\n\n return txt;\n }\n\n}\n\nexport default BaseTranslationService;\n","import translations from './translations.json';\nimport BaseTranslationService from '../../../../elements/translator/js/BaseTranslationService';\n\nclass TranslationService extends BaseTranslationService\n{\n constructor(locale)\n {\n super();\n this.setLangFile(translations);\n this.setLocale(locale);\n }\n\n getTranslations()\n {\n const translationObject = {};\n\n if (translations[this.locale])\n {\n return translations[this.locale];\n }\n return translationObject;\n }\n}\n\nexport default TranslationService;\n","import TranslationService from '../resources/TranslationService';\n\nclass MonitorModal\n{\n constructor()\n {\n this.modal = null;\n this.actionButtons = null;\n this.isDisabled = false;\n\n // eslint-disable-next-line no-undef\n this.lang = new TranslationService(ADVFN.LOCALE);\n }\n\n init()\n {\n if (!this.modal)\n {\n console.error('modal not found');\n return;\n }\n this.bindOpenButton();\n this.bindCloseButton();\n this.initialize();\n\n }\n\n setSymbols(symbols)\n {\n if (typeof symbols === 'string')\n {\n this._symbols = symbols.split('|');\n }\n else\n {\n this._symbols = symbols.map((item) => item.display_symbol);\n }\n }\n\n bindOpenButton()\n {}\n\n initialize()\n {}\n\n destroyState()\n {}\n\n saveAndClose()\n {}\n\n setMonitorID(id)\n {\n this.monitorID = Number.isNaN(parseInt(id, 10)) ? id : parseInt(id, 10);\n }\n\n getMonitorID()\n {\n return this.monitorID;\n }\n\n bindCloseButton()\n {\n const modalCloseButton = this.modal.querySelectorAll('.monitor-modal-close');\n if (modalCloseButton.length)\n {\n modalCloseButton.forEach((item) =>\n {\n item.addEventListener('click', () =>\n {\n this.modal.classList.remove('active');\n this.destroyState();\n });\n });\n\n }\n\n this.modal.addEventListener('click', (e) =>\n {\n if (e.target === this.modal)\n {\n this.modal.classList.remove('active');\n this.destroyState();\n }\n });\n\n const modalCloseAndSaveButton = this.modal.querySelector('.footer button.save-and-close');\n if (modalCloseAndSaveButton)\n {\n modalCloseAndSaveButton.addEventListener('click', () =>\n {\n this.modal.classList.remove('active');\n this.destroyState();\n this.saveAndClose();\n });\n }\n\n const btnCancel = this.modal.querySelector('button.cancel');\n if (btnCancel)\n {\n btnCancel.addEventListener('click', () =>\n {\n this.modal.classList.remove('active');\n this.destroyState();\n });\n }\n }\n\n addLoading(element = null)\n {\n return new Promise((resolve) =>\n {\n const loading = document.createElement('div');\n loading.classList.add('modal-loading');\n\n const spinner = document.createElement('span');\n spinner.classList.add('fa', 'fa-spinner', 'fa-spin');\n\n loading.appendChild(spinner);\n if (!element)\n {\n this.modal.querySelector('.modal-box').appendChild(loading);\n }\n else\n {\n element.appendChild(loading);\n }\n\n setTimeout(() =>\n {\n resolve();\n }, 100);\n });\n }\n\n removeLoading(element = null)\n {\n const loading = element ? element.querySelector('.modal-loading') : this.modal.querySelector('.modal-box .modal-loading');\n if (loading)\n {\n loading.remove();\n }\n }\n\n toggle()\n {\n this.modal.classList.toggle('active');\n }\n\n updatePageTitle(name)\n {\n const { title } = document;\n const parts = title.split(' - ');\n if (parts[0])\n {\n parts[0] = name;\n document.title = parts.join(' - ');\n }\n else\n {\n console.warn('Title format is not as expected. No changes made.');\n }\n }\n\n disableAction()\n {\n if (this.actionButtons && this.actionButtons.length)\n {\n this.actionButtons.forEach((item) =>\n {\n item.setAttribute('disabled', 'disabled');\n });\n }\n\n this.isDisabled = true;\n }\n\n enableAction()\n {\n if (this.actionButtons && this.actionButtons.length)\n {\n this.actionButtons.forEach((item) =>\n {\n item.removeAttribute('disabled');\n });\n }\n\n this.isDisabled = false;\n }\n}\n\nexport default MonitorModal;\n","import axios from 'axios';\n\nexport const BASE_ENDPOINT = '/common/api/watchlist';\n\nclass CustomError extends Error\n{\n constructor(message, code)\n {\n super();\n this.message = message;\n this.code = code;\n }\n}\n\n/**\n * @template P, O\n * @param {string} endpoint\n * @param {string} method\n * @param {P} params\n * @returns {Promise|null}\n */\nexport const getData = async (endpoint, method, params) =>\n{\n let response;\n let code = -1;\n let reason = 'unknown';\n\n if (method === 'GET')\n {\n response = await axios.get(endpoint, params);\n }\n else if (method === 'POST')\n {\n const formData = new FormData();\n\n Object.keys(params).forEach((key) =>\n {\n if (typeof params[key] === 'object')\n {\n params[key].forEach((item) =>\n {\n formData.append(`${key}[]`, item);\n });\n }\n else\n {\n formData.append(key, params[key]);\n }\n });\n\n response = await axios.post(endpoint, formData);\n }\n else\n {\n throw new CustomError(\n 'unknown method',\n code,\n );\n }\n const { status, data } = response;\n if (status === 200)\n {\n if (data.status === 'success')\n {\n return data.result;\n }\n\n if (data.status === 'fail')\n {\n code = data.result.errorCode;\n reason = data.result.errorMessage;\n }\n }\n\n throw new CustomError(\n reason,\n code,\n );\n};\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {AddSymbolRequest} params\n * @returns {Promise|null}\n */\nconst addSymbol = async (params) => getData(`${BASE_ENDPOINT}/AddSymbol`, 'POST', params);\n\nexport default addSymbol;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} AddSymbolRequest\n * @property {integer} id\n * @property {string} symbol\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * message: string\n * };\n * }} AddSymbolResponse\n */\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {RemoveSymbolRequest} params\n * @returns {Promise|null}\n */\nconst removeSymbol = async (params) => getData(`${BASE_ENDPOINT}/RemoveSymbol`, 'POST', params);\n\nexport default removeSymbol;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} RemoveSymbolRequest\n * @property {string} name\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * newList: string\n * };\n * }} RemoveSymbolResponse\n */\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {GetListRequest} params\n * @returns {Promise|null}\n */\nconst getList = async (params) =>\n{\n let endpoint = `${BASE_ENDPOINT}/GetList`;\n if (params)\n {\n const query = Object.keys(params)\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)\n .join('&');\n\n endpoint += `?${query}`;\n }\n return getData(endpoint, 'GET', params);\n};\n\nexport default getList;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} GetListRequest\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * defaultList: number,\n * lists: [\n * {\n * columns: array,\n * id: number,\n * name: string,\n * maxSymbols: number,\n * symbols: array,\n * symbolsData: array,\n * symbolCount: number,\n * }\n * ];\n * };\n * }} GetListResponse\n */\n","import md5 from 'md5';\nimport MonitorModal from './MonitorModal';\nimport addSymbol from '../api/AddSymbol';\nimport removeSymbol from '../api/RemoveSymbol';\nimport getList from '../api/GetList';\n\nconst axios = require('axios');\n\nconst API_ENDPOINT = '/common/api/trending/GetForSite';\n\nclass MonitorAddSymbolModal extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-add-symbol-modal\"]');\n this.content = this.modal.querySelector('.content table');\n this._trendingList = null;\n this._searchResults = {};\n this._setSelectedMarketType();\n this.mode = 'async';\n this._inputTimeout = null;\n }\n\n bindOpenButton()\n {\n const _this = this;\n this.actionButtons = document.querySelectorAll('#page-monitor-delight .modal-button[data-type=\"monitor-add-symbol-modal\"]');\n if (this.actionButtons.length && !this.isDisabled)\n {\n this.actionButtons.forEach((item) =>\n {\n item.addEventListener('click', () =>\n {\n _this.open();\n });\n });\n }\n\n const noSymbolsButton = document.getElementById('no-symbols-btn');\n if (noSymbolsButton)\n {\n noSymbolsButton.addEventListener('click', () =>\n {\n _this.open();\n _this.mode = 'sync';\n });\n }\n }\n\n initialize()\n {\n this._bindSearchInput();\n this._bindMarketList();\n }\n\n clearState()\n {\n }\n\n destroyState()\n {\n this._inputBox.value = '';\n this._selectedType = 'all';\n this._selectMarketListButton(this._selectedType);\n }\n\n open()\n {\n this._loadTrendingStocks();\n this.modal.classList.add('active');\n }\n\n saveAndClose()\n {\n window.location.reload();\n }\n\n _bindMarketList()\n {\n const _this = this;\n const buttons = this.modal.querySelectorAll('.markets-list li button');\n buttons.forEach((btn) =>\n {\n btn.addEventListener('click', () =>\n {\n const selectedItem = _this.modal.querySelector('.markets-list li.selected');\n selectedItem.classList.remove('selected');\n\n btn.parentNode.classList.add('selected');\n\n _this._setSelectedMarketType();\n if (this._selectedType === 'my-symbols')\n {\n this._filterMySymbols();\n }\n else\n {\n this.search();\n }\n this._currentSearch = '';\n });\n });\n }\n\n /**\n * Sets selected market data-type\n */\n _setSelectedMarketType()\n {\n const btn = this.modal.querySelector('.markets-list li.selected button');\n this._selectedType = btn.getAttribute('data-type');\n }\n\n /**\n * Enable the Market List buttons when the user starts typing in the search box.\n */\n _activateDisabledMarketListButtons()\n {\n const buttons = this.modal.querySelectorAll('.markets-list li button[disabled]');\n buttons.forEach((button) =>\n {\n button.removeAttribute('disabled');\n });\n }\n\n /**\n * Disable the Market List buttons when the search box is empty.\n */\n _deactivateMarketListButtons()\n {\n const buttons = this.modal.querySelectorAll('.markets-list li button');\n buttons.forEach((button) =>\n {\n if (!['all', 'my-symbols'].includes(button.getAttribute('data-type')))\n {\n button.setAttribute('disabled', 'disabled');\n }\n });\n }\n\n /**\n * Add \"selected\" class to the market list item when selected\n */\n _selectMarketListButton(type)\n {\n const selectedItem = this.modal.querySelector('.markets-list li.selected');\n if (selectedItem)\n {\n selectedItem.classList.remove('selected');\n }\n\n const btn = this.modal.querySelector(`.markets-list li button[data-type=\"${type}\"]`);\n btn.parentNode.classList.add('selected');\n }\n\n _bindSearchInput()\n {\n this._inputBox = this.modal.querySelector('.search-bar input');\n\n this._inputBox.addEventListener('keyup', () =>\n {\n clearTimeout(this._inputTimeout);\n this._inputTimeout = setTimeout(this.search.bind(this), 500);\n });\n\n this._inputBox.addEventListener('keydown', () =>\n {\n clearTimeout(this._inputTimeout);\n });\n }\n\n search()\n {\n const inputValue = this._inputBox.value.trim();\n\n // if we dont have input value\n if (inputValue === '')\n {\n this._deactivateMarketListButtons();\n\n // if selected type is my-symbols\n if (this._selectedType === 'my-symbols')\n {\n this._filterMySymbols();\n return;\n }\n\n this.clearState();\n this._loadTrendingStocks();\n\n return;\n }\n\n // if selected type is my-symbols\n if (this._selectedType === 'my-symbols')\n {\n this._filterMySymbols();\n return;\n }\n\n this._activateDisabledMarketListButtons();\n\n this._getResults(inputValue)\n .then(({ results }) =>\n {\n if (results.length === 0) return;\n this._loadList(results);\n })\n .catch(() =>\n {\n });\n }\n\n /**\n * Get Search results from API\n */\n _getResults(term)\n {\n return new Promise((resolve, reject) =>\n {\n const key = this._genSearchKey(term);\n\n if (this._searchResults[key])\n {\n this._currentSearch = term;\n\n resolve({\n term,\n results: this._searchResults[key],\n });\n return;\n }\n\n let url = `/common/api/search/SymbolLookup?term=${term}`;\n\n if (this._selectedType !== 'my-symbols')\n {\n url += `&type=${this._selectedType}`;\n }\n\n axios.get(url)\n .then(({ status, data }) =>\n {\n if (status === 200)\n {\n this._currentSearch = term;\n if (data.status === 'success')\n {\n this._searchResults[key] = data.result.results;\n\n resolve({\n term: data.result.term,\n results: data.result.results,\n });\n return;\n }\n\n this._checkForOptions(term)\n .then(({ results }) =>\n {\n this._loadList(results);\n })\n .catch(() =>\n {\n this._loadNotFoundMessage(term);\n });\n return;\n }\n\n reject();\n })\n .catch((error) =>\n {\n reject(error);\n });\n });\n }\n\n /**\n * load Trending Stocks when user is on \"All\" category\n */\n _loadTrendingStocks()\n {\n const _this = this;\n\n if (_this._trendingList)\n {\n _this._loadList(_this._trendingList);\n return;\n }\n\n axios.get(`${API_ENDPOINT}`)\n .then(({ status, data }) =>\n {\n if (status === 200)\n {\n if (data.status === 'success')\n {\n _this._trendingList = data.result.trending_stocks;\n _this._loadList(_this._trendingList);\n }\n }\n })\n .catch(() => { });\n }\n\n _checkForOptions(term)\n {\n const msg = this.lang.getTranslation('searching_options');\n this._loadMessage(msg.replace('{term}', term), 'no-symbol-found');\n\n const url = 'common/api/quote/GetQuote';\n const formData = new FormData();\n\n formData.append('symbols[]', term);\n\n return new Promise((resolve, reject) =>\n {\n axios.post(url, formData)\n .then(({ status, data }) =>\n {\n if (status === 200 && data.status === 'success' && data.result.quotes.length)\n {\n resolve({\n term,\n results: data.result.quotes,\n });\n }\n\n reject(new Error('No quotes found or request was not successful'));\n })\n .catch((error) =>\n {\n reject(error);\n });\n });\n }\n\n /**\n * Generates a key for more efficient caching\n */\n _genSearchKey(term)\n {\n return md5(term + this._selectedType);\n }\n\n _loadList(list)\n {\n const _this = this;\n _this.content.innerHTML = '';\n\n list.forEach((stock) =>\n {\n const item = _this._createListItem(stock);\n _this.content.appendChild(item);\n });\n }\n\n _loadNotFoundMessage(term)\n {\n this._loadMessage(`${this.lang.getTranslation('no_symbol_found')}: ${term}`, 'no-symbol-found');\n }\n\n _loadMessage(text, className)\n {\n this.content.innerHTML = '';\n\n const msg = document.createElement('div');\n msg.classList.add(className);\n msg.innerText = text;\n\n this.content.appendChild(msg);\n }\n\n _createListItem(item)\n {\n const displaySymbol = item.display_symbol ? item.display_symbol : item.displaySymbol;\n const feedSymbol = item.feed_symbol ? item.feed_symbol : item.feedSymbol;\n\n const itemRow = document.createElement('tr');\n itemRow.classList.add('result-row');\n\n // Create logo\n const colLogo = document.createElement('td');\n colLogo.classList.add('col-logo');\n const img = document.createElement('img');\n img.setAttribute('src', item.logo);\n img.setAttribute('alt', item.short_name);\n colLogo.appendChild(img);\n\n // Create Title\n const colTitle = document.createElement('td');\n colTitle.classList.add('col-title');\n\n const market = document.createElement('span');\n if (item.market.symbol)\n {\n market.innerText = item.market.symbol;\n }\n else if (item.market && typeof item.market === 'string')\n {\n market.innerText = item.market;\n }\n\n const symbol = document.createElement('h3');\n symbol.innerText = item.symbol;\n\n const title = document.createElement('div');\n title.innerText = item.name;\n\n symbol.appendChild(market);\n colTitle.appendChild(symbol);\n colTitle.appendChild(title);\n\n // Create Actions\n const colAction = document.createElement('td');\n colAction.classList.add('col-action');\n const btn = document.createElement('button');\n btn.setAttribute('data-symbol', displaySymbol);\n btn.setAttribute('data-feed-symbol', feedSymbol);\n this._bindListButton(btn);\n colAction.appendChild(btn);\n\n itemRow.appendChild(colLogo);\n itemRow.appendChild(colTitle);\n itemRow.appendChild(colAction);\n\n if (this._symbols.includes(displaySymbol))\n {\n itemRow.classList.add('selected');\n }\n\n return itemRow;\n }\n\n _bindListButton(btn)\n {\n const _this = this;\n btn.addEventListener('click', () =>\n {\n const row = btn.parentNode.parentNode;\n const displaySymbol = btn.getAttribute('data-symbol');\n const symbol = btn.getAttribute('data-feed-symbol');\n if (row.classList.contains('selected'))\n {\n // remove from list\n _this.addLoading().then(() =>\n {\n _this._removeSymbol(symbol, displaySymbol);\n row.classList.remove('selected');\n if (this._selectedType === 'my-symbols')\n {\n row.remove();\n }\n });\n }\n else\n {\n // add into list\n _this.addLoading().then(() =>\n {\n _this._addSymbol(symbol, displaySymbol);\n row.classList.add('selected');\n });\n }\n });\n }\n\n _showMySymbols()\n {\n if (this.mode === 'async')\n {\n const currentApp = window.jsSession._currentApp;\n this._loadList(currentApp._config.symbols);\n }\n else\n {\n getList({\n id: this.monitorID,\n }).then((result) =>\n {\n const symbols = result.list.symbolsData;\n this._loadList(Object.values(symbols));\n });\n }\n }\n\n _filterMySymbols()\n {\n const inputValue = this._inputBox.value.trim();\n\n this._showMySymbols();\n\n // if there's a value in input we want to filter my-symbols according to input value\n if (inputValue !== '')\n {\n const list = this.content.querySelectorAll('tr');\n list.forEach((item) =>\n {\n const symbol = item.querySelector('.col-title h3').innerText.toLowerCase();\n const name = item.querySelector('.col-title div').innerText.toLowerCase();\n\n if (symbol.includes(inputValue.toLowerCase()) || name.includes(inputValue.toLowerCase()))\n {\n item.classList.remove('hidden');\n }\n else\n {\n item.classList.add('hidden');\n }\n });\n }\n }\n\n _addSymbol(symbol, displaySymbol)\n {\n if (this.mode === 'async')\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.handleAddSymbol(symbol);\n this.removeLoading();\n }\n else\n {\n addSymbol({\n id: this.monitorID,\n symbol,\n }).then(() =>\n {\n this.removeLoading();\n });\n }\n\n this._symbols.push(displaySymbol);\n }\n\n _removeSymbol(symbol, displaySymbol)\n {\n if (this.mode === 'async')\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.handleRemoveSymbol(symbol);\n this.removeLoading();\n }\n else\n {\n removeSymbol({\n id: this.monitorID,\n symbol,\n }).then(() =>\n {\n this.removeLoading();\n });\n }\n\n const index = this._symbols.indexOf(displaySymbol);\n if (index > -1)\n {\n this._symbols.splice(index, 1);\n }\n }\n}\n\nexport default MonitorAddSymbolModal;\n","import columns from './columns.json';\nimport BaseTranslationService from '../../../../elements/translator/js/BaseTranslationService';\n\nclass ColumnsTranslationService extends BaseTranslationService\n{\n constructor(locale)\n {\n super();\n this.setLangFile(columns);\n this.setLocale(locale);\n }\n\n getColumnTranslations()\n {\n const translationObject = {};\n\n if (columns[this.locale])\n {\n return columns[this.locale];\n }\n return translationObject;\n }\n}\n\nexport default ColumnsTranslationService;\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {UpdateColumnsRequest} params\n * @returns {Promise|null}\n */\nconst updateColumns = async (params) => getData(`${BASE_ENDPOINT}/UpdateColumns`, 'POST', params);\n\nexport default updateColumns;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} UpdateColumnsRequest\n * @property {number} id\n * @property {array} cols\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * columns: {\n * id: number,\n * name: string\n * };\n * };\n * }} UpdateColumnsResponse\n */\n","import MonitorModal from './MonitorModal';\nimport ColumnsTranslationService from '../resources/ColumnsTranslationService';\nimport updateColumns from '../api/UpdateColumns';\n\nclass MonitorChangeColumnsModal extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-change-columns-modal\"]');\n this.content = this.modal.querySelector('.content');\n this._sortable = this.content.querySelector('#sortable');\n this._list = this.content.querySelector('.box-left ul');\n\n // eslint-disable-next-line no-undef\n const columnsTranslationService = new ColumnsTranslationService(ADVFN.LOCALE);\n this._columns = columnsTranslationService.getColumnTranslations();\n }\n\n setColumns(cols)\n {\n if (typeof cols === 'string')\n {\n this._monitorColumns = cols.split(',').map((str) => parseInt(str, 10));\n }\n else\n {\n this._monitorColumns = cols;\n }\n }\n\n init()\n {\n super.init();\n if (this.modal.classList.contains('mobile'))\n {\n this._initializeMobile();\n }\n else\n {\n this._initializeDesktop();\n }\n }\n\n _initializeDesktop()\n {\n this._bindSaveChangesButton();\n }\n\n _initializeMobile()\n {\n this._mobile = window.MonitorDelight.monitorChangeColumnsModalMobile;\n this._mobile.setColumns(this._monitorColumns);\n this._mobile.setMonitorID(this.monitorID);\n this._mobile.init();\n }\n\n refresh(id, cols)\n {\n if (this.modal.classList.contains('mobile'))\n {\n this._mobile.destroyState();\n this._mobile.setColumns(cols);\n this._mobile.setMonitorID(id);\n }\n else\n {\n this.destroyState();\n this.setMonitorID(id);\n this.setColumns(cols);\n }\n }\n\n destroyState()\n {\n if (this.modal.classList.contains('mobile'))\n {\n this._mobile.destroyState();\n }\n else\n {\n this._list.innerHTML = '';\n this._sortable.innerHTML = '';\n }\n }\n\n bindOpenButton()\n {\n const _this = this;\n this.actionButtons = document.querySelectorAll('#page-monitor-delight .modal-button[data-type=\"monitor-change-columns-modal\"]');\n\n if (this.actionButtons.length && !this.isDisabled)\n {\n this.actionButtons.forEach((item) =>\n {\n item.addEventListener('click', () =>\n {\n _this.modal.classList.add('active');\n _this.initializeState();\n });\n });\n }\n }\n\n initializeState()\n {\n if (this.modal.classList.contains('mobile'))\n {\n this._mobile.bindCheckboxes();\n }\n else\n {\n this._bindCheckboxes();\n this._enableSorting();\n }\n }\n\n /**\n * bind save button and on click collect and send data to UpdateColumns endpoint\n */\n _bindSaveChangesButton()\n {\n const _this = this;\n _this.modal.querySelector('button.save').addEventListener('click', () =>\n {\n _this.addLoading().then(() =>\n {\n const listItems = _this._sortable.querySelectorAll('li');\n const dataKeys = [];\n\n listItems.forEach((item) =>\n {\n const dataKey = item.getAttribute('data-key');\n dataKeys.push(parseInt(dataKey, 10));\n });\n\n _this._monitorColumns = dataKeys;\n _this._updateColumns().then(() =>\n {\n this.modal.classList.remove('active');\n this.destroyState();\n // refresh monitor\n const currentApp = window.jsSession._currentApp;\n currentApp.handleRefresh();\n\n _this.removeLoading();\n });\n });\n });\n }\n\n async _updateColumns()\n {\n const cols = [];\n this._monitorColumns.forEach((value) =>\n {\n cols.push(value);\n });\n return updateColumns({\n id: this.monitorID,\n cols,\n });\n }\n\n _bindCheckboxes()\n {\n const _this = this;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const k in _this._columns)\n {\n const key = parseInt(k, 10);\n const item = _this._columns[key];\n const title = document.createElement('span');\n title.classList.add('title');\n title.innerText = item;\n\n const checkbox = document.createElement('span');\n checkbox.classList.add('checkbox');\n checkbox.setAttribute('data-col', key);\n checkbox.addEventListener('click', () =>\n {\n if (checkbox.classList.contains('checked'))\n {\n checkbox.classList.remove('checked');\n\n // remove item\n _this._removeSortableListItem(key);\n }\n else\n {\n checkbox.classList.add('checked');\n\n // create item\n _this._createSortableListItem(item, key);\n }\n });\n\n const control = document.createElement('div');\n control.classList.add('control');\n\n const listItem = document.createElement('li');\n\n if (this._monitorColumns.indexOf(key) !== -1)\n {\n checkbox.classList.add('checked');\n listItem.setAttribute('data-ord', 1);\n }\n\n control.appendChild(checkbox);\n control.appendChild(title);\n listItem.appendChild(control);\n\n _this._list.appendChild(listItem);\n }\n }\n\n _bindRemoveBtn(item)\n {\n const _this = this;\n item.addEventListener('click', () =>\n {\n const key = item.parentNode.getAttribute('data-key');\n _this._removeSortableListItem(key);\n _this._list.querySelector(`.checkbox[data-col=\"${key}\"]`).classList.remove('checked');\n });\n }\n\n _enableSorting()\n {\n const _this = this;\n\n _this._monitorColumns.forEach((key) =>\n {\n if (key === 44) return;\n _this._createSortableListItem(_this._columns[key], key);\n });\n }\n\n _createSortableListItem(name, key)\n {\n const icon = document.createElement('span');\n icon.classList.add('icon-btn', 'icon-reorder');\n\n const title = document.createElement('span');\n title.classList.add('title');\n title.innerText = name;\n\n const removeBtn = document.createElement('span');\n removeBtn.classList.add('icon-btn');\n removeBtn.classList.add('icon-close-16');\n removeBtn.setAttribute('data-tool', 'remove');\n this._bindRemoveBtn(removeBtn);\n\n const li = document.createElement('li');\n li.appendChild(icon);\n li.appendChild(title);\n li.appendChild(removeBtn);\n li.setAttribute('draggable', true);\n li.setAttribute('data-key', key);\n this._bindDrag(li);\n\n this._sortable.appendChild(li);\n }\n\n _removeSortableListItem(key)\n {\n this._sortable.querySelector(`li[data-key=\"${key}\"]`).remove();\n }\n\n _bindDrag(item)\n {\n const _this = this;\n const scrollableContainer = _this._sortable;\n\n item.addEventListener('dragstart', (event) =>\n {\n _this.draggingElement = item;\n item.classList.add('active');\n event.dataTransfer.effectAllowed = 'move';\n });\n\n item.addEventListener('dragover', (event) =>\n {\n event.preventDefault();\n\n const scrollSpeed = 10; // Adjust the scroll speed as needed\n const scrollThreshold = 20; // Distance from the top or bottom to start scrolling\n\n // Scroll up if near the top\n if (event.clientY < scrollableContainer.getBoundingClientRect().top + scrollThreshold)\n {\n scrollableContainer.scrollTop -= scrollSpeed;\n }\n // Scroll down if near the bottom\n else if (event.clientY > scrollableContainer.getBoundingClientRect().bottom - scrollThreshold)\n {\n scrollableContainer.scrollTop += scrollSpeed;\n }\n\n const targetElement = event.target.closest('li');\n if (targetElement && targetElement !== _this.draggingElement)\n {\n const rect = targetElement.getBoundingClientRect();\n const nextElement = (event.clientY - rect.top > rect.height / 2) ? targetElement.nextSibling : targetElement;\n _this._sortable.insertBefore(_this.draggingElement, nextElement);\n }\n });\n\n item.addEventListener('dragend', () =>\n {\n _this.draggingElement.classList.remove('active');\n _this.draggingElement = null;\n });\n }\n}\n\nexport default MonitorChangeColumnsModal;\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {GetListsRequest} params\n * @returns {Promise|null}\n */\nconst getLists = async (params) =>\n{\n let endpoint = `${BASE_ENDPOINT}/GetLists`;\n if (params)\n {\n const query = Object.keys(params)\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)\n .join('&');\n\n endpoint += `?${query}`;\n }\n return getData(endpoint, 'GET', params);\n};\n\nexport default getLists;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} GetListsRequest\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * defaultList: number,\n * lists: [\n * {\n * id: number,\n * name: string,\n * symbolCount: number,\n * }\n * ];\n * };\n * }} GetListsResponse\n */\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {CreateMonitorRequest} params\n * @returns {Promise|null}\n */\nconst createMonitor = async (params) => getData(`${BASE_ENDPOINT}/CreateMonitor`, 'POST', params);\n\nexport default createMonitor;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} CreateMonitorRequest\n * @property {string} name\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * newList: {\n * id: number,\n * name: string,\n * symbolCount: number,\n * };\n * };\n * }} CreateMonitorResponse\n */\n","import MonitorModal from './MonitorModal';\nimport getLists from '../api/GetLists';\nimport createMonitor from '../api/CreateMonitor';\n\nclass MonitorSelector extends MonitorModal\n{\n constructor()\n {\n super();\n this._box = document.querySelector('#monitor-selector');\n }\n\n init()\n {\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-add-monitor-modal\"]');\n this.content = this.modal.querySelector('.content');\n this._input = this.content.querySelector('input');\n super.init();\n }\n\n initialize()\n {\n this.buildList();\n this._bindSaveChangesButton();\n }\n\n buildList()\n {\n const _this = this;\n const ul = this._box.querySelector('ul');\n this.addLoading(ul).then(() =>\n {\n this.getLists().then((result) =>\n {\n const { lists } = result;\n _this._createList(lists);\n _this._updateSelectedItem();\n _this.removeLoading(ul);\n });\n });\n\n }\n\n async getLists()\n {\n return getLists({\n defaults: true,\n });\n }\n\n _createList(items)\n {\n this._box.querySelector('ul').innerHTML = '';\n items.forEach((item) =>\n {\n this._createListItem(item);\n });\n }\n\n bindOpenButton()\n {\n const _this = this;\n\n this.bindDropdownOpen();\n\n const monitorOpenButton = document.querySelector('#page-monitor-delight .modal-button[data-type=\"monitor-add-monitor-modal\"]');\n if (monitorOpenButton)\n {\n monitorOpenButton.addEventListener('click', () =>\n {\n _this._box.classList.remove('active');\n _this.modal.classList.add('active');\n });\n }\n }\n\n bindCloseButton()\n {\n super.bindCloseButton();\n this.bindDropdownClose();\n }\n\n bindDropdownOpen()\n {\n const monitorSelector = this._box.querySelector('[data-type=\"toggle\"]');\n if (monitorSelector)\n {\n monitorSelector.addEventListener('click', (e) =>\n {\n e.preventDefault();\n this._toggle();\n });\n }\n }\n\n bindDropdownClose()\n {\n const _this = this;\n document.addEventListener('click', (event) =>\n {\n const clickedElement = event.target;\n if (clickedElement !== _this._box && !_this._box.contains(clickedElement))\n {\n if (_this._box.classList.contains('active'))\n {\n _this._toggle();\n }\n }\n });\n }\n\n destroyState()\n {\n this._input.value = '';\n const msg = this._input.parentNode.querySelector('span.error-msg');\n if (msg) msg.remove();\n }\n\n _toggle()\n {\n this._box.classList.toggle('active');\n }\n\n _bindSaveChangesButton()\n {\n const _this = this;\n _this.modal.querySelector('button.save').addEventListener('click', () =>\n {\n if (_this._input.value !== '')\n {\n const msg = _this._input.parentNode.querySelector('span.error-msg');\n if (msg) msg.remove();\n\n this.addLoading().then(() =>\n {\n _this._createMonitor()\n .then((result) =>\n {\n const item = result.newList;\n this.modal.classList.remove('active');\n this.destroyState();\n this.setMonitorID(item.id);\n this._createListItem(item);\n this._openMonitor(item.id, item.name, true);\n this._updateURLParameter(item.id);\n this._updateTitle(item.name);\n this._updateSelectedItem();\n this.removeLoading();\n }).catch((error) =>\n {\n if (error.code === 604)\n {\n this._showError(error.message);\n console.log(error.message);\n }\n });\n });\n }\n else\n {\n this._showError(this.lang.getTranslations('invalid_name_msg'));\n }\n });\n }\n\n _showError(error)\n {\n this.removeLoading();\n const msg = document.createElement('span');\n msg.innerText = error;\n msg.classList.add('error-msg');\n this._input.parentNode.appendChild(msg);\n }\n\n _createMonitor()\n {\n return createMonitor({\n name: this._input.value,\n });\n }\n\n _createListItem(params)\n {\n const li = document.createElement('li');\n const button = document.createElement('button');\n button.classList.add('btn');\n button.classList.add('link');\n button.setAttribute('data-key', params.id);\n button.setAttribute('data-fixed', Number.isNaN(parseFloat(params.id)));\n button.innerText = params.name;\n li.appendChild(button);\n this.bindLinkItem(button);\n const ul = this._box.querySelector('ul');\n ul.appendChild(li);\n }\n\n _bindListButtons()\n {\n const _this = this;\n const links = _this._box.querySelectorAll('.btn.link');\n if (links)\n {\n links.forEach((item) =>\n {\n _this.bindLinkItem(item);\n });\n }\n }\n\n bindLinkItem(item)\n {\n item.addEventListener('click', () =>\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.showLoading();\n\n const id = item.getAttribute('data-key');\n const isFixed = item.getAttribute('data-fixed');\n const title = item.innerText;\n this._toggle();\n setTimeout(() =>\n {\n this._updateMonitor(id, title, isFixed);\n }, 1000);\n });\n }\n\n _updateMonitor(id, title, isFixed = false)\n {\n this.setMonitorID(id);\n this._openMonitor(id, title, false, isFixed);\n this._updateURLParameter(id);\n this._updateTitle(title);\n this._updateSelectedItem();\n this.removeLoading(document.getElementById('page-monitor-delight'));\n }\n\n _openMonitor(id, title, openModal = false, isFixed = false)\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.handleMonitorLoad(id, isFixed);\n\n window.MonitorDelight.monitorEdit.closeMonitorEdit();\n\n if (isFixed !== 'true')\n {\n this._enableActions();\n window.MonitorDelight.monitorChangeColumnsModal.refresh(id, currentApp._config.columns);\n window.MonitorDelight.monitorAddSymbolModal.clearState();\n window.MonitorDelight.monitorAddSymbolModal.setSymbols(currentApp._config.symbols);\n window.MonitorDelight.monitorDeleteModal.setMonitorID(id);\n window.MonitorDelight.monitorUpdateModal.setMonitorID(id);\n window.MonitorDelight.monitorUpdateModal.setValue(title);\n window.MonitorDelight.monitorUpdateModal.refreshInputValue();\n window.MonitorDelight.monitorSettings.setMonitorID(id);\n window.MonitorDelight.monitorSettings._updateSetDefaultListToggleState();\n\n if (window.MonitorDelight.monitorNewsAlertModal)\n {\n window.MonitorDelight.monitorNewsAlertModal.refresh(id);\n }\n\n document.querySelector('.monitor-container').classList.remove('fixed-monitor-container');\n }\n else\n {\n this._disableActions();\n document.querySelector('.monitor-container').classList.add('fixed-monitor-container');\n }\n this._updateUrls(id);\n this.updatePageTitle(title);\n if (!currentApp._config.symbols.length && openModal)\n {\n window.MonitorDelight.monitorAddSymbolModal.open();\n }\n }\n\n _updateUrls(id)\n {\n const links = document.querySelectorAll('#monitor-menu .submenu li a');\n if (links)\n {\n links.forEach((link) =>\n {\n const href = link.getAttribute('href').split('?');\n let url = href[0];\n url += `?mid=${id}`;\n link.setAttribute('href', url);\n });\n }\n }\n\n _updateURLParameter(id)\n {\n const currentURL = new URL(window.location.href);\n\n const urlParams = new URLSearchParams(currentURL.search);\n\n urlParams.set('mid', id);\n\n const updatedUrl = `${currentURL.origin + currentURL.pathname}?${urlParams.toString()}`;\n\n window.history.replaceState({}, '', updatedUrl);\n\n }\n\n _updateTitle(title)\n {\n this._box.querySelector('h3').innerText = title;\n }\n\n _updateItem(id, title)\n {\n this._box.querySelector(`button[data-key=\"${id}\"]`).innerText = title;\n }\n\n _updateSelectedItem()\n {\n const selected = this._box.querySelector('li.selected');\n if (selected)\n {\n selected.classList.remove('selected');\n }\n this._box.querySelector(`button[data-key=\"${this.monitorID}\"]`).parentNode.classList.add('selected');\n }\n\n _disableActions()\n {\n window.MonitorDelight.monitorAddSymbolModal.disableAction();\n window.MonitorDelight.monitorChangeColumnsModal.disableAction();\n window.MonitorDelight.monitorEdit.disableAction();\n window.MonitorDelight.monitorSettings.disableActions();\n window.MonitorDelight.monitorSettingsMobile.disableActions();\n window.MonitorDelight.monitorEditModal.disableAction();\n }\n\n _enableActions()\n {\n window.MonitorDelight.monitorAddSymbolModal.enableAction();\n window.MonitorDelight.monitorChangeColumnsModal.enableAction();\n window.MonitorDelight.monitorEdit.enableAction();\n window.MonitorDelight.monitorSettings.enableActions();\n window.MonitorDelight.monitorSettingsMobile.enableActions();\n window.MonitorDelight.monitorEditModal.enableAction();\n }\n}\n\nexport default MonitorSelector;\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {SetDefaultListRequest} params\n * @returns {Promise|null}\n */\nconst setDefaultList = async (params) => getData(`${BASE_ENDPOINT}/SetDefaultList`, 'POST', params);\n\nexport default setDefaultList;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} SetDefaultListRequest\n * @property {number} id\n * @property {boolean} async\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * listID: number\n * };\n * }} SetDefaultListResponse\n */\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {SetConfigRequest} params\n * @returns {Promise|null}\n */\nconst setConfig = async (params) => getData(`${BASE_ENDPOINT}/SetConfig`, 'POST', params);\n\nexport default setConfig;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} SetConfigRequest\n * @property {string} name\n * @property {number} value\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * config: number\n * };\n * }} SetConfigResponse\n */\n","import setDefaultList from '../api/SetDefaultList';\nimport setConfig from '../api/SetConfig';\n\nclass MonitorSettings\n{\n constructor()\n {\n this._button = document.querySelectorAll('button[data-type=\"monitor-settings-modal\"]');\n this._settingsContainer = document.querySelector('#monitor-settings-container');\n this._actions = document.querySelector('.monitor-actions');\n this.monitorID = null;\n this.defaultMonitorID = null;\n this.theme = null;\n }\n\n init()\n {\n this._bindOpenButton();\n this._bindClose();\n this._initializeToggles();\n this._initializeFullscreenButton();\n this._initializeCSVButton();\n }\n\n /**\n * Sets the currently loaded monitor ID.\n * @param id\n */\n setMonitorID(id)\n {\n this.monitorID = parseInt(id, 10);\n }\n\n /**\n * Sets the Default Monitor ID.\n * @param id\n */\n setDefaultMonitorId(id)\n {\n this.defaultMonitorID = parseInt(id, 10);\n }\n\n /**\n * Sets the currently selected theme name.\n * @param theme\n */\n setTheme(theme)\n {\n this.theme = theme;\n }\n\n disableActions()\n {\n this._settingsContainer.querySelector('.settings').classList.add('fixed-monitor');\n }\n\n enableActions()\n {\n this._settingsContainer.querySelector('.settings').classList.remove('fixed-monitor');\n }\n\n /**\n * FullScreen OPEN Button functionality.\n * On click page will enter into a full-screen mode.\n */\n _initializeFullscreenButton()\n {\n const btn = this._actions.querySelector('button[data-type=\"monitor-fullscreen\"]');\n const container = document.getElementById('page-monitor-delight');\n if (btn)\n {\n document.addEventListener('fullscreenchange', this._exitFullscreenHandler);\n document.addEventListener('webkitfullscreenchange', this._exitFullscreenHandler);\n document.addEventListener('mozfullscreenchange', this._exitFullscreenHandler);\n document.addEventListener('MSFullscreenChange', this._exitFullscreenHandler);\n btn.addEventListener('click', () =>\n {\n if (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement)\n {\n this._exitFullscreenHandler();\n document.exitFullscreen();\n }\n else\n {\n document.getElementById('page-monitor-delight').classList.add('fullscreen');\n if (container.requestFullscreen)\n {\n container.requestFullscreen();\n }\n else if (container.mozRequestFullScreen)\n {\n // Firefox\n container.mozRequestFullScreen();\n }\n else if (container.webkitRequestFullscreen)\n {\n // Chrome, Safari and Opera\n container.webkitRequestFullscreen();\n }\n else if (container.msRequestFullscreen)\n {\n // IE/Edge\n container.msRequestFullscreen();\n }\n }\n });\n }\n }\n\n /**\n * FullScreen EXIT functionality.\n * On click page will enter into a full-screen mode.\n */\n _exitFullscreenHandler()\n {\n if (!document.fullscreenElement && !document.webkitIsFullScreen && !document.mozFullScreen && !document.msFullscreenElement)\n {\n document.getElementById('page-monitor-delight').classList.remove('fullscreen');\n }\n }\n\n /**\n * Download CSV button\n * This will call toCSV() method from jstools session\n */\n _initializeCSVButton()\n {\n const btn = document.querySelector('.monitor-actions button[data-type=\"monitor-csv\"]');\n if (btn)\n {\n btn.addEventListener('click', () =>\n {\n window.jsSession._currentApp.toCSV();\n });\n }\n }\n\n _bindClose()\n {\n window.addEventListener('click', (e) =>\n {\n const buttons = Array.from(this._button);\n const isButtonClicked = buttons.some((button) => button.contains(e.target));\n\n if (!this._settingsContainer.contains(e.target) && !isButtonClicked)\n {\n this._settingsContainer.classList.remove('active');\n }\n });\n\n const closeBtn = this._settingsContainer.querySelector('.settings-close');\n if (closeBtn)\n {\n closeBtn.addEventListener('click', () =>\n {\n this._settingsContainer.classList.remove('active');\n });\n }\n\n this._settingsContainer.addEventListener('click', (e) =>\n {\n if (this._settingsContainer.classList.contains('active'))\n {\n if (e.target === this._settingsContainer)\n {\n this._settingsContainer.classList.remove('active');\n }\n }\n });\n }\n\n /**\n * Initialize settings toggles and bind events.\n */\n _initializeToggles()\n {\n // Set a Default list Toggle\n this._bindSetDefaultListToggle();\n this._updateSetDefaultListToggleState();\n\n // Compact View Toggle\n this._bindCompactViewToggle();\n\n // Config params\n this._bindConfigToggle();\n\n // Theme params\n this._bindThemeToggles();\n this._updateThemeToggleState();\n }\n\n /**\n * Attaches an event listener to handle toggling the \"Set as default list\" setting.\n */\n _bindSetDefaultListToggle()\n {\n const toggleSetDefault = this._settingsContainer.querySelector('#toggle-set-default');\n toggleSetDefault.addEventListener('change', () =>\n {\n const setDefault = toggleSetDefault.checked;\n\n if (setDefault)\n {\n this.addLoading().then(() =>\n {\n setDefaultList({\n id: this.monitorID,\n async: 'true',\n }).then((result) =>\n {\n this.defaultMonitorID = result.listID;\n this.removeLoading();\n this._closeSettings();\n });\n });\n }\n });\n }\n\n _updateSetDefaultListToggleState()\n {\n const toggleSetDefault = this._settingsContainer.querySelector('#toggle-set-default');\n toggleSetDefault.checked = this.monitorID === this.defaultMonitorID;\n }\n\n /**\n * Attaches an event listener to handle toggling the \"Compact View\" setting.\n */\n _bindCompactViewToggle()\n {\n const toggleCompact = this._settingsContainer.querySelector('#toggle-compact');\n const container = document.querySelector('.monitor-container');\n toggleCompact.addEventListener('change', () =>\n {\n container.classList.toggle('compact-view');\n const compact = toggleCompact.checked ? 1 : 0;\n this.addLoading().then(() =>\n {\n setConfig({\n name: 'cfg_mon_compact',\n value: compact,\n }).then(() =>\n {\n this._closeSettings();\n this.removeLoading();\n });\n });\n });\n }\n\n /**\n * Attaches an event listener to handle toggling the \"Group by Exchange\" and \"Order By Symbol\" setting.\n */\n _bindConfigToggle()\n {\n const toggle = this._settingsContainer.querySelectorAll('.monitor-config');\n if (toggle)\n {\n toggle.forEach((item) =>\n {\n item.addEventListener('change', () =>\n {\n const name = item.getAttribute('name');\n const value = item.checked ? 1 : 0;\n this.addLoading().then(() =>\n {\n setConfig({\n name: item.getAttribute('name'),\n value: item.checked ? 1 : 0,\n }).then(() =>\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.handleConfigRefresh(name, value);\n this.removeLoading();\n this._closeSettings();\n });\n });\n });\n });\n }\n }\n\n /**\n * Attaches an event listener to handle toggling the \"Table View\" setting.\n */\n _bindThemeToggles()\n {\n const radioButtons = document.querySelectorAll('input[name=\"cfg_mon_theme\"]');\n\n radioButtons.forEach((radio) =>\n {\n radio.addEventListener('change', (event) =>\n {\n const selectedValue = event.target.value;\n this.addLoading().then(() =>\n {\n setConfig({\n name: 'cfg_mon_theme',\n value: selectedValue,\n }).then(() =>\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.handleConfigRefresh('cfg_mon_theme', selectedValue);\n this._updateTheme(selectedValue);\n this.removeLoading();\n\n this._closeSettings();\n });\n });\n });\n });\n }\n\n _closeSettings()\n {\n this._settingsContainer.classList.remove('active');\n }\n\n _updateTheme(theme)\n {\n if (theme === 'default') theme = 'light';\n document.body.setAttribute('data-theme', theme);\n this._updateThemeIcons(theme);\n this._updateLogoImageForFullscreenMode(theme);\n }\n\n _updateThemeIcons(theme)\n {\n const imgElement = document.querySelector('img.theme-dark');\n let path = '/common/watchlist/src/img/view-modern-dark.svg';\n if (theme === 'dark')\n {\n path = '/common/watchlist/src/img/view-modern-dark-v2.svg';\n }\n imgElement.setAttribute('src', path);\n }\n\n _updateLogoImageForFullscreenMode(theme)\n {\n const imgElement = document.querySelector('.monitor-actions .site-logo img');\n let path = '/common/header/svg/advfn-dark-2.svg';\n if (theme === 'dark')\n {\n path = '/common/header/svg/advfn-white-2.svg';\n }\n imgElement.setAttribute('src', path);\n }\n\n _updateThemeToggleState()\n {\n const radioButtons = document.querySelectorAll('input[name=\"cfg_mon_theme\"]');\n\n radioButtons.forEach((radio) =>\n {\n if (radio.value === this.theme)\n {\n radio.checked = true;\n this._updateThemeIcons(this.theme);\n this._updateLogoImageForFullscreenMode(this.theme);\n }\n });\n }\n\n _bindOpenButton()\n {\n const _this = this;\n\n const btns = document.querySelectorAll('#page-monitor-delight button.more-settings');\n if (btns.length)\n {\n btns.forEach((btn) =>\n {\n btn.addEventListener('click', () =>\n {\n if (btn.classList.contains('more-settings-mobile'))\n {\n _this._settingsContainer.classList.add('active');\n }\n else\n {\n _this._toggle();\n }\n });\n });\n }\n }\n\n _toggle()\n {\n this._settingsContainer.classList.toggle('active');\n }\n\n addLoading()\n {\n return new Promise((resolve) =>\n {\n const loading = document.createElement('div');\n loading.classList.add('modal-loading');\n\n const spinner = document.createElement('span');\n spinner.classList.add('fa', 'fa-spinner', 'fa-spin');\n\n loading.appendChild(spinner);\n this._settingsContainer.appendChild(loading);\n this._settingsContainer.classList.add('loading');\n\n setTimeout(() =>\n {\n resolve();\n }, 100);\n });\n }\n\n removeLoading()\n {\n const loading = this._settingsContainer.querySelector('.modal-loading');\n if (loading)\n {\n loading.remove();\n this._settingsContainer.classList.remove('loading');\n }\n }\n}\n\nexport default MonitorSettings;\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {DeleteListRequest} params\n * @returns {Promise|null}\n */\nconst deleteList = async (params) => getData(`${BASE_ENDPOINT}/DeleteList`, 'POST', params);\n\nexport default deleteList;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} DeleteListRequest\n * @property {number} id\n * @property {boolean} async\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * list: {\n * id: number,\n * name: string,\n * defaultMonId: number,\n * };\n * };\n * }} DeleteListResponse\n */\n","import MonitorModal from './MonitorModal';\nimport deleteList from '../api/DeleteList';\n\nclass MonitorDeleteModal extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-delete-monitor-modal\"]');\n this.monitorID = null;\n this.init();\n }\n\n initialize()\n {\n this.bindSaveButton();\n }\n\n bindOpenButton()\n {\n const _this = this;\n const monitorDeleteButton = document.querySelector('#page-monitor-delight .settings button[data-type=\"monitor-delete-monitor-modal\"]');\n if (monitorDeleteButton)\n {\n monitorDeleteButton.addEventListener('click', () =>\n {\n document.querySelector('#page-monitor-delight .settings').classList.remove('active');\n\n if (this.modal.querySelector('.monitor-title'))\n {\n this.modal.querySelector('.monitor-title h4').innerText = document.querySelector('#monitor-selector h3').innerText;\n }\n\n _this.toggle();\n });\n }\n }\n\n bindSaveButton()\n {\n this.modal.querySelector('button.delete').addEventListener('click', () =>\n {\n this.addLoading().then(() =>\n {\n this._delete().then((result) =>\n {\n const { id, name, defaultMonId } = result.list;\n this.modal.classList.remove('active');\n window.MonitorDelight.monitorSelector.buildList();\n window.MonitorDelight.monitorSelector._updateMonitor(id, name);\n window.MonitorDelight.monitorSettings.setDefaultMonitorId(defaultMonId);\n this.removeLoading();\n });\n });\n });\n }\n\n _delete()\n {\n return deleteList({\n id: this.monitorID,\n async: 'true',\n });\n }\n}\n\nexport default MonitorDeleteModal;\n","import { BASE_ENDPOINT, getData } from './ApiWrapper';\n\n/**\n * @param {RenameListRequest} params\n * @returns {Promise|null}\n */\nconst renameList = async (params) => getData(`${BASE_ENDPOINT}/RenameList`, 'POST', params);\n\nexport default renameList;\n\n/** * TYPE DEFINITIONS ** */\n\n/**\n * @typedef {Object} RenameListRequest\n * @property {number} id\n * @property {string} name\n */\n\n/**\n * @typedef {{\n * status: string;\n * result: {\n * list: {\n * id: number,\n * name: string\n * };\n * };\n * }} RenameListResponse\n */\n","import MonitorModal from './MonitorModal';\nimport renameList from '../api/RenameList';\n\nclass MonitorUpdateModal extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-update-monitor-modal\"]');\n this.input = this.modal.querySelector('.content input');\n this.init();\n }\n\n setValue(value)\n {\n this.input.value = value;\n }\n\n initialize()\n {\n this._bindSaveChangesButton();\n }\n\n destroyState()\n {\n const msg = this.input.parentNode.querySelector('span.error-msg');\n if (msg) msg.remove();\n }\n\n bindOpenButton()\n {\n const monitorUpdateButton = document.querySelector('#page-monitor-delight .settings button[data-type=\"monitor-update-monitor-modal\"]');\n if (monitorUpdateButton)\n {\n monitorUpdateButton.addEventListener('click', () =>\n {\n document.querySelector('#monitor-settings-container').classList.remove('active');\n this.toggle();\n });\n }\n\n const monitorUpdate = document.querySelector('#page-monitor-delight .settings div[data-type=\"monitor-update-monitor-modal\"]');\n if (monitorUpdate)\n {\n monitorUpdate.addEventListener('click', () =>\n {\n document.querySelector('#monitor-settings-container').classList.remove('active');\n this.toggle();\n });\n }\n }\n\n refreshInputValue()\n {\n document.getElementById('input-edit-monitor').innerText = this.input.value;\n }\n\n _bindSaveChangesButton()\n {\n this.modal.querySelector('button.save').addEventListener('click', () =>\n {\n if (this.input.value !== '')\n {\n this.destroyState();\n this.addLoading().then(() =>\n {\n this._edit().then(() =>\n {\n this.modal.classList.remove('active');\n this.refreshInputValue();\n window.MonitorDelight.monitorSelector._updateTitle(this.input.value);\n window.MonitorDelight.monitorSelector._updateItem(this.monitorID, this.input.value);\n this.updatePageTitle(this.input.value);\n this.removeLoading();\n });\n });\n }\n else\n {\n const msg = document.createElement('span');\n msg.innerText = this.lang.getTranslation('invalid_name_msg');\n msg.classList.add('error-msg');\n this.input.parentNode.appendChild(msg);\n }\n });\n }\n\n _edit()\n {\n return renameList({\n id: this.monitorID,\n name: this.input.value,\n });\n }\n}\n\nexport default MonitorUpdateModal;\n","import TranslationService from '../resources/TranslationService';\n\nclass MonitorEdit\n{\n constructor()\n {\n this._actions = document.querySelector('.monitor-actions .actions');\n this._button = this._actions.querySelector('.monitor-actions button[data-type=\"monitor-edit\"]');\n this._buttonSave = null;\n this._buttonClose = null;\n this._buttonEditStocks = null;\n // eslint-disable-next-line no-undef\n this.lang = new TranslationService(ADVFN.LOCALE);\n this.init();\n }\n\n init()\n {\n if (!this._button) return;\n\n this._bindButton();\n }\n\n disableAction()\n {\n if (this._button) this._button.setAttribute('disabled', 'disabled');\n }\n\n enableAction()\n {\n if (this._button) this._button.removeAttribute('disabled');\n }\n\n _bindButton()\n {\n const _this = this;\n\n _this._button.addEventListener('click', (e) =>\n {\n e.preventDefault();\n document.body.classList.add('monitor-edit-view');\n this._initEditStocksButton();\n this._initCancelButton();\n this._initSaveButton();\n });\n }\n\n _initCancelButton()\n {\n if (this._buttonClose)\n {\n this._actions.appendChild(this._buttonClose);\n return;\n }\n const icon = document.createElement('span');\n icon.classList.add('btn-icon', 'icon-close-16');\n\n this._buttonClose = document.createElement('button');\n this._buttonClose.classList.add('btn', 'edit-list-btn');\n this._buttonClose.appendChild(icon);\n const buttonText = document.createTextNode(this.lang.getTranslation('cancel'));\n this._buttonClose.appendChild(buttonText);\n\n this._buttonClose.addEventListener('click', () =>\n {\n this.closeMonitorEdit();\n });\n\n this._actions.appendChild(this._buttonClose);\n }\n\n closeMonitorEdit()\n {\n if (!document.body.classList.contains('monitor-edit-view')) return;\n\n // close modal\n document.body.classList.remove('monitor-edit-view');\n this._buttonSave.remove();\n this._buttonClose.remove();\n this._buttonEditStocks.remove();\n\n // refresh monitor with prev data\n const currentApp = window.jsSession._currentApp;\n const appSymbols = currentApp._config.symbols;\n const symbols = currentApp._symbolsList.getItems();\n const diff = this._getDiff(appSymbols, symbols);\n if (diff.length)\n {\n currentApp.handleAddSymbols(diff);\n }\n }\n\n _initSaveButton()\n {\n if (this._buttonSave)\n {\n this._actions.appendChild(this._buttonSave);\n return;\n }\n\n const icon = document.createElement('span');\n icon.classList.add('btn-icon', 'icon-save-16');\n\n this._buttonSave = document.createElement('button');\n this._buttonSave.classList.add('btn', 'edit-list-btn');\n this._buttonSave.appendChild(icon);\n const buttonText = document.createTextNode(this.lang.getTranslation('save_changes'));\n this._buttonSave.appendChild(buttonText);\n\n this._buttonSave.addEventListener('click', () =>\n {\n // close modal\n document.body.classList.remove('monitor-edit-view');\n this._buttonSave.remove();\n this._buttonClose.remove();\n this._buttonEditStocks.remove();\n\n // update symbols list\n const currentApp = window.jsSession._currentApp;\n const symbols = currentApp._symbolsList.getItems();\n const monSymbols = this._getSymbolsList(symbols);\n window.MonitorDelight.monitorAddSymbolModal.setSymbols(monSymbols);\n window.MonitorDelight.monitorAddSymbolModal.clearState();\n });\n\n this._actions.appendChild(this._buttonSave);\n }\n\n _initEditStocksButton()\n {\n if (this._buttonEditStocks)\n {\n this._actions.appendChild(this._buttonEditStocks);\n return;\n }\n\n const icon = document.createElement('span');\n icon.classList.add('btn-icon', 'icon-edit-16');\n\n this._buttonEditStocks = document.createElement('button');\n this._buttonEditStocks.classList.add('btn', 'edit-list-btn');\n this._buttonEditStocks.appendChild(icon);\n const buttonText = document.createTextNode(this.lang.getTranslation('edit_stocks'));\n this._buttonEditStocks.appendChild(buttonText);\n\n this._buttonEditStocks.addEventListener('click', () =>\n {\n // redirect user to edit stocks page\n const mid = window.MonitorDelight.monitorSelector.getMonitorID();\n window.location.href = `/p.php?pid=m_import&mid=${mid}`;\n });\n\n this._actions.appendChild(this._buttonEditStocks);\n }\n\n _getSymbolsList(symbols)\n {\n const arr = Object.values(symbols).map((value) => value._symbol._displaySymbol);\n return arr.join('|');\n }\n\n _getDiff(array1, array2)\n {\n const array2Keys = Object.keys(array2);\n return array1.filter((item) => !array2Keys.includes(item.feed_symbol));\n }\n}\n\nexport default MonitorEdit;\n","import MonitorSelector from '../modals/MonitorSelector';\n\nclass ChartSettings\n{\n constructor()\n {\n this._actions = document.querySelector('#page-monitor-charts-delight .charts-actions');\n this._chartTypeContainer = this._actions.querySelector('.chart-type');\n this._chartResolutionContainer = this._actions.querySelector('.chart-resolution');\n this._resolutionsList = this._chartResolutionContainer.querySelector('.list');\n this._resolutionToggle = this._chartResolutionContainer.querySelector('.title');\n this.init();\n }\n\n init()\n {\n // initialize resolution dropdown\n this._initChartResolutionDropdownToggle();\n this._bindResolutionButtons();\n\n // initialize chart type switcher\n this._initChartTypeSwitcher();\n\n // bind close on outside of boxes\n this._bindClose();\n\n // initialize monitor selector dropdown\n const selector = new MonitorSelector();\n selector.bindDropdownOpen();\n selector.bindDropdownClose();\n }\n\n _initChartResolutionDropdownToggle()\n {\n if (this._resolutionToggle)\n {\n this._resolutionToggle.addEventListener('click', (e) =>\n {\n e.preventDefault();\n this._chartResolutionContainer.classList.toggle('active');\n });\n }\n }\n\n _bindResolutionButtons()\n {\n const elements = this._resolutionsList.querySelectorAll('li');\n if (elements)\n {\n elements.forEach((item) =>\n {\n item.addEventListener('click', () =>\n {\n const { value } = item.querySelector('input');\n this._resolutionToggle.innerText = item.querySelector('span').innerText;\n this._chartResolutionContainer.classList.remove('active');\n\n Object.values(window.ADVFN_CHARTS_MANAGER._charts).forEach((chart) =>\n {\n chart._headerContainer.querySelector('.chart-info').remove();\n chart.resetState();\n chart.setResolution(value);\n chart._dataReady = false;\n this._updateUrl('resolution', value);\n this._updatePaging('resolution', value);\n });\n });\n });\n }\n }\n\n _bindClose()\n {\n window.addEventListener('click', (e) =>\n {\n if (!this._resolutionsList.contains(e.target) && !this._resolutionToggle.contains(e.target))\n {\n this._chartResolutionContainer.classList.remove('active');\n }\n });\n }\n\n _initChartTypeSwitcher()\n {\n const elements = this._chartTypeContainer.querySelectorAll('div[data-action=\"toggle\"]');\n if (elements)\n {\n elements.forEach((item) =>\n {\n item.addEventListener('click', (e) =>\n {\n e.preventDefault();\n this._chartTypeContainer.querySelector('div.active').classList.remove('active');\n item.classList.add('active');\n\n const type = item.getAttribute('data-type');\n\n Object.values(window.ADVFN_CHARTS_MANAGER._charts).forEach((chart) =>\n {\n chart.setChartType(type);\n chart._prepareData();\n chart._needsRefresh = true;\n });\n\n this._updateUrl('type', type);\n this._updatePaging('type', type);\n });\n });\n }\n }\n\n _updateUrl(key, val)\n {\n const url = new URL(window.location);\n const params = new URLSearchParams(url.search);\n params.set(key, val);\n url.search = params.toString();\n window.history.replaceState(null, '', url);\n }\n\n _updatePaging(key, val)\n {\n const pagingLinks = document.querySelectorAll('.pagination li a');\n if (pagingLinks)\n {\n pagingLinks.forEach((link) =>\n {\n const url = new URL(link.href);\n const params = new URLSearchParams(url.search);\n\n params.set(key, val);\n\n // Update the link's href attribute with the new URL\n url.search = params.toString();\n link.href = url.toString();\n });\n }\n }\n}\n\nexport default ChartSettings;\n","import MonitorSelector from '../modals/MonitorSelector';\n\nclass MonitorNews\n{\n constructor()\n {\n this.init();\n }\n\n init()\n {\n // initialize monitor selector dropdown\n const selector = new MonitorSelector();\n selector.bindDropdownOpen();\n selector.bindDropdownClose();\n }\n}\n\nexport default MonitorNews;\n","import MonitorModal from './MonitorModal';\n\nclass MonitorSettingsMobile extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-settings\"]');\n this.content = this.modal.querySelector('.content');\n }\n\n bindOpenButton()\n {\n const btn = document.querySelector('#page-monitor-delight button[data-type=\"monitor-settings-modal-mobile\"]');\n if (btn)\n {\n btn.addEventListener('click', () =>\n {\n this.toggle();\n });\n }\n }\n\n initialize()\n {\n const settingButtons = this.content.querySelectorAll('button');\n if (settingButtons.length)\n {\n settingButtons.forEach((btn) =>\n {\n btn.addEventListener('click', () =>\n {\n this.modal.classList.remove('active');\n });\n });\n }\n }\n\n disableActions()\n {\n this.modal.classList.add('fixed-monitor');\n }\n\n enableActions()\n {\n this.modal.classList.remove('fixed-monitor');\n }\n}\n\nexport default MonitorSettingsMobile;\n","import MonitorModal from './MonitorModal';\n\nclass MonitorEditModal extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-edit-modal\"]');\n if (this.modal)\n {\n this.content = this.modal.querySelector('.content table');\n this.monitorID = null;\n this._symbols = null;\n this._symbolsToRemove = [];\n this.init();\n }\n }\n\n initialize()\n {\n this.bindSaveButton();\n }\n\n destroyState()\n {\n this._symbols = null;\n this._symbolsToRemove = [];\n }\n\n bindOpenButton()\n {\n const _this = this;\n this.actionButtons = document.querySelectorAll('#page-monitor-delight button[data-type=\"monitor-edit-modal\"]');\n if (this.actionButtons.length && !this.isDisabled)\n {\n this.actionButtons.forEach((item) =>\n {\n item.addEventListener('click', () =>\n {\n const currentApp = window.jsSession._currentApp;\n this._loadList(currentApp._config.symbols);\n this._symbols = [...currentApp._config.symbols];\n _this.toggle();\n });\n });\n }\n }\n\n bindSaveButton()\n {\n this.modal.querySelector('button.save').addEventListener('click', () =>\n {\n this.addLoading().then(() =>\n {\n const currentApp = window.jsSession._currentApp;\n currentApp.handleRemoveSymbols(this._symbolsToRemove);\n const symbols = currentApp._symbolsList.getItems();\n const monSymbols = this._getSymbolsList(symbols);\n window.MonitorDelight.monitorAddSymbolModal.setSymbols(monSymbols);\n window.MonitorDelight.monitorAddSymbolModal.clearState();\n this.removeLoading();\n });\n });\n }\n\n _getSymbolsList(symbols)\n {\n const arr = Object.values(symbols).map((value) => value._symbol._displaySymbol);\n return arr.join('|');\n }\n\n _loadList(list)\n {\n this.content.innerHTML = '';\n\n list.forEach((stock) =>\n {\n const item = this._createListItem(stock);\n this.content.appendChild(item);\n });\n }\n\n _createListItem(item)\n {\n const itemRow = document.createElement('tr');\n itemRow.classList.add('result-row');\n\n // Create logo\n const colLogo = document.createElement('td');\n colLogo.classList.add('col-logo');\n const img = document.createElement('img');\n img.setAttribute('src', item.logo);\n img.setAttribute('alt', item.short_name);\n colLogo.appendChild(img);\n\n // Create Title\n const colTitle = document.createElement('td');\n colTitle.classList.add('col-title');\n\n const market = document.createElement('span');\n if (item.display_market)\n {\n market.innerText = item.display_market;\n }\n\n const symbol = document.createElement('h3');\n symbol.innerText = item.symbol;\n\n const title = document.createElement('div');\n title.innerText = item.name;\n\n symbol.appendChild(market);\n colTitle.appendChild(symbol);\n colTitle.appendChild(title);\n\n // Create Actions\n const colAction = document.createElement('td');\n colAction.classList.add('col-action');\n const btn = document.createElement('button');\n btn.setAttribute('data-symbol', item.display_symbol);\n btn.setAttribute('data-feed-symbol', item.feed_symbol);\n this._bindListButton(btn);\n colAction.appendChild(btn);\n\n itemRow.appendChild(colLogo);\n itemRow.appendChild(colTitle);\n itemRow.appendChild(colAction);\n\n return itemRow;\n }\n\n _bindListButton(btn)\n {\n btn.addEventListener('click', () =>\n {\n const symbol = btn.getAttribute('data-symbol');\n const index = this._symbols.findIndex((item) => item.display_symbol === symbol);\n\n if (index !== -1)\n {\n this._symbolsToRemove.push(this._symbols[index]);\n btn.parentNode.parentNode.remove();\n }\n });\n }\n}\n\nexport default MonitorEditModal;\n","import MonitorChangeColumnsModal from './MonitorChangeColumnsModal';\n\nclass MonitorChangeColumnsModalMobile extends MonitorChangeColumnsModal\n{\n init()\n {\n this._list = this.content.querySelector('.box ul');\n this._bindSaveButton();\n }\n\n destroyState()\n {\n this._list.innerHTML = '';\n }\n\n _bindSaveButton()\n {\n const _this = this;\n _this.modal.querySelector('button.save').addEventListener('click', () =>\n {\n _this.addLoading().then(() =>\n {\n const items = this._list.querySelectorAll('.checkbox.checked');\n const dataKeys = [];\n items.forEach((item) =>\n {\n const dataKey = item.getAttribute('data-col');\n dataKeys.push(parseInt(dataKey, 10));\n });\n\n _this._monitorColumns = dataKeys;\n _this._updateColumns().then(() =>\n {\n this.modal.classList.remove('active');\n // this.destroyState();\n // refresh monitor\n const currentApp = window.jsSession._currentApp;\n currentApp.handleRefresh();\n\n _this.removeLoading();\n });\n });\n });\n }\n\n _getColumns()\n {\n const sortedObj = {};\n this._monitorColumns.forEach((key) =>\n {\n if (this._columns.hasOwnProperty(key))\n {\n sortedObj[`_${key}`] = this._columns[key];\n }\n });\n Object.keys(this._columns).forEach((key) =>\n {\n if (!sortedObj.hasOwnProperty(key))\n {\n sortedObj[`_${key}`] = this._columns[key];\n }\n });\n\n return sortedObj;\n }\n\n bindCheckboxes()\n {\n if (this._list.innerHTML !== '') return;\n const _this = this;\n const cols = this._getColumns();\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const k in cols)\n {\n const key = parseInt(k.substring(1), 10);\n const item = _this._columns[key];\n const title = document.createElement('span');\n title.classList.add('title');\n title.innerText = item;\n\n const checkbox = document.createElement('span');\n checkbox.classList.add('checkbox');\n checkbox.setAttribute('data-col', key);\n checkbox.addEventListener('click', () =>\n {\n if (checkbox.classList.contains('checked'))\n {\n checkbox.classList.remove('checked');\n }\n else\n {\n checkbox.classList.add('checked');\n }\n });\n\n const dragIcon = document.createElement('span');\n dragIcon.classList.add('icon-btn', 'icon-reorder');\n\n const control = document.createElement('div');\n control.classList.add('control');\n\n const listItem = document.createElement('li');\n\n if (_this._monitorColumns.indexOf(key) !== -1)\n {\n checkbox.classList.add('checked');\n }\n\n control.appendChild(checkbox);\n control.appendChild(dragIcon);\n control.appendChild(title);\n listItem.appendChild(control);\n\n _this._list.appendChild(listItem);\n }\n\n _this._bindDrag();\n }\n\n _bindDrag()\n {\n const icons = this._list.querySelectorAll('.icon-reorder');\n this.container = this._list;\n const _this = this;\n\n if (icons)\n {\n icons.forEach((icon) =>\n {\n icon.setAttribute('draggable', true);\n const item = icon.parentNode.parentNode;\n\n const scrollableContainer = _this._list; // Assuming _list is the
    container\n const scrollSpeed = 10; // Adjust the scroll speed as needed\n const scrollThreshold = 20; // Distance from the top or bottom to start scrolling\n\n icon.addEventListener('dragstart', (event) =>\n {\n _this.draggingElement = item;\n item.classList.add('active');\n event.dataTransfer.effectAllowed = 'move';\n });\n\n icon.addEventListener('dragover', (event) =>\n {\n event.preventDefault();\n\n // Scroll handling for drag over event\n if (event.clientY < scrollableContainer.getBoundingClientRect().top + scrollThreshold)\n {\n scrollableContainer.scrollTop -= scrollSpeed;\n }\n else if (event.clientY > scrollableContainer.getBoundingClientRect().bottom - scrollThreshold)\n {\n scrollableContainer.scrollTop += scrollSpeed;\n }\n\n const targetElement = event.target.closest('li');\n if (targetElement && targetElement !== _this.draggingElement)\n {\n const rect = targetElement.getBoundingClientRect();\n const nextElement = (event.clientY - rect.top > rect.height / 2) ? targetElement.nextSibling : targetElement;\n _this._list.insertBefore(_this.draggingElement, nextElement);\n }\n });\n\n icon.addEventListener('dragend', () =>\n {\n _this.draggingElement.classList.remove('active');\n _this.draggingElement = null;\n });\n\n // Touch events\n icon.addEventListener('touchstart', (event) =>\n {\n _this.draggingElement = item;\n item.classList.add('active');\n _this.touchStartY = event.touches[0].clientY;\n event.preventDefault();\n });\n\n icon.addEventListener('touchmove', (event) =>\n {\n event.preventDefault();\n const touch = event.touches[0];\n const touchY = touch.clientY;\n\n // Scroll handling for touch move event\n if (touchY < scrollableContainer.getBoundingClientRect().top + scrollThreshold)\n {\n scrollableContainer.scrollTop -= scrollSpeed;\n }\n else if (touchY > scrollableContainer.getBoundingClientRect().bottom - scrollThreshold)\n {\n scrollableContainer.scrollTop += scrollSpeed;\n }\n\n const targetElement = document.elementFromPoint(touch.clientX, touch.clientY).closest('li');\n if (targetElement && targetElement !== _this.draggingElement)\n {\n const rect = targetElement.getBoundingClientRect();\n const nextElement = (touchY - rect.top > rect.height / 2) ? targetElement.nextSibling : targetElement;\n if (nextElement)\n {\n _this._list.insertBefore(_this.draggingElement, nextElement);\n }\n else\n {\n _this._list.appendChild(_this.draggingElement);\n }\n }\n });\n\n icon.addEventListener('touchend', () =>\n {\n _this.draggingElement.classList.remove('active');\n _this.draggingElement = null;\n });\n });\n }\n }\n}\n\nexport default MonitorChangeColumnsModalMobile;\n","import MonitorModal from './MonitorModal';\n\nclass MonitorNewsAlertModal extends MonitorModal\n{\n constructor()\n {\n super();\n this.modal = document.querySelector('.monitor-modal-container[data-type=\"monitor-news-alert-modal\"]');\n\n if (!this.modal) return;\n\n this.content = this.modal.querySelector('.content');\n this._list = this.content.querySelector('.box ul');\n this._symbols = null;\n }\n\n setSymbols(symbols)\n {\n this._symbols = symbols.split(',');\n }\n\n init()\n {\n super.init();\n console.log('initialize');\n this._bindSaveChangesButton();\n this._bindActionButtons();\n }\n refresh(id)\n {\n this.destroyState();\n this.setMonitorID(id);\n }\n\n destroyState()\n {\n this._list.innerHTML = '';\n }\n\n bindOpenButton()\n {\n const _this = this;\n this.actionButtons = document.querySelectorAll('#page-monitor-delight .modal-button[data-type=\"monitor-news-alert-modal\"]');\n\n console.log('this.actionButtons', this.actionButtons);\n if (this.actionButtons.length && !this.isDisabled)\n {\n this.actionButtons.forEach((item) =>\n {\n item.addEventListener('click', () =>\n {\n _this.modal.classList.add('active');\n _this.initializeState();\n _this.removeLoading();\n });\n });\n }\n }\n\n initializeState()\n {\n this._createList();\n }\n\n /**\n * Create list using jsSession config parameter\n */\n _createList()\n {\n const currentApp = window.jsSession._currentApp;\n const { symbols } = currentApp._config;\n\n this._clearMessage();\n if (!symbols.length)\n {\n this._showEmptyMessage();\n\n }\n\n for (let i = 0; i < symbols.length; i++)\n {\n const item = symbols[i];\n const title = document.createElement('span');\n title.classList.add('title');\n title.innerText = item.symbol;\n\n const checkbox = document.createElement('span');\n checkbox.classList.add('checkbox');\n checkbox.setAttribute('data-id', item.symbol);\n checkbox.setAttribute('data-value', item.feed_symbol);\n checkbox.addEventListener('click', () =>\n {\n if (checkbox.classList.contains('checked'))\n {\n checkbox.classList.remove('checked');\n }\n else\n {\n checkbox.classList.add('checked');\n }\n });\n\n const control = document.createElement('div');\n control.classList.add('control');\n\n const listItem = document.createElement('li');\n\n if (this._symbols && this._symbols.indexOf(item.feed_symbol) !== -1)\n {\n checkbox.classList.add('checked', 'disabled');\n }\n\n control.appendChild(checkbox);\n control.appendChild(title);\n listItem.appendChild(control);\n\n this._list.appendChild(listItem);\n }\n }\n\n /**\n * Remove created message\n */\n _clearMessage()\n {\n this.modal.classList.remove('no-symbols');\n const messageBox = this.modal.querySelector('.message-box');\n if (messageBox) messageBox.remove();\n }\n\n /**\n * If empty monitor and there is no symbols show related message to user\n */\n _showEmptyMessage()\n {\n this.modal.classList.add('no-symbols');\n\n const content = document.createElement('div');\n content.classList.add('message-box');\n\n const text = document.createElement('h3');\n text.innerText = 'This watchlist does not contain any symbols';\n const button = document.createElement('button');\n button.classList.add('btn');\n button.innerHTML = ' Add Symbols Now';\n button.addEventListener('click', () =>\n {\n this.modal.classList.remove('active');\n window.MonitorDelight.monitorAddSymbolModal.open();\n });\n\n content.appendChild(text);\n content.appendChild(button);\n\n this.content.appendChild(content);\n }\n\n /**\n * bind validate button and on click collect symbols and send data to NewsAlertsLink endpoint\n */\n _bindSaveChangesButton()\n {\n const _this = this;\n _this.modal.querySelector('button.save').addEventListener('click', () =>\n {\n const list = this._list.querySelectorAll('span.checkbox.checked');\n const result = [];\n list.forEach((checkbox) =>\n {\n result.push(checkbox.getAttribute('data-value'));\n });\n\n const form = this.modal.querySelector('.footer form');\n form.querySelector('input[name=\"symbol_search\"]').value = result.join(',');\n form.submit();\n });\n }\n\n /**\n * Bind Check-all and Uncheck-all buttons\n */\n _bindActionButtons()\n {\n this.modal.querySelector('button[data-type=\"check-all\"]').addEventListener('click', () =>\n {\n const list = this._list.querySelectorAll('span.checkbox:not(.disabled)');\n list.forEach((checkbox) =>\n {\n checkbox.classList.add('checked');\n });\n });\n\n this.modal.querySelector('button[data-type=\"uncheck-all\"]').addEventListener('click', () =>\n {\n const list = this._list.querySelectorAll('span.checkbox:not(.disabled)');\n list.forEach((checkbox) =>\n {\n checkbox.classList.remove('checked');\n });\n });\n }\n\n}\n\nexport default MonitorNewsAlertModal;\n","import MonitorAddSymbolModal from './modals/MonitorAddSymbolModal';\nimport MonitorChangeColumnsModal from './modals/MonitorChangeColumnsModal';\nimport MonitorSelector from './modals/MonitorSelector';\nimport MonitorSettings from './modals/MonitorSettings';\nimport MonitorDeleteModal from './modals/MonitorDeleteModal';\nimport MonitorUpdateModal from './modals/MonitorUpdateModal';\nimport MonitorEdit from './modals/MonitorEdit';\nimport ChartSettings from './charts/ChartSettings';\nimport MonitorNews from './news/MonitorNews';\nimport MonitorSettingsMobile from './modals/MonitorSettingsMobile';\nimport MonitorEditModal from './modals/MonitorEditModal';\nimport MonitorChangeColumnsModalMobile from './modals/MonitorChangeColumnsModalMobile';\nimport MonitorNewsAlertModal from './modals/MonitorNewsAlertModal';\n\nclass MonitorDelight\n{\n init()\n {\n if (document.getElementById('page-monitor-delight'))\n {\n this.monitorAddSymbolModal = new MonitorAddSymbolModal();\n this.monitorChangeColumnsModal = new MonitorChangeColumnsModal();\n this.monitorSelector = new MonitorSelector();\n this.monitorSettings = new MonitorSettings();\n this.monitorDeleteModal = new MonitorDeleteModal();\n this.monitorUpdateModal = new MonitorUpdateModal();\n this.monitorEdit = new MonitorEdit();\n this.monitorSettingsMobile = new MonitorSettingsMobile();\n this.monitorEditModal = new MonitorEditModal();\n this.monitorChangeColumnsModalMobile = new MonitorChangeColumnsModalMobile();\n this.monitorNewsAlertModal = null;\n if (document.getElementById('monitor-news-alert'))\n {\n this.monitorNewsAlertModal = new MonitorNewsAlertModal();\n }\n }\n\n if (document.getElementById('page-monitor-charts-delight'))\n {\n this.monitorAddSymbolModal = new MonitorAddSymbolModal();\n this.chartSettings = new ChartSettings();\n }\n\n if (document.getElementById('page-monitor-news-delight'))\n {\n this.monitorAddSymbolModal = new MonitorAddSymbolModal();\n this.monitorNews = new MonitorNews();\n }\n }\n}\n\nexport default MonitorDelight;\n","import BaseTranslationService from '../../elements/translator/js/BaseTranslationService';\nimport lang from './onboarding.json';\n\nclass TranslationService extends BaseTranslationService\n{\n constructor(locale)\n {\n super();\n this.setLangFile(lang);\n this.setLocale(locale);\n }\n}\n\nexport default TranslationService;\n","import axios from 'axios';\nimport TranslationService from './TranslationService';\n\nconst CONFIG_ENDPOINT = '/common/api/onboarding/';\n\nclass Onboarding\n{\n constructor()\n {\n this.currentStep = 0;\n this.totalSteps = 0;\n this.version = 0;\n this.name = '';\n this.currentEl = null;\n this.resource = null;\n this.container = null;\n this.content = null;\n this.delay = 5000;\n this.state = 'next';\n\n // eslint-disable-next-line no-undef\n this.lang = new TranslationService(ADVFN.LOCALE);\n }\n\n /**\n * @abstract\n */\n setResource()\n {\n throw new Error('Not implemented');\n }\n\n /**\n * @abstract\n */\n setVersion()\n {\n throw new Error('Not implemented');\n }\n\n /**\n * @abstract\n */\n setName()\n {\n throw new Error('Not implemented');\n }\n\n /**\n * Load user configuration parameters based on the onboarding name.\n *\n * This function checks whether the user has already seen the onboarding process or if there is a new version available.\n * If the onboarding process hasn't been seen by the user or there is a new version, the onboarding will be shown.\n *\n */\n init()\n {\n this.getUserConfig({\n name: this.name,\n }).then((res) =>\n {\n if (res.state !== 'seen' || parseInt(res.version, 10) !== this.version)\n {\n setTimeout(() =>\n {\n this.createOnboarding();\n }, this.delay);\n }\n });\n }\n\n /**\n * API Request to fetch user onboarding configuration data based on the onboarding name.\n *\n * This function sends an API request to retrieve configuration data related to the specified onboarding process.\n * It uses the provided onboarding name to fetch the relevant settings and parameters for the user.\n *\n */\n async getUserConfig(params)\n {\n let response;\n\n // eslint-disable-next-line prefer-const\n response = await axios.get(`${CONFIG_ENDPOINT}GetConfig?name=${params.name}`);\n\n const { status, data } = response;\n if (status === 200)\n {\n if (data.status === 'success')\n {\n return data;\n }\n\n if (data.status === 'fail')\n {\n return {\n code: data.result.errorCode,\n reason: data.result.errorMessage,\n };\n }\n }\n\n return null;\n }\n\n /**\n * API Request to update user onboarding configuration data.\n *\n * This function sends an API request to update the configuration data related to the user's onboarding process.\n * It modifies the existing settings and parameters based on the provided data.\n *\n */\n async setUserConfig(params)\n {\n let response;\n\n const formData = new FormData();\n formData.append('name', params.name);\n formData.append('state', params.state);\n formData.append('version', params.version);\n\n // eslint-disable-next-line prefer-const\n response = await axios.post(`${CONFIG_ENDPOINT}SetConfig`, formData);\n\n const { status, data } = response;\n if (status === 200)\n {\n if (data.status === 'success')\n {\n return data.result;\n }\n\n if (data.status === 'fail')\n {\n return {\n code: data.result.errorCode,\n reason: data.result.errorMessage,\n };\n }\n }\n\n return null;\n }\n\n /**\n * Creates onboarding container\n */\n createOnboarding()\n {\n const bodyRect = document.body.getBoundingClientRect();\n\n this.container = document.createElement('div');\n this.container.classList.add('onboarding');\n this.container.style.height = `${bodyRect.height}px`;\n\n this.content = document.createElement('div');\n this.content.classList.add('content');\n this.content.style.position = 'absolute';\n this.container.appendChild(this.content);\n\n const title = document.createElement('h3');\n this.content.appendChild(title);\n\n const text = document.createElement('p');\n this.content.appendChild(text);\n\n const close = document.createElement('button');\n close.innerText = this.lang.getTranslation('close');\n close.classList.add('close');\n close.addEventListener('click', this.closeOnboarding.bind(this));\n this.content.appendChild(close);\n\n const next = document.createElement('button');\n next.innerText = this.lang.getTranslation('next');\n next.classList.add('next');\n next.addEventListener('click', () =>\n {\n this.state = 'next';\n this.updateStep();\n });\n this.content.appendChild(next);\n\n const back = document.createElement('button');\n back.innerText = this.lang.getTranslation('back');\n back.classList.add('prev');\n back.addEventListener('click', () =>\n {\n this.state = 'prev';\n this.updateStep();\n });\n this.content.appendChild(back);\n\n document.body.appendChild(this.container);\n\n this.updateStep();\n\n window.addEventListener('scroll', this.adjustContentPosition.bind(this));\n window.addEventListener('resize', this.adjustContentPosition.bind(this));\n }\n\n /**\n * Adjust Positioning of element when scrolling the window\n */\n adjustContentPosition()\n {\n const rect = this.currentEl.getBoundingClientRect();\n const bodyRect = document.body.getBoundingClientRect();\n const top = rect.top - bodyRect.top + rect.height + 5;\n\n let { left } = rect;\n\n // Check if the element's right edge is outside the body\n const elementWidth = this.content.offsetWidth;\n const rightEdge = left + elementWidth;\n\n if (rightEdge > bodyRect.right)\n {\n // Adjust the left position\n left = bodyRect.right - elementWidth;\n }\n\n this.content.style.left = `${left}px`;\n this.content.style.top = `${top}px`;\n }\n\n /**\n * Update current step and display content\n */\n updateStep()\n {\n this.clearElementState();\n\n if (this.state === 'next')\n {\n if (this.checkIfFinished()) return;\n this.currentStep++;\n }\n else\n {\n this.currentStep--;\n }\n\n this.updatePrevButton();\n this.updateNextButton();\n this.display();\n }\n\n /**\n * Renders the content for the current step in the onboarding process.\n */\n display()\n {\n const { text, element, title } = this.resource[`step-${this.currentStep}`];\n\n this.currentEl = document.getElementById(element);\n if (!this.currentEl)\n {\n this.updateStep();\n return;\n }\n\n const computedStyle = window.getComputedStyle(this.currentEl);\n if (computedStyle.display === 'none')\n {\n this.updateStep();\n return;\n }\n this.currentEl.classList.add('onboarding-highlighted');\n\n this.adjustContentPosition();\n\n const p = this.content.querySelector('p');\n p.innerText = text;\n\n const t = this.content.querySelector('h3');\n t.innerText = title;\n }\n\n /**\n * This function checks if the user is currently on the first step of the onboarding process.\n * If so, it disables the previous button to prevent navigation to a non-existent previous step.\n */\n updatePrevButton()\n {\n if (this.currentStep === 1)\n {\n this.container.querySelector('button.prev').setAttribute('disabled', 'disabled');\n }\n else\n {\n this.container.querySelector('button.prev').removeAttribute('disabled');\n }\n }\n\n /**\n * Updates the button title if the user is on the last step.\n */\n updateNextButton()\n {\n if (this.currentStep === this.totalSteps)\n {\n this.container.querySelector('button.next').innerText = this.lang.getTranslation('finish');\n }\n else\n {\n this.container.querySelector('button.next').innerText = this.lang.getTranslation('next');\n }\n }\n\n /**\n * Closes the onboarding screen and updates user configuration.\n *\n * This function checks if the user is on the latest step of the onboarding process or if\n * the user clicks the \"Close\" button. If either condition is met, it closes the onboarding\n * screen and updates the user's configuration to reflect the completed onboarding process.\n *\n */\n checkIfFinished()\n {\n if (this.currentStep === this.totalSteps || !this.resource[`step-${this.currentStep + 1}`])\n {\n this.closeOnboarding();\n return true;\n }\n\n return false;\n }\n\n /**\n * Clears the state of the highlighted element.\n */\n clearElementState()\n {\n if (this.currentEl)\n {\n this.currentEl.classList.remove('onboarding-highlighted');\n }\n }\n\n /**\n * Closes the onboarding screen and sends data to the API.\n */\n closeOnboarding()\n {\n this.clearElementState();\n this.container.remove();\n this.setUserConfig({\n name: this.name,\n state: 'seen',\n version: this.version,\n });\n }\n}\n\nexport default Onboarding;\n","import BaseTranslationService from '../../../../elements/translator/js/BaseTranslationService';\n\nclass TranslationService extends BaseTranslationService\n{\n}\n\nexport default TranslationService;\n","import Onboarding from '../../../../onboarding/src/Onboarding';\nimport Resource from './onboarding-steps.json';\nimport TranslationService from './TranslationService';\n\n/**\n * If a new version is released, increment the version number below.\n * Ensure the onboarding-steps.json file is updated accordingly.\n * The version number should correspond to the step number in the onboarding-steps.json file.\n */\nconst MONITOR_ONBOARDING_CURRENT_VERSION = 3;\nconst MONITOR_ONBOARDING_CONFIG_NAME = 'monitor_onboarding';\n\nclass MonitorOnboarding extends Onboarding\n{\n constructor()\n {\n super();\n this.translationService = new TranslationService();\n }\n\n setResource()\n {\n // get by language\n this.translationService.setLangFile(Resource);\n // eslint-disable-next-line no-undef\n this.translationService.setLocale(ADVFN.LOCALE);\n const langResource = this.translationService.getResource();\n\n // set by step\n const resource = langResource[MONITOR_ONBOARDING_CURRENT_VERSION];\n this.resource = resource;\n this.translationService.setLangFile(this.resource);\n this.totalSteps = Object.keys(resource).length;\n }\n\n setVersion()\n {\n this.version = MONITOR_ONBOARDING_CURRENT_VERSION;\n }\n\n setName()\n {\n this.name = MONITOR_ONBOARDING_CONFIG_NAME;\n }\n\n initialize()\n {\n this.setResource();\n this.setName();\n this.setVersion();\n this.init();\n }\n}\n\nexport default MonitorOnboarding;\n","import './scss/main.scss';\nimport MonitorDelight from './js/delight';\nimport MonitorOnboarding from './js/onboarding/MonitorOnboarding';\n\nwindow.MonitorDelight = new MonitorDelight();\nwindow.MonitorDelight.init();\n\nwindow.MonitorOnboarding = new MonitorOnboarding();\n","// style-loader: Adds some css to the DOM by adding a