{"version":3,"file":"header.2d2508d1.js","mappings":"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","sources":["webpack://@finviz/website/./js/app/header/scam-notice.tsx","webpack://@finviz/website/./js/app/header/search.tsx","webpack://@finviz/website/./js/app/header/settings-dropdown.tsx","webpack://@finviz/website/./js/app/header/index.tsx","webpack://@finviz/website/./js/app/header/notice.tsx","webpack://@finviz/website/./js/app/shared/components/QueryClientContext.tsx","webpack://@finviz/website/./js/app/shared/ready.ts","webpack://@finviz/website/./js/app/shared/sentry/constants.ts","webpack://@finviz/website/./js/app/shared/sentry/init.ts"],"sourcesContent":["import Notice from './notice'\r\n\r\nexport default function ScamNotice() {\r\n return (\r\n \r\n We have been notified by several users from Russia and other Russian-speaking countries, that they were contacted\r\n by various individuals by phone, pretending to be employees of FINVIZ.com, offering fraudulent investment\r\n services. Please note that these activities are not related to FINVIZ.com in any way, we do not have any employees\r\n or partners in this region.\r\n
\r\n If you notice such activity, please send us an email at{' '}\r\n \r\n support@finviz.com\r\n \r\n . Thank you.\r\n
\r\n
В последнее время участились случаи обращений пользователей из России и русскоговорящих регионах, которые\r\n утверждали, что с ними связывались по телефону мошеннические лица, выдававшие себя за сотрудников компании\r\n FINVIZ.com, предлагая мошеннические инвестиционные услуги. Обратите внимание, что эти мероприятия не связаны с\r\n FINVIZ.com в любом случае, у нас нет никаких сотрудников или партнеров в этом регионе. Если вы заметили такую\r\n активность, пожалуйста, отправьте нам электронное письмо по адресу{' '}\r\n \r\n support@finviz.com\r\n \r\n . Спасибо.\r\n
\r\n )\r\n}\r\n","import { ChangeEvent, FocusEvent, FormEvent, KeyboardEvent, MouseEvent, createRef } from 'react'\r\nimport { Component } from 'react'\r\n\r\nimport { getInstrumentForTicker } from '../../main/util'\r\nimport { getSanitizedTicker } from '../shared/ticker-sanitizer'\r\n\r\nvar lastRequest: XMLHttpRequest | undefined\r\nfunction fetch(input: string, cb: (data: any[]) => void, errCb?: Function) {\r\n if (lastRequest) {\r\n lastRequest.abort()\r\n }\r\n\r\n if (input === '') {\r\n setTimeout(function () {\r\n cb([])\r\n }, 0)\r\n return\r\n }\r\n\r\n var request: XMLHttpRequest | null = new XMLHttpRequest()\r\n request.open('GET', '/api/suggestions.ashx?input=' + encodeURIComponent(input), true)\r\n\r\n request.onreadystatechange = function () {\r\n if (this.readyState === 4) {\r\n if (this.status >= 200 && this.status < 400) {\r\n var data = JSON.parse(this.responseText)\r\n cb(data)\r\n } else {\r\n errCb?.(this)\r\n }\r\n }\r\n }\r\n\r\n request.send()\r\n lastRequest = request\r\n request = null\r\n}\r\n\r\nfunction getRedirectUrl(tickerRaw: string) {\r\n let ticker = getSanitizedTicker(tickerRaw, true)\r\n var url = ''\r\n var instrument = getInstrumentForTicker(ticker)\r\n if (instrument === 'crypto' || instrument === 'forex' || instrument === 'futures') {\r\n ticker = ticker.substring(1)\r\n url = `/${instrument}_charts.ashx?t=`\r\n } else {\r\n url = '/quote.ashx?t='\r\n }\r\n return url + encodeURIComponent(ticker) + (FinvizSettings.quoteSearchExt ?? '')\r\n}\r\n\r\nexport interface SearchProps {\r\n focus?: boolean\r\n}\r\n\r\ninterface SearchState {\r\n input: string\r\n highlight: string\r\n data: any[]\r\n focused: boolean\r\n selected: number\r\n}\r\n\r\nclass Search extends Component {\r\n state: SearchState = { input: '', highlight: '', data: [], focused: false, selected: -1 }\r\n\r\n render() {\r\n var focus = !!this.props.focus\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n _onChange = (value: string) => {\r\n fetch(\r\n value,\r\n function (data: any[]) {\r\n // @ts-ignore - @REFACTOR\r\n this.setState({ data: data, highlight: value })\r\n }.bind(this)\r\n )\r\n this.setState({ input: value, selected: -1 })\r\n }\r\n\r\n _onFocus = () => {\r\n this.setState({ focused: true })\r\n }\r\n\r\n _onBlur = () => {\r\n this.setState({ focused: false })\r\n }\r\n\r\n _onArrowUp = () => {\r\n if (this.state.selected > 0) {\r\n var selected = this.state.selected - 1\r\n this.setState({ selected: selected, input: this.state.data[selected].ticker })\r\n }\r\n }\r\n\r\n _onArrowDown = () => {\r\n if (this.state.selected < this.state.data.length - 1) {\r\n var selected = this.state.selected + 1\r\n this.setState({ selected: selected, input: this.state.data[selected].ticker })\r\n }\r\n }\r\n}\r\n\r\ninterface InputProps {\r\n value: string\r\n focus: boolean\r\n onChange: (value: string) => void\r\n onFocus: Function\r\n onBlur: Function\r\n onArrowUp: Function\r\n onArrowDown: Function\r\n}\r\n\r\ninterface InputState {\r\n firstFocus: boolean\r\n placeholderSupported: boolean\r\n}\r\n\r\nclass Input extends Component {\r\n inputRef = createRef()\r\n\r\n constructor(props: InputProps) {\r\n super(props)\r\n\r\n var placeholderSupported = document.createElement('input').placeholder !== undefined\r\n this.state = { firstFocus: true, placeholderSupported }\r\n }\r\n\r\n render() {\r\n const placeholderText = 'Search ticker, company or profile'\r\n var value = this.props.value\r\n return (\r\n
\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n _onChange = (e: ChangeEvent) => {\r\n e.preventDefault()\r\n this.props.onChange(e.target.value)\r\n }\r\n\r\n _onSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n // @ts-ignore - @REFACTOR\r\n window.location = getRedirectUrl(this.props.value)\r\n }\r\n\r\n _onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\r\n e.preventDefault()\r\n }\r\n }\r\n\r\n _onFocus = (e: FocusEvent) => {\r\n this.props.onFocus(e)\r\n }\r\n\r\n _onBlur = (e: FocusEvent) => {\r\n this.props.onBlur(e)\r\n }\r\n\r\n _onKeyUp = (e: KeyboardEvent) => {\r\n if (e.key === 'ArrowUp') {\r\n e.preventDefault()\r\n this.props.onArrowUp()\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault()\r\n this.props.onArrowDown()\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this._focus()\r\n }\r\n\r\n componentDidUpdate() {\r\n this._focus()\r\n }\r\n\r\n _focus() {\r\n if (this.props.focus && this.state.firstFocus && !this._isMobile()) {\r\n this.inputRef.current!.focus()\r\n this.setState({ firstFocus: false })\r\n }\r\n }\r\n\r\n _isMobile() {\r\n return (\r\n navigator.userAgent.match(/Android/i) ||\r\n navigator.userAgent.match(/webOS/i) ||\r\n navigator.userAgent.match(/iPhone/i) ||\r\n navigator.userAgent.match(/iPad/i) ||\r\n navigator.userAgent.match(/iPod/i) ||\r\n navigator.userAgent.match(/BlackBerry/i) ||\r\n navigator.userAgent.match(/Windows Phone/i)\r\n )\r\n }\r\n}\r\n\r\ninterface SuggestionsBoxProps {\r\n data: any[]\r\n input: string\r\n focused: boolean\r\n highlight: string\r\n selected: number\r\n}\r\n\r\nclass SuggestionsBox extends Component {\r\n render() {\r\n var data = this.props.data\r\n var searchLink = '/search.ashx?p=' + encodeURIComponent(this.props.input)\r\n return (\r\n 0 || this.props.highlight.length > 2) ? 'table' : 'none',\r\n }}\r\n cellPadding=\"0\"\r\n cellSpacing=\"0\"\r\n // @ts-ignore - @REFACTOR\r\n border=\"0\"\r\n >\r\n \r\n {data.map((row, index) => (\r\n \r\n \r\n \r\n {row.exchange}\r\n \r\n ))}\r\n {this.props.highlight.length > 0 && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n (window.location = searchLink)}\r\n className=\"search-company\"\r\n >\r\n Search\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n }\r\n\r\n _onClick(ticker: string, e: MouseEvent) {\r\n if (e.button === 0) {\r\n // @ts-ignore - @REFACTOR\r\n window.location = getRedirectUrl(ticker)\r\n }\r\n }\r\n\r\n _formatTicker(ticker: string) {\r\n var hightlight = this.props.highlight.toUpperCase()\r\n return ticker.replace(hightlight, '' + hightlight + '')\r\n }\r\n\r\n _formatCompany(text: string) {\r\n var input = this.props.highlight\r\n var re = new RegExp(this._escapeRegExp(input), 'gi')\r\n return text.replace(re, function (match) {\r\n return '' + match + ''\r\n })\r\n }\r\n\r\n _escapeRegExp(str: string) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n }\r\n}\r\n\r\nexport default Search\r\n","import { Component, MouseEvent as ReactMouseEvent } from 'react'\r\n\r\nclass Settings extends Component {\r\n state = { open: false }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener('click', this._onDocumentClick)\r\n }\r\n\r\n render() {\r\n var classes = 'nav-link sign-in account-btn is-account'\r\n if (this.state.open) {\r\n classes += ' is-open'\r\n }\r\n return (\r\n
\r\n \r\n \r\n {FinvizSettings.name}\r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n _showDropDown = (e: ReactMouseEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n if (this.state.open) {\r\n this.setState({ open: false })\r\n return\r\n }\r\n\r\n this.setState({ open: true })\r\n document.addEventListener('click', this._onDocumentClick)\r\n }\r\n\r\n _hideDropDown = () => {\r\n this.setState({ open: false })\r\n document.removeEventListener('click', this._onDocumentClick)\r\n }\r\n\r\n _onDocumentClick = (e: MouseEvent) => {\r\n // @ts-ignore @REFACTOR\r\n if (e.target.className.indexOf?.('menu-item') === -1) {\r\n this._hideDropDown()\r\n }\r\n }\r\n}\r\n\r\nexport default Settings\r\n","import '../shared/sentry/init'\r\n\r\nimport React from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport { Search } from '../../main/components/search'\r\nimport { withQueryClientContext } from '../shared/components/QueryClientContext'\r\nimport { isIpad, isMobile } from '../shared/isMobile'\r\nimport { ready } from '../shared/ready'\r\nimport ScamNotice from './scam-notice'\r\nimport OldSearch, { SearchProps } from './search'\r\nimport Settings from './settings-dropdown'\r\nimport { Time } from './time'\r\n\r\n/**\r\n * The script below allows iPads in landscape mode to size the page naturally\r\n * instead of forcing 1024px viewport which results in a zoomed in view\r\n */\r\nif (isIpad()) {\r\n const minViewport = 1024\r\n const viewportString = { fixed: `width=${minViewport}`, fluid: 'width=device-width, initial-scale=1.0' }\r\n\r\n const getViewportWidth = () => Math.round(window.innerWidth * (window.visualViewport?.scale || 1))\r\n const setViewport = (fixedViewport: boolean) =>\r\n document\r\n .querySelector('meta[name=viewport]')\r\n ?.setAttribute('content', fixedViewport ? viewportString.fixed : viewportString.fluid)\r\n\r\n let viewportWidth = getViewportWidth()\r\n\r\n setViewport(viewportWidth <= minViewport)\r\n\r\n window.addEventListener('resize', function () {\r\n const newViewportWidth = getViewportWidth()\r\n // iOS fires resize on overscroll\r\n if (viewportWidth === newViewportWidth) return\r\n viewportWidth = newViewportWidth\r\n setViewport(newViewportWidth <= minViewport)\r\n })\r\n}\r\n\r\nfunction renderAccountDropdown(element: Element | null) {\r\n if (!element) return\r\n\r\n ReactDOM.render(, element)\r\n}\r\n\r\n/**\r\n * Display scam notice when language matches 'ru' or 'et'\r\n */\r\nfunction renderScamNotice(element: Element | null) {\r\n const languages = navigator.languages instanceof Array ? navigator.languages : [navigator.language]\r\n const targetLanguages = ['ru', 'et']\r\n const isTargetLanguage = languages\r\n .map((language) => language.toLowerCase())\r\n .some((language) => targetLanguages.some((targetLanguage) => language.includes(targetLanguage)))\r\n\r\n if (!element || !isTargetLanguage) return\r\n\r\n ReactDOM.render(, element)\r\n}\r\n\r\nconst hasEnabledRedesign = FinvizSettings.hasRedesignEnabled\r\nfunction renderSearch(props?: SearchProps, retries = 0) {\r\n const container = document.getElementById('search')\r\n\r\n if (!container && retries < 10) {\r\n setTimeout(() => renderSearch(props, retries + 1), 300)\r\n }\r\n\r\n if (!hasEnabledRedesign) {\r\n return ReactDOM.render(, container)\r\n }\r\n\r\n const SearchComponent = withQueryClientContext(Search)\r\n return ReactDOM.render(\r\n ,\r\n container\r\n )\r\n}\r\n\r\nlet searchAutoFocus = false\r\nready(function () {\r\n if (hasEnabledRedesign) {\r\n renderSearch({ focus: searchAutoFocus })\r\n } else {\r\n renderSearch()\r\n }\r\n const timeContainer = document.getElementById('time')\r\n if (timeContainer) ReactDOM.render(