{"version":3,"sources":["assets/amazon_logo.png","components/Search/index.js","utils/utils.js","components/Header/index.js","components/Comment/index.js","components/Spinner/index.js","components/Filter/index.js","components/SuggestionBox/index.js","components/AdblockDetect/index.js","components/SubPage/index.js","components/PrivacyPolicy/index.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","ListboxComponent","React","forwardRef","props","ref","children","role","other","itemCount","Array","isArray","length","height","Math","min","className","width","rowHeight","overscanCount","rowCount","rowRenderer","cloneElement","index","style","Search","memo","options","onChange","Autocomplete","freeSolo","renderInput","params","id","TextField","label","margin","variant","inputProps","value","isMobile","document","documentElement","clientWidth","sortBy","comments","sortOption","sortedComments","sort","a","b","comment","score","created","logPageViewEvent","pathname","window","gtag","page_title","page_location","location","page_path","getPathName","createBrowserHistory","substring","getSubNameByPathname","toLowerCase","replace","Header","handleSubmit","event","history","preventDefault","onScroll","searchRef","offsetTop","pageYOffset","ppRef","state","subs","createRef","addEventListener","this","fetch","response","status","json","setState","removeEventListener","nextProps","nextState","to","Component","withRouter","TAG","getRefLink","url","indexOf","transformLinkUri","uri","includes","myUrl","ReactMarkdown","uriTransformer","CommentText","body","useState","isOverflow","setIsOverflow","isCollapsed","setIsCollapsed","useRef","useEffect","current","clientHeight","linkTarget","source","tabIndex","onClick","AmazonPreviewImage","productUrl","permalink","productId","productImgSrc","imgBorked","setImgBorked","href","target","rel","onReflinkClick","src","AmazonLogo","alt","onLoad","e","img","naturalWidth","naturalHeight","onError","AmazonProductPreview","title","marginTop","marginBottom","marginWidth","marginHeight","scrolling","frameBorder","loading","toUpperCase","Comment","showSubreddit","shouldDisplayProductPreview","username","reflink","subreddit","dpRegexMatch","match","toString","productRegexMatch","lazy","getProductIdByURL","getImgSrc","Spinner","Filter","onFilter","SuggestionBox","AdblockDetect","usingAdblock","fakeAdBanner","offsetHeight","setIsAdblockEnabled","r","visiblity","pointerEvents","isFirefox","navigator","userAgent","disallowListTop100","SubPage","prevRoute","onDropdownSelect","isAdblockEnabled","val","initialComments","filter","subName","updateStateByRoute","data","amazonCookiesDisabled","JSON","parse","localStorage","getItem","map","idx","key","random","restOfComments","generateCommentsJSX","properlyFormattedSubName","getRestOfComments","pageTitle","descriptionMeta","debouncedOnFilter","debounce","Helmet","name","content","btnSize","onSelect","eventKey","noFilteredResultsComponent","sorryComponent","PrivacyPolicy","setAmazonCookiesDisabled","ToggleButton","selected","disabled","setItem","App","exact","path","Boolean","hostname","ReactDOM","render","StrictMode","getElementById","serviceWorker","ready","then","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.4250640d.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABPlBMVEUAAAAAAAAGBgYAAAAFBgb2ph8FBgYGBgYEBAQICAj/oyQAAAD2ph/2ph8GBgb2px8GBgYEBgYJCQkAAwMFBgb2ph/2ph8FBgYFBgb2pR4FBQUFBwcFBQUFBQX2ph/2ph4GBgb4ph73piD4pSAAAAAFBgYFBgb2ph/2pR/2ph8FBgYFBgb2px8EBgb3ph8EBgb2ph4FBwcFBQX3ph8GBgb2ph/5pyD2px7zqSH/gAD//wAFBgb3ph8FBgYFBgYFBgYFBwcFBQX2ph8EBgb1ph4FBgb2ph/2px4EBwcFBQX1px4EBwcFBQX1qCAFBQUGBgYHBwf3oh/xpRz2ph/3ph/2ph8FBgb2px/2ph4EBgb2ph72ph72pR/2px8FBQX3ph/2ph/0pCL/qhz2ph/2px/3ph/3px/3px0FBgb2ph9cXd7SAAAAaHRSTlMAAlgK9fTvgjwgBwb874hpXEwbE/v54eDavLeakouBZFpEPw4O+ejnza2opZt8e3h1bmleVTQnGhQCAdfU0svGxL+xrqCglIZ0ZUxFNjAvKCUhEtzRzMrFwbGojotvXVlRFgn227SWO+QrbMQAAAKhSURBVFjD7ZVnX+JAEMbHEnqRIr0IKCACUkTsvdMEey/Xdr//FzhCzKwajmy4N/e7n/83JMM8z2ZntsAX/zsjp6Pz4WBIXzKMDaOuZXRExr1ZdGmUF73kI+N6LZ/h3CZKVo3ceoOO9CPp5NSfSnolgRG++W+RP+EAHhaYwL2xv7tOGHPAwybmB3uTrvswoDPzdADTbXJNZjDUAnUm5GQvDpdBAwNPD8eJhB5DOTRYAA5choVieG47M42RYzQYhaGY+FuD0rAG5vrUfDCwniTIFL94zBHexPZpN3CG+u+HCc7TICe2cniD6QAKhjIwS3rcTrajjDYDG5P7Rnvn2JSmIhpZ7XNvu+FR0zqYw+zwUEvZjA3Q4WY40mJQw+TdPlV5BFXYaDaMXWKsBKrolSVwESQEqoTYFJgnsqp+sM9j8sxbEZtuwnBoOdT3e8MZfeQdPtUbskUYAYfToP+0LYOgxioZjFG9CANJulSPIp9C5C5ib7wt7ouBMe4A84b0uOUCDurJD/qtptgLb+9yHQMuXHr2EesOsZmSQw6XUaJSzucLJy/ic3ypXyFqtpvty5vgMav5dKkpP1ZmqcRkrPv2UzhECz66csHjEUSHQvd1OW8R7qqggXbVJP50flD6BCKxFJ3MVkATpgRAlNK49Fa9opReRBO86uV41mo1wSEVTLJfZFIsyU65o65eadynusnZFUjTHRZe9FMRy3Ukbhqgrpb3PGLe2QnAEqWx98bP53Jvrg6ilYTis9snhb0zKUMoiIPYqf9TytMaZVjTs9n7/IPdbn+IHNz609/YPxGp7RfWRcX04rMWqkLa/iolNywx6MOL3T/A43uEDboo6xV0ng/W+pikbqNt4Oa1UT7c8695UoLVc369cxf9lYAv/l1+A3XTlpnOSf+RAAAAAElFTkSuQmCC\"","import React from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport SearchIcon from '@material-ui/icons/Search.js';\nimport { List } from 'react-virtualized';\nimport './index.css';\n\nconst ListboxComponent = React.forwardRef(function ListboxComponent(props, ref) {\n const { children, role, ...other } = props;\n const itemCount = Array.isArray(children) ? children.length : 0;\n const itemSize = 50;\n const height = Math.min(250, itemSize * itemCount);\n\n return (\n
\n
\n {\n return React.cloneElement(children[props.index], {\n style: props.style\n });\n }}\n role={role}\n />\n
\n
\n );\n});\n\nconst Search = React.memo((props) => {\n const { options, onChange } = props;\n return (\n (\n
\n \n 0 ? 'hidden' : ''} />\n
\n )}\n />\n );\n});\n\nexport default Search;","import { createBrowserHistory } from 'history';\n\nexport function isMobile() {\n return document.documentElement.clientWidth < 1200;\n}\n\nexport function sleep(s) {\n return new Promise((resolve) => setTimeout(resolve, s * 1000));\n}\n\nexport function getProductIdByURL(url) {\n if (!url) {\n return;\n }\n\n const dpRegexMatch = url.match(/\\/dp\\/[a-z0-9A-Z]{10}/);\n if (dpRegexMatch) {\n // remove e.g. /dp/DPRODUC93f => DPRODUC93f\n return dpRegexMatch.toString().substring(4);\n }\n\n const productRegexMatch = url.toLowerCase().match(/\\/product\\/[a-z0-9]{10}/);\n if (productRegexMatch) {\n // remove e.g. /product/DPRODUC93f => DPRODUC93f\n return productRegexMatch.toString().substring(9);\n }\n\n const lazy = url.match(/\\/[a-z0-9A-Z]{10}/);\n if (lazy) {\n // remove e.g. /DPRODUC93f => DPRODUC93f\n return lazy.toString().substring(1);\n }\n}\n\nexport const lowestScoreFirst = 'lowest score first';\nexport const highestScoreFirst = 'highest score first';\nexport const recentFirst = 'newest first';\nexport const oldestFirst = 'oldest first';\nexport function sortBy(comments, sortOption) {\n let sortedComments;\n switch (sortOption) {\n case highestScoreFirst:\n sortedComments = comments.sort((a, b) => b.props.comment.score - a.props.comment.score);\n break;\n case lowestScoreFirst:\n sortedComments = comments.sort((a, b) => a.props.comment.score - b.props.comment.score);\n break;\n case recentFirst:\n sortedComments = comments.sort((a, b) => b.props.comment.created - a.props.comment.created);\n break;\n case oldestFirst:\n sortedComments = comments.sort((a, b) => a.props.comment.created - b.props.comment.created);\n break;\n default:\n sortedComments = comments;\n break;\n }\n return sortedComments;\n}\n\nexport function logPageViewEvent(pathname) {\n window.gtag && window.gtag('event', 'page_view', {\n page_title: pathname,\n page_location: window.location,\n page_path: pathname\n });\n}\n\nexport function getPathName() {\n const pathname = createBrowserHistory().location.pathname\n return pathname.substring(0, 3) === '/r/' ? pathname.substring(2) : pathname;\n}\n\nexport function getSubNameByPathname(pathname) {\n return pathname.substring(1).toLowerCase().replace('/', '');\n}\n","import React, { Component } from 'react';\nimport { withRouter, Link } from 'react-router-dom';\nimport Search from '../Search';\nimport './index.css';\nimport { isMobile } from '../../utils/utils';\nimport { throwStatement } from '@babel/types';\n\nclass Header extends Component {\n constructor(props) {\n super(props);\n this.state = { subs: [] };\n this.searchRef = React.createRef();\n this.ppRef = React.createRef();\n }\n\n async componentDidMount() {\n if (isMobile()) {\n window.addEventListener('scroll', this.onScroll);\n }\n\n const response = await fetch('https://f.shopbysub.com/sublist.json');\n if (response.status !== 200 && response.status !== 304) {\n return;\n }\n const subs = await response.json();\n this.setState({ subs });\n }\n\n componentWillUnmount() {\n if (isMobile()) {\n window.removeEventListener('scroll', this.onScroll);\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n return this.state.subs.length === 0 && nextState.subs.length > 0;\n }\n\n handleSubmit = (event, value) => {\n if (!value) {\n return;\n }\n\n // Prevents any trailing slash from mucking up the request for comments\n const pathname = this.props.history.location.pathname;\n if (pathname !== '/' && pathname[pathname.length - 1] === '/') {\n this.props.history.location.pathname = pathname.substring(0, pathname.length - 1);\n }\n\n this.props.history.replace(value);\n event.preventDefault();\n }\n\n onScroll = () => {\n if (this.searchRef) {\n let offsetTop = this.searchRef.offsetTop;\n if (window.pageYOffset > offsetTop) {\n this.searchRef.className = 'sticky';\n this.ppRef.className = 'extra-padding-top'\n } else {\n this.searchRef.className = '';\n this.ppRef.className = ''\n }\n }\n }\n\n render() {\n const { subs } = this.state;\n return (\n
\n ShopBySub.com\n
this.searchRef = ref}>\n
\n \n
\n
\n Discover products mentioned on Reddit\n
this.ppRef = ref}>\n Privacy Policy\n
\n
\n )\n }\n}\n\nexport default withRouter(Header);","import React, { useState, useEffect, useRef } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport Launch from '@material-ui/icons/Launch';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport { Link } from 'react-router-dom';\nimport AmazonLogo from '../../assets/amazon_logo.png';\nimport './index.css';\nimport { getProductIdByURL } from '../../utils/utils';\n\nconst TAG = 'sbs0e48-20';\n\nfunction getRefLink(url) {\n const queryIdx = url.indexOf('?');\n if (queryIdx === -1) {\n return `${url}?tag=${TAG}`;\n } else {\n const tagIdx = url.toLowerCase().indexOf('tag');\n if (tagIdx === -1) {\n return `${url}&tag=${TAG}`;\n } else {\n const regex = /tag=[^&]*/gi;\n return url.replace(regex, `tag=${TAG}`);\n }\n }\n}\n\nfunction getImgSrc(productId) {\n if (typeof productId !== 'string') {\n return;\n }\n // return `//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=${productId.toUpperCase()}&Format=_SL250_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=${TAG}&language=en_US`; // Deprecated\n return `https://images.amazon.com/images/P/${productId.toUpperCase()}.jpg`;\n}\n\nconst transformLinkUri = (uri) => {\n if (uri && uri.toLowerCase().includes('amazon')) {\n const myUrl = getRefLink(uri);\n return ReactMarkdown.uriTransformer(myUrl);\n }\n return ReactMarkdown.uriTransformer(uri);\n};\n\nconst onReflinkClick = (productUrl, permalink) => {\n window.gtag && window.gtag('event', 'click', {\n 'event_category': 'Product',\n 'event_label': permalink,\n 'product_url': productUrl,\n });\n}\n\nconst CommentText = React.memo((props) => {\n const { body } = props;\n const [isOverflow, setIsOverflow] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(true);\n const ref = useRef(null);\n useEffect(() => setIsOverflow(ref.current.clientHeight > 100), []);\n\n return (\n
\n
\n \n
\n {isOverflow &&\n
setIsCollapsed(!isCollapsed)}>\n {isCollapsed ? 'expand' : 'collapse'}\n {isCollapsed ? : }\n
\n }\n
\n );\n});\n\nconst AmazonPreviewImage = React.memo(props => {\n const { productUrl, permalink, productId, productImgSrc } = props;\n const [imgBorked, setImgBorked] = useState(false);\n\n // Check if the image is a single pixel fallback, to set error state\n const handleImageLoad = (e) => {\n const img = e.target;\n if (img.naturalWidth === 1 && img.naturalHeight === 1) {\n setImgBorked(true); // Image is likely a 1x1 fallback\n e.target.style = 'display: none';\n }\n };\n\n return (\n onReflinkClick(productUrl, permalink)}>\n \"Amazon\n \n
\n {productId && !imgBorked ? \"Product { e.target.style = 'display: none'; setImgBorked(true) }} /> : 'Link to product'}\n
\n
\n );\n});\n\nconst AmazonProductPreview = React.memo(props => {\n const { productId } = props;\n return (\n
\n \n \n
\n );\n});\n\nconst Comment = React.memo((props) => {\n const { showSubreddit, shouldDisplayProductPreview } = props;\n const { username, score, body, reflink, permalink, subreddit } = props.comment;\n const productId = getProductIdByURL(reflink);\n const productImgSrc = getImgSrc(productId);\n const productUrl = `https://${getRefLink(reflink)}`;\n\n return (\n
\n {showSubreddit && /r/{subreddit}}\n {!shouldDisplayProductPreview && }\n {productId && shouldDisplayProductPreview && }\n 0 ? 'score-positive score' : 'score-negative score'}>{score > 0 ? `+${score}` : score}\n \n
\n permalink\n \n
\n
\n );\n});\n\nexport default Comment;\n","import React from 'react';\nimport './index.css';\n\nconst Spinner = React.memo(() => {\n return (\n
\n );\n});\n\nexport default Spinner;","import React from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport './index.css';\n\nconst Filter = React.memo((props) => {\n const { onFilter } = props;\n return (\n onFilter(event.target.value)} role=\"listbox\" label=\"filter\" margin=\"normal\" variant=\"outlined\" />\n );\n});\n\nexport default Filter;","import React from 'react';\nimport { isMobile } from '../../utils/utils';\n\nconst SuggestionBox = React.memo(() => {\n return (\n \n );\n});\n\nexport default SuggestionBox;","import React, { Component } from 'react';\n\nclass AdblockDetect extends Component {\n constructor(props) {\n super(props);\n this.state = { usingAdblock: false };\n }\n\n componentDidMount() {\n this.setState({ usingAdblock: this.fakeAdBanner.offsetHeight === 0 });\n }\n\n componentDidUpdate() {\n this.props.setIsAdblockEnabled(this.state.usingAdblock);\n }\n\n render() {\n\n return (\n (this.fakeAdBanner = r)}\n style={{ height: '1px', width: '1px', visiblity: 'none', pointerEvents: 'none' }}\n className=\"adBanner\"\n />\n );\n }\n}\n\nexport default React.memo(AdblockDetect);","import React, { Component } from 'react';\nimport { Helmet } from \"react-helmet\";\nimport { DropdownButton, MenuItem } from '@trendmicro/react-dropdown';\nimport '@trendmicro/react-buttons/dist/react-buttons.css';\nimport '@trendmicro/react-dropdown/dist/react-dropdown.css';\nimport debounce from 'lodash/debounce';\nimport Header from '../Header';\nimport Comment from '../Comment';\nimport Spinner from '../Spinner';\nimport Filter from '../Filter';\nimport { withRouter } from 'react-router-dom';\nimport './index.css';\nimport { sortBy, highestScoreFirst, lowestScoreFirst, recentFirst, oldestFirst, logPageViewEvent, getPathName, getSubNameByPathname } from '../../utils/utils';\nimport SuggestionBox from '../SuggestionBox';\nimport AdblockDetect from '../AdblockDetect';\n\nconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n\nconst disallowListTop100 = {'MensRights': true, 'Lolita': true, 'AskMen': true, 'pregnant': true};\n\nclass SubPage extends Component {\n prevRoute = '';\n initialComments;\n\n constructor(props) {\n super(props);\n this.state = { subName: '', comments: [], loading: false, sortOption: highestScoreFirst, isAdblockEnabled: false };\n }\n\n componentDidMount() {\n this.updateStateByRoute();\n }\n\n componentDidUpdate() {\n if (this.prevRoute !== getPathName()) {\n this.updateStateByRoute();\n }\n }\n\n get sorryComponent() {\n return (\n <>\n Sorry... :( I don't have any links for that sub\n \n \n );\n }\n\n get noFilteredResultsComponent() {\n return (\n No results\n );\n }\n\n generateCommentsJSX(data, subName) {\n // Get tracking state\n const amazonCookiesDisabled = JSON.parse(localStorage.getItem('amazonCookiesDisabled'));\n const shouldDisplayProductPreview = !(this.state.isAdblockEnabled || isFirefox || amazonCookiesDisabled);\n\n return (subName === 'Most Recent' ? data.filter(comment => !(comment.subreddit in disallowListTop100)) : data).map((comment, idx) => {\n return ;\n });\n }\n\n async getRestOfComments() {\n const { subName, comments } = this.state;\n if (subName === 'Most Recent') {\n return;\n }\n\n const response = await fetch(`https://f.shopbysub.com/comments/${subName.toLowerCase()}-rest.json`);\n if (response.status !== 200 && response.status !== 304) {\n return;\n }\n\n const data = await response.json();\n const restOfComments = this.generateCommentsJSX(data, subName);\n const sortedComments = sortBy([...comments, ...restOfComments], this.state.sortOption);\n this.setState({ comments: sortedComments });\n }\n\n async updateStateByRoute() {\n // Clear any comments that were saved\n this.initialComments = null;\n\n const pathname = getPathName();\n logPageViewEvent(pathname); // GA\n this.prevRoute = pathname;\n\n const subName = pathname === '/' ? 'Most Recent' : getSubNameByPathname(pathname);\n this.setState({ subName, sortOption: subName === 'Most Recent' ? recentFirst : highestScoreFirst, loading: true });\n const response = pathname === '/' ? await fetch(`https://f.shopbysub.com/recent100.json`) : await fetch(`https://f.shopbysub.com/comments/${subName}.json`);\n if (response.status !== 200 && response.status !== 304) {\n this.setState({ loading: false });\n return this.setState({ comments: [] });\n }\n\n const data = await response.json();\n const comments = this.generateCommentsJSX(data, subName);\n const sortedComments = sortBy(comments, this.state.sortOption);\n const properlyFormattedSubName = subName === 'Most Recent' ? subName : data.length > 1 && data[0].subreddit;\n\n this.setState({ comments: sortedComments, subName: properlyFormattedSubName || subName, loading: false });\n this.getRestOfComments();\n }\n\n onDropdownSelect = (sortOption) => {\n const comments = sortBy(this.state.comments, sortOption);\n this.setState({ comments, sortOption });\n }\n\n setIsAdblockEnabled = (isAdblockEnabled) => {\n this.setState({ isAdblockEnabled });\n }\n\n onFilter = (val) => {\n if (!this.initialComments) {\n this.initialComments = this.state.comments;\n }\n const comments = val ?\n this.initialComments.filter(comment => comment.props.comment.body.toLowerCase().includes(val.toLowerCase())) :\n this.initialComments;\n this.setState({ comments });\n }\n\n render() {\n const { subName, comments, loading, sortOption } = this.state;\n const pageTitle = subName === 'Most Recent' ? `ShopBySub.com - Amazon products mentioned on Reddit` : `ShopBySub.com - Shop within the ${subName} subreddit`;\n const descriptionMeta = subName === 'Most Recent' ? `Browse and shop upvoted products on Reddit.` : `Discover products recommended by users within the ${subName} subreddit.`;\n const debouncedOnFilter = debounce(this.onFilter, 150);\n\n return (\n <>\n \n {pageTitle}\n \n \n
\n
\n

\n {subName === 'Most Recent' ?\n <>\n Most Recent\n
\n New comment ingestion disabled due to Reddit API cost surge, sorry!\n :\n `/r/${subName}`}\n

\n As an Amazon Associate I earn from qualifying purchases\n
\n \n {highestScoreFirst}\n {lowestScoreFirst}\n {recentFirst}\n {oldestFirst}\n \n \n
\n
\n {loading ? : comments.length > 0 ? comments : this.initialComments && this.initialComments.length > 0 ? this.noFilteredResultsComponent : this.sorryComponent}\n
\n
\n \n \n )\n }\n}\n\nexport default withRouter(SubPage);\n","import React, { useState } from 'react';\nimport ToggleButton from '@material-ui/lab/ToggleButton';\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport Header from '../Header';\nimport './index.css';\n\nconst privacyPolicyText = `\\tShopBySub.com does not collect personally identifiable information. ShopBySub.com collects general anonymized session analytics via Google Analytics. ShopBySub.com embeds Amazon iframes in order to display pricing information. We have no control over tracking cookies within this iframe.\\nIf you would like to disable Amazon's tracking cookies, you may do so using the checkbox below. You will no longer be able to see product pricing information unless you check the checkbox to reenable Amazon cookies. This setting has no effect in Firefox or if you're running adblock software as Amazon tracking cookies are disabled by default.`;\n\nconst storeAmazonCookiesSetting = (disabled) => {\n localStorage.setItem('amazonCookiesDisabled', disabled);\n}\n\nconst PrivacyPolicy = React.memo((props) => {\n const [amazonCookiesDisabled, setAmazonCookiesDisabled] = useState(JSON.parse(localStorage.getItem('amazonCookiesDisabled')));\n return (\n <>\n
\n
\n

Privacy Policy

\n

{privacyPolicyText}

\n
\n Amazon product previews {amazonCookiesDisabled ? 'disabled' : 'enabled'} and Amazon tracking cookies {amazonCookiesDisabled ? 'disabled' : 'enabled'}\n { setAmazonCookiesDisabled(!amazonCookiesDisabled); storeAmazonCookiesSetting(!amazonCookiesDisabled) }}>\n {amazonCookiesDisabled && }\n {!amazonCookiesDisabled && }\n \n
\n
\n \n )\n});\n\nexport default PrivacyPolicy;","import React from 'react';\nimport {\n BrowserRouter as Router,\n Switch,\n Route\n} from \"react-router-dom\";\nimport './App.css';\nimport SubPage from './components/SubPage';\nimport PrivacyPolicy from './components/PrivacyPolicy';\n\nfunction App() {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}