{"version":3,"file":"js/43879-bcf6dce68ca4bb62ec9e.js","mappings":"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","sources":["webpack://StravaModern/./app/javascript/components/StravaAlert/StravaAlert.scss?a1ac","webpack://StravaModern/./app/javascript/components/StravaAlert/StravaAlert.js","webpack://StravaModern/./app/javascript/constants/alerts/alert-types.js","webpack://StravaModern/./app/javascript/externalSocialPartners.js","webpack://StravaModern/./app/javascript/components/shared/FormattedHTMLMessage/index.js","webpack://StravaModern/./app/javascript/utils/I18n.js","webpack://StravaModern/./app/javascript/utils/analytics.js","webpack://StravaModern/./app/javascript/utils/generalUtils.js","webpack://StravaModern/./app/javascript/utils/networking-client.js","webpack://StravaModern/./app/javascript/utils/react-component-mounter.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"alert\":\"StravaAlert--alert--0tRrZ\",\"error\":\"StravaAlert--error--Cha6i\",\"success\":\"StravaAlert--success--52fm+\",\"warning\":\"StravaAlert--warning--JQQmd\",\"info\":\"StravaAlert--info---apjx\"};","import React from 'react';\nimport Alert from '@reach/alert';\nimport PropTypes from 'prop-types';\nimport clsx from '@strava/ui/clsx';\nimport { ALERT_TYPES } from 'constants/alerts/alert-types';\nimport styles from './StravaAlert.scss';\n\nconst StravaAlert = ({ children, className, severity, ...options }) => {\n return (\n \n {children}\n \n );\n};\n\nStravaAlert.defaultProps = {\n className: null\n};\n\nStravaAlert.propTypes = {\n severity: PropTypes.oneOf(Object.values(ALERT_TYPES)).isRequired,\n children: PropTypes.node.isRequired,\n className: PropTypes.string\n};\n\nexport default StravaAlert;\n","export const ALERT_TYPES = Object.freeze({\n warning: 'warning',\n error: 'error',\n info: 'info',\n success: 'success'\n});\n\nexport default { ALERT_TYPES };\n","import { replace } from 'lodash-es';\nimport { logError } from './utils/sentry';\n\nconst appendScriptToBody = ({ script, name }) => {\n if (document.querySelector('body')) {\n document.querySelector('body').appendChild(script);\n } else {\n const e = new Error(`Failed to inject ${name} script`);\n logError(e);\n }\n};\n\n// this injects window.google and not the legacy window.gapi JS api\nexport const injectGoogleScript = (callback) => {\n if (!window.google) {\n const script = document.createElement('script');\n script.src = 'https://accounts.google.com/gsi/client';\n script.async = true;\n script.onload = callback;\n script.id = 'google-client-script';\n appendScriptToBody({ script, name: 'google gsi' });\n } else {\n callback();\n }\n};\n\nexport const injectAppleScript = (locale = 'en_US') => {\n if (!window.apple) {\n const script = window.document.createElement('script');\n const formattedLocale = replace(locale, '-', '_');\n script.src = `https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/${formattedLocale}/appleid.auth.js`;\n script.async = true;\n appendScriptToBody({ script, name: 'apple' });\n }\n};\n\nexport const injectFacebookScript = ({\n appId,\n version,\n callback,\n locale = 'en_US'\n}) => {\n if (!window.FB) {\n window.fbAsyncInit = () => {\n // ref - https://developers.facebook.com/docs/javascript/reference/FB.init/v13.0\n window.FB.init({\n appId,\n xfbml: true,\n version,\n status: true,\n cookie: true\n });\n callback();\n };\n\n // facebook uses format ll_CC - see https://developers.facebook.com/docs/javascript/internationalization\n const formattedLocale = replace(locale, '-', '_');\n\n const script = window.document.createElement('script');\n script.src = `https://connect.facebook.net/${formattedLocale}/sdk.js`;\n script.async = true;\n appendScriptToBody({ script, name: 'facebook-jssdk' });\n } else {\n callback();\n }\n};\n\nexport default { injectGoogleScript, injectAppleScript, injectFacebookScript };\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst FormattedHTMLMessage = ({ tagName, message, className, onLinkClick }) => {\n const handleLinkClick = (e) => {\n if (e.target.nodeName === 'A' && !!onLinkClick) {\n onLinkClick(e);\n }\n };\n\n return React.createElement(tagName, {\n className,\n dangerouslySetInnerHTML: {\n __html: message\n },\n onClick: handleLinkClick\n });\n};\n\nFormattedHTMLMessage.propTypes = {\n message: PropTypes.string.isRequired,\n tagName: PropTypes.string,\n className: PropTypes.string,\n onLinkClick: PropTypes.func\n};\n\nFormattedHTMLMessage.defaultProps = {\n tagName: 'span',\n className: null,\n onLinkClick: null\n};\n\nexport default FormattedHTMLMessage;\n","import React from 'react';\n\nimport FormattedHTMLMessage from '../components/shared/FormattedHTMLMessage';\n\nfunction t(key, props = {}) {\n return window.Strava.I18n.Locale.t(key, props);\n}\n\nfunction elevationFormatter(unitSystem) {\n return new window.Strava.I18n.ElevationFormatter(unitSystem);\n}\n\nfunction elevationLabelFormatter(unitSystem) {\n return new window.Strava.I18n.ChartLabelElevationFormatter(unitSystem);\n}\n\nfunction distanceFormatter(unitSystem) {\n return new window.Strava.I18n.DistanceFormatter(unitSystem);\n}\n\nfunction distanceLabelFormatter(unitSystem) {\n return new window.Strava.I18n.ChartLabelDistanceFormatter(unitSystem);\n}\n\nfunction distancePerTimeFormatter(unitSystem) {\n return new window.Strava.I18n.DistancePerTimeFormatter(unitSystem);\n}\n\nfunction distancePerTimeLabelFormatter(unitSystem) {\n return new window.Strava.I18n.ChartLabelDistancePerTimeFormatter(unitSystem);\n}\n\nfunction percentFormatter() {\n return new window.Strava.I18n.PercentFormatter();\n}\n\nfunction timespanFormatter() {\n return new window.Strava.I18n.TimespanFormatter();\n}\n\nexport default {\n t,\n t_html(key, props = {}, options = {}) {\n return ;\n },\n elevationFormatter,\n elevationLabelFormatter,\n distanceFormatter,\n distanceLabelFormatter,\n distancePerTimeFormatter,\n distancePerTimeLabelFormatter,\n percentFormatter,\n timespanFormatter,\n language() {\n return window.Strava.I18n.Locales.LANGUAGE_CODE;\n },\n measurementUnits() {\n return window.Strava.I18n.UnitSystem.get();\n }\n};\n","import { logMessage } from './sentry';\n\nexport function trackV2({ category, page, action, element, properties = {} }) {\n try {\n window.Strava.ExternalAnalytics.trackV2({\n category,\n page,\n action,\n element,\n properties\n });\n } catch (e) {\n logMessage(\n `Could not execute Strava.ExternalAnalytics.trackV2 event with the category:action ${category}:${action}`,\n e\n );\n }\n}\n\nexport default {\n trackV2\n};\n","import { split } from 'lodash-es';\n\nexport { timeout } from './devUtils';\n\nexport const generateRandomId = () =>\n Math.random()\n .toString(36)\n .substring(2);\n\n// Capitalizes all the words and replaces some characters in the string to create a nicer looking title.\n// eg. 'man from the boondocks' => 'Man From The Boondocks'\nconst titleize = (str) =>\n str.replace(\n /\\w\\S*/g,\n (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n );\n\nexport const displayName = (\n { firstName = '', lastName = '' },\n options = { forceAnonymize: false, maxLength: 100 }\n) => {\n const { maxLength, forceAnonymize } = options;\n const fullName = `${firstName} ${lastName}`;\n\n if (forceAnonymize || fullName.length > maxLength) {\n if (firstName.length > maxLength - 3) {\n return `${titleize(\n firstName.substring(0, maxLength - 4)\n )}... ${lastName.charAt(0).toUpperCase()}.`;\n }\n return `${titleize(firstName)} ${lastName.charAt(0).toUpperCase()}.`;\n }\n return fullName.trim();\n};\n\nexport const isMobile = () => window.navigator.userAgent.includes('Mobile');\n\nexport const dateYearsAgo = (years) => {\n const d = new Date(new Date().toDateString());\n d.setFullYear(d.getFullYear() - years);\n return d;\n};\n\nexport const parseServerDateString = (date) => {\n const dobArray = split(date, '-');\n return {\n year: parseInt(dobArray[0], 10),\n month: parseInt(dobArray[1], 10),\n day: parseInt(dobArray[2], 10)\n };\n};\n\n// eg. given,\n// \"urls\": {\n// \"100\": \"https://photo_url_1\",\n// \"1800\": \"https://photo_url_2\"\n// }\n// returns https://photo_url_2\nexport const getPhotoWithMaxDimension = (photoUrlHash) => {\n const key = Object.keys(photoUrlHash).reduce((a, b) => (a > b ? a : b));\n return photoUrlHash[key];\n};\n\nexport default {\n displayName,\n generateRandomId,\n isMobile,\n dateYearsAgo,\n parseServerDateString,\n getPhotoWithMaxDimension\n};\n","import axios from 'axios';\n\nfunction baseUrl() {\n const port = window.location.port === '' ? '' : `:${window.location.port}`;\n\n return `${window.location.protocol}//${window.location.hostname}${port}`;\n}\n\nexport function csrfToken() {\n return document\n .querySelector('meta[name=\"csrf-token\"]')\n .getAttribute('content');\n}\n\nexport default function createNetworkingClient(options = {}) {\n return axios.create({\n baseUrl: baseUrl(),\n /**\n * The Axios timeout was set to 5s, causing requests taking longer than 5s to error out, and therefore causing Sentry errors.\n * Several factors can cause a slow request, such as slow network speeds or server.\n * Bumping the timeout to 30s should help account for these slow requests but also ensure that\n * we are not waiting for request resources for an indefinite time.\n * */\n timeout: 30000, // 30 seconds\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-TOKEN': csrfToken()\n },\n ...options\n });\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { logError, logMessage } from './sentry';\n\n// Object that stores references to all the registered components\nlet registeredComponents = {};\n\n// Track a single component that should be mounted after the DOM content has loaded\nfunction register(components) {\n // Registered components are passed in as Hash keys (as opposed to individual arguments)\n // in order to preserve their names during JavaScript minification.\n //\n // For example:\n // ReactComponentMounter.register({ Hello });\n\n registeredComponents = { ...registeredComponents, ...components };\n}\n\nfunction mountComponent({ node, component, props }) {\n const className = component || node.getAttribute('data-react-class');\n const reactComponent = registeredComponents[className];\n\n if (!reactComponent) {\n logMessage(`Cannot find a component registered with the name ${className}`);\n return;\n }\n\n const propsJson = node.getAttribute('data-react-props');\n try {\n const reactProps = {\n ...(propsJson && JSON.parse(propsJson)),\n ...props\n };\n\n const reactElement = React.createElement(reactComponent, reactProps);\n ReactDOM.render(reactElement, node);\n } catch (e) {\n logError(e);\n }\n}\n\n// Allows a page to mount a component right away rather than\n// wait for the DOMContentLoaded event\nfunction inlineMount(node, component) {\n mountComponent({ node, component });\n}\n\n// Search the DOM for all react components to be mounted,\n// and mount them into the DOM\nfunction mountComponents() {\n const nodesToMount = document.querySelectorAll('[data-react-class]');\n // IE does not support NodeList.forEach, so we need to do it the old fashion way\n /* eslint-disable-next-line no-plusplus */\n for (let i = 0; i < nodesToMount.length; ++i) {\n mountComponent({ node: nodesToMount[i] });\n }\n}\n\n// Ensure pages can mount components more specifically\nif (window.stravaInlineMount === undefined) {\n window.stravaInlineMount = inlineMount;\n}\n\n// Add this listener only once, when the module is first imported\ndocument.addEventListener('DOMContentLoaded', mountComponents);\n\n/**\n * Also added once, this listener can be used to render react components\n * that were created after the DOM was loaded via the ruby `react_component` helper\n *\n * example usage:\n *\n * document.dispatchEvent(new CustomEvent('JSCreatedReactNode', {detail: {node: $('#my-react-component')}}))\n * document.dispatchEvent(new CustomEvent('JSCreatedReactNode', {detail: {node: $('#my-react-component')[index]}}))\n */\nfunction mountJSCreatedComponent(e) {\n const { node, component, props } = e.detail;\n if (!node) {\n return;\n }\n\n const unwrappedNode = node.length ? node[0] : node;\n if (!unwrappedNode) {\n return;\n }\n\n mountComponent({ node: unwrappedNode, component, props });\n}\n\ndocument.addEventListener('JSCreatedReactNode', mountJSCreatedComponent);\n\n/**\n * Components mounted using certain erb - jquery setup do not go through their whole\n * lifecyle so they are left unmounted as the athlete interacts on the page.\n *\n * For examples, see interval.js.rb, graph_data_range.js.rb and interval_type.js.rb\n */\ndocument.addEventListener('JSUnmountReactNode', (e) => {\n ReactDOM.unmountComponentAtNode(e.detail.node);\n});\n\nexport default { register, mountComponent };\n"],"names":["StravaAlert","children","className","severity","options","clsx","styles","defaultProps","ALERT_TYPES","Object","freeze","warning","error","info","success","appendScriptToBody","script","name","document","querySelector","appendChild","e","Error","logError","injectGoogleScript","callback","window","google","createElement","src","async","onload","id","injectAppleScript","locale","apple","formattedLocale","replace","injectFacebookScript","appId","version","FB","fbAsyncInit","init","xfbml","status","cookie","FormattedHTMLMessage","tagName","message","onLinkClick","React","dangerouslySetInnerHTML","__html","onClick","target","nodeName","t","key","props","Strava","I18n","Locale","t_html","elevationFormatter","unitSystem","ElevationFormatter","elevationLabelFormatter","ChartLabelElevationFormatter","distanceFormatter","DistanceFormatter","distanceLabelFormatter","ChartLabelDistanceFormatter","distancePerTimeFormatter","DistancePerTimeFormatter","distancePerTimeLabelFormatter","ChartLabelDistancePerTimeFormatter","percentFormatter","PercentFormatter","timespanFormatter","TimespanFormatter","language","Locales","LANGUAGE_CODE","measurementUnits","UnitSystem","get","trackV2","category","page","action","element","properties","ExternalAnalytics","logMessage","generateRandomId","Math","random","toString","substring","titleize","str","s","txt","charAt","toUpperCase","substr","toLowerCase","displayName","firstName","lastName","forceAnonymize","maxLength","fullName","length","trim","isMobile","navigator","userAgent","includes","dateYearsAgo","years","d","Date","toDateString","setFullYear","getFullYear","parseServerDateString","date","dobArray","split","year","parseInt","month","day","getPhotoWithMaxDimension","photoUrlHash","keys","reduce","a","b","baseUrl","port","location","protocol","hostname","csrfToken","getAttribute","createNetworkingClient","axios","timeout","headers","registeredComponents","mountComponent","node","component","reactComponent","propsJson","reactProps","JSON","parse","reactElement","ReactDOM","undefined","stravaInlineMount","addEventListener","nodesToMount","querySelectorAll","i","detail","unwrappedNode","register","components"],"sourceRoot":""}