fcc-challenges/pomodoro-clock-react/build/static/js/main.56d846f0.chunk.js.map

1 line
50 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","FullScreen.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","handleNoSleep","playColor","pauseColor","resetColor","sound","navigator","userAgent","includes","self","noSleep","NoSleep","enable","refreshNoSleep","setInterval","disable","clearInterval","clockIsRunningAction","now","Date","nowSeconds","getTime","split","parseInt","zeroTimeAction","refreshClock","newClock","timerAction","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","maxHeight","FullScreen","handleClick","fullscreenElement","exitFullscreen","documentElement","requestFullscreen","faExpand","position","bottom","right","App","handleResize","innerWindowWidthAction","innerWindowHeightAction","addEventListener","removeEventListener","gitHubLabelStyle","attachmentStyle","overFlow","fontFamily","href","target","rel","className","alt","data-recalc-dims","Boolean","location","hostname","match","ReactDOM","render","serviceWorker","ready","then","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.56d846f0.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 NoSleep from 'nosleep.js';\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.handleNoSleep = this.handleNoSleep.bind(this);\n this.state = {\n playColor: colors.ivoryBlack,\n pauseColor: colors.ivoryBlack,\n resetColor: colors.ivoryBlack,\n sound: '',\n };\n };\n\n handleNoSleep() {\n if (navigator.userAgent.includes('Mobile')) {\n const self = this;\n var noSleep = new NoSleep();\n noSleep.enable();\n let refreshNoSleep = setInterval(function() {\n if (!self.props.clockIsRunning) {\n noSleep.disable();\n clearInterval(refreshNoSleep);\n }\n },5000);\n }\n };\n\n handlePlay() {\n if (this.props.clockIsRunning) {\n this.props.clockIsRunningAction(false);\n } else {\n this.props.clockIsRunningAction(true);\n this.handleNoSleep();\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 < 450) {\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 if (height > (maxHeight + 179)) {\n style['margin'] = 'auto';\n } else {\n style['margin'] = '99px 0 80px 0';\n }\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 id='clockContainer' 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';\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExpand } from \"@fortawesome/free-solid-svg-icons\";\n\nclass FullScreen extends React.Component {\n constructor(props) {\n super(props);\n this.handleClick = this.handleClick.bind(this);\n };\n\n handleClick(e) {\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else {\n if (document.exitFullscreen){\n document.exitFullscreen();\n }\n }\n }\n\n render() {\n const expandIconStyle = {\n position: 'fixed',\n fontSize: 32,\n bottom: 10,\n right: 10,\n }\n\n return(\n <div>\n <FontAwesomeIcon icon={faExpand} style={expandIconStyle} onClick={this.handleClick}/>\n </div>\n );\n };\n};\n\nexport default FullScreen;\n","import React from 'react';\nimport { connect } from \"react-redux\";\n\nimport PomodoroClock from './PomodoroClock';\nimport FullScreen from './FullScreen';\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 < 450) {\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 { navigator.userAgent.includes('Mobile') && <FullScreen /> }\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":""}