mirror of
https://github.com/TrentSPalmer/fcc-challenges.git
synced 2024-11-24 04:11:30 -08:00
1 line
48 KiB
Plaintext
1 line
48 KiB
Plaintext
{"version":3,"sources":["BeepSound.ogg","actions/breakLengthAction.js","actions/sessionLengthAction.js","actions/clockAction.js","reducers/rootReducer.js","reducers/innerWindowWidthReducer.js","actions/innerWindowWidthAction.js","reducers/innerWindowHeightReducer.js","actions/innerWindowHeightAction.js","reducers/breakLengthReducer.js","reducers/sessionLengthReducer.js","reducers/timerReducer.js","actions/timerAction.js","reducers/clockReducer.js","reducers/clockIsRunningReducer.js","actions/clockIsRunningAction.js","reducers/zeroTimeReducer.js","actions/zeroTimeAction.js","store.js","globals.js","BreakControls.js","Break.js","SessionControls.js","Session.js","Top.js","Clock.js","Controls.js","PomodoroClock.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","breakLengthAction","breakLength","type","sessionLengthAction","sessionLength","clockAction","time","combineReducers","innerWindowWidth","state","action","window","innerWidth","windowInnerWidth","innerWindowHeight","innerHeight","windowInnerHeight","timer","clock","clockIsRunning","zeroTime","store","createStore","rootReducer","colors","makeClock","remainingTime","remainingSeconds","remainingMinutes","Math","floor","toString","BreakControls","props","handleDownArrowMouseEvent","bind","handleUpArrowMouseEvent","incrementBreak","decrementBreak","downColor","upColor","this","newBreakLength","e","setState","downArrowStyle","color","upArrowStyle","style","height","width","display","flexDirection","alignItems","justifyContent","marginRight","fontSize","id","onClick","onTouchStart","onTouchEnd","onMouseDown","onMouseUp","icon","faArrowCircleDown","faArrowCircleUp","React","Component","connect","dispatch","Break","breakTextStyle","textAlign","SessionControls","incrementSession","decrementSession","newSessionLength","marginLeft","Session","sessionTextStyle","Top","Clock","timerLabelStyle","Controls","handleMouseEventPlay","handleMouseEventPause","handleMouseEventReset","handlePlay","handleReset","playColor","pauseColor","resetColor","sound","clockIsRunningAction","now","Date","nowSeconds","getTime","split","parseInt","zeroTimeAction","self","refreshClock","setInterval","newClock","timerAction","clearInterval","pause","currentTime","prevProps","play","document","getElementById","playStyle","pauseStyle","resetStyle","faPlayCircle","faPauseCircle","faSyncAlt","preload","src","BeepSoundOgg","PomodoroClock","eightyPercentWidth","round","eightyPercentHeight","margin","border","borderColor","zIndex","backgroundColor","borderRadius","userSelect","MozUserSelect","WebkitUserSelect","clockContainerStyle","App","handleResize","innerWindowWidthAction","innerWindowHeightAction","addEventListener","removeEventListener","gitHubLabelStyle","position","right","attachmentStyle","overFlow","fontFamily","href","target","rel","className","alt","data-recalc-dims","Boolean","location","hostname","match","ReactDOM","render","navigator","serviceWorker","ready","then","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.157adc9f.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/BeepSound.049fe0d0.ogg\";","export const SETBREAKLENGTH = \"SETBREAKLENGTH\";\n\nexport const breakLengthAction = (breakLength) => {\n return {\n type: SETBREAKLENGTH,\n breakLength: breakLength,\n };\n};\n","export const SETSESSIONLENGTH = \"SETSESSIONLENGTH\";\n\nexport const sessionLengthAction = (sessionLength) => {\n return {\n type: SETSESSIONLENGTH,\n sessionLength: sessionLength,\n };\n};\n","export const SETCLOCK = \"SETCLOCK\";\n\nexport const clockAction = (time) => {\n return {\n type: SETCLOCK,\n time: time,\n };\n};\n","import { combineReducers } from \"redux\";\nimport innerWindowWidthReducer from \"./innerWindowWidthReducer\";\nimport innerWindowHeightReducer from \"./innerWindowHeightReducer\";\nimport breakLengthReducer from \"./breakLengthReducer\";\nimport sessionLengthReducer from \"./sessionLengthReducer\";\nimport timerReducer from \"./timerReducer\";\nimport clockReducer from \"./clockReducer\";\nimport clockIsRunningReducer from \"./clockIsRunningReducer\";\nimport zeroTimeReducer from \"./zeroTimeReducer\";\n\nexport default combineReducers({\n innerWindowWidth: innerWindowWidthReducer,\n innerWindowHeight: innerWindowHeightReducer,\n breakLength: breakLengthReducer,\n sessionLength: sessionLengthReducer,\n timer: timerReducer,\n clock: clockReducer,\n clockIsRunning: clockIsRunningReducer,\n zeroTime: zeroTimeReducer,\n});\n","import { SETWINDOWINNERWIDTH } from \"../actions/innerWindowWidthAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = window.innerWidth;\n }\n\n switch (action.type) {\n case SETWINDOWINNERWIDTH:\n return action.windowInnerWidth;\n default:\n return state;\n };\n};\n","export const SETWINDOWINNERWIDTH = \"SETWINDOWINNERWIDTH\";\n\nexport const innerWindowWidthAction = (windowInnerWidth) => {\n return {\n type: SETWINDOWINNERWIDTH,\n windowInnerWidth: windowInnerWidth,\n };\n};\n","import { SETWINDOWINNERHEIGHT } from \"../actions/innerWindowHeightAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = window.innerHeight;\n }\n\n switch (action.type) {\n case SETWINDOWINNERHEIGHT:\n return action.windowInnerHeight;\n default:\n return state;\n }\n};\n","export const SETWINDOWINNERHEIGHT = \"SETWINDOWINNERHEIGHT\";\n\nexport const innerWindowHeightAction = (windowInnerHeight) => {\n return {\n type: SETWINDOWINNERHEIGHT,\n windowInnerHeight: windowInnerHeight,\n };\n};\n","import { SETBREAKLENGTH } from \"../actions/breakLengthAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = 5;\n }\n\n switch (action.type) {\n case SETBREAKLENGTH:\n return action.breakLength;\n default:\n return state;\n }\n};\n","import { SETSESSIONLENGTH } from \"../actions/sessionLengthAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = 25;\n }\n\n switch (action.type) {\n case SETSESSIONLENGTH:\n return action.sessionLength;\n default:\n return state;\n }\n};\n","import { SETTIMER } from \"../actions/timerAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = 'Session';\n }\n\n switch (action.type) {\n case SETTIMER:\n return action.timer;\n default:\n return state;\n }\n};\n","export const SETTIMER = \"SETTIMER\";\n\nexport const timerAction = (timer) => {\n return {\n type: SETTIMER,\n timer: timer,\n };\n};\n","import { SETCLOCK } from \"../actions/clockAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = '25:00';\n }\n\n switch (action.type) {\n case SETCLOCK:\n return action.time;\n default:\n return state;\n }\n};\n","import { SETCLOCKISRUNNING } from \"../actions/clockIsRunningAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = false;\n }\n\n switch (action.type) {\n case SETCLOCKISRUNNING:\n return action.clockIsRunning;\n default:\n return state;\n }\n};\n","export const SETCLOCKISRUNNING = \"SETCLOCKISRUNNING\";\n\nexport const clockIsRunningAction = (clockIsRunning) => {\n return {\n type: SETCLOCKISRUNNING,\n clockIsRunning: clockIsRunning,\n };\n};\n","import { SETZEROTIME } from \"../actions/zeroTimeAction\";\n\nexport default (state, action) => {\n if (!state) {\n state = 0;\n }\n\n switch (action.type) {\n case SETZEROTIME:\n return action.zeroTime;\n default:\n return state;\n }\n};\n","export const SETZEROTIME = \"SETZEROTIME\";\n\nexport const zeroTimeAction = (zeroTime) => {\n return {\n type: SETZEROTIME,\n zeroTime: zeroTime,\n };\n};\n","import { createStore } from \"redux\";\nimport rootReducer from \"./reducers/rootReducer\";\n\nconst store = createStore(rootReducer);\n\nexport default store;\n","export const colors = {\n prussianBlue: '#0b3c5d',\n skyBlue: '#328cc1',\n goldLeaf: '#d9b310',\n ivoryBlack: '#1d2731',\n};\n\nexport const makeClock = (remainingTime) => {\n const remainingSeconds = remainingTime % 60;\n const remainingMinutes = Math.floor(remainingTime / 60);\n const minutes = remainingMinutes > 9 ? remainingMinutes.toString() : '0' + remainingMinutes.toString() ;\n const seconds = remainingSeconds > 9 ? remainingSeconds.toString() : '0' + remainingSeconds.toString() ;\n return minutes + ':' + seconds;\n};\n","import React from 'react';\nimport { connect } from \"react-redux\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faArrowCircleDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { faArrowCircleUp } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors,makeClock } from './globals'\n\nimport { breakLengthAction } from \"./actions/breakLengthAction\";\nimport { clockAction } from \"./actions/clockAction\";\n\nconst mapDispatchToProps = (dispatch) => ({\n breakLengthAction: (breakLength) => dispatch(breakLengthAction(breakLength)),\n clockAction: (time) => dispatch(clockAction(time)),\n});\n\nconst mapStateToProps = (state) => ({ ...state });\n\nclass BreakControls extends React.Component {\n constructor(props) {\n super(props);\n this.handleDownArrowMouseEvent = this.handleDownArrowMouseEvent.bind(this);\n this.handleUpArrowMouseEvent = this.handleUpArrowMouseEvent.bind(this);\n this.incrementBreak = this.incrementBreak.bind(this);\n this.decrementBreak = this.decrementBreak.bind(this);\n this.state = {\n downColor: colors.ivoryBlack,\n upColor: colors.ivoryBlack,\n };\n };\n\n incrementBreak() {\n if (this.props.breakLength < 60) {\n const newBreakLength = this.props.breakLength + 1;\n if (!this.props.clockIsRunning) {\n this.props.breakLengthAction(newBreakLength);\n if (this.props.timer === 'Break') {\n this.props.clockAction(makeClock(newBreakLength * 60));\n }\n } else {\n if (this.props.timer === 'Session') {\n this.props.breakLengthAction(newBreakLength);\n }\n }\n }\n };\n\n decrementBreak() {\n if (this.props.breakLength > 1) {\n const newBreakLength = this.props.breakLength - 1;\n if (!this.props.clockIsRunning) {\n this.props.breakLengthAction(newBreakLength);\n if (this.props.timer === 'Break') {\n this.props.clockAction(makeClock(newBreakLength * 60));\n }\n } else {\n if (this.props.timer === 'Session') {\n this.props.breakLengthAction(newBreakLength);\n }\n }\n }\n };\n\n handleDownArrowMouseEvent(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({downColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({downColor: colors.ivoryBlack});\n }\n };\n\n handleUpArrowMouseEvent(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({upColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({upColor: colors.ivoryBlack});\n }\n };\n\n render() {\n const style = {\n height: '50%',\n width: '75%',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginRight: '25%',\n fontSize: 32,\n };\n\n const breakStyle = {\n width: 50,\n }\n\n const downArrowStyle = {\n color: this.state.downColor,\n }\n\n const upArrowStyle = {\n color: this.state.upColor,\n }\n\n return(\n <div style={style}>\n <div id='break-decrement' style={downArrowStyle} onClick={this.decrementBreak}\n onTouchStart={this.handleDownArrowMouseEvent} onTouchEnd={this.handleDownArrowMouseEvent}\n onMouseDown={this.handleDownArrowMouseEvent} onMouseUp={this.handleDownArrowMouseEvent}>\n <FontAwesomeIcon icon={faArrowCircleDown}/>\n </div>\n\n <p id='break-length' style={breakStyle}>{this.props.breakLength}</p>\n\n <div id='break-increment' style={upArrowStyle} onClick={this.incrementBreak}\n onTouchStart={this.handleUpArrowMouseEvent} onTouchEnd={this.handleUpArrowMouseEvent}\n onMouseDown={this.handleUpArrowMouseEvent} onMouseUp={this.handleUpArrowMouseEvent}>\n <FontAwesomeIcon icon={faArrowCircleUp}/>\n </div>\n </div>\n );\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BreakControls);\n","import React from 'react';\n\nimport { colors } from './globals'\nimport BreakControls from './BreakControls';\n\nconst Break = () => {\n const style = {\n height: '100%',\n width: '50%',\n };\n\n const breakTextStyle = {\n height: '50%',\n width: '90%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n textAlign: 'right',\n marginRight: '10%',\n color: colors.goldLeaf,\n };\n\n return(\n <div style={style}>\n <div id=\"break-label\" style={breakTextStyle}>Break Length</div>\n <BreakControls />\n </div>\n );\n};\n\nexport default Break;\n","import React from 'react';\nimport { connect } from \"react-redux\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faArrowCircleDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { faArrowCircleUp } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors,makeClock } from './globals'\n\nimport { sessionLengthAction } from \"./actions/sessionLengthAction\";\nimport { clockAction } from \"./actions/clockAction\";\n\nconst mapDispatchToProps = (dispatch) => ({\n sessionLengthAction: (sessionLength) => dispatch(sessionLengthAction(sessionLength)),\n clockAction: (time) => dispatch(clockAction(time)),\n});\n\nconst mapStateToProps = (state) => ({ ...state });\n\nclass SessionControls extends React.Component {\n constructor(props) {\n super(props);\n this.handleDownArrowMouseEvent = this.handleDownArrowMouseEvent.bind(this);\n this.handleUpArrowMouseEvent = this.handleUpArrowMouseEvent.bind(this);\n this.incrementSession = this.incrementSession.bind(this);\n this.decrementSession = this.decrementSession.bind(this);\n this.state = {\n downColor: colors.ivoryBlack,\n upColor: colors.ivoryBlack,\n };\n };\n\n incrementSession() {\n if (this.props.sessionLength < 60) {\n const newSessionLength = this.props.sessionLength + 1;\n if (!this.props.clockIsRunning) {\n this.props.sessionLengthAction(newSessionLength);\n if (this.props.timer === 'Session') {\n this.props.clockAction(makeClock(newSessionLength * 60));\n }\n } else {\n if (this.props.timer === 'Break') {\n this.props.sessionLengthAction(newSessionLength);\n }\n }\n }\n };\n\n decrementSession() {\n if (this.props.sessionLength > 1) {\n const newSessionLength = this.props.sessionLength - 1;\n if (!this.props.clockIsRunning) {\n this.props.sessionLengthAction(newSessionLength);\n if (this.props.timer === 'Session') {\n this.props.clockAction(makeClock(newSessionLength * 60));\n }\n } else {\n if (this.props.timer === 'Break') {\n this.props.sessionLengthAction(newSessionLength);\n }\n }\n }\n };\n\n handleDownArrowMouseEvent(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({downColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({downColor: colors.ivoryBlack});\n }\n };\n\n handleUpArrowMouseEvent(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({upColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({upColor: colors.ivoryBlack});\n }\n };\n\n render() {\n const style = {\n height: '50%',\n width: '75%',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n marginLeft: '25%',\n fontSize: 32,\n };\n\n const breakStyle = {\n width: 50,\n }\n\n const downArrowStyle = {\n color: this.state.downColor,\n }\n\n const upArrowStyle = {\n color: this.state.upColor,\n }\n\n return(\n <div style={style}>\n <div id='session-decrement' style={downArrowStyle} onClick={this.decrementSession}\n onTouchStart={this.handleDownArrowMouseEvent} onTouchEnd={this.handleDownArrowMouseEvent}\n onMouseDown={this.handleDownArrowMouseEvent} onMouseUp={this.handleDownArrowMouseEvent}>\n <FontAwesomeIcon icon={faArrowCircleDown}/>\n </div>\n\n <p id='session-length' style={breakStyle}>{this.props.sessionLength}</p>\n\n <div id='session-increment' style={upArrowStyle} onClick={this.incrementSession}\n onTouchStart={this.handleUpArrowMouseEvent} onTouchEnd={this.handleUpArrowMouseEvent}\n onMouseDown={this.handleUpArrowMouseEvent} onMouseUp={this.handleUpArrowMouseEvent}>\n <FontAwesomeIcon icon={faArrowCircleUp}/>\n </div>\n </div>\n );\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SessionControls);\n","import React from 'react';\n\nimport { colors } from './globals'\nimport SessionControls from './SessionControls';\n\nconst Session = () => {\n const style = {\n height: '100%',\n width: '50%',\n };\n\n const sessionTextStyle = {\n height: '50%',\n width: '90%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n textAlign: 'left',\n marginLeft: '10%',\n color: colors.goldLeaf,\n };\n\n return(\n <div style={style}>\n <div id=\"session-label\" style={sessionTextStyle}>Session Length</div>\n <SessionControls />\n </div>\n );\n};\n\nexport default Session;\n","import React from 'react';\n\nimport Break from './Break';\nimport Session from './Session';\n\nconst Top = () => {\n\n const style = {\n height: '40%',\n width: '100%',\n }\n\n const titleStyle = {\n height: '50%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n fontSize: 48,\n }\n\n const breakAndSessionStyle = {\n height: '50%',\n width: '100%',\n display: 'flex',\n }\n\n return(\n <div style={style}>\n <div style={titleStyle}>Pomodoro Clock</div>\n <div style={breakAndSessionStyle}>\n <Break />\n <Session />\n </div>\n </div>\n );\n}\n\nexport default Top;\n","import React from 'react';\nimport { connect } from \"react-redux\";\n\nimport { colors } from './globals'\n\nconst mapStateToProps = (state) => ({ ...state });\n\nclass Clock extends React.Component {\n render() {\n const clockStyle = {\n height: '40%',\n width: '100%',\n }\n\n const timerLabelStyle = {\n height: '30%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n color: colors.goldLeaf,\n }\n\n const timerStyle = {\n height: '70%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n fontSize: 96,\n }\n\n return(\n <div style={clockStyle}>\n <div id='timer-label' style={timerLabelStyle}>{this.props.timer}</div>\n <div id='time-left' style={timerStyle}>{this.props.clock}</div>\n </div>\n );\n };\n};\n\nexport default connect(mapStateToProps)(Clock);\n","import React from 'react';\nimport { connect } from \"react-redux\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faPlayCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { faPauseCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { faSyncAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport { colors,makeClock } from './globals'\n\nimport { clockIsRunningAction } from \"./actions/clockIsRunningAction\";\nimport { zeroTimeAction } from \"./actions/zeroTimeAction\";\nimport { clockAction } from \"./actions/clockAction\";\nimport { timerAction } from \"./actions/timerAction\";\nimport { sessionLengthAction } from \"./actions/sessionLengthAction\";\nimport { breakLengthAction } from \"./actions/breakLengthAction\";\nimport BeepSoundOgg from './BeepSound.ogg';\n\nconst mapDispatchToProps = (dispatch) => ({\n clockIsRunningAction: (clockIsRunning) => dispatch(clockIsRunningAction(clockIsRunning)),\n zeroTimeAction: (zeroTime) => dispatch(zeroTimeAction(zeroTime)),\n clockAction: (time) => dispatch(clockAction(time)),\n timerAction: (timer) => dispatch(timerAction(timer)),\n sessionLengthAction: (sessionLength) => dispatch(sessionLengthAction(sessionLength)),\n breakLengthAction: (breakLength) => dispatch(breakLengthAction(breakLength)),\n});\n\nconst mapStateToProps = (state) => ({ ...state });\n\nclass Controls extends React.Component {\n constructor(props) {\n super(props);\n this.handleMouseEventPlay = this.handleMouseEventPlay.bind(this);\n this.handleMouseEventPause = this.handleMouseEventPause.bind(this);\n this.handleMouseEventReset = this.handleMouseEventReset.bind(this);\n this.handlePlay = this.handlePlay.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.state = {\n playColor: colors.ivoryBlack,\n pauseColor: colors.ivoryBlack,\n resetColor: colors.ivoryBlack,\n sound: '',\n };\n };\n\n handlePlay() {\n if (this.props.clockIsRunning) {\n this.props.clockIsRunningAction(false);\n } else {\n this.props.clockIsRunningAction(true);\n const now = new Date();\n const nowSeconds = Math.floor(now.getTime() / 1000);\n const remainingTime = this.props.clock.split(':');\n const remainingSeconds = (60 * parseInt(remainingTime[0])) + parseInt(remainingTime[1]);\n this.props.zeroTimeAction(nowSeconds + remainingSeconds);\n const self = this;\n let refreshClock = setInterval(function(){\n if (!self.props.clockIsRunning) {\n clearInterval(refreshClock);\n } else {\n const now = new Date();\n const nowSeconds = Math.floor(now.getTime() / 1000);\n if (nowSeconds <= self.props.zeroTime) {\n const remainingTime = self.props.zeroTime - nowSeconds;\n const newClock = makeClock(remainingTime);\n if (newClock !== self.props.clock) {\n self.props.clockAction(newClock);\n }\n } else {\n let remainingTime = self.props.breakLength * 60;\n if (self.props.timer === 'Session') {\n self.props.timerAction('Break');\n } else {\n self.props.timerAction('Session');\n remainingTime = self.props.sessionLength * 60;\n }\n self.props.zeroTimeAction(nowSeconds + remainingTime);\n self.props.clockAction(makeClock(remainingTime));\n }\n }\n },1000);\n }\n };\n\n handleReset() {\n if (this.props.clockIsRunning) {\n this.props.clockIsRunningAction(false);\n }\n if (this.props.timer === 'Break') {\n this.props.timerAction('Session');\n }\n if (this.props.sessionLength !== 25) {\n this.props.sessionLengthAction(25);\n }\n if (this.props.breakLength !== 5) {\n this.props.breakLengthAction(5);\n }\n if (this.props.clock !== '25:00') {\n this.props.clockAction('25:00');\n }\n this.state.sound.pause();\n const oldSound = this.state.sound;\n oldSound.currentTime = 0;\n };\n\n componentDidUpdate(prevProps) {\n if (this.props.clock === '00:00') {\n this.state.sound.play();\n }\n };\n\n handleMouseEventPlay(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({playColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({playColor: colors.ivoryBlack});\n }\n };\n\n handleMouseEventPause(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({pauseColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({pauseColor: colors.ivoryBlack});\n }\n };\n\n handleMouseEventReset(e) {\n if (e.type === 'mousedown' || e.type === 'touchstart') {\n this.setState({resetColor: colors.goldLeaf});\n } else if (e.type === 'mouseup' || e.type === 'touchend') {\n this.setState({resetColor: colors.ivoryBlack});\n }\n };\n\n componentDidMount() {\n this.setState({sound: document.getElementById('beep')});\n };\n\n render() {\n const controlsStyle = {\n height: '20%',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: 48,\n }\n\n const playStyle = {\n color: this.state.playColor,\n };\n\n const pauseStyle = {\n color: this.state.pauseColor,\n width: 150,\n };\n\n const resetStyle = {\n color: this.state.resetColor,\n };\n\n return(\n <div style={controlsStyle}>\n <div id='start_stop' style={playStyle} onClick={this.handlePlay}\n onMouseDown={this.handleMouseEventPlay} onMouseUp={this.handleMouseEventPlay}\n onTouchStart={this.handleMouseEventPlay} onTouchEnd={this.handleMouseEventPlay}>\n <FontAwesomeIcon icon={faPlayCircle}/>\n </div>\n\n <FontAwesomeIcon style={pauseStyle} onMouseDown={this.handleMouseEventPause}\n onMouseUp={this.handleMouseEventPause} onTouchStart={this.handleMouseEventPause}\n onTouchEnd={this.handleMouseEventPause} onClick={() => {this.props.clockIsRunningAction(false)}} icon={faPauseCircle}/>\n\n <div id='reset' style={resetStyle} onClick={this.handleReset}\n onMouseDown={this.handleMouseEventReset} onMouseUp={this.handleMouseEventReset}\n onTouchStart={this.handleMouseEventReset} onTouchEnd={this.handleMouseEventReset}>\n <FontAwesomeIcon icon={faSyncAlt}/>\n </div>\n\n <audio id='beep' preload='auto' src={BeepSoundOgg} type='audio/ogg'></audio>\n </div>\n );\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Controls);\n","import React from 'react';\nimport { connect } from \"react-redux\";\nimport { colors } from './globals'\n\nimport Top from './Top';\nimport Clock from './Clock';\nimport Controls from './Controls';\n\nconst mapStateToProps = (state) => ({ ...state });\n\nclass PomodoroClock extends React.Component {\n render() {\n const width = this.props.innerWindowWidth;\n const height = this.props.innerWindowHeight;\n const eightyPercentWidth = Math.round(width * 0.8);\n const eightyPercentHeight = Math.round(height * 0.8);\n const maxHeight = 500;\n const maxWidth = 800;\n const style = {\n margin: 'auto',\n border: '3px solid',\n borderColor: colors.ivoryBlack,\n zIndex: '1',\n backgroundColor: colors.skyBlue,\n borderRadius: 10,\n height: eightyPercentHeight < maxHeight ? eightyPercentHeight : maxHeight,\n width: eightyPercentWidth < maxWidth ? eightyPercentWidth : maxWidth,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n fontSize: 32,\n userSelect: 'none',\n MozUserSelect: 'none',\n WebkitUserSelect: 'none',\n };\n\n const clockContainerStyle = { \n height: '100%',\n width: '100%',\n };\n\n if (width > height && height < 400) {\n style['height'] = '96vh';\n style['width'] = '75vw';\n style['margin'] = '1vh auto 3vh auto';\n style['fontSize'] = 24;\n } else if (height > width) {\n style['height'] = Math.round(height * 0.75);\n style['maxHeight'] = maxHeight;\n clockContainerStyle['height'] = width > style['height'] ? style['height'] : width; \n clockContainerStyle['maxHeight'] = maxHeight;\n style['width'] = width - 6;\n style['maxWidth'] = maxWidth;\n style['fontSize'] = 24;\n }\n\n return(\n <div style={style}>\n <div style={clockContainerStyle}>\n <Top />\n <Clock />\n <Controls />\n </div>\n </div>\n );\n };\n};\n\nexport default connect(mapStateToProps)(PomodoroClock);\n","import React from 'react';\nimport { connect } from \"react-redux\";\n\nimport PomodoroClock from './PomodoroClock';\n\nimport { colors } from './globals'\n\nimport { innerWindowWidthAction } from \"./actions/innerWindowWidthAction\";\nimport { innerWindowHeightAction } from \"./actions/innerWindowHeightAction\";\n\nconst mapStateToProps = (state) => ({ ...state });\n\nconst mapDispatchToProps = (dispatch) => ({\n innerWindowWidthAction: (windowInnerWidth) => dispatch(innerWindowWidthAction(windowInnerWidth)),\n innerWindowHeightAction: (windowInnerHeight) => dispatch(innerWindowHeightAction(windowInnerHeight)),\n});\n\nclass App extends React.Component {\n constructor(props) {\n super(props);\n this.handleResize = this.handleResize.bind(this);\n };\n\n handleResize() {\n this.props.innerWindowWidthAction(window.innerWidth);\n this.props.innerWindowHeightAction(window.innerHeight);\n };\n\n componentDidMount() {\n window.addEventListener('resize',this.handleResize);\n };\n\n componentWillUnmount() {\n window.removeEventListener('resize',this.handleResize);\n };\n\n render() {\n const height = this.props.innerWindowHeight;\n const width = this.props.innerWindowWidth;\n const gitHubLabelStyle = {\n backgroundColor: colors.prussianBlue,\n border: 'none',\n width: 149,\n height: 0,\n position: 'absolute',\n right: 0,\n };\n\n const attachmentStyle = {\n position: 'absolute',\n right: 0,\n height: 149,\n width: 149,\n };\n\n const style = {\n textAlign: 'center',\n backgroundColor: colors.prussianBlue,\n height: '100vh',\n width: '100vw',\n display: 'flex',\n flexDirection: 'column',\n color: colors.ivoryBlack,\n overFlow: 'hidden',\n fontFamily: 'Ubuntu sans-serif',\n fontSize: 48,\n };\n\n if (width > height && height < 400) {\n gitHubLabelStyle['width'] = 99;\n attachmentStyle['width'] = 99;\n attachmentStyle['height'] = 99;\n } else if (height > width) {\n gitHubLabelStyle['width'] = 99;\n attachmentStyle['width'] = 99;\n attachmentStyle['height'] = 99;\n }\n\n return (\n <div style={style}>\n <a href=\"https://github.com/TrentSPalmer/fcc-challenges/tree/gh-pages/pomodoro-clock-react\"\n style={gitHubLabelStyle}\n target=\"_blank\" rel=\"noopener noreferrer\">\n <img\n src=\"https://github.blog/wp-content/uploads/2008/12/forkme_right_white_ffffff.png?resize=149%2C149\"\n className=\"size-full\"\n style={attachmentStyle}\n alt=\"Fork me on GitHub\"\n data-recalc-dims=\"1\">\n </img>\n </a>\n <PomodoroClock />\n </div>\n );\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(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 { Provider } from \"react-redux\";\nimport store from \"./store\";\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n <Provider store={store}>\n <App />\n </Provider>,\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":""} |