\n );\n }\n}\n\nexport default connect(mapStateToProps)(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 \n \n ,\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":""}
\ No newline at end of file
diff --git a/random-quote-machine/build/static/js/main.b6838136.chunk.js b/random-quote-machine/build/static/js/main.b6838136.chunk.js
deleted file mode 100644
index 3447f65..0000000
--- a/random-quote-machine/build/static/js/main.b6838136.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this["webpackJsonprandom-quote-machine"]=this["webpackJsonprandom-quote-machine"]||[]).push([[0],{21:function(e,t,n){e.exports=n(39)},30:function(e,t,n){},31:function(e,t,n){},32:function(e,t,n){},33:function(e,t,n){},37:function(e,t,n){},38:function(e,t,n){},39:function(e,t,n){"use strict";n.r(t);var o=n(0),r=n.n(o),c=n(10),a=n.n(c),u=n(2),i=n(8),l=n(18),s=function(){return function(e){e({type:"REQUESTING_QUOTE"}),fetch("https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json").then((function(e){return e.json()})).then((function(t){e({type:"RECEIVED_QUOTE",newQuote:t.quotes[Math.floor(Math.random()*t.quotes.length)]})}))}},p=Object(i.c)({colorCount:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"INCCOLORCOUNT":return t.count;default:return e}},newQuote:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{fetching:!1,quote:""},t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"REQUESTING_QUOTE":return{fetching:!0,quote:""};case"RECEIVED_QUOTE":return{fetching:!1,quote:t.newQuote};default:return e}}}),h=Object(i.d)(p,Object(i.a)(l.a)),b=(n(30),n(3)),m=n(4),d=n(5),f=n(6),O=n(7),v=(n(31),n(32),n(11)),j=(n(33),function(e){Object(f.a)(n,e);var t=Object(d.a)(n);function n(e){var o;return Object(b.a)(this,n),(o=t.call(this,e)).handleClick=o.handleClick.bind(Object(v.a)(o)),o}return Object(m.a)(n,[{key:"handleClick",value:function(){this.props.colorCounterAction(this.props.colorCount>1?0:this.props.colorCount+1),this.props.quoteFetch()}},{key:"render",value:function(){var e="NewQuote "+["red-background","blue-background","yellow-background"][this.props.colorCount];return r.a.createElement("button",{onClick:this.handleClick,className:e,id:"new-quote"},"Click Me!")}}]),n}(r.a.Component)),E=Object(u.b)((function(e){return Object(O.a)({},e)}),(function(e){return{colorCounterAction:function(t){return e(function(e){return{type:"INCCOLORCOUNT",count:e}}(t))},quoteFetch:function(){return e(s())}}}))(j),w=n(19),C=n(20),k=(n(37),function(e){Object(f.a)(n,e);var t=Object(d.a)(n);function n(){return Object(b.a)(this,n),t.apply(this,arguments)}return Object(m.a)(n,[{key:"render",value:function(){var e=["red-background","blue-background","yellow-background"],t="TweetQuote "+e[this.props.colorCount],n="https://twitter.com/intent/tweet?text=";return"object"===typeof this.props.newQuote.quote&&(n+=encodeURIComponent(this.props.newQuote.quote.quote+"\n--"+this.props.newQuote.quote.author)),r.a.createElement("div",{className:"tweetQuoteContainer"},r.a.createElement("div",{className:t},r.a.createElement("a",{href:n,target:"_blank",rel:"noopener noreferrer",id:"tweet-quote"},r.a.createElement(w.a,{icon:C.a,className:e[this.props.colorCount]}))))}}]),n}(r.a.Component)),g=Object(u.b)((function(e){return Object(O.a)({},e)}))(k),y=(n(38),function(e){Object(f.a)(n,e);var t=Object(d.a)(n);function n(){return Object(b.a)(this,n),t.apply(this,arguments)}return Object(m.a)(n,[{key:"componentDidMount",value:function(){""===this.props.newQuote.quote&&this.props.quoteFetch()}},{key:"render",value:function(){var e="",t="";"object"===typeof this.props.newQuote.quote&&(e=this.props.newQuote.quote.quote,t=this.props.newQuote.quote.author);var n=["red","blue","yellow"],o="text "+n[this.props.colorCount],c="author "+n[this.props.colorCount];return r.a.createElement("div",{style:{fontSize:".7em"}},r.a.createElement("p",{className:o,id:"text"},e),r.a.createElement("p",{className:c,id:"author"},"--",t))}}]),n}(r.a.Component)),q=Object(u.b)((function(e){return Object(O.a)({},e)}),(function(e){return{quoteFetch:function(){return e(s())}}}))(y),N=function(e){Object(f.a)(n,e);var t=Object(d.a)(n);function n(){return Object(b.a)(this,n),t.apply(this,arguments)}return Object(m.a)(n,[{key:"render",value:function(){var e="QuoteBox "+["red-complimentary-background","blue-complimentary-background","yellow-complimentary-background"][this.props.colorCount];return r.a.createElement("div",{className:e,id:"quote-box"},r.a.createElement("div",{className:"quote-box-top"},r.a.createElement(q,null)),r.a.createElement("div",{className:"quote-box-bottom"},r.a.createElement("div",{className:"quote-box-bottom-left"},r.a.createElement(g,null)),r.a.createElement("div",{className:"quote-box-bottom-right"},r.a.createElement(E,null))))}}]),n}(r.a.Component),Q=Object(u.b)((function(e){return Object(O.a)({},e)}))(N),x=function(e){Object(f.a)(n,e);var t=Object(d.a)(n);function n(){return Object(b.a)(this,n),t.apply(this,arguments)}return Object(m.a)(n,[{key:"render",value:function(){var e="App-header "+["red-background","blue-background","yellow-background"][this.props.colorCount];return r.a.createElement("div",{className:"App"},r.a.createElement("header",{className:e},r.a.createElement(Q,null)))}}]),n}(r.a.Component),T=Object(u.b)((function(e){return Object(O.a)({},e)}))(x);Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));a.a.render(r.a.createElement(u.a,{store:h},r.a.createElement(T,null)),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()})).catch((function(e){console.error(e.message)}))}},[[21,1,2]]]);
-//# sourceMappingURL=main.b6838136.chunk.js.map
\ No newline at end of file
diff --git a/random-quote-machine/build/static/js/main.b6838136.chunk.js.map b/random-quote-machine/build/static/js/main.b6838136.chunk.js.map
deleted file mode 100644
index dcc7d0c..0000000
--- a/random-quote-machine/build/static/js/main.b6838136.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["actions/quoteFetchActionCreator.js","reducers/rootReducer.js","reducers/colorCounterReducer.js","actions/colorCounterAction.js","reducers/asyncQuoteReducer.js","store.js","NewQuote.js","TweetQuote.js","TextAuthor.js","QuoteBox.js","App.js","serviceWorker.js","index.js"],"names":["quoteFetchActionCreator","dispatch","type","fetch","then","response","json","quotes","newQuote","Math","floor","random","length","combineReducers","colorCount","state","action","count","fetching","quote","store","createStore","rootReducer","applyMiddleware","thunk","NewQuote","props","handleClick","bind","this","colorCounterAction","quoteFetch","newQuoteClass","onClick","className","id","React","Component","connect","TweetQuote","colors","tweetQuoteClass","href","encodeURIComponent","author","target","rel","icon","faTwitter","TextAuthor","textClass","authorClass","style","fontSize","QuoteBox","quoteBoxClass","App","appHeaderClass","Boolean","window","location","hostname","match","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.b6838136.chunk.js","sourcesContent":["export const RECEIVED_QUOTE = \"RECEIVED_QUOTE\";\nexport const REQUESTING_QUOTE = \"REQUESTING_QUOTE\";\n\nexport const receivedQuoteAction = quote => {\n return {\n type: RECEIVED_QUOTE,\n newQuote: quote\n };\n};\n\nexport const requestingQuoteAction = () => {\n return {\n type: REQUESTING_QUOTE\n };\n};\n\nexport const quoteFetchActionCreator = () => {\n return function (dispatch) {\n dispatch(requestingQuoteAction());\n fetch(\n \"https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json\"\n )\n .then(response => response.json())\n .then(quotes => {\n dispatch(\n receivedQuoteAction(\n quotes.quotes[Math.floor(Math.random() * quotes.quotes.length)]\n )\n );\n });\n };\n};\n","import { combineReducers } from \"redux\";\nimport colorCounterReducer from \"./colorCounterReducer\";\nimport asyncQuoteReducer from \"./asyncQuoteReducer\";\n\nexport default combineReducers({\n colorCount: colorCounterReducer,\n newQuote: asyncQuoteReducer,\n});\n","import { INCCOLORCOUNT } from \"../actions/colorCounterAction\";\n\nexport default (state = 1, action) => {\n switch (action.type) {\n case INCCOLORCOUNT:\n return action.count;\n default:\n return state;\n }\n};\n","export const INCCOLORCOUNT = \"INCCOLORCOUNT\";\n\nexport const colorCounterAction = (count) => {\n return {\n type: INCCOLORCOUNT,\n count: count,\n };\n};\n","import { REQUESTING_QUOTE } from \"../actions/quoteFetchActionCreator\";\nimport { RECEIVED_QUOTE } from \"../actions/quoteFetchActionCreator\";\n\nexport default (state = { fetching: false, quote: \"\" }, action) => {\n switch (action.type) {\n case REQUESTING_QUOTE:\n return { fetching: true, quote: \"\" };\n case RECEIVED_QUOTE:\n return { fetching: false, quote: action.newQuote };\n default:\n return state;\n }\n};\n","import { createStore, applyMiddleware } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport rootReducer from \"./reducers/rootReducer\";\n\nconst store = createStore(rootReducer, applyMiddleware(thunk));\n\nexport default store;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\n\nimport \"./NewQuote.css\";\n\nimport { colorCounterAction } from \"./actions/colorCounterAction\";\nimport { quoteFetchActionCreator } from \"./actions/quoteFetchActionCreator\";\n\nconst mapStateToProps = (state) => ({ ...state });\n\nconst mapDispatchToProps = (dispatch) => ({\n colorCounterAction: (count) => dispatch(colorCounterAction(count)),\n quoteFetch: () => dispatch(quoteFetchActionCreator()),\n});\n\nclass NewQuote extends React.Component {\n constructor(props) {\n super(props);\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick() {\n this.props.colorCounterAction(\n this.props.colorCount > 1 ? 0 : this.props.colorCount + 1\n );\n this.props.quoteFetch();\n }\n\n render() {\n const colors = [\"red-background\", \"blue-background\", \"yellow-background\"];\n const newQuoteClass = \"NewQuote \" + colors[this.props.colorCount];\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NewQuote);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTwitter } from \"@fortawesome/free-brands-svg-icons\";\n\nimport \"./TweetQuote.css\";\n\nconst mapStateToProps = state => ({ ...state });\n\nclass TweetQuote extends React.Component {\n render() {\n const colors = [\"red-background\", \"blue-background\", \"yellow-background\"];\n const tweetQuoteClass = \"TweetQuote \" + colors[this.props.colorCount];\n let href = \"https://twitter.com/intent/tweet?text=\";\n if (typeof this.props.newQuote.quote === \"object\") {\n href += encodeURIComponent(\n this.props.newQuote.quote.quote +\n \"\\n--\" +\n this.props.newQuote.quote.author\n );\n }\n return (\n
\n );\n }\n}\n\nexport default connect(mapStateToProps)(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 \n \n ,\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":""}
\ No newline at end of file
diff --git a/random-quote-machine/src/App.css b/random-quote-machine/src/App.css
index 7e0133c..58d7857 100644
--- a/random-quote-machine/src/App.css
+++ b/random-quote-machine/src/App.css
@@ -12,16 +12,16 @@
}
.red-background {
- background-color: #ff0000;
+ background-color: #ff1500;
color: black;
}
.blue-background {
- background-color: #0000ff;
+ background-color: #006aff;
color: white;
}
.yellow-background {
- background-color: #ffff00;
+ background-color: #eaff00;
color: black;
}
diff --git a/random-quote-machine/src/NewQuote.css b/random-quote-machine/src/NewQuote.css
index d9f5b08..0204785 100644
--- a/random-quote-machine/src/NewQuote.css
+++ b/random-quote-machine/src/NewQuote.css
@@ -1,11 +1,12 @@
.NewQuote {
text-align: center;
- height: 60%;
+ height: 45%;
width: 45%;
border: none;
border-radius: 5px;
font-size: 0.8em;
font-weight: bold;
+ margin: auto;
}
.NewQuote:focus {
@@ -13,16 +14,29 @@
}
.red-background {
- background-color: #ff0000;
+ background-color: #ff1500;
color: #000000;
}
.blue-background {
- background-color: #0000ff;
- color: #ff8000;
+ background-color: #006Aff;
+ color: #eaff00;
}
.yellow-background {
- background-color: #ffff00;
- color: #0080ff;
+ background-color: #eaff00;
+ color: #006bff;
+}
+
+@media (orientation: portrait) and (max-device-width: 767px) {
+ .NewQuote {
+ height: 40%;
+ }
+}
+
+@media (orientation: landscape) and (max-device-height: 450px) {
+ .NewQuote {
+ height: 60%;
+ font-size: 1em;
+ }
}
diff --git a/random-quote-machine/src/NewQuote.js b/random-quote-machine/src/NewQuote.js
index 7a9e135..58897b6 100644
--- a/random-quote-machine/src/NewQuote.js
+++ b/random-quote-machine/src/NewQuote.js
@@ -30,11 +30,7 @@ class NewQuote extends React.Component {
const colors = ["red-background", "blue-background", "yellow-background"];
const newQuoteClass = "NewQuote " + colors[this.props.colorCount];
return (
-