{"version":3,"sources":["components/Common/loading.svg","serviceWorker.ts","components/Home/login.svg","utils/history.ts","components/Callback/Callback.tsx","components/Home/Home.tsx","components/User/User.tsx","components/UserPlaylists/UserPlaylists.tsx","components/Playlist/Playlist.tsx","auth/configuration.ts","utils/Routes.tsx","auth/WebAuthentication.ts","index.tsx"],"names":["Boolean","window","location","hostname","match","_g","createBrowserHistory","loading","require","Callback","props","style","position","display","justifyContent","height","width","top","bottom","left","right","backgroundColor","src","alt","_excluded","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgLogin","_ref","svgRef","title","titleId","id","xmlns","xmlnsXlink","x","y","viewBox","enableBackground","xmlSpace","ref","className","d","fill","fadeAudioInSong1","fadeAudioOutSong1","fadeAudioInSong2","fadeAudioOutSong2","ForwardRef","song_1_default_class","song_2_default_class","ignore_volume","Home","HomeProps","state","is_touch","is_muted","is_choosing","container_class","show_help","rounds_class","artist_id","current_round","total_rounds","battle_commenced","tracks","artists","artist_name","artist_img","song_1","song_2","song_1_is_playing","song_2_is_playing","song_1_class","song_2_class","load_song_1","load_song_2","share_link_facebook","share_link_twitter","_this","setTimeout","setState","chooseArtist","auth","login","logout","index","authenticated","spotifyApi","Spotify","setAccessToken","accessToken","getArtistTopTracks","then","data","reverse","artist","name","images","url","err","console","log","setSong","scrollTo","audio1","refs","song1Audio","muted","audio2","song2Audio","getMyTopArtists","limit","items","song","is_playing","playAudio","replace","pauseAudio","getTopArtists","override_touch","clearInterval","audio","load","volume","play","new_volume","last_volume","setInterval","parseFloat","toFixed","addEventListener","event","pause","track","preview_url","album","map","item","onClick","startBattle","href","rel","focusable","role","toggleHelp","chooseSong","onMouseEnter","onMouseLeave","onTouchStart","setTouched","toggleSound","Component","autobind","User","Provider","value","user","error","display_name","UserPlaylists","e","preventDefault","history","push","scope","options","playlists","playlist","total","owner","popularity","AUTH_CONFIG","process","requestedScopes","auth0","WebAuth","domain","clientID","redirectUri","responseType","localStorage","getItem","Error","expiresAt","JSON","parse","Date","getTime","authorize","parseHash","result","setSession","alert","authResult","expiresIn","stringify","scopes","setItem","removeItem","grantedScopes","split","every","includes","Routes","path","render","test","hash","handleAuthentication","exact","Playlist","params","config","ReactDOM","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.6eecd27b.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/loading.330b7d99.svg\";","// 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.1/8 is 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\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: 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(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\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: string, config?: 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: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\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.then(registration => {\n registration.unregister();\n });\n }\n}\n","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 270 50\",\n enableBackground: \"new 0 0 270 50\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n className: \"spotify-btn\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n className: \"main\",\n d: \"M270,25c0,13.8-11.2,25-25,25H25C11.2,50,0,38.8,0,25l0,0C0,11.2,11.2,0,25,0h220C258.8,0,270,11.2,270,25 L270,25z\"\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M40.9,13.1c-6.3,0-11.4,5.1-11.4,11.4c0,6.3,5.1,11.4,11.4,11.4c6.3,0,11.4-5.1,11.4-11.4 C52.2,18.2,47.1,13.1,40.9,13.1z M46.1,29.5c-0.2,0.3-0.6,0.4-1,0.2c-2.7-1.6-6-2-10-1.1c-0.4,0.1-0.8-0.2-0.8-0.5 c-0.1-0.4,0.2-0.8,0.5-0.8c4.3-1,8-0.6,11,1.3C46.2,28.7,46.3,29.1,46.1,29.5z M47.5,26.4c-0.3,0.4-0.8,0.5-1.2,0.3 c-3.1-1.9-7.7-2.4-11.3-1.3c-0.5,0.1-1-0.1-1.1-0.6c-0.1-0.5,0.1-1,0.6-1.1c4.1-1.3,9.3-0.6,12.8,1.5 C47.6,25.4,47.7,26,47.5,26.4z M47.6,23.2c-3.7-2.2-9.7-2.4-13.2-1.3c-0.6,0.2-1.2-0.1-1.3-0.7c-0.2-0.6,0.1-1.2,0.7-1.3 c4-1.2,10.7-1,14.9,1.5c0.5,0.3,0.7,1,0.4,1.5C48.7,23.3,48.1,23.5,47.6,23.2z\"\n })))), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M63.2,30.6V19.9h1.9v9h4.7v1.6H63.2z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M71.3,25.3c0-3.2,2.3-5.5,5.5-5.5c3.2,0,5.5,2.3,5.5,5.5s-2.3,5.5-5.5,5.5C73.6,30.8,71.3,28.5,71.3,25.3 z M80.3,25.3c0-2.2-1.4-3.9-3.5-3.9c-2.2,0-3.5,1.6-3.5,3.9c0,2.2,1.4,3.9,3.5,3.9C78.9,29.1,80.3,27.5,80.3,25.3z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M84.4,25.3c0-3.4,2.5-5.5,5.6-5.5c2.1,0,3.4,1,4.3,2.2l-1.5,0.9c-0.6-0.8-1.6-1.4-2.8-1.4 c-2.1,0-3.7,1.6-3.7,3.9c0,2.2,1.6,3.9,3.7,3.9c1.1,0,2-0.5,2.5-1v-1.6h-3.2v-1.6h5.1v4c-1,1.2-2.5,2-4.4,2 C86.9,30.8,84.4,28.6,84.4,25.3z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M102,30.6V19.9h1.9v10.7H102z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M114.4,30.6l-5.6-7.6v7.6H107V19.9h1.9l5.5,7.4v-7.4h1.9v10.7H114.4z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M132.4,30.6l-2.1-7.9l-2.1,7.9h-2l-3-10.7h2.1l2.1,8.2l2.2-8.2h1.5l2.2,8.2l2.1-8.2h2.1l-3.1,10.7H132.4z \"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M139.5,30.6V19.9h1.9v10.7H139.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M147,30.6v-9h-3.2v-1.6h8.3v1.6h-3.2v9H147z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M161.9,30.6v-4.7h-5.6v4.7h-1.9V19.9h1.9v4.4h5.6v-4.4h1.9v10.7H161.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M171,29.1l1.1-1.5c0.7,0.8,1.9,1.5,3.4,1.5c1.5,0,2.1-0.8,2.1-1.5c0-2.2-6.2-0.8-6.2-4.8 c0-1.8,1.5-3.1,3.9-3.1c1.6,0,3,0.5,4,1.5l-1.1,1.4c-0.8-0.8-2-1.2-3.1-1.2c-1.1,0-1.8,0.5-1.8,1.3c0,2,6.2,0.8,6.2,4.7 c0,1.8-1.3,3.3-4.1,3.3C173.4,30.8,172,30.1,171,29.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M182,30.6V19.9h4.7c2.2,0,3.5,1.5,3.5,3.3c0,1.8-1.2,3.3-3.5,3.3h-2.8v4H182z M188.3,23.3 c0-1-0.8-1.7-1.8-1.7h-2.6V25h2.6C187.5,25,188.3,24.3,188.3,23.3z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M192.1,25.3c0-3.2,2.3-5.5,5.5-5.5c3.2,0,5.5,2.3,5.5,5.5s-2.3,5.5-5.5,5.5 C194.4,30.8,192.1,28.5,192.1,25.3z M201.1,25.3c0-2.2-1.4-3.9-3.5-3.9c-2.2,0-3.5,1.6-3.5,3.9c0,2.2,1.4,3.9,3.5,3.9 C199.7,29.1,201.1,27.5,201.1,25.3z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M207.8,30.6v-9h-3.2v-1.6h8.3v1.6h-3.2v9H207.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M215.3,30.6V19.9h1.9v10.7H215.3z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M220.2,30.6V19.9h7.3v1.6h-5.4v2.8h5.3V26h-5.3v4.6H220.2z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M233.1,30.6v-4.4l-4.1-6.2h2.1l2.9,4.6l2.9-4.6h2.1l-4.1,6.2v4.4H233.1z\"\n }))))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogin);\nexport default __webpack_public_path__ + \"static/media/login.ad99321f.svg\";\nexport { ForwardRef as ReactComponent };","import { createBrowserHistory } from 'history';\n\nexport default createBrowserHistory();","import React, { CSSProperties, SFC } from 'react';\nconst loading = require('../Common/loading.svg');\n\nexport interface CallbackProps { }\n\nconst Callback: SFC = props => {\n const style: CSSProperties = {\n position: 'absolute',\n display: 'flex',\n justifyContent: 'center',\n height: '100vh',\n width: '100vw',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'white',\n };\n\n return (\n
\n \"loading\"\n
\n );\n};\nexport default Callback;","import autobind from 'autobind-decorator'\nimport React, { Component } from 'react'\nimport { Auth0Authentication } from '../../auth/Auth0Authentication'\nimport { ReactComponent as LoginButton } from './login.svg'\nimport Spotify from 'spotify-web-api-js'\n\nexport interface HomeProps {\n auth: Auth0Authentication\n}\n\nlet song_1_default_class = \"card song song1\"\nlet song_2_default_class = \"card song song2\"\nlet fadeAudioInSong1\nlet fadeAudioOutSong1\nlet fadeAudioInSong2\nlet fadeAudioOutSong2\nlet ignore_volume = false\n\nexport default class Home extends Component {\n constructor(HomeProps) {\n super(HomeProps)\n this.state = {\n is_touch: false,\n is_muted: false,\n is_choosing: false,\n container_class: \"container intro\",\n show_help: false,\n rounds_class: \"rounds\",\n artist_id: \"4Ndc5Hb4h3dBftO9xd35vO\",\n current_round: 1,\n total_rounds: 1,\n battle_commenced: false,\n tracks: [],\n artists: [],\n artist_name: 'Take to the Seas',\n artist_img: 'https://i.scdn.co/image/ab6761610000e5ebaa094d0778a779d727887da3',\n song_1: false,\n song_2: false,\n song_1_is_playing: false,\n song_2_is_playing: false,\n song_1_class: song_1_default_class,\n song_2_class: song_2_default_class,\n load_song_1: false,\n load_song_2: false,\n share_link_facebook: \"https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ftaketotheseas.com\",\n share_link_twitter: \"https://twitter.com/intent/tweet?url=https%3A%2F%2Ftaketotheseas.com&text=Takes%20to%20the%20Seas%20-%20Make%20Your%20Bones%20is%2010!%20What's%20your%20favourite%20track%3F!%20Play%20now!\"\n }\n }\n\n componentDidMount() {\n let _this = this\n\n setTimeout(function () {\n _this.setState({ container_class: \"container\" })\n }, 500)\n\n _this.chooseArtist(_this.state.artist_id)\n }\n\n @autobind\n login() {\n this.props.auth.login()\n }\n\n @autobind\n logout() {\n this.props.auth.logout()\n }\n\n @autobind\n chooseArtist(artist_id, index = -1) {\n let _this = this\n\n // Reset everything...\n _this.setState({ \n battle_commenced: false,\n container_class: \"container\",\n rounds_class: \"rounds\"\n })\n\n // Get tracks\n if (_this.props.auth && _this.props.auth.authenticated && artist_id) {\n var spotifyApi = new Spotify()\n spotifyApi.setAccessToken(_this.props.auth.accessToken)\n\n // TODO: Get user country... we need user-read-private for this...\n spotifyApi.getArtistTopTracks(artist_id, \"GB\").then(\n function (data) {\n _this.setState({\n artist_id: artist_id,\n tracks: data.tracks.reverse()\n })\n\n // Update artists info\n if (index > -1) {\n let artist = _this.state.artists[index]\n\n _this.setState({\n artist_name: artist.name,\n // TODO: Default image...\n artist_img: artist.images[0].url\n })\n }\n },\n function (err) {\n console.log(err)\n _this.props.auth.logout()\n }\n )\n }\n }\n\n @autobind\n startBattle() {\n let _this = this\n\n _this.setState({ container_class: \"container starting\" })\n\n // TODO: We assume we've got tracks?\n if (_this.state.tracks !== []) {\n // Set rounds\n _this.setState({\n current_round: 1,\n total_rounds: (_this.state.tracks.length - 1 > 0) ? _this.state.tracks.length - 1 : 1\n })\n\n // Populate the first two songs\n _this.setSong(_this.state.tracks[0], 1)\n _this.setSong(_this.state.tracks[1], 2)\n\n setTimeout(function () {\n _this.setState({ \n battle_commenced: true,\n container_class: \"container versus\",\n rounds_class: \"rounds visible\"\n })\n }, 500)\n }\n else {\n console.log('No tracks...')\n _this.props.auth.logout()\n }\n }\n\n @autobind\n setTouched() {\n let _this = this\n\n _this.setState({ is_touch: true })\n }\n\n @autobind\n toggleHelp() {\n let _this = this\n\n _this.setState({ show_help: !_this.state.show_help })\n\n // TODO: Scroll to top of help section\n // window.scrollTo(0,0);\n\n window.scrollTo(0,0);\n }\n\n @autobind\n toggleSound() {\n let _this = this\n\n // TODO: Stop all audio\n let audio1 = _this.refs.song1Audio\n if (audio1) {\n audio1.muted = !_this.state.is_muted\n }\n\n let audio2 = _this.refs.song2Audio\n if (audio2) {\n audio2.muted = !_this.state.is_muted\n }\n\n _this.setState({ is_muted: !_this.state.is_muted })\n }\n\n @autobind\n getTopArtists() {\n let _this = this\n\n if (_this.props.auth && _this.props.auth.authenticated) {\n var spotifyApi = new Spotify()\n\n spotifyApi.getMyTopArtists({\n limit: 5\n }).then(\n function (data) {\n _this.setState({\n artists: data.items\n })\n },\n function (err) {\n console.log(err)\n }\n )\n }\n }\n\n @autobind\n chooseSong(song) {\n let _this = this\n let is_playing = false\n\n if (_this.state.battle_commenced === true && _this.state.is_choosing === false) {\n if (song === 1) {\n if (_this.state.song_1_is_playing === true || _this.state.is_muted === true) {\n is_playing = true\n\n _this.setState({\n song_1_class: _this.state.song_1_class + \" selected\",\n song_2_class: _this.state.song_2_class + \" defeated\",\n load_song_2: true\n })\n }\n else {\n _this.playAudio(song, true)\n _this.setState({ \n song_1_class: song_1_default_class + \" active\",\n song_1_is_playing: true\n })\n }\n }\n else {\n if (_this.state.song_2_is_playing === true || _this.state.is_muted === true) {\n is_playing = true\n\n _this.setState({ \n song_1_class: _this.state.song_1_class + \" defeated\",\n song_2_class: _this.state.song_2_class + \" selected\",\n load_song_1: true\n })\n }\n else {\n _this.playAudio(song, true)\n _this.setState({\n song_2_class: song_2_default_class + \" active\",\n song_2_is_playing: true\n })\n }\n }\n \n if (is_playing) {\n _this.setState({ is_choosing: true })\n\n setTimeout(function () {\n // Swipe off screen\n _this.setState({ container_class: \"container versus selection\" + song })\n \n // Remove classes for winner/loser\n _this.setState({ song_1_class: _this.state.song_1_class.replace(\"selected\", \"\").replace(\"defeated\", \"\") })\n _this.setState({ song_2_class: _this.state.song_2_class.replace(\"selected\", \"\").replace(\"defeated\", \"\") })\n\n if (_this.state.is_touch === true) {\n _this.pauseAudio(song)\n }\n \n if (_this.state.current_round < _this.state.total_rounds) {\n // Update current round\n _this.setState({ current_round: _this.state.current_round + 1 })\n \n // Update song\n _this.setSong(_this.state.tracks[_this.state.current_round], (song === 1 ? 2 : 1))\n \n // Bring it back on\n setTimeout(function () {\n _this.setState({ container_class: \"container versus\" })\n }, 800)\n }\n else {\n _this.setState({ battle_commenced: false })\n // Declare winner!\n setTimeout(function () {\n _this.setState({ \n container_class: \"container played versus selection\" + song + \" winner\" + song,\n rounds_class: \"rounds\",\n load_song_1: true,\n load_song_2: true\n })\n \n // getRelatedArtists(artist_id)\n\n _this.getTopArtists()\n }, 800)\n }\n\n _this.setState({ is_choosing: false })\n }, 800)\n }\n }\n }\n\n @autobind\n playAudio(song, override_touch = false) {\n let _this = this\n\n if (!_this.state.is_muted && _this.state.battle_commenced === true) {\n if (!_this.state.is_touch || override_touch) {\n if (song === 1) {\n _this.setState({\n song_1_class: song_1_default_class + \" active\",\n song_1_is_playing: true,\n load_song_1: false\n })\n \n if (typeof fadeAudioOutSong1 !== 'undefined') {\n clearInterval(fadeAudioOutSong1)\n }\n \n let audio = _this.refs.song1Audio\n \n if (audio) {\n\n // Only load audio if new song\n if (_this.state.load_song_1 === true) {\n audio.load()\n }\n \n audio.volume = 0\n audio.play()\n\n let new_volume = 1\n let last_volume = audio.volume\n\n fadeAudioInSong1 = setInterval(function () {\n if (audio.volume < 1.0 && last_volume !== new_volume) {\n last_volume = audio.volume\n new_volume = parseFloat((audio.volume + 0.2).toFixed(1))\n audio.volume = new_volume <= 1 ? new_volume : 1\n }\n else {\n clearInterval(fadeAudioInSong1)\n }\n }, 200)\n }\n }\n else if (song === 2) {\n _this.setState({\n song_2_is_playing: true,\n song_2_class: song_2_default_class + \" active\",\n load_song_2: false\n })\n \n if (typeof fadeAudioOutSong2 !== 'undefined') {\n clearInterval(fadeAudioOutSong2)\n }\n \n let audio = _this.refs.song2Audio\n \n if (audio) {\n // Only load audio if new song\n if (_this.state.load_song_2 === true) {\n audio.load()\n }\n \n audio.volume = 0\n audio.play()\n\n let new_volume = 1\n let last_volume = audio.volume\n\n fadeAudioInSong2 = setInterval(function () {\n if (audio.volume < 1.0 && last_volume !== new_volume) {\n last_volume = audio.volume\n new_volume = parseFloat((audio.volume + 0.2).toFixed(1))\n audio.volume = new_volume <= 1 ? new_volume : 1\n }\n else {\n clearInterval(fadeAudioInSong2)\n }\n }, 200)\n }\n }\n }\n }\n }\n\n pauseAudio(song) {\n let _this = this\n\n setTimeout(function () {\n if (song === 1) {\n _this.setState({\n song_1_is_playing: false,\n song_1_class: _this.state.song_1_class.replace(\"active\", \"\")\n })\n\n if (typeof fadeAudioInSong1 !== 'undefined') {\n clearInterval(fadeAudioInSong1)\n }\n \n let audio = _this.refs.song1Audio\n \n if (audio) {\n let new_volume = 0\n ignore_volume = false\n\n audio.addEventListener('volumechange', (event) => {\n ignore_volume = false\n });\n\n fadeAudioOutSong1 = setInterval(function () {\n if (audio.volume > 0.0 && ignore_volume === false) {\n new_volume = parseFloat((audio.volume - 0.1).toFixed(1))\n audio.volume = new_volume >= 0 ? new_volume : 0\n ignore_volume = true\n }\n else {\n clearInterval(fadeAudioOutSong1)\n audio.pause()\n }\n }, 20)\n }\n }\n else if (song === 2) {\n _this.setState({\n song_2_is_playing: false,\n song_2_class: _this.state.song_2_class.replace(\"active\", \"\")\n })\n\n if (typeof fadeAudioInSong2 !== 'undefined') {\n clearInterval(fadeAudioInSong2)\n }\n \n let audio = _this.refs.song2Audio\n \n if (audio) {\n let new_volume = 0\n ignore_volume = false\n\n audio.addEventListener('volumechange', (event) => {\n ignore_volume = false\n });\n\n fadeAudioOutSong2 = setInterval(function () {\n if (audio.volume > 0.0 && ignore_volume === false) {\n new_volume = parseFloat((audio.volume - 0.1).toFixed(1))\n audio.volume = new_volume >= 0 ? new_volume : 0\n ignore_volume = true\n }\n else {\n clearInterval(fadeAudioOutSong2)\n audio.pause()\n }\n }, 20)\n }\n }\n }, 200)\n }\n\n setSong(track, song) {\n let _this = this\n\n if (song === 1) {\n _this.setState({\n song_1: {\n 'title': track.name,\n // TODO: Default image\n 'src': 'https://i.scdn.co/image/ab6761610000e5ebaa094d0778a779d727887da3',\n 'preview_url': track.preview_url\n }\n })\n\n if (track.album && track.album.images.length > 0) {\n _this.setState({\n song_1: {\n 'title': track.name,\n 'src': track.album.images[0].url,\n 'preview_url': track.preview_url\n }\n })\n }\n }\n else if (song === 2) {\n _this.setState({\n song_2: {\n 'title': track.name,\n // TODO: Default image\n 'src': 'https://i.scdn.co/image/ab6761610000e5ebaa094d0778a779d727887da3',\n 'preview_url': track.preview_url\n }\n })\n\n if (track.album && track.album.images.length > 0) {\n _this.setState({\n song_2: {\n 'title': track.name,\n 'src': track.album.images[0].url,\n 'preview_url': track.preview_url\n }\n })\n }\n }\n }\n\n render() {\n const { authenticated } = this.props.auth\n return (\n
\n
\n
\n {!authenticated && (\n

Take to the Seas

\n )}\n {!authenticated && (\n

Make Your Bones

\n )}\n\n {authenticated && (\n

Song Battle

\n )}\n {authenticated && (\n

{this.state.artist_name}

\n )}\n {authenticated && (\n

Round {this.state.current_round} of {this.state.total_rounds}

\n )}\n
\n\n {authenticated && (\n
    \n
  • \n
    \n \"\"\n
    \n
    VS
    \n
  • \n
\n )}\n\n {!authenticated && (\n
    \n
  • \n
    \n \"\"\n
    \n
  • \n
\n )}\n\n {this.state.artists.length > 0 && (\n
\n
    \n {this.state.artists.map((item, index) => \n
  • this.chooseArtist(item.id, index))}>\n
    \n
    \n {item.images.length > 0 && (\n \"\"\n )}\n
    \n
    {item.name}
    \n
    \n
  • \n )}\n
\n
\n )}\n\n
\n {authenticated && (\n
\n \n\n
\n
\n Share\n \n \n \n \n \n \n \n \n \n
\n
\n
\n )}\n\n {!authenticated && (\n
\n \n \n
\n )}\n
\n
\n\n {this.state.song_1 && this.state.song_2 && (\n
    \n
  • this.chooseSong(1))}\n onMouseEnter={() => this.playAudio(1)}\n onMouseLeave={() => this.pauseAudio(1)}\n onTouchStart={() => this.setTouched()}>\n
    \n

    {this.state.song_1.title}

    \n \"\"\n\n {!this.state.is_muted && (\n \"\"\n )}\n\n {this.state.song_1.preview_url ?\n (\n
    \n \n
    \n ) : (
    )}\n
    \n
    \n \"\"\n
    \n
  • \n\n
  • this.chooseSong(2))}\n onMouseEnter={() => this.playAudio(2)}\n onMouseLeave={() => this.pauseAudio(2)}\n onTouchStart={() => this.setTouched()}\n >\n
    \n

    {this.state.song_2.title}

    \n \"\"\n \n {!this.state.is_muted && (\n \"\"\n )}\n\n {this.state.song_2.preview_url ?\n (\n
    \n \n
    \n ) : (
    )}\n
    \n
    \n \"\"\n
    \n
  • \n
\n )}\n\n
\n
\n

Take to the Seas

\n

Song Battle

\n \n

To celebrate 10 years of Make Your Bones, we've created something you never knew you needed...

\n

Song Battle pits 10 tracks against each other. You decide which one wins!

\n \n

How does it work?

\n

We take an artist's top 10 songs and you choose your favourite.

\n

On mobile/tablet: Tap a song to play it. Tap it again to select your favourite.

\n

On desktop: Hover over a song to play it. Click to select your favourite.

\n

Repeat until you have a winner!

\n

You can mute at any time in the bottom left corner.

\n\n

Log in with Spotify

\n

This site does not save any Spotify data. When you log in with Spotify, the site can read your top artists while you're playing so we can help you procrastinate a little bit longer.

\n

You can remove this access for “Take to the Seas - Song Battle” at any time on Spotify's 3rd Party app page here.

\n\n

Who are Take to the Seas?!

\n

Check them out on Spotify, iTunes and Amazon.

\n\n

It's time to re-discover some indie-pop bangers! What's your favourite track!?

\n\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n
\n\n \n\n {this.state.is_muted\n ? \n : \n }\n
\n )\n }\n}","import React, { Component } from 'react';\nimport { Auth0Authentication } from '../../auth/Auth0Authentication';\nimport { User as SpotifyUser, SpotifyApiContext } from 'react-spotify-api'\n\nexport interface UserProps {\n auth: Auth0Authentication;\n}\n\n/**\n * @public\n * @export\n * @class User\n * @extends {Component}\n */\nclass User extends Component {\n\n render() {\n const { authenticated } = this.props.auth;\n return (\n authenticated && this.props.auth.accessToken && (\n \n \n {(user, loading, error) =>\n user ? user.display_name : null\n }\n \n \n\n )\n );\n }\n}\n\nexport default User;\n","import React, { Component } from 'react';\nimport { Auth0Authentication } from '../../auth/Auth0Authentication';\nimport { UserPlaylists as SpotifyUserPlaylists, SpotifyApiContext } from 'react-spotify-api'\nimport autobind from 'autobind-decorator';\nimport { User } from '../';\n\nexport interface UserPlaylistsProps {\n auth: Auth0Authentication;\n}\n\n/**\n * @public\n * @export\n * @class User\n * @extends {Component}\n */\nclass UserPlaylists extends Component {\n\n @autobind\n onClick(e, id) {\n e.preventDefault();\n this.props.history.push(`/playlists/${id}`);\n }\n\n render() {\n const { authenticated } = this.props.auth;\n return (\n
\n {authenticated && this.props.auth.accessToken && (\n \n

s Playlists

\n \n \n \n \n \n \n \n \n \n {(playlists, loading, error) =>\n playlists ? (\n playlists.items.map(playlist => (\n this.onClick(e, playlist.id)}>\n \n \n \n\n ))\n ) : null\n }\n \n \n
NameTracks
{playlist.name}{playlist.tracks.total}
\n
\n\n )}\n
\n );\n }\n}\n\nexport default UserPlaylists;\n","import React, { Component } from 'react';\nimport { Auth0Authentication } from '../../auth/Auth0Authentication';\nimport { Playlist as SpotifyPlaylist, SpotifyApiContext } from 'react-spotify-api'\n\nexport interface PlaylistProps {\n auth: Auth0Authentication,\n id: string | undefined\n}\n\n/**\n * @public\n * @export\n * @class User\n * @extends {Component}\n */\nclass User extends Component {\n\n render() {\n const { authenticated } = this.props.auth;\n return (\n
\n\n {authenticated && this.props.auth.accessToken && (\n \n \n {(playlist, loading, error) =>\n playlist ? (\n
\n

{playlist.name} ({playlist.owner.display_name})

\n \n \n \n \n \n \n \n \n \n \n {playlist.tracks.items.map(track => (\n \n \n \n \n \n \n ))}\n \n
ArtistsTitleAlbumPopularity
{\n track.track.artists.map((artist, index) => (\n (index ? ', ' : '') + artist.name\n ))\n }{track.track.name}{track.track.album.name}{track.track.popularity}
\n
\n ) : null\n }\n
\n
\n\n )}\n
\n );\n }\n}\n\nexport default User;\n","import { Auth0Config } from './Auth0Config';\nexport const AUTH_CONFIG: Auth0Config = {\n domain: process.env.REACT_APP_SPOTIFY_DOMAIN,\n clientId: process.env.REACT_APP_SPOTIFY_CLIENT_ID,\n callbackUrl: process.env.REACT_APP_SPOTIFY_CALLBACK_URL,\n};","import history from './history';\nimport React, { SFC } from 'react';\nimport { Callback, Home, UserPlaylists, Playlist } from '../components';\nimport { Route, RouteComponentProps, Switch } from 'react-router';\nimport { Router } from 'react-router-dom';\nimport { WebAuthentication } from '../auth/WebAuthentication';\n\nconst auth = new WebAuthentication();\n\nconst handleAuthentication = (props: RouteComponentProps<{}>) => {\n if (/access_token|id_token|error/.test(window.location.hash)) {\n auth.handleAuthentication();\n }\n};\n\nconst Routes: SFC<{}> = () => {\n return (\n \n
\n }>\n \n {\n handleAuthentication(props);\n return ;\n }}\n />\n \n }\n >\n \n\n {\n return \n }}\n />\n \n
\n
\n );\n};\nexport default Routes;","import autobind from 'autobind-decorator';\nimport history from '../utils/history';\nimport { AUTH_CONFIG } from './configuration';\nimport { Auth0Authentication } from './Auth0Authentication';\nimport { Auth0DecodedHash, WebAuth } from 'auth0-js';\n/**\n * Web based Auth0 authentication\n *\n * @export\n * @class WebAuthentication\n * @implements {Auth0Authentication}\n */\nexport class WebAuthentication implements Auth0Authentication {\n /**\n * @property\n * @readonly\n * @memberof WebAuthentication\n */\n get accessToken() {\n const accessToken = localStorage.getItem('access_token');\n if (!accessToken) {\n throw new Error('No access token found');\n }\n return accessToken;\n }\n\n /**\n * @private\n * @memberof WebAuthentication\n */\n requestedScopes = 'user-top-read';\n\n /**\n * @property\n * @private\n * @type {WebAuth}\n * @memberof WebAuthenticationManager\n */\n auth0: WebAuth = new WebAuth({\n domain: AUTH_CONFIG.domain ? AUTH_CONFIG.domain : '',\n clientID: AUTH_CONFIG.clientId ? AUTH_CONFIG.clientId : '',\n redirectUri: AUTH_CONFIG.callbackUrl ? AUTH_CONFIG.callbackUrl : 'http://192.168.1.114:3000/callback',\n responseType: 'token',\n scope: this.requestedScopes,\n });\n\n get authenticated(): boolean {\n // Check whether the current time is past the\n // access token's expiry time\n let expiresAt = JSON.parse(localStorage.getItem('expires_at')!);\n return new Date().getTime() < expiresAt;\n }\n\n @autobind\n login(): void {\n this.auth0.authorize();\n }\n\n @autobind\n handleAuthentication(): void {\n this.auth0.parseHash((error: any, result: any) => {\n if (result && result.accessToken) {\n this.setSession(result);\n // history.replace('/playlists');\n } else if (error) {\n // history.replace('/');\n // tslint:disable-next-line:no-console\n console.error(error);\n alert(`Error: ${error}. Check the console for further details.`);\n }\n });\n }\n\n @autobind\n setSession(authResult: Auth0DecodedHash): void {\n const { accessToken, expiresIn, scope } = authResult;\n // Set the time that the access token will expire at\n let expiresAt = JSON.stringify(expiresIn! * 1000 + new Date().getTime());\n // If there is a value on the `scope` param from the authResult,\n // use it to set scopes in the session for the user. Otherwise\n // use the scopes as requested. If no scopes were requested,\n // set it to nothing\n // tslint:disable-next-line:no-string-literal\n const scopes = scope || this.requestedScopes || '';\n localStorage.setItem('access_token', accessToken!);\n localStorage.setItem('expires_at', expiresAt);\n localStorage.setItem('scopes', JSON.stringify(scopes));\n // navigate to the home route\n history.replace('/');\n }\n\n @autobind\n logout(): void {\n // Clear access token and ID token from local storage\n localStorage.removeItem('access_token');\n localStorage.removeItem('expires_at');\n // navigate to the home route\n history.replace('/');\n }\n\n @autobind\n userHasScopes(scopes: string[]): boolean {\n const grantedScopes = JSON.parse(localStorage.getItem('scopes')!).split(\n ' ',\n );\n return scopes.every(scope => grantedScopes.includes(scope));\n }\n}","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport * as serviceWorker from './serviceWorker';\nimport './index.css';\nimport Routes from './utils/Routes';\nrequire('dotenv').config();\n\nReactDOM.render(, document.getElementById('root'));\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":""}