{"version":3,"sources":["components/parts/TweetCard.js","components/parts/TweetList.js","components/parts/TwitterStream.js","components/parts/chart/DataPoints.js","components/parts/chart/Line.js","components/parts/chart/LinePath.js","components/parts/chart/Axis.js","components/parts/chart/XYAxes.js","components/parts/chart/GridLine.js","components/parts/chart/LineChart.js","components/parts/TwitterActivityChart.js","components/parts/Dashboard.js","components/results/index.js","pages/home/index.js","reportWebVitals.js","index.js"],"names":["TweetCard","require","createReactClass","render","className","src","this","props","tweet","user","profile_image_url_https","alt","name","screen_name","sentiment","text","TweetList","tweetLoop","collectedTweets","map","mappedTweet","index","TwitterStream","uuid","DataPoints","renderPoints","data","dataNegativeProps","cx","xScale","timeBin","cy","yScale","negTweets","r","fill","stroke","strokeWidth","key","v4","dataPositiveProps","posTweets","dataNeutralProps","neutTweets","dataTotalProps","numTweets","binnedTweets","Line","d","path","d3","LinePath","pathTotal","line","x","y","curve","curveLinear","pathPositive","pathNegative","pathNeutral","ReactDOM","Axis","componentDidUpdate","renderAxis","componentDidMount","renderXLabel","renderYLabel","node","findDOMNode","axis","axisBottom","scale","ticks","select","call","append","classed","attr","style","height","transform","translate","XYAxes","xAxis","orient","yAxis","GridLine","renderGridline","gridline","axisLeft","tickSize","width","tickFormat","LineChart","getXScale","xMax","max","scaleLinear","domain","range","getYScale","yMax","chartDisplay","margin","left","top","chartWidth","chartHeight","chartProps","bottom","right","chartArea","TwitterActivityChart","nextProps","nextState","Number","refs","positivecounter","innerHTML","totalTweets","posTotal","positivearrow","classList","add","neutralarrow","remove","neutralcounter","negativearrow","negativecounter","neutTotal","negTotal","ref","total","Dashboard","React","update","client","W3CWebSocket","process","Home","state","status","search","keyword","initTimestamp","emit","bind","self","onopen","connect","onclose","disconnect","onmessage","message","JSON","parse","event","addTweet","eventName","subscription","send","stringify","setState","timestamp","tweets","newTweets","$unshift","binTweets","timestamp_ms","countTweets","overallSentiment","newTotal","tweetTimestamp","timeDiff","newBinnedTweets","binIndex","length","currentBin","push","Component","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.99675cf4.chunk.js","sourcesContent":["var React = require('react');\nconst createReactClass = require(\"create-react-class\");\n\n//TweetCard Constructs Each Tweet Card\n//Reusable Component\nvar TweetCard = createReactClass({\n\n render: function () {\n\n return (\n
\n \"\"/\n
\n
\n {this.props.tweet.user.name}\n @{this.props.tweet.user.screen_name}\n
\n
\n
{this.props.tweet.text}
\n
\n
\n )\n }\n});\n\nexport default TweetCard;","import TweetCard from './TweetCard.js';\nvar React = require('react');\nconst createReactClass = require(\"create-react-class\");\n\n//TweetList Contains All Twitter Messages as Cards\n//Uses TweetCard.js\nvar TweetList = createReactClass({\n render: function () {\n\n var tweetLoop = this.props.collectedTweets.map(function (mappedTweet, index) {\n return ();\n });\n\n return (\n
\n {tweetLoop}\n
\n )\n }\n});\n\nexport default TweetList;","import TweetList from './TweetList.js';\nvar React = require('react');\nconst createReactClass = require(\"create-react-class\");\n\n//TwitterStream Displays A List of All Twitter Messages as Cards\n//Uses TweetList.js\nvar TwitterStream = createReactClass({\n\n render: function () {\n //Pass collectedTweets to TweetList\n return (\n
\n

Twitter Stream

\n \n
\n );\n }\n});\n\nexport default TwitterStream;","var React = require('react');\nvar uuid = require('uuid');\nvar createReactClass = require('create-react-class');\n\n\n//Datapoints Draws Each Tweet on the Chart\nvar DataPoints = createReactClass({\n\n //renderPoints Returns a for Each Data Point\n renderPoints: function (data, index) {\n var dataNegativeProps = {\n cx: this.props.xScale(data.timeBin),\n cy: this.props.yScale(data.negTweets),\n r: 4,\n fill: \"none\",\n stroke: \"red\",\n strokeWidth: 2,\n key: uuid.v4()\n };\n\n var dataPositiveProps = {\n cx: this.props.xScale(data.timeBin),\n cy: this.props.yScale(data.posTweets),\n r: 4,\n fill: \"none\",\n stroke: \"green\",\n strokeWidth: 2,\n key: uuid.v4()\n };\n\n var dataNeutralProps = {\n cx: this.props.xScale(data.timeBin),\n cy: this.props.yScale(data.neutTweets),\n r: 4,\n fill: \"none\",\n stroke: \"sandybrown\",\n strokeWidth: 2,\n key: uuid.v4()\n };\n\n var dataTotalProps = {\n cx: this.props.xScale(data.timeBin),\n cy: this.props.yScale(data.numTweets),\n r: 4,\n fill: \"none\",\n stroke: \"blue\",\n strokeWidth: 2,\n key: uuid.v4()\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n },\n\n //Use React to Append g Element (Usually D3 Handles This)\n //Run renderBars for all binnedTweet Data Values\n render: function () {\n return {this.props.binnedTweets.map(this.renderPoints)}\n }\n});\n\nexport default DataPoints;","var React = require('react');\nvar createReactClass = require('create-react-class');\n\nvar Line = createReactClass({\n render: function () {\n return (\n \n );\n }\n});\n\nexport default Line;","import Line from './Line.js';\nvar React = require('react');\nvar d3 = require('d3');\nvar createReactClass = require('create-react-class');\n\nvar LinePath = createReactClass({\n render: function () {\n var props = this.props;\n var xScale = props.xScale;\n var yScale = props.yScale;\n\n var pathTotal = d3.line()\n .x(function (d) {\n return xScale(d.timeBin);\n })\n .y(function (d) {\n return yScale(d.numTweets);\n })\n .curve(d3.curveLinear);\n\n var pathPositive = d3.line()\n .x(function (d) {\n return xScale(d.timeBin);\n })\n .y(function (d) {\n return yScale(d.posTweets);\n })\n .curve(d3.curveLinear);\n\n var pathNegative = d3.line()\n .x(function (d) {\n return xScale(d.timeBin);\n })\n .y(function (d) {\n return yScale(d.negTweets);\n })\n .curve(d3.curveLinear);\n\n var pathNeutral = d3.line()\n .x(function (d) {\n return xScale(d.timeBin);\n })\n .y(function (d) {\n return yScale(d.neutTweets);\n })\n .curve(d3.curveLinear);\n\n return (\n \n \n \n \n \n\n \n );\n }\n});\n\nexport default LinePath;","var React = require('react');\nvar ReactDOM = require('react-dom');\nvar d3 = require('d3');\nvar createReactClass = require('create-react-class');\n\n//Axis is a Reusable Axis Creator for Charts\nvar Axis = createReactClass({\n\n componentDidUpdate: function () {\n this.renderAxis();\n },\n\n componentDidMount: function () {\n this.renderAxis();\n this.renderXLabel();\n this.renderYLabel();\n },\n\n //Use D3 to Create Axis on 'this DOM Node'\n renderAxis: function () {\n var node = ReactDOM.findDOMNode();\n\n var axis = d3.axisBottom()\n .scale(this.props.scale)\n //.orient(this.props.orient)\n .ticks(this.props.ticks)\n\n //This is where the magic happens!\n d3.select(node).call(axis);\n },\n\n renderXLabel: function () {\n\n var node = ReactDOM.findDOMNode();\n\n var xLabel = d3.select(\".x.axis\")\n .append(\"text\")\n .text(\"Seconds Since Search\")\n .classed(\"x-label\", true)\n .attr(\"x\", 350)\n .attr(\"y\", 40)\n .style(\"text-anchor\", \"middle\");\n\n },\n\n renderYLabel: function () {\n\n var node = ReactDOM.findDOMNode();\n\n var yLabel = d3.select(\".y.axis\")\n .append(\"text\")\n .text(\"Number of Tweets\")\n .classed(\"y-label\", true)\n .attr(\"x\", -(this.props.height / 2))\n .attr(\"y\", -35)\n .style(\"text-anchor\", \"middle\")\n .attr(\"transform\", \"rotate(-90)\");\n\n },\n\n //Use React to Append g Element (Usually D3 Handles This)\n render: function () {\n return (\n \n );\n }\n});\n\nexport default Axis;","import Axis from './Axis.js';\nvar React = require('react');\nvar createReactClass = require('create-react-class');\n\n//XYAxes Holds the Separate X and Y Axis Components\nvar XYAxes = createReactClass({\n\n //Create x and y props to Pass into \n render: function () {\n var xAxis = {\n className: 'x axis',\n translate: 'translate(0,' + this.props.height + ')',\n scale: this.props.xScale,\n orient: 'bottom',\n ticks: 4\n };\n\n var yAxis = {\n className: 'y axis',\n translate: 'translate(0, 0)',\n scale: this.props.yScale,\n orient: 'left',\n ticks: 6\n };\n\n //Use React to Append g Element (Usually D3 Handles This)\n //Append for X and Y Axis\n return (\n \n \n \n \n );\n }\n});\n\nexport default XYAxes;","var React = require('react');\nvar ReactDOM = require('react-dom');\nvar d3 = require('d3');\nvar createReactClass = require('create-react-class');\n\n//GridLine\nvar GridLine = createReactClass({\n\n componentDidUpdate: function () {\n this.renderGridline();\n },\n\n componentDidMount: function () {\n this.renderGridline();\n },\n\n //Use D3 to Create Axis on 'this DOM Node'\n renderGridline: function () {\n var node = ReactDOM.findDOMNode();\n\n var gridline = d3.axisLeft()\n .scale(this.props.yScale)\n .tickSize(-this.props.width, 0, 0)\n .ticks(6)\n .tickFormat(\"\")\n\n //This is where the magic happens!\n d3.select(node).call(gridline);\n },\n\n render: function () {\n var yGridline = {\n className: 'gridline',\n transform: 'translate(0, 0)',\n };\n\n return (\n \n );\n }\n});\n\nexport default GridLine;","import DataPoints from './DataPoints.js';\nimport LinePath from './LinePath.js';\nimport XYAxes from './XYAxes.js';\nimport GridLine from './GridLine.js';\n\nvar React = require('react');\nvar d3 = require('d3');\nvar createReactClass = require('create-react-class');\n\n\n//LineChart Holds All Data Points and the XYAxes\nvar LineChart = createReactClass({\n\n //Use D3 to Scale 'x' Data Points to Fit Chart Area\n //Use for Data Points and for Axis\n getXScale: function (props) {\n var xMax = d3.max(props.binnedTweets, function (d) {\n return d.timeBin\n });\n\n return d3.scaleLinear()\n .domain([0, xMax])\n .range([0, props.width]);\n },\n\n //Use D3 to Scale 'y' Data Points to Fit Chart Area\n //Use for Data Points and for Axis\n getYScale: function (props) {\n var yMax = d3.max(props.binnedTweets, function (d) {\n return d.numTweets\n });\n\n return d3.scaleLinear()\n .domain([0, yMax])\n .range([props.height, 0]);\n },\n\n //Use React to Append svg Element (Usually D3 Handles This)\n render: function () {\n var xScale = this.getXScale(this.props);\n var yScale = this.getYScale(this.props);\n\n var chartDisplay = {\n className: 'chart-area',\n transform: 'translate(' + this.props.margin.left + ', ' + this.props.margin.top + ')',\n };\n //{...props} combines all props (aka. xScale, yScale) into 'props'\n return (\n \n \n \n \n \n \n \n \n\n );\n }\n});\n\nexport default LineChart;","import LineChart from './chart/LineChart.js';\nvar React = require('react');\n\nconst createReactClass = require(\"create-react-class\");\n\nvar chartProps = {\n chartWidth: 800,\n chartHeight: 350,\n margin: {\n top: 30,\n bottom: 60,\n left: 60,\n right: 40\n },\n};\n\nvar chartArea = {\n width: chartProps.chartWidth - chartProps.margin.left - chartProps.margin.right,\n height: chartProps.chartHeight - chartProps.margin.top - chartProps.margin.bottom,\n}\n\n\n//TwitterActivityChart Is the LineChart Container\nvar TwitterActivityChart = createReactClass({\n\n componentDidUpdate: function (nextProps, nextState) {\n\n /*Counter Highlighter\n ===============*/\n\n //Positive Highlighter\n if (Number(this.refs.positivecounter.innerHTML) !== nextProps.totalTweets.posTotal) {\n this.refs.positivearrow.classList.add('positive');\n this.refs.positivecounter.classList.add('positive');\n\n this.refs.neutralarrow.classList.remove('neutral');\n this.refs.neutralcounter.classList.remove('neutral');\n this.refs.negativearrow.classList.remove('negative');\n this.refs.negativecounter.classList.remove('negative');\n }\n\n //Neutral Highlighter\n if (Number(this.refs.neutralcounter.innerHTML) !== nextProps.totalTweets.neutTotal) {\n this.refs.neutralarrow.classList.add('neutral');\n this.refs.neutralcounter.classList.add('neutral');\n\n this.refs.positivearrow.classList.remove('positive');\n this.refs.positivecounter.classList.remove('positive');\n this.refs.negativearrow.classList.remove('negative');\n this.refs.negativecounter.classList.remove('negative');\n }\n\n //Negative Highlighter\n if (Number(this.refs.negativecounter.innerHTML) !== nextProps.totalTweets.negTotal) {\n this.refs.negativearrow.classList.add('negative');\n this.refs.negativecounter.classList.add('negative');\n\n this.refs.neutralarrow.classList.remove('neutral');\n this.refs.neutralcounter.classList.remove('neutral');\n this.refs.positivearrow.classList.remove('positive');\n this.refs.positivecounter.classList.remove('positive');\n }\n\n /*Overall Sentiment Highlighter\n ===============*/\n if (this.props.sentiment === 'Positive') {\n this.refs.sentiment.classList.add('positive');\n this.refs.sentiment.classList.remove('negative');\n } else if (this.props.sentiment === 'Negative') {\n this.refs.sentiment.classList.add('negative');\n this.refs.sentiment.classList.remove('positive');\n } else {\n this.refs.sentiment.classList.remove('negative');\n this.refs.sentiment.classList.remove('positive');\n }\n\n },\n\n //{...chartProps}: Properties of chartProps are copied into component's props\n //{...chartArea}: Properties of chartArea are copied into component's props\n render: function () {\n return (\n
\n

Twitter Activity

\n \n\n
\n
\n

Total Tweets

\n
\n
{this.props.totalTweets.total}
\n
\n
\n

Positive Tweets

\n
\n
{this.props.totalTweets.posTotal}
\n
\n
\n
\n

Neutral Tweets

\n
\n
{this.props.totalTweets.neutTotal}
\n
\n
\n
\n

Negative Tweets

\n
\n
{this.props.totalTweets.negTotal}
\n
\n
\n
\n
\n

Overall Sentiment

\n

{this.props.sentiment}

\n
\n
\n
          
\n
\n
\n );\n }\n});\n\nexport default TwitterActivityChart;\n","import TwitterActivityChart from './TwitterActivityChart.js';\nvar React = require('react');\n\nconst createReactClass = require(\"create-react-class\");\n\n\n//Dashboard Holds the TwitterActivity Chart Component\n//Uses TwitterActivityChart.js\nvar Dashboard = createReactClass({\n\n render: function () {\n return (\n
\n \n
\n );\n }\n});\n\nexport default Dashboard;","import TwitterStream from '../parts/TwitterStream.js';\nimport Dashboard from '../parts/Dashboard.js';\n\nvar React = require('react');\n\n\n//Results Holds the Dashboard and TwitterStream Components\n//Uses Dashboard.js and TwitterStream.js\n\n/*\nfunction index(props) {\n return (\n
\n
\n \n \n
\n
\n );\n}\n*/\n\nfunction index(props) {\n return (\n
\n
\n \n \n
\n
\n );\n}\n\nexport default index;","import {w3cwebsocket as W3CWebSocket} from \"websocket\";\nimport Results from '../../components/results/index.js';\n\nvar React = require('react');\nvar update = require('immutability-helper');\n\nconst client = new W3CWebSocket(process.env.REACT_APP_WEBSOCKET_URL);\n\nexport default class Home extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n status: 'disconnected',\n search: false,\n keyword: '',\n initTimestamp: '',\n collectedTweets: [],\n binnedTweets: [{numTweets: 0, posTweets: 0, negTweets: 0, neutTweets: 0, timeBin: 5}],\n totalTweets: {total: 0, posTotal: 0, negTotal: 0, neutTotal: 0},\n sentiment: 'Neutral'\n };\n\n this.emit = this.emit.bind(this);\n this.initTimestamp = this.initTimestamp.bind(this);\n\n }\n\n componentDidMount() {\n var self = this;\n client.onopen = () => {\n this.emit(\"subscribe\", \"twitter_stream.twitter_stream\")\n this.connect.bind(this)\n };\n client.onclose = () => {\n this.emit(\"unsubscribe\", \"twitter_stream.twitter_stream\")\n this.disconnect.bind(this)\n };\n client.onmessage = (message) => {\n var data = JSON.parse(message.data);\n if (data.event === 'subscribe') {\n return;\n }\n data = JSON.parse(message.data);\n self.addTweet(data.data.tweet.tweet);\n };\n }\n\n componentWillUnmount() {\n this.emit(\"unsubscribe\", \"twitter_stream.twitter_stream\")\n }\n\n emit(eventName, subscription) {\n client.send(JSON.stringify({\n event: eventName,\n subscription: subscription,\n }))\n\n // Reset Dashboard on New Search\n this.setState({\n collectedTweets: [],\n binnedTweets: [{\n numTweets: 0, posTweets: 0,\n negTweets: 0, neutTweets: 0, timeBin: 5\n }],\n totalTweets: {\n total: 0, posTotal: 0,\n negTotal: 0, neutTotal: 0\n }\n });\n }\n\n connect() {\n this.setState({status: 'connected'});\n // console.log('Connected on socket: %s', this.socket.id);\n }\n\n disconnect() {\n this.setState({status: 'disconnected'});\n // console.log('Disconnected: %s', this.socket.id);\n }\n\n initTimestamp(timestamp) {\n this.setState({initTimestamp: timestamp.initTimestamp});\n this.setState({search: true});\n }\n\n addTweet(tweet) {\n var tweets = this.state.collectedTweets;\n var newTweets = update(tweets, {$unshift: [tweet]});\n\n this.setState({collectedTweets: newTweets});\n this.binTweets(tweet.timestamp_ms, tweet.sentiment);\n this.countTweets(tweet.sentiment);\n this.overallSentiment();\n }\n\n countTweets(sentiment) {\n var totalTweets = this.state.totalTweets;\n var newTotal = totalTweets;\n\n if (sentiment === \"positive\") {\n totalTweets.posTotal++;\n totalTweets.total++;\n this.setState({totalTweets: newTotal});\n\n } else if (sentiment === \"negative\") {\n totalTweets.negTotal++;\n totalTweets.total++;\n this.setState({totalTweets: newTotal});\n } else {\n totalTweets.neutTotal++;\n totalTweets.total++;\n this.setState({totalTweets: newTotal});\n }\n }\n\n overallSentiment() {\n var totalTweets = this.state.totalTweets.posTotal + this.state.totalTweets.negTotal;\n var posTweets = this.state.totalTweets.posTotal\n var sentiment = posTweets / totalTweets;\n\n if (sentiment < 0.5) {\n this.setState({sentiment: 'Negative'});\n } else if (sentiment > 0.5) {\n this.setState({sentiment: 'Positive'});\n } else {\n this.setState({sentiment: 'Neutral'});\n }\n }\n\n binTweets(tweetTimestamp, sentiment) {\n var initTimestamp = this.state.initTimestamp;\n var timeDiff = (tweetTimestamp - initTimestamp) / 1000;\n\n var binnedTweets = this.state.binnedTweets;\n var newBinnedTweets = binnedTweets;\n\n var binIndex = binnedTweets.length - 1;\n var currentBin = binnedTweets[binIndex].timeBin;\n\n if (timeDiff < currentBin) {\n newBinnedTweets[binIndex].numTweets++;\n\n if (sentiment === \"positive\") {\n newBinnedTweets[binIndex].posTweets++;\n this.setState({binnedTweets: newBinnedTweets});\n\n } else if (sentiment === \"negative\") {\n newBinnedTweets[binIndex].negTweets++;\n this.setState({binnedTweets: newBinnedTweets});\n } else {\n newBinnedTweets[binIndex].neutTweets++;\n this.setState({binnedTweets: newBinnedTweets});\n }\n } else {\n if (sentiment === \"positive\") {\n newBinnedTweets.push({\n numTweets: 1,\n posTweets: 1,\n negTweets: 0,\n neutTweets: 0,\n timeBin: currentBin += 5\n });\n this.setState({binnedTweets: newBinnedTweets});\n } else if (sentiment === \"negative\") {\n newBinnedTweets.push({\n numTweets: 1,\n posTweets: 0,\n negTweets: 1,\n neutTweets: 0,\n timeBin: currentBin += 5\n });\n this.setState({binnedTweets: newBinnedTweets});\n } else {\n newBinnedTweets.push({\n numTweets: 1,\n posTweets: 0,\n negTweets: 0,\n neutTweets: 1,\n timeBin: currentBin += 5\n });\n this.setState({binnedTweets: newBinnedTweets});\n }\n }\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\n\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({getCLS, getFID, getFCP, getLCP, getTTFB}) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './assets/scss/default.css';\nimport App from './pages/home';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}