{"version":3,"file":"home.181d4620.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/charts-lib.ts","webpack://@finviz/website/./js/app/home/market_sentiment.tsx","webpack://@finviz/website/./js/app/home/refresh.ts","webpack://@finviz/website/./js/app/home/indices-data.ts","webpack://@finviz/website/./js/app/home/index.tsx","webpack://@finviz/website/./js/app/maps/services/api.ts","webpack://@finviz/website/./js/app/maps/store/action-creators.ts","webpack://@finviz/website/./js/app/maps/store/appDispatcher.ts","webpack://@finviz/website/./js/app/maps/store/constants.ts","webpack://@finviz/website/./js/app/maps/store/store.ts","webpack://@finviz/website/./js/app/maps/store/mapStore.ts","webpack://@finviz/website/./js/app/maps/types.ts","webpack://@finviz/website/./js/app/shared/documentVisibility.ts","webpack://@finviz/website/./js/app/shared/parseJSONFromScript.ts","webpack://@finviz/website/./js/app/shared/ready.ts","webpack://@finviz/website/../node_modules/flux/index.js","webpack://@finviz/website/../node_modules/flux/lib/Dispatcher.js","webpack://@finviz/website/../node_modules/flux/lib/invariant.js","webpack://@finviz/website/../node_modules/keymirror/index.js"],"sourcesContent":["import React from 'react'\r\nimport { type To } from 'react-router-dom'\r\n\r\nimport { ButtonSizeType } from '../main/components/button'\r\nimport { DateRangeBaseOption } from '../main/components/timeframe-bar/daterange-select'\r\nimport { TimeframeBaseOption } from '../main/components/timeframe-bar/timeframe-select'\r\nimport { TIMEFRAME } from '../main/constants'\r\nimport { Instrument } from '../main/types'\r\n\r\nexport enum SettingsTab {\r\n Chart = 'chart',\r\n Colors = 'colors',\r\n}\r\n\r\nexport enum SidebarDirection {\r\n vertical,\r\n horizontal,\r\n}\r\n\r\nexport type ChartLayoutProps = {\r\n config: object\r\n onRegisterChartLayoutModel?: (chartLayout: any) => void\r\n shouldResize?: boolean\r\n parentElement?: HTMLElement\r\n isWithNotifications?: boolean\r\n}\r\n\r\nexport type ChartLayoutHeaderProps = {\r\n model: any\r\n onSettingsOpen: () => void\r\n hasPublish: boolean\r\n}\r\n\r\nexport type SidebarProps = {\r\n onShouldResize: () => void\r\n direction: SidebarDirection\r\n tabsClassName?: string\r\n}\r\n\r\ntype UseChartLayoutGlobalModelType = () => {\r\n chartLayoutModel: any | null\r\n chartLayoutModelConfigSnapshot: Record | null\r\n lastGlobalRerender: number\r\n setChartLayoutModel: (chartLayoutModel: any) => void\r\n getChartLayoutModelConfig: (props: { fallback: Record }) => Record\r\n forceGlobalRerender: () => void\r\n generateNewLayoutModelConfigSnapshot: () => void\r\n}\r\n\r\ninterface ChartsLib {\r\n FREE_DATE_RANGES: string[]\r\n ChartLayout: React.FC\r\n ChartLayoutHeader: React.FC\r\n ChartLayoutWithGlobalState: React.FC\r\n Sidebar: React.FC\r\n\r\n chartSettingsAsyncModule: {\r\n cacheKey: string\r\n importFn: () => Promise<{\r\n ChartSettings: React.FC<{\r\n onClose: () => void\r\n onActiveSettingsTabChange?: (settingsComponent: SettingsTab) => void\r\n activeSettingsTab?: SettingsTab\r\n }>\r\n }>\r\n }\r\n\r\n useChartLayoutGlobalModelAsync: UseChartLayoutGlobalModelType\r\n\r\n useChartLayoutGlobalModelAsyncModule: {\r\n cacheKey: string\r\n importFn: () => Promise<{\r\n useChartLayoutGlobalModel: UseChartLayoutGlobalModelType\r\n }>\r\n }\r\n\r\n preventClosingUnsavedChangesAsyncModule: {\r\n cacheKey: string\r\n importFn: () => Promise<{\r\n PreventClosingUnsavedChanges: React.FC<{\r\n onHide: () => void\r\n children: (props: { checkForUnsavedChangesAndClose: () => void }) => React.ReactElement | null\r\n }>\r\n }>\r\n }\r\n\r\n StockDetailTimeframeBar: React.FC<{\r\n size?: ButtonSizeType\r\n className?: string\r\n isDateRangeAvailable: boolean\r\n isPremium: boolean\r\n isLoadingOverride?: boolean\r\n isScrollIntoViewEnabled?: boolean\r\n onTimeframeSelect?: (timeframe: TimeframeBaseOption) => void\r\n onDateRangeSelect?: (timeframe: DateRangeBaseOption) => void\r\n }>\r\n\r\n Quote: {\r\n create(quote: any): any\r\n select: (query: (quote: any) => boolean) => any\r\n deleteAll: () => void\r\n findByAttribute: (attribute: string, value: any) => any\r\n get(params: { ticker: string; instrument: Instrument; timeframe: TIMEFRAME; options: any }): any\r\n getAll: (tickersAndTimeframes: any) => any\r\n all: () => any[]\r\n bind(ev: string, callback: (obj: any, ...rest: any[]) => any): any\r\n unbind(ev: string, callback: (obj: any, ...rest: any[]) => any): any\r\n }\r\n\r\n Settings: {\r\n MarketSentiment: any\r\n Indicator: any\r\n Chart: any\r\n Thumb: any\r\n Element: any\r\n Colors: string[]\r\n updateColors: (type: string, name: string, theme: 'light' | 'dark', value: string) => void\r\n }\r\n\r\n Utils: {\r\n dateFromUnixTimestamp: (date: string) => Date\r\n isStockFastRefreshAvailable: (hasPremarket?: boolean, hasAftermarket?: boolean, bufferMinutes?: number) => boolean\r\n }\r\n\r\n convertTa: {\r\n getPanes: (taConfig: any) => any\r\n }\r\n\r\n useModelState: (\r\n model: Model | null,\r\n options: { watchProperties?: Array; listenOnEvents?: string[] }\r\n ) => Model | null\r\n\r\n getTimeframeGroupsWithHref: ({\r\n isPremium,\r\n generatePath,\r\n }: {\r\n isPremium: boolean\r\n generatePath: (timeframe: TimeframeBaseOption) => To\r\n }) => Array<{ label: string; timeframes: TimeframeBaseOption[] }>\r\n\r\n getIntradayChartConfig: (props: {\r\n hasPremarket: boolean\r\n hasAftermarket: boolean\r\n maxWidth: number\r\n timeframeMinutes: number\r\n barWidthWithMargin: number\r\n }) => {\r\n fullChartWidth: number\r\n chartWidthWithOffset: number\r\n offsetInPx: number\r\n offsetChartAfter: number\r\n }\r\n\r\n withCompleteLayoutModelInit: (Component: any) => (props: { config: any }) => JSX.Element | null\r\n withQuotePolling: (Component: any) => (props: { chartLayoutModel: any }) => JSX.Element | null\r\n}\r\n\r\n// @ts-ignore\r\nconst chartsLib = (window.FLibs.Charts as ChartsLib) ?? {}\r\n\r\nexport const FREE_DATE_RANGES = chartsLib.FREE_DATE_RANGES\r\nexport const ChartLayout = chartsLib.ChartLayout\r\nexport const ChartLayoutWithGlobalState = chartsLib.ChartLayoutWithGlobalState\r\nexport const ChartLayoutHeader = chartsLib.ChartLayoutHeader\r\nexport const Sidebar = chartsLib.Sidebar\r\nexport const chartSettingsAsyncModule = chartsLib.chartSettingsAsyncModule\r\nexport const preventClosingUnsavedChangesAsyncModule = chartsLib.preventClosingUnsavedChangesAsyncModule\r\nexport const useChartLayoutGlobalModelAsyncModule = chartsLib.useChartLayoutGlobalModelAsyncModule\r\nexport const useChartLayoutGlobalModelAsync = chartsLib.useChartLayoutGlobalModelAsync\r\nexport const StockDetailTimeframeBar = chartsLib.StockDetailTimeframeBar\r\nexport const Quote = chartsLib.Quote\r\nexport const Settings = chartsLib.Settings\r\nexport const Utils = chartsLib.Utils\r\nexport const convertTa = chartsLib.convertTa\r\nexport const useModelState = chartsLib.useModelState\r\nexport const getTimeframeGroupsWithHref = chartsLib.getTimeframeGroupsWithHref\r\nexport const getIntradayChartConfig = chartsLib.getIntradayChartConfig\r\nexport const withCompleteLayoutModelInit = chartsLib.withCompleteLayoutModelInit\r\nexport const withQuotePolling = chartsLib.withQuotePolling\r\n","import { Component, MouseEvent } from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport { CancelablePromise, apiRequest } from '../../main/services/api'\r\nimport { ChartLayout, Quote } from '../charts-lib'\r\n\r\nconst ticker = 'market_sentiment'\r\n\r\ninterface MarketSentimentProps {}\r\ninterface MarketSentimentState {\r\n loading: boolean\r\n enabled: boolean\r\n chartConfig: { layout: string } | null\r\n}\r\n\r\nconst MARKET_SENTIMENT_WIDTH_PX = 160\r\nconst MARKET_SENTIMENT_HEIGHT_PX = 40\r\nconst marketSentimentChartConfig = {\r\n layout: '1h1v',\r\n theme: document.documentElement.classList.contains('dark') ? 'dark' : 'light',\r\n width: MARKET_SENTIMENT_WIDTH_PX,\r\n height: MARKET_SENTIMENT_HEIGHT_PX,\r\n scrollable: false,\r\n editable: false,\r\n cross: false,\r\n charts: [\r\n {\r\n height: MARKET_SENTIMENT_HEIGHT_PX,\r\n timeframe: 'i3',\r\n scale: 'linear',\r\n ticker: ticker,\r\n instrument: 'market_sentiment',\r\n refreshData: false,\r\n stretch: true,\r\n panes: [\r\n {\r\n height: MARKET_SENTIMENT_HEIGHT_PX,\r\n elements: [\r\n {\r\n type: 'charts/market_sentiment',\r\n overlays: [],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n}\r\n\r\nclass MarketSentiment extends Component {\r\n state: MarketSentimentState = {\r\n loading: true,\r\n enabled: false,\r\n chartConfig: null,\r\n }\r\n\r\n _timer: number | null = null\r\n _lastRequest: CancelablePromise | null = null\r\n\r\n componentDidMount() {\r\n this._fetchData('', () => {\r\n this.setState({ chartConfig: marketSentimentChartConfig })\r\n })\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._timer !== null) {\r\n this._lastRequest?.cancel?.()\r\n clearTimeout(this._timer)\r\n }\r\n }\r\n\r\n render() {\r\n const { loading, enabled, chartConfig } = this.state\r\n return (\r\n \r\n \r\n \r\n Click BULL for positive market sentiment
Click BEAR for negative market sentiment] offsetx=[-200] offsety=[20] delay=[100]\">\r\n {chartConfig && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n this._vote(e, 'bull')}\r\n >\r\n Bull\r\n \r\n \r\n this._vote(e, 'bear')}\r\n >\r\n Bear\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n _vote(e: MouseEvent, sentiment: string) {\r\n e.preventDefault()\r\n this.setState({ enabled: false })\r\n this._fetchData('?b=' + sentiment, undefined, false)\r\n }\r\n\r\n _fetchData = async (urlQuery = '', callback?: Function, setTimer = true) => {\r\n if (setTimer && this._timer !== null) clearTimeout(this._timer)\r\n\r\n if (document.hidden) {\r\n // console.log(`${+new Date()} Document is hidden, canceling refresh`)\r\n if (setTimer) this._timer = window.setTimeout(() => this._fetchData(urlQuery, callback), 1000)\r\n return\r\n }\r\n\r\n // console.log(`${+new Date()} Document is visible, refreshing`)\r\n\r\n this._lastRequest = apiRequest(`/api/market_sentiment.ashx${urlQuery}`)\r\n const json = await this._lastRequest\r\n if (json) {\r\n const quoteData = getData(json)\r\n const quote = Quote.findByAttribute('ticker', ticker)\r\n if (quote) {\r\n Quote.findByAttribute('ticker', ticker).updateAttributes(getData(json))\r\n } else {\r\n Quote.create(quoteData).save()\r\n }\r\n callback?.()\r\n\r\n this.setState({\r\n loading: false,\r\n enabled: json.enabled,\r\n })\r\n }\r\n\r\n if (setTimer) {\r\n this._timer = window.setTimeout(() => this._fetchData(urlQuery, callback), (json?.refresh ?? 30) * 1000)\r\n }\r\n }\r\n}\r\n\r\ninterface QuoteData {\r\n refresh: number\r\n enabled: boolean\r\n sum: number[]\r\n weight: number[]\r\n time: string\r\n visibleMinutes: number\r\n}\r\n\r\nfunction getData(data: QuoteData) {\r\n return {\r\n close: data.sum,\r\n volume: data.weight,\r\n date: Array.from('1'.repeat(data.sum.length)).map((x) => parseInt(x, 10)),\r\n ticker: ticker,\r\n timeframe: 'i3',\r\n instrument: 'market_sentiment',\r\n premarket: false,\r\n aftermarket: false,\r\n afterChange: null,\r\n afterClose: null,\r\n drawMinutesPerDay: data.visibleMinutes,\r\n marketStartMinutes: 570,\r\n premarketLengthMinutes: 0,\r\n aftermarketLengthMinutes: 0,\r\n }\r\n}\r\n\r\nfunction mount() {\r\n const el = document.getElementById('js-market-sentiment')\r\n if (el) {\r\n ReactDOM.render(, el)\r\n }\r\n}\r\n\r\nfunction unmount() {\r\n const el = document.getElementById('js-market-sentiment')\r\n if (el) {\r\n ReactDOM.unmountComponentAtNode(el)\r\n }\r\n}\r\n\r\nmount()\r\n\r\nexport { mount, unmount }\r\n","import { ContentType, apiRequest } from '../../main/services/api'\r\nimport { mapPerf } from '../maps/services/api'\r\nimport mapActionCreators from '../maps/store/action-creators'\r\nimport { MapSubtypeId, MapTypeId } from '../maps/types'\r\nimport { getMapsRefreshInterval } from '../maps/utils'\r\nimport { intervalCallbackOnWindowVisible } from '../shared/documentVisibility'\r\nimport { isStockFastRefreshAvailable } from '../shared/isStockFastRefreshAvailable'\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport { Indices, updateIndices } from './indices-data'\r\n\r\ninterface RefreshInfo {\r\n userId: string\r\n version: number\r\n interval: number\r\n hasGeoMaps: boolean\r\n}\r\n\r\nconst refreshInfo = parseJSONFromScript('refresh-init')\r\n\r\nfunction refreshPage(result: string) {\r\n const newDocument = new DOMParser().parseFromString(result, 'text/html')\r\n const newRefreshInfo = parseJSONFromScript('refresh-init', newDocument)\r\n\r\n if (!refreshInfo || !newRefreshInfo || refreshInfo.userId !== newRefreshInfo.userId) return\r\n\r\n if (refreshInfo.version !== newRefreshInfo.version) {\r\n window.location.reload()\r\n }\r\n\r\n // Replace market stats\r\n const oldMarketStats = document.getElementsByClassName('market-stats')\r\n const newMarketStats = newDocument.getElementsByClassName('market-stats')\r\n if (oldMarketStats.length === newMarketStats.length) {\r\n Array.from(oldMarketStats).forEach((_, index) => {\r\n const oldElement = oldMarketStats.item(index)\r\n const newElement = newMarketStats.item(index)\r\n if (oldElement && newElement) {\r\n oldElement.innerHTML = newElement.innerHTML\r\n }\r\n })\r\n }\r\n\r\n // Replace left signals table\r\n const oldSignalsLeft = document.getElementById('js-signals_1')\r\n const newSignalsLeft = newDocument.getElementById('js-signals_1')\r\n if (oldSignalsLeft && newSignalsLeft) {\r\n oldSignalsLeft.innerHTML = newSignalsLeft.innerHTML\r\n }\r\n\r\n // Replace right signals table\r\n const oldSignalsRight = document.getElementById('js-signals_2')\r\n const newSignalsRight = newDocument.getElementById('js-signals_2')\r\n if (oldSignalsRight && newSignalsRight) {\r\n oldSignalsRight.innerHTML = newSignalsRight.innerHTML\r\n }\r\n\r\n // Replace right signals table\r\n const oldHomepageBottom = document.getElementById('js-homepage_bottom')\r\n const newHomepageBottom = newDocument.getElementById('js-homepage_bottom')\r\n if (oldHomepageBottom && newHomepageBottom) {\r\n oldHomepageBottom.innerHTML = newHomepageBottom.innerHTML\r\n }\r\n\r\n /**\r\n * Re-render recent quotes. The script (recent_quotes.js) is only included for premium users or if HasEnabledRedesign\r\n * so we need to check if it's defined\r\n */\r\n if (typeof window['RenderRecentQuotes'] === 'function') {\r\n RenderRecentQuotes()\r\n }\r\n\r\n // Send refresh event to google analytics\r\n window.gtag?.('event', 'refresh', { event_category: 'page' })\r\n // Refresh any ads that might be on the page\r\n if (window.finvizBannersLoaded === true) {\r\n window.initFinvizBanners?.()\r\n } else if (typeof window.refreshAds === 'function') {\r\n window.refreshAds('#js-homepage_bottom [id*=IC_D_]')\r\n }\r\n}\r\n\r\nfunction initRefresh(interval: number) {\r\n intervalCallbackOnWindowVisible(interval, async function handleRefresh() {\r\n const data = await apiRequest(window.location.pathname, {\r\n headers: { 'Content-Type': ContentType.Html, 'X-Is-Ajax-Request': 'true' },\r\n })\r\n\r\n if (data) {\r\n refreshPage(data)\r\n }\r\n })\r\n}\r\n\r\nenum IndicesPollingIntervalInMs {\r\n Default = 3000,\r\n Reduced = 60000,\r\n}\r\n\r\nif (refreshInfo?.interval) {\r\n initRefresh(refreshInfo.interval * 1000)\r\n\r\n function getIndicesRefreshInterval() {\r\n if (!isStockFastRefreshAvailable(false, false)) {\r\n return IndicesPollingIntervalInMs.Reduced\r\n }\r\n\r\n return IndicesPollingIntervalInMs.Default\r\n }\r\n\r\n intervalCallbackOnWindowVisible(getIndicesRefreshInterval, async function handleRefresh() {\r\n const newIndicesData = await apiRequest('/api/indices_data.ashx')\r\n\r\n if (newIndicesData) {\r\n updateIndices(newIndicesData)\r\n }\r\n })\r\n\r\n intervalCallbackOnWindowVisible(getMapsRefreshInterval, async function handleRefresh() {\r\n const perfDataSecReq = mapPerf(MapTypeId.Sector, MapSubtypeId.DayPerf)\r\n const perfDataGeoReq = refreshInfo.hasGeoMaps ? mapPerf(MapTypeId.World, MapSubtypeId.DayPerf) : null\r\n\r\n const [perfDataSec, perfDataGeo] = await Promise.all([perfDataSecReq, perfDataGeoReq])\r\n\r\n try {\r\n if (perfDataSec) {\r\n if (window.FinvizIndexSecMap.version !== perfDataSec.version) {\r\n window.location.reload()\r\n }\r\n mapActionCreators.updatePerfData(window.FinvizIndexSecMap, perfDataSec)\r\n }\r\n\r\n if (perfDataGeo) {\r\n if (window.FinvizIndexGeoMap.version !== perfDataGeo.version) {\r\n window.location.reload()\r\n }\r\n mapActionCreators.updatePerfData(window.FinvizIndexGeoMap, perfDataGeo)\r\n }\r\n } catch {}\r\n })\r\n}\r\n","import { Quote } from '../charts-lib'\r\nimport './market_sentiment'\r\nimport './refresh'\r\n\r\ninterface Index {\r\n ticker: string\r\n timeframe: string\r\n volume: number[]\r\n date: number[]\r\n open: number[]\r\n high: number[]\r\n low: number[]\r\n close: number[]\r\n lastOpen: null\r\n lastHigh: null\r\n lastLow: null\r\n lastClose: number\r\n lastVolume: null\r\n lastDate: number\r\n prevClose: number\r\n afterClose: null\r\n afterChange: null\r\n relativeVolume: number\r\n}\r\n\r\nexport type Indices = Record\r\n\r\nexport function getData(index: string, ticker: string, indices: Indices) {\r\n return {\r\n ...indices[index],\r\n ticker: ticker, // use text?\r\n timeframe: 'i10',\r\n instrument: 'stock',\r\n premarket: false,\r\n aftermarket: false,\r\n hasChartEvents: false,\r\n afterChange: null,\r\n afterClose: null,\r\n drawMinutesPerDay: 390,\r\n marketStartMinutes: 570,\r\n premarketLengthMinutes: 0,\r\n aftermarketLengthMinutes: 0,\r\n }\r\n}\r\n\r\nexport function updateIndices(indices: Indices) {\r\n const dowQ = Quote.findByAttribute('ticker', 'DOW')\r\n if (dowQ) dowQ.updateAttributes(getData('^DJI', 'DOW', indices))\r\n\r\n const nasdaqQ = Quote.findByAttribute('ticker', 'NASDAQ')\r\n if (nasdaqQ) nasdaqQ.updateAttributes(getData('^IXIC', 'NASDAQ', indices))\r\n\r\n const sap500Q = Quote.findByAttribute('ticker', 'S&P 500')\r\n if (sap500Q) sap500Q.updateAttributes(getData('^GSPC', 'S&P 500', indices))\r\n\r\n const rutQ = Quote.findByAttribute('ticker', 'RUSSELL 2000')\r\n if (rutQ) rutQ.updateAttributes(getData('^RUT', 'RUSSELL 2000', indices))\r\n\r\n if (!dowQ || !nasdaqQ || !sap500Q || !rutQ) {\r\n // Temporary code below\r\n // additional info gaining for https://finvizcom.sentry.io/issues/3963831382/?project=33153&referrer=issue-stream&statsPeriod=14d&stream_index=0\r\n window.Sentry?.captureMessage('indices-data.ts updateIndices', {\r\n extra: {\r\n allAvailableTickers: Quote.all()\r\n .reduce((acc: string[], cur: { ticker: string }) => {\r\n acc.push(cur.ticker)\r\n return acc\r\n }, [])\r\n .join(','),\r\n },\r\n })\r\n }\r\n}\r\n","import ReactDOM from 'react-dom'\r\n\r\nimport { ChartLayout, Quote } from '../charts-lib'\r\nimport { SpecificChartFunctionality, getCustomColorsFromCookies } from '../shared/chartLayoutConfig'\r\nimport { parseJSONFromScript } from '../shared/parseJSONFromScript'\r\nimport { ready } from '../shared/ready'\r\nimport { getData } from './indices-data'\r\nimport type { Indices } from './indices-data'\r\nimport './market_sentiment'\r\nimport './refresh'\r\n\r\nfunction getChartConfig(ticker: string) {\r\n return {\r\n layout: '1h1v',\r\n width: 320,\r\n height: 190,\r\n barWidth: 3,\r\n barMargin: 1,\r\n scrollable: false,\r\n editable: false,\r\n cross: false,\r\n colors: getCustomColorsFromCookies(),\r\n specificChartFunctionality: SpecificChartFunctionality.smallIndex,\r\n theme: document.documentElement.classList.contains('dark') ? 'dark' : 'light',\r\n charts: [\r\n {\r\n height: 190,\r\n timeframe: 'i10',\r\n scale: 'linear',\r\n ticker: ticker,\r\n // leftOffset: 0,\r\n instrument: 'stock',\r\n refreshData: false,\r\n // stretch: true,\r\n panes: [\r\n {\r\n height: 190,\r\n elements: [\r\n {\r\n type: 'charts/candle_stick',\r\n overlays: [],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nfunction renderChart({ ticker, element }: { ticker: string; element: HTMLElement | null }) {\r\n if (element) {\r\n ReactDOM.render(\r\n
\r\n \r\n
,\r\n element\r\n )\r\n }\r\n}\r\n\r\nready(function () {\r\n const indices = parseJSONFromScript('js-indices')!\r\n\r\n Quote.create(getData('^DJI', 'DOW', indices)).save()\r\n Quote.create(getData('^IXIC', 'NASDAQ', indices)).save()\r\n Quote.create(getData('^GSPC', 'S&P 500', indices)).save()\r\n Quote.create(getData('^RUT', 'RUSSELL 2000', indices)).save()\r\n\r\n renderChart({ ticker: 'DOW', element: document.getElementById('dow') })\r\n renderChart({ ticker: 'NASDAQ', element: document.getElementById('nasdaq') })\r\n renderChart({ ticker: 'S&P 500', element: document.getElementById('sp500') })\r\n renderChart({ ticker: 'RUSSELL 2000', element: document.getElementById('rut') })\r\n})\r\n","import { ContentType, apiRequest } from '../../../main/services/api'\r\nimport { MapDataRoot, MapSubtypeId, MapTypeId, PerfData } from '../types'\r\n\r\nexport function mapBaseData(type: MapTypeId, cacheBuster: number) {\r\n return apiRequest(`/maps/${type}.json`, { query: { rev: cacheBuster } }, true)\r\n}\r\n\r\nexport function mapPerf(type: MapTypeId, subtype: MapSubtypeId) {\r\n return apiRequest(`/api/map_perf.ashx`, { query: { t: type, st: subtype } })\r\n}\r\n\r\nexport function mapPerfScreener(query = window.location.search) {\r\n return apiRequest(`/api/map_perf_screener.ashx${query}`)\r\n}\r\n\r\nexport interface UploadMapResponse {\r\n imgUrl: string\r\n shareUrl: string\r\n}\r\n\r\nexport function uploadMap({ type, subtype, data }: { type: MapTypeId; subtype: MapSubtypeId; data: string }) {\r\n return apiRequest(`/publish_map_submit.ashx`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': ContentType.FormUrlEncoded,\r\n },\r\n body: new URLSearchParams({\r\n file: data.replace('data:image/png;base64,', ''),\r\n type,\r\n subtype,\r\n }),\r\n })\r\n}\r\n","import debounce from 'lodash.debounce'\r\n\r\nimport { CancelablePromise, apiRequest } from '../../../main/services/api'\r\nimport { getDate } from '../../header/utils'\r\nimport Treemap from '../treemap'\r\nimport { MapData, MapDataNode, MapTypeId, PerfData, Scale } from '../types'\r\nimport { getVisibleTooltipTickers } from '../utils'\r\nimport AppDispatcher from './appDispatcher'\r\nimport { ActionTypes } from './constants'\r\nimport mapStore from './mapStore'\r\n\r\nvar _targetScale = 1\r\nfunction zoomIn(treemap: Treemap, scale: number, tx: number, ty: number) {\r\n _targetScale = scale\r\n animate()\r\n function animate() {\r\n treemap.zoom.scale(+(treemap.zoom.scale() + 0.05).toFixed(2), { x: tx, y: ty })\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n if (treemap.zoom.scale() + 0.05 < _targetScale + 0.00001) {\r\n requestAnimationFrame(animate)\r\n }\r\n }\r\n}\r\n\r\nfunction zoomOut(treemap: Treemap, scale: number, tx: number, ty: number) {\r\n _targetScale = scale\r\n animate()\r\n function animate() {\r\n treemap.zoom.scale(+(treemap.zoom.scale() - 0.05).toFixed(2), { x: tx, y: ty })\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n if (treemap.zoom.scale() - 0.05 > _targetScale - 0.00001) {\r\n requestAnimationFrame(animate)\r\n }\r\n }\r\n}\r\n\r\nfunction updateVisibleSparklines(treemap: Treemap) {\r\n const hoveredNode = mapStore.getHoveredNode(treemap.mapNodeId)\r\n if (hoveredNode) {\r\n const tickersToLoad = getVisibleTooltipTickers(hoveredNode)\r\n\r\n if (!tickersToLoad.includes(hoveredNode.name)) {\r\n tickersToLoad.push(hoveredNode.name)\r\n }\r\n\r\n if (tickersToLoad.length) {\r\n debouncedLoadSparklines(tickersToLoad, treemap.type)\r\n }\r\n }\r\n}\r\n\r\nlet _lastSparklinesRequest: CancelablePromise | null = null\r\nasync function loadSparklines(tickers: string[], mapType: string) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.LOAD_SPARKLINES_STARTED,\r\n })\r\n _lastSparklinesRequest?.cancel?.()\r\n _lastSparklinesRequest = apiRequest(\r\n '/api/map_sparklines.ashx',\r\n { query: { t: tickers.join(','), ty: mapType } },\r\n true\r\n )\r\n\r\n try {\r\n const data = await _lastSparklinesRequest\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.LOAD_SPARKLINES_COMPLETED,\r\n data: data,\r\n })\r\n } catch (error) {\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.LOAD_SPARKLINES_FAILED,\r\n error,\r\n })\r\n }\r\n}\r\n\r\nconst debouncedLoadSparklines = debounce(loadSparklines, 200, { trailing: true })\r\n\r\nconst actions = {\r\n setHoveredNode(mapNodeId: string, node: MapDataNode | undefined) {\r\n if (!node) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.RESET_SPARKLINE_DATA,\r\n })\r\n }\r\n\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_HOVERED_NODE,\r\n node,\r\n mapNodeId,\r\n })\r\n },\r\n\r\n loadSparklineData(tickers: string[], mapType: MapTypeId) {\r\n if (tickers) {\r\n debouncedLoadSparklines(tickers, mapType)\r\n }\r\n },\r\n\r\n loadSparklinesCancel() {\r\n _lastSparklinesRequest?.cancel?.()\r\n },\r\n\r\n resetSparklineData() {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.RESET_SPARKLINE_DATA,\r\n })\r\n },\r\n\r\n changeTranslate(treemap: Treemap, tx: number, ty: number) {\r\n treemap.zoom.translate([tx, ty])\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.CHANGE_TRANSLATE,\r\n })\r\n },\r\n\r\n zoom(treemap: Treemap, direction: number, offsetX: number, offsetY: number) {\r\n if (direction > 0) {\r\n const zoomLevel = treemap.getNextZoomLevel()\r\n if (zoomLevel !== treemap.zoom.scale()) {\r\n zoomIn(treemap, zoomLevel, offsetX, offsetY)\r\n }\r\n } else {\r\n const zoomLevel = treemap.getPreviousZoomLevel()\r\n if (zoomLevel !== treemap.zoom.scale()) {\r\n zoomOut(treemap, zoomLevel, offsetX, offsetY)\r\n }\r\n }\r\n },\r\n\r\n render() {\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n },\r\n\r\n zoomAndTranslate(treemap: Treemap, scale: number, tx: number, ty: number) {\r\n treemap.zoom.scale(1, { x: tx, y: ty })\r\n treemap.zoom.scale(scale, { x: tx, y: ty })\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n },\r\n\r\n updateLayout(treemap: Treemap, props: { width: number; height: number; data: MapData; scale: Scale }) {\r\n treemap.updateData(props)\r\n treemap.zoom.updateDimensions(props)\r\n AppDispatcher.handleViewAction({ type: ActionTypes.RENDER_TREEMAP })\r\n\r\n // Update hovered node if any\r\n const hoveredNode = mapStore.getHoveredNode(treemap.mapNodeId)\r\n if (hoveredNode) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_HOVERED_NODE,\r\n node: treemap.nodes.find((node) => node.name === hoveredNode.name),\r\n mapNodeId: treemap.mapNodeId,\r\n })\r\n updateVisibleSparklines(treemap)\r\n }\r\n },\r\n\r\n updatePerfData(treemap?: Treemap, data?: PerfData) {\r\n if (!treemap || !data) return\r\n\r\n treemap.updatePerf(data)\r\n AppDispatcher.handleServerAction({\r\n type: ActionTypes.UPDATE_DATA,\r\n version: data.version,\r\n timestamp: getDate(),\r\n })\r\n\r\n updateVisibleSparklines(treemap)\r\n },\r\n\r\n _setOnPublish(getPublishCanvas: () => HTMLCanvasElement) {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_PUBLISH_CANVAS,\r\n getPublishCanvas,\r\n })\r\n },\r\n\r\n setupWidget() {\r\n AppDispatcher.handleViewAction({\r\n type: ActionTypes.SET_WIDGET,\r\n isWidget: true,\r\n })\r\n },\r\n}\r\n\r\nexport default actions\r\n","import { Dispatcher } from 'flux'\r\n\r\nimport { PayloadSources } from './constants'\r\n\r\nclass AppDispatcher extends Dispatcher {\r\n handleServerAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.SERVER_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n\r\n handleViewAction(action: any) {\r\n var payload = {\r\n source: PayloadSources.VIEW_ACTION,\r\n action: action,\r\n }\r\n //console.log(action, payload);\r\n this.dispatch(payload)\r\n }\r\n}\r\n\r\nexport default new AppDispatcher()\r\n","import keyMirror from 'keymirror'\r\n\r\nconst ActionTypes = keyMirror({\r\n RENDER_TREEMAP: null,\r\n CHANGE_TRANSLATE: null,\r\n SET_HOVERED_NODE: null,\r\n\r\n LOAD_SPARKLINES_STARTED: null,\r\n LOAD_SPARKLINES_COMPLETED: null,\r\n LOAD_SPARKLINES_FAILED: null,\r\n RESET_SPARKLINE_DATA: null,\r\n\r\n INIT_STARTED: null,\r\n INIT_FAILED: null,\r\n\r\n UPDATE_DATA: null,\r\n\r\n SET_PUBLISH_CANVAS: null,\r\n\r\n SET_WIDGET: null,\r\n})\r\n\r\nconst PayloadSources = keyMirror({\r\n SERVER_ACTION: null,\r\n VIEW_ACTION: null,\r\n})\r\n\r\nexport { ActionTypes, PayloadSources }\r\n","import { EventEmitter } from 'events'\r\n\r\nclass Store extends EventEmitter {\r\n static CHANGE_EVENT = 'change'\r\n\r\n emitChange() {\r\n this.emit(Store.CHANGE_EVENT)\r\n }\r\n\r\n addChangeListener(callback: (...args: any[]) => void) {\r\n this.on(Store.CHANGE_EVENT, callback)\r\n }\r\n\r\n removeChangeListener(callback: (...args: any[]) => void) {\r\n this.removeListener(Store.CHANGE_EVENT, callback)\r\n }\r\n}\r\n\r\nexport default Store\r\n","import { MapDataNode } from '../types'\r\nimport AppDispatcher from './appDispatcher'\r\nimport { ActionTypes } from './constants'\r\nimport Store from './store'\r\n\r\nlet _hoveredNode: MapDataNode\r\nlet _mapNodeId: string\r\nlet _sparklinesData: Record = {}\r\nlet _dataVersion: number\r\nlet _dataTimestamp: Date\r\nlet _isWidget = false\r\nlet _getPublishCanvas: () => HTMLCanvasElement\r\n\r\nclass MapStore extends Store {\r\n getHoveredNode(mapNodeId: string) {\r\n if (mapNodeId === _mapNodeId) return _hoveredNode\r\n return undefined\r\n }\r\n\r\n getSparklines() {\r\n return _sparklinesData\r\n }\r\n\r\n getDataVersion() {\r\n return _dataVersion\r\n }\r\n\r\n getDataTimestamp() {\r\n return _dataTimestamp\r\n }\r\n\r\n isWidget() {\r\n return _isWidget\r\n }\r\n\r\n getPublishCanvas() {\r\n return _getPublishCanvas()\r\n }\r\n}\r\n\r\nvar mapStore = new MapStore()\r\n\r\n// @ts-ignore\r\nmapStore.dispatchToken = AppDispatcher.register(function (payload: any) {\r\n var action = payload.action\r\n\r\n switch (action.type) {\r\n case ActionTypes.RENDER_TREEMAP:\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.SET_HOVERED_NODE:\r\n if (action.node !== _hoveredNode) {\r\n _hoveredNode = action.node\r\n _mapNodeId = action.mapNodeId\r\n mapStore.emitChange()\r\n }\r\n break\r\n\r\n case ActionTypes.CHANGE_TRANSLATE:\r\n // @ts-ignore\r\n _hoveredNode = undefined\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.LOAD_SPARKLINES_STARTED:\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.LOAD_SPARKLINES_COMPLETED:\r\n _sparklinesData = { ..._sparklinesData, ...action.data }\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.RESET_SPARKLINE_DATA:\r\n case ActionTypes.LOAD_SPARKLINES_FAILED:\r\n _sparklinesData = {}\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.UPDATE_DATA:\r\n _dataVersion = action.version\r\n _dataTimestamp = action.timestamp\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.SET_PUBLISH_CANVAS:\r\n _getPublishCanvas = action.getPublishCanvas\r\n mapStore.emitChange()\r\n break\r\n\r\n case ActionTypes.SET_WIDGET:\r\n _isWidget = action.isWidget\r\n mapStore.emitChange()\r\n break\r\n }\r\n})\r\n\r\nexport default mapStore\r\n","import { ReactNode } from 'react'\r\n\r\nexport enum MapTypeId {\r\n Sector = 'sec',\r\n World = 'geo',\r\n SectorFull = 'sec_all',\r\n ETF = 'etf',\r\n Screener = 'screener',\r\n Portfolio = 'portfolio',\r\n ETFHoldings = 'etf_holdings',\r\n}\r\n\r\nexport enum MapSubtypeId {\r\n DayPerf = 'd1',\r\n WeekPerf = 'w1',\r\n MonthPerf = 'w4',\r\n ThreeMonthPerf = 'w13',\r\n SixMonthPerf = 'w26',\r\n YearPerf = 'w52',\r\n YearToDatePerf = 'ytd',\r\n RelativeVolume = 'relvol',\r\n PriceToEarnings = 'pe',\r\n ForwardPriceToEearnings = 'fpe',\r\n PriceEarningsToGrowth = 'peg',\r\n PriceToSellsRatio = 'ps',\r\n PriceToBookRatio = 'pb',\r\n DividendYield = 'div',\r\n EPSGrowth5y = 'eps5y',\r\n FloatShort = 'short',\r\n AnalystRecommendation = 'rec',\r\n EarningsPerf = 'earnperf',\r\n EarningsDate = 'earndate',\r\n // Portfolio\r\n PortfolioGainPct = 'portfolioGainPct',\r\n PortfolioGainUsd = 'portfolioGainUsd',\r\n PortfolioChangePct = 'portfolioChangePct',\r\n PortfolioChangeUsd = 'portfolioChangeUsd',\r\n}\r\n\r\nexport enum ScaleId {\r\n DayPerf = 'default',\r\n WeekPerf = '_5',\r\n MonthPerf = '_10',\r\n ThreeMonthPerf = '_15',\r\n SixMonthPerf = '_20',\r\n YearPerf = '_25',\r\n RelativeVolume = '_relvol',\r\n PriceToEarnings = '_pe',\r\n ForwardPriceToEearnings = '_fpe',\r\n PriceEarningsToGrowth = '_peg',\r\n PriceToSellsRatio = '_ps',\r\n PriceToBookRatio = '_pb',\r\n DividendYield = '_div',\r\n EPSGrowth5y = '_eps5y',\r\n FloatShort = '_short',\r\n AnalystRecommendation = '_rec',\r\n EarningsDate = '_earndate',\r\n // Portfolio\r\n PortfolioPct = '_portfolioPct',\r\n PortfolioUsd = '_portfolioUsd',\r\n}\r\n\r\nexport const enum NodeDepth {\r\n Root,\r\n Sector,\r\n Industry,\r\n Node,\r\n}\r\n\r\nexport interface MapDataRow {\r\n name: string\r\n perf?: number\r\n x: number\r\n y: number\r\n dx: number\r\n dy: number\r\n data: any\r\n depth: NodeDepth\r\n}\r\n\r\nexport interface MapDataRoot {\r\n name: string\r\n children: MapDataSector[]\r\n duplicateTickers: number\r\n}\r\n\r\nexport interface MapDataSector extends MapDataRow {\r\n children: MapDataIndustry[]\r\n parent: MapDataRoot\r\n}\r\n\r\nexport interface MapDataIndustry extends MapDataRow {\r\n children: MapDataNode[]\r\n parent: MapDataSector\r\n}\r\n\r\nexport interface MapDataNode extends MapDataRow {\r\n parent: MapDataIndustry\r\n additional?: string\r\n description: string\r\n perfText: string\r\n value: number\r\n}\r\n\r\nexport interface MapData {\r\n sectors: MapDataSector[]\r\n industries: MapDataIndustry[]\r\n nodes: MapDataNode[]\r\n}\r\n\r\nexport type PerfData = {\r\n nodes: Record | Array\r\n additional: Record\r\n subtype: MapSubtypeId\r\n version?: number\r\n}\r\n\r\nexport interface MapSubtype {\r\n id: MapSubtypeId\r\n name: string\r\n scaleId: ScaleId\r\n tooltip: string\r\n countIndustryPerf: boolean\r\n countSectorPerf: boolean\r\n}\r\n\r\nexport interface MapType {\r\n name: string\r\n pageTitle: string\r\n nameShort?: string\r\n description: string\r\n type: MapTypeId\r\n subtypes: MapSubtype[]\r\n}\r\n\r\nexport interface Scale {\r\n name: string\r\n tooltip: ReactNode\r\n id: ScaleId\r\n}\r\n","function getCurrentDateInMs() {\r\n return new Date().valueOf()\r\n}\r\n\r\nfunction getIsDocumentVisible() {\r\n return document.visibilityState === 'visible' || document.hidden === false\r\n}\r\n\r\n/**\r\n * Calls callback based on interval and document visibility. Returns unsubscribe function.\r\n * How it works:\r\n * - document is hidden: interval cleared\r\n * - document visible: interval set-up with remaining time from last interval. Call immediately if interval elapsed\r\n */\r\nexport function intervalCallbackOnWindowVisible(\r\n interval: number | (() => number),\r\n callback: () => void | Promise\r\n) {\r\n const getInterval = typeof interval === 'function' ? interval : () => interval\r\n let refreshPromise: Promise | void | null = null\r\n let nextRefresh = getCurrentDateInMs() + getInterval()\r\n let refreshTimeout: NodeJS.Timeout | null = null\r\n\r\n async function refresh() {\r\n nextRefresh = getCurrentDateInMs() + getInterval()\r\n // Call callback asynchronously\r\n refreshPromise = callback()\r\n await refreshPromise\r\n refreshPromise = null\r\n\r\n // Queue next refresh\r\n if (getIsDocumentVisible()) {\r\n refreshTimeout = setTimeout(refresh, Math.max(0, nextRefresh - getCurrentDateInMs()))\r\n }\r\n }\r\n\r\n /**\r\n * Handle the visibility change event, compute callback remaining time or call immediately\r\n */\r\n function handleVisibilityChange() {\r\n if (refreshTimeout) clearTimeout(refreshTimeout)\r\n\r\n if (getIsDocumentVisible() && refreshPromise === null) {\r\n const currentDateMs = getCurrentDateInMs()\r\n // Refresh if the document is stale, otherwise set a timeout to refresh later\r\n if (nextRefresh <= currentDateMs) {\r\n refresh()\r\n } else {\r\n refreshTimeout = setTimeout(refresh, nextRefresh - currentDateMs)\r\n }\r\n }\r\n }\r\n\r\n if (getIsDocumentVisible()) {\r\n refreshTimeout = setTimeout(refresh, getInterval())\r\n }\r\n\r\n document.addEventListener('visibilitychange', handleVisibilityChange)\r\n\r\n return () => {\r\n if (refreshTimeout) clearTimeout(refreshTimeout)\r\n document.removeEventListener('visibilitychange', handleVisibilityChange)\r\n }\r\n}\r\n","export function parseJSONFromScript(id: string, doc: Document = document): T | null {\r\n const el = doc.getElementById(id)\r\n const isValidElement = el && el.tagName === 'SCRIPT' && el.getAttribute('type') === 'application/json'\r\n\r\n if (!isValidElement) {\r\n window.Sentry?.captureMessage('parseJSONFromScript', {\r\n extra: {\r\n el: el ? 'yes' : 'no',\r\n tagName: el?.tagName,\r\n type: el?.getAttribute('type'),\r\n },\r\n })\r\n }\r\n\r\n if (!isValidElement) return null\r\n\r\n try {\r\n return JSON.parse(el.textContent!)\r\n } catch (e) {\r\n Sentry.captureException(e)\r\n return null\r\n }\r\n}\r\n","export function ready(fn: (ev?: Event) => any) {\r\n if (document.readyState !== 'loading') {\r\n fn()\r\n return\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', fn)\r\n}\r\n","/**\n * Copyright (c) 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\nmodule.exports.Dispatcher = require('./lib/Dispatcher')\n","/*\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Dispatcher\n * @typechecks\n */\n\n\"use strict\";\n\nvar invariant = require('./invariant');\n\nvar _lastID = 1;\nvar _prefix = 'ID_';\n\n/**\n * Dispatcher is used to broadcast payloads to registered callbacks. This is\n * different from generic pub-sub systems in two ways:\n *\n * 1) Callbacks are not subscribed to particular events. Every payload is\n * dispatched to every registered callback.\n * 2) Callbacks can be deferred in whole or part until other callbacks have\n * been executed.\n *\n * For example, consider this hypothetical flight destination form, which\n * selects a default city when a country is selected:\n *\n * var flightDispatcher = new Dispatcher();\n *\n * // Keeps track of which country is selected\n * var CountryStore = {country: null};\n *\n * // Keeps track of which city is selected\n * var CityStore = {city: null};\n *\n * // Keeps track of the base flight price of the selected city\n * var FlightPriceStore = {price: null}\n *\n * When a user changes the selected city, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'city-update',\n * selectedCity: 'paris'\n * });\n *\n * This payload is digested by `CityStore`:\n *\n * flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'city-update') {\n * CityStore.city = payload.selectedCity;\n * }\n * });\n *\n * When the user selects a country, we dispatch the payload:\n *\n * flightDispatcher.dispatch({\n * actionType: 'country-update',\n * selectedCountry: 'australia'\n * });\n *\n * This payload is digested by both stores:\n *\n * CountryStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * CountryStore.country = payload.selectedCountry;\n * }\n * });\n *\n * When the callback to update `CountryStore` is registered, we save a reference\n * to the returned token. Using this token with `waitFor()`, we can guarantee\n * that `CountryStore` is updated before the callback that updates `CityStore`\n * needs to query its data.\n *\n * CityStore.dispatchToken = flightDispatcher.register(function(payload) {\n * if (payload.actionType === 'country-update') {\n * // `CountryStore.country` may not be updated.\n * flightDispatcher.waitFor([CountryStore.dispatchToken]);\n * // `CountryStore.country` is now guaranteed to be updated.\n *\n * // Select the default city for the new country\n * CityStore.city = getDefaultCityForCountry(CountryStore.country);\n * }\n * });\n *\n * The usage of `waitFor()` can be chained, for example:\n *\n * FlightPriceStore.dispatchToken =\n * flightDispatcher.register(function(payload) {\n * switch (payload.actionType) {\n * case 'country-update':\n * flightDispatcher.waitFor([CityStore.dispatchToken]);\n * FlightPriceStore.price =\n * getFlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n *\n * case 'city-update':\n * FlightPriceStore.price =\n * FlightPriceStore(CountryStore.country, CityStore.city);\n * break;\n * }\n * });\n *\n * The `country-update` payload will be guaranteed to invoke the stores'\n * registered callbacks in order: `CountryStore`, `CityStore`, then\n * `FlightPriceStore`.\n */\n\n function Dispatcher() {\n this.$Dispatcher_callbacks = {};\n this.$Dispatcher_isPending = {};\n this.$Dispatcher_isHandled = {};\n this.$Dispatcher_isDispatching = false;\n this.$Dispatcher_pendingPayload = null;\n }\n\n /**\n * Registers a callback to be invoked with every dispatched payload. Returns\n * a token that can be used with `waitFor()`.\n *\n * @param {function} callback\n * @return {string}\n */\n Dispatcher.prototype.register=function(callback) {\n var id = _prefix + _lastID++;\n this.$Dispatcher_callbacks[id] = callback;\n return id;\n };\n\n /**\n * Removes a callback based on its token.\n *\n * @param {string} id\n */\n Dispatcher.prototype.unregister=function(id) {\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.unregister(...): `%s` does not map to a registered callback.',\n id\n );\n delete this.$Dispatcher_callbacks[id];\n };\n\n /**\n * Waits for the callbacks specified to be invoked before continuing execution\n * of the current callback. This method should only be used by a callback in\n * response to a dispatched payload.\n *\n * @param {array} ids\n */\n Dispatcher.prototype.waitFor=function(ids) {\n invariant(\n this.$Dispatcher_isDispatching,\n 'Dispatcher.waitFor(...): Must be invoked while dispatching.'\n );\n for (var ii = 0; ii < ids.length; ii++) {\n var id = ids[ii];\n if (this.$Dispatcher_isPending[id]) {\n invariant(\n this.$Dispatcher_isHandled[id],\n 'Dispatcher.waitFor(...): Circular dependency detected while ' +\n 'waiting for `%s`.',\n id\n );\n continue;\n }\n invariant(\n this.$Dispatcher_callbacks[id],\n 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.',\n id\n );\n this.$Dispatcher_invokeCallback(id);\n }\n };\n\n /**\n * Dispatches a payload to all registered callbacks.\n *\n * @param {object} payload\n */\n Dispatcher.prototype.dispatch=function(payload) {\n invariant(\n !this.$Dispatcher_isDispatching,\n 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.'\n );\n this.$Dispatcher_startDispatching(payload);\n try {\n for (var id in this.$Dispatcher_callbacks) {\n if (this.$Dispatcher_isPending[id]) {\n continue;\n }\n this.$Dispatcher_invokeCallback(id);\n }\n } finally {\n this.$Dispatcher_stopDispatching();\n }\n };\n\n /**\n * Is this Dispatcher currently dispatching.\n *\n * @return {boolean}\n */\n Dispatcher.prototype.isDispatching=function() {\n return this.$Dispatcher_isDispatching;\n };\n\n /**\n * Call the callback stored with the given id. Also do some internal\n * bookkeeping.\n *\n * @param {string} id\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) {\n this.$Dispatcher_isPending[id] = true;\n this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload);\n this.$Dispatcher_isHandled[id] = true;\n };\n\n /**\n * Set up bookkeeping needed when dispatching.\n *\n * @param {object} payload\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) {\n for (var id in this.$Dispatcher_callbacks) {\n this.$Dispatcher_isPending[id] = false;\n this.$Dispatcher_isHandled[id] = false;\n }\n this.$Dispatcher_pendingPayload = payload;\n this.$Dispatcher_isDispatching = true;\n };\n\n /**\n * Clear bookkeeping used for dispatching.\n *\n * @internal\n */\n Dispatcher.prototype.$Dispatcher_stopDispatching=function() {\n this.$Dispatcher_pendingPayload = null;\n this.$Dispatcher_isDispatching = false;\n };\n\n\nmodule.exports = Dispatcher;\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n\"use strict\";\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n 'Invariant Violation: ' +\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/**\n * Copyright 2013-2014 Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\"use strict\";\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function(obj) {\n var ret = {};\n var key;\n if (!(obj instanceof Object && !Array.isArray(obj))) {\n throw new Error('keyMirror(...): Argument must be an object.');\n }\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n"],"names":["SettingsTab","SidebarDirection","chartsLib","window","FLibs","Charts","FREE_DATE_RANGES","ChartLayout","ChartLayoutWithGlobalState","ChartLayoutHeader","Sidebar","chartSettingsAsyncModule","preventClosingUnsavedChangesAsyncModule","useChartLayoutGlobalModelAsync","useChartLayoutGlobalModelAsyncModule","StockDetailTimeframeBar","Quote","Utils","Settings","convertTa","useModelState","getTimeframeGroupsWithHref","getIntradayChartConfig","withCompleteLayoutModelInit","withQuotePolling","ticker","marketSentimentChartConfig","layout","theme","document","documentElement","classList","contains","width","height","scrollable","editable","cross","charts","timeframe","scale","instrument","refreshData","stretch","panes","elements","type","overlays","MarketSentiment","Component","state","loading","enabled","chartConfig","_timer","_lastRequest","componentDidMount","this","_fetchData","setState","componentWillUnmount","cancel","clearTimeout","render","_jsx","cellPadding","cellSpacing","border","style","visibility","children","_jsxs","id","config","valign","className","disabled","onClick","e","_vote","src","alt","display","FinvizSettings","hasRedesignEnabled","sentiment","preventDefault","undefined","_this","async","urlQuery","arguments","length","callback","setTimer","hidden","setTimeout","apiRequest","json","quoteData","getData","updateAttributes","save","refresh","data","close","sum","volume","weight","date","Array","from","repeat","map","x","parseInt","premarket","aftermarket","afterChange","afterClose","drawMinutesPerDay","visibleMinutes","marketStartMinutes","premarketLengthMinutes","aftermarketLengthMinutes","el","getElementById","ReactDOM","mount","refreshInfo","parseJSONFromScript","interval","IndicesPollingIntervalInMs","getIndicesRefreshInterval","isStockFastRefreshAvailable","Default","Reduced","intervalCallbackOnWindowVisible","location","pathname","headers","ContentType","result","newDocument","DOMParser","parseFromString","newRefreshInfo","userId","version","reload","oldMarketStats","getElementsByClassName","newMarketStats","forEach","_","index","oldElement","item","newElement","innerHTML","oldSignalsLeft","newSignalsLeft","oldSignalsRight","newSignalsRight","oldHomepageBottom","newHomepageBottom","RenderRecentQuotes","gtag","event_category","finvizBannersLoaded","initFinvizBanners","refreshAds","refreshPage","newIndicesData","indices","dowQ","nasdaqQ","sap500Q","rutQ","Sentry","captureMessage","extra","allAvailableTickers","reduce","acc","cur","push","join","updateIndices","getMapsRefreshInterval","perfDataSecReq","mapPerf","MapTypeId","MapSubtypeId","perfDataGeoReq","hasGeoMaps","perfDataSec","perfDataGeo","Promise","all","FinvizIndexSecMap","mapActionCreators","FinvizIndexGeoMap","hasChartEvents","getChartConfig","barWidth","barMargin","colors","getCustomColorsFromCookies","specificChartFunctionality","SpecificChartFunctionality","renderChart","_ref","element","ready","mapBaseData","cacheBuster","query","rev","subtype","t","st","mapPerfScreener","search","uploadMap","method","body","URLSearchParams","file","replace","_targetScale","updateVisibleSparklines","treemap","hoveredNode","mapStore","mapNodeId","tickersToLoad","getVisibleTooltipTickers","includes","name","debouncedLoadSparklines","_lastSparklinesRequest","debounce","tickers","mapType","AppDispatcher","ActionTypes","ty","error","trailing","setHoveredNode","node","loadSparklineData","loadSparklinesCancel","resetSparklineData","changeTranslate","tx","zoom","translate","direction","offsetX","offsetY","zoomLevel","getNextZoomLevel","animate","toFixed","y","requestAnimationFrame","zoomIn","getPreviousZoomLevel","zoomOut","zoomAndTranslate","updateLayout","props","updateData","updateDimensions","nodes","find","updatePerfData","updatePerf","timestamp","getDate","_setOnPublish","getPublishCanvas","setupWidget","isWidget","Dispatcher","handleServerAction","action","payload","source","PayloadSources","dispatch","handleViewAction","keyMirror","RENDER_TREEMAP","CHANGE_TRANSLATE","SET_HOVERED_NODE","LOAD_SPARKLINES_STARTED","LOAD_SPARKLINES_COMPLETED","LOAD_SPARKLINES_FAILED","RESET_SPARKLINE_DATA","INIT_STARTED","INIT_FAILED","UPDATE_DATA","SET_PUBLISH_CANVAS","SET_WIDGET","SERVER_ACTION","VIEW_ACTION","Store","EventEmitter","static","emitChange","emit","CHANGE_EVENT","addChangeListener","on","removeChangeListener","removeListener","_hoveredNode","_mapNodeId","_dataVersion","_dataTimestamp","_getPublishCanvas","_sparklinesData","_isWidget","getHoveredNode","getSparklines","getDataVersion","getDataTimestamp","dispatchToken","ScaleId","NodeDepth","getCurrentDateInMs","Date","valueOf","getIsDocumentVisible","visibilityState","getInterval","refreshPromise","nextRefresh","refreshTimeout","Math","max","handleVisibilityChange","currentDateMs","addEventListener","removeEventListener","doc","isValidElement","tagName","getAttribute","JSON","parse","textContent","captureException","fn","readyState","module","exports","invariant","_lastID","$Dispatcher_callbacks","$Dispatcher_isPending","$Dispatcher_isHandled","$Dispatcher_isDispatching","$Dispatcher_pendingPayload","prototype","register","unregister","waitFor","ids","ii","$Dispatcher_invokeCallback","$Dispatcher_startDispatching","$Dispatcher_stopDispatching","isDispatching","condition","format","a","b","c","d","f","Error","args","argIndex","framesToPop","obj","key","ret","Object","isArray","hasOwnProperty"],"sourceRoot":""}