initial version random-quote-machine

This commit is contained in:
trent committed 2020-04-02 01:21:47 -07:00
1 parent 5b48f673c4
commit 5fba3f09d7
45 files changed
+713 -149

No files matched your search

+1 -1
View File
@@ -9,7 +9,7 @@
/coverage /coverage
# production # production
/build # /build
# misc # misc
.DS_Store .DS_Store
@@ -0,0 +1,22 @@
{
"files": {
"main.css": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/css/main.899e3888.chunk.css",
"main.js": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/main.e5d79b90.chunk.js",
"main.js.map": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/main.e5d79b90.chunk.js.map",
"runtime-main.js": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/runtime-main.c1bc5a42.js",
"runtime-main.js.map": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/runtime-main.c1bc5a42.js.map",
"static/js/2.a720d7f8.chunk.js": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/2.a720d7f8.chunk.js",
"static/js/2.a720d7f8.chunk.js.map": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/2.a720d7f8.chunk.js.map",
"index.html": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/index.html",
"precache-manifest.25abb57c10a59d755367c7dec092b4ac.js": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/precache-manifest.25abb57c10a59d755367c7dec092b4ac.js",
"service-worker.js": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/service-worker.js",
"static/css/main.899e3888.chunk.css.map": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/css/main.899e3888.chunk.css.map",
"static/js/2.a720d7f8.chunk.js.LICENSE.txt": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/2.a720d7f8.chunk.js.LICENSE.txt"
},
"entrypoints": [
"static/js/runtime-main.c1bc5a42.js",
"static/js/2.a720d7f8.chunk.js",
"static/css/main.899e3888.chunk.css",
"static/js/main.e5d79b90.chunk.js"
]
}
+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="#"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/manifest.json"/><title>Random Quote Machine - Build a Random Quote Machine - Front End Libraries Projects</title><link href="/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/css/main.899e3888.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div><script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script></div><br/></div><script>!function(e){function r(r){for(var n,a,l=r[0],i=r[1],c=r[2],p=0,s=[];p<l.length;p++)a=l[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,c||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var i=t[l];0!==o[i]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/";var l=this["webpackJsonprandom-quote-machine"]=this["webpackJsonprandom-quote-machine"]||[],i=l.push.bind(l);l.push=r,l=l.slice();for(var c=0;c<l.length;c++)r(l[c]);var f=i;t()}([])</script><script src="/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/2.a720d7f8.chunk.js"></script><script src="/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/main.e5d79b90.chunk.js"></script></body></html>
+8
View File
@@ -0,0 +1,8 @@
{
"short_name": "random-quote-machine",
"name": "random-quote-machine",
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
@@ -0,0 +1,26 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "1c58af8ab948c909dd6058ef25e70220",
"url": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/index.html"
},
{
"revision": "123251f050bd79ac6c3b",
"url": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/css/main.899e3888.chunk.css"
},
{
"revision": "d3143f0d5b138769b7fe",
"url": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/2.a720d7f8.chunk.js"
},
{
"revision": "c64c486544348f10a6d6c716950bc223",
"url": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/2.a720d7f8.chunk.js.LICENSE.txt"
},
{
"revision": "123251f050bd79ac6c3b",
"url": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/main.e5d79b90.chunk.js"
},
{
"revision": "e1d0db9ba40a017fea1e",
"url": "/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/static/js/runtime-main.c1bc5a42.js"
}
]);
+3
View File
@@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
@@ -0,0 +1,39 @@
/**
* Welcome to your Workbox-powered service worker!
*
* You'll need to register this file in your web app and you should
* disable HTTP caching for this file too.
* See https://goo.gl/nhQhGp
*
* The rest of the code is auto-generated. Please don't update this file
* directly; instead, make changes to your Workbox build configuration
* and re-run your build process.
* See https://goo.gl/2aRDsh
*/
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
"/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/precache-manifest.25abb57c10a59d755367c7dec092b4ac.js"
);
self.addEventListener('message', (event) => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting();
}
});
workbox.core.clientsClaim();
/**
* The workboxSW.precacheAndRoute() method efficiently caches and responds to
* requests for URLs in the manifest.
* See https://goo.gl/S9QRab
*/
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/index.html"), {
blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/],
});
@@ -0,0 +1,2 @@
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}.App{text-align:center}.App-header{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin)}.blue-background{color:#fff}.yellow-background{color:#000}.QuoteBox{background-color:#fff;text-align:center;max-width:80%;max-height:60vh;width:500px;height:500px;border-radius:10px;box-shadow:4px 3px #000}.red-complimentary-background{background-color:#0080ff;color:#fff}.blue-complimentary-background{background-color:#7fff00;color:#fff}.yellow-complimentary-background{background-color:#8000ff;color:#000}.quote-box-top{height:70%;display:flex;flex-direction:column;justify-content:space-around}.quote-box-bottom{height:30%;display:flex;flex-direction:row;justify-content:flex-start}.quote-box-bottom-left,.quote-box-bottom-right{width:50%;display:flex;flex-direction:row;justify-content:space-around}.NewQuote{text-align:center;height:60%;width:45%;border:none;border-radius:5px;font-size:.8em;font-weight:700}.NewQuote:focus{outline:0}.TweetQuote{height:60%;width:45%;border:none;border-radius:5px;font-size:2.2em;font-weight:700;display:flex;flex-direction:column;justify-content:center;align-content:center}.tweetQuoteContainer{height:100%;width:100%;display:flex;flex-direction:row;justify-content:space-around}.TweetQuote:focus{outline:0}.red-background{background-color:red;color:#000}.blue-background{background-color:#00f;color:#ff8000}.yellow-background{background-color:#ff0;color:#0080ff}.red{color:#00ff80}.blue{color:#00f}.yellow{color:#ff0}.text{font-weight:700}.author,.text{margin-left:10%;margin-right:10%}.author{font-style:oblique}
/*# sourceMappingURL=main.899e3888.chunk.css.map */
@@ -0,0 +1 @@
{"version":3,"sources":["index.css","App.css","QuoteBox.css","NewQuote.css","TweetQuote.css","TextAuthor.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,yEAEF,CCZA,KACE,iBACF,CAEA,YACE,gBAAiB,CACjB,YAAa,CACb,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,4BACF,CAOA,iBAEE,UACF,CAEA,mBAEE,UACF,CC1BA,UACE,qBAAuB,CACvB,iBAAkB,CAClB,aAAc,CACd,eAAgB,CAChB,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,uBACF,CAEA,8BACE,wBAAyB,CACzB,UACF,CAEA,+BACE,wBAAyB,CACzB,UACF,CAEA,iCACE,wBAAyB,CACzB,UACF,CAEA,eACE,UAAW,CACX,YAAa,CACb,qBAAsB,CACtB,4BACF,CAEA,kBACE,UAAW,CACX,YAAa,CACb,kBAAmB,CACnB,0BACF,CASA,+CACE,SAAU,CACV,YAAa,CACb,kBAAmB,CACnB,4BACF,CCpDA,UACE,iBAAkB,CAClB,UAAW,CACX,SAAU,CACV,WAAY,CACZ,iBAAkB,CAClB,cAAgB,CAChB,eACF,CAEA,gBACE,SACF,CCZA,YACE,UAAW,CACX,SAAU,CACV,WAAY,CACZ,iBAAkB,CAClB,eAAgB,CAChB,eAAiB,CACjB,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,oBACF,CAEA,qBACE,WAAY,CACZ,UAAW,CACX,YAAa,CACb,kBAAmB,CACnB,4BACF,CAEA,kBACE,SACF,CAEA,gBACE,oBAAyB,CACzB,UACF,CAEA,iBACE,qBAAyB,CACzB,aACF,CAEA,mBACE,qBAAyB,CACzB,aACF,CCtCA,KACE,aACF,CAEA,MACE,UACF,CAEA,QACE,UACF,CAEA,MAGE,eACF,CAEA,cALE,eAAgB,CAChB,gBAQF,CAJA,QAGE,kBACF","file":"main.899e3888.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n",".App {\n text-align: center;\n}\n\n.App-header {\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n}\n\n.red-background {\n background-color: #ff0000;\n color: black;\n}\n\n.blue-background {\n background-color: #0000ff;\n color: white;\n}\n\n.yellow-background {\n background-color: #ffff00;\n color: black;\n}\n",".QuoteBox {\n background-color: white;\n text-align: center;\n max-width: 80%;\n max-height: 60vh;\n width: 500px;\n height: 500px;\n border-radius: 10px;\n box-shadow: 4px 3px black;\n}\n\n.red-complimentary-background {\n background-color: #0080ff;\n color: white;\n}\n\n.blue-complimentary-background {\n background-color: #7fff00;\n color: white;\n}\n\n.yellow-complimentary-background {\n background-color: #8000ff;\n color: black;\n}\n\n.quote-box-top {\n height: 70%;\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n}\n\n.quote-box-bottom {\n height: 30%;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n}\n\n.quote-box-bottom-left {\n width: 50%;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n}\n\n.quote-box-bottom-right {\n width: 50%;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n}\n",".NewQuote {\n text-align: center;\n height: 60%;\n width: 45%;\n border: none;\n border-radius: 5px;\n font-size: 0.8em;\n font-weight: bold;\n}\n\n.NewQuote:focus {\n outline: 0;\n}\n\n.red-background {\n background-color: #ff0000;\n color: #000000;\n}\n\n.blue-background {\n background-color: #0000ff;\n color: #ff8000;\n}\n\n.yellow-background {\n background-color: #ffff00;\n color: #0080ff;\n}\n",".TweetQuote {\n height: 60%;\n width: 45%;\n border: none;\n border-radius: 5px;\n font-size: 2.2em;\n font-weight: bold;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n}\n\n.tweetQuoteContainer {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n}\n\n.TweetQuote:focus {\n outline: 0;\n}\n\n.red-background {\n background-color: #ff0000;\n color: #000000;\n}\n\n.blue-background {\n background-color: #0000ff;\n color: #ff8000;\n}\n\n.yellow-background {\n background-color: #ffff00;\n color: #0080ff;\n}\n",".red {\n color: #00ff80;\n}\n\n.blue {\n color: #0000ff;\n}\n\n.yellow {\n color: #ffff00;\n}\n\n.text {\n margin-left: 10%;\n margin-right: 10%;\n font-weight: bold;\n}\n\n.author {\n margin-left: 10%;\n margin-right: 10%;\n font-style: oblique;\n}\n"]}
@@ -0,0 +1,3 @@
/*! For license information please see 2.a720d7f8.chunk.js.LICENSE.txt */
(this["webpackJsonprandom-quote-machine"]=this["webpackJsonprandom-quote-machine"]||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(22)},function(e,t,n){e.exports=n(26)()},function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return W}));var r=n(0),o=n.n(r),i=(n(1),o.a.createContext(null));var a=function(e){e()},l={notify:function(){}};function u(){var e=a,t=null,n=null;return{clear:function(){t=null,n=null},notify:function(){e((function(){for(var e=t;e;)e.callback(),e=e.next}))},get:function(){for(var e=[],n=t;n;)e.push(n),n=n.next;return e},subscribe:function(e){var r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var c=function(){function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this.listeners=l,this.handleChangeWrapper=this.handleChangeWrapper.bind(this)}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.handleChangeWrapper=function(){this.onStateChange&&this.onStateChange()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.handleChangeWrapper):this.store.subscribe(this.handleChangeWrapper),this.listeners=u())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=l)},e}();var s=function(e){var t=e.store,n=e.context,a=e.children,l=Object(r.useMemo)((function(){var e=new c(t);return e.onStateChange=e.notifyNestedSubs,{store:t,subscription:e}}),[t]),u=Object(r.useMemo)((function(){return t.getState()}),[t]);Object(r.useEffect)((function(){var e=l.subscription;return e.trySubscribe(),u!==t.getState()&&e.notifyNestedSubs(),function(){e.tryUnsubscribe(),e.onStateChange=null}}),[l,u]);var s=n||i;return o.a.createElement(s.Provider,{value:l},a)};function f(){return(f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function d(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var p=n(13),m=n.n(p),h=n(12),y="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement?r.useLayoutEffect:r.useEffect,v=[],g=[null,null];function b(e,t){var n=e[1];return[t.payload,n+1]}function w(e,t,n){y((function(){return e.apply(void 0,t)}),n)}function k(e,t,n,r,o,i,a){e.current=r,t.current=o,n.current=!1,i.current&&(i.current=null,a())}function x(e,t,n,r,o,i,a,l,u,c){if(e){var s=!1,f=null,d=function(){if(!s){var e,n,d=t.getState();try{e=r(d,o.current)}catch(p){n=p,f=p}n||(f=null),e===i.current?a.current||u():(i.current=e,l.current=e,a.current=!0,c({type:"STORE_UPDATED",payload:{error:n}}))}};n.onStateChange=d,n.trySubscribe(),d();return function(){if(s=!0,n.tryUnsubscribe(),n.onStateChange=null,f)throw f}}}var E=function(){return[null,0]};function T(e,t){void 0===t&&(t={});var n=t,a=n.getDisplayName,l=void 0===a?function(e){return"ConnectAdvanced("+e+")"}:a,u=n.methodName,s=void 0===u?"connectAdvanced":u,p=n.renderCountProp,y=void 0===p?void 0:p,T=n.shouldHandleStateChanges,S=void 0===T||T,P=n.storeKey,_=void 0===P?"store":P,O=(n.withRef,n.forwardRef),C=void 0!==O&&O,N=n.context,M=void 0===N?i:N,z=d(n,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]),j=M;return function(t){var n=t.displayName||t.name||"Component",i=l(n),a=f({},z,{getDisplayName:l,methodName:s,renderCountProp:y,shouldHandleStateChanges:S,storeKey:_,displayName:i,wrappedComponentName:n,WrappedComponent:t}),u=z.pure;var p=u?r.useMemo:function(e){return e()};function T(n){var i=Object(r.useMemo)((function(){var e=n.forwardedRef,t=d(n,["forwardedRef"]);return[n.context,e,t]}),[n]),l=i[0],u=i[1],s=i[2],m=Object(r.useMemo)((function(){return l&&l.Consumer&&Object(h.isContextConsumer)(o.a.createElement(l.Consumer,null))?l:j}),[l,j]),y=Object(r.useContext)(m),T=Boolean(n.store)&&Boolean(n.store.getState)&&Boolean(n.store.dispatch);Boolean(y)&&Boolean(y.store);var P=T?n.store:y.store,_=Object(r.useMemo)((function(){return function(t){return e(t.dispatch,a)}(P)}),[P]),O=Object(r.useMemo)((function(){if(!S)return g;var e=new c(P,T?null:y.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[P,T,y]),C=O[0],N=O[1],M=Object(r.useMemo)((function(){return T?y:f({},y,{subscription:C})}),[T,y,C]),z=Object(r.useReducer)(b,v,E),I=z[0][0],R=z[1];if(I&&I.error)throw I.error;var D=Object(r.useRef)(),A=Object(r.useRef)(s),F=Object(r.useRef)(),L=Object(r.useRef)(!1),U=p((function(){return F.current&&s===A.current?F.current:_(P.getState(),s)}),[P,I,s]);w(k,[A,D,L,s,U,F,N]),Line truncated
//# sourceMappingURL=2.a720d7f8.chunk.js.map
@@ -0,0 +1,41 @@
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/** @license React v0.19.1
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
@@ -0,0 +1 @@
{"version":3,"sources":["../node_modules/react/index.js","../node_modules/prop-types/index.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/utils/batch.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../node_modules/react-redux/es/hooks/useSelector.js","../node_modules/react-redux/es/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/redux/es/redux.js","../node_modules/webpack/buildin/global.js","../node_modules/react-dom/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/symbol-observable/es/index.js","../node_modules/@fortawesome/fontawesome-svg-core/index.es.js","../node_modules/object-assign/index.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/redux-thunk/es/index.js","../node_modules/@fortawesome/react-fontawesome/index.es.js","../node_modules/@fortawesome/free-brands-svg-icons/index.es.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/webpack/buildin/harmony-module.js","../node_modules/timers-browserify/main.js","../node_modules/setimmediate/setImmediate.js","../node_modules/process/browser.js"],"names":["module","exports","require","ReactReduxContext","React","createContext","batch","callback","nullListeners","notify","createListenerCollection","first","last","clear","listener","next","get","listeners","push","subscribe","isSubscribed","prev","Subscription","store","parentSub","this","unsubscribe","handleChangeWrapper","bind","_proto","prototype","addNestedSub","trySubscribe","notifyNestedSubs","onStateChange","Boolean","tryUnsubscribe","Provider","_ref","context","children","contextValue","useMemo","subscription","previousState","getState","useEffect","Context","createElement","value","_extends","Object","assign","target","i","arguments","length","source","key","hasOwnProperty","call","apply","_objectWithoutPropertiesLoose","excluded","sourceKeys","keys","indexOf","useIsomorphicLayoutEffect","window","document","useLayoutEffect","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","state","action","updateCount","payload","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","actualChildProps","childPropsFromStoreUpdate","current","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","forceComponentUpdateDispatch","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","error","latestStoreState","e","type","initStateUpdates","connectAdvanced","selectorFactory","_ref2","_ref2$getDisplayName","getDisplayName","name","_ref2$methodName","methodName","_ref2$renderCountProp","renderCouLine truncated
@@ -0,0 +1,2 @@
(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("localhosLine truncated
//# sourceMappingURL=main.e5d79b90.chunk.js.map
@@ -0,0 +1 @@
{"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.e5d79b90.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\";\nimportLine truncated
@@ -0,0 +1,2 @@
!function(e){function r(r){for(var n,a,l=r[0],i=r[1],c=r[2],p=0,s=[];p<l.length;p++)a=l[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,c||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var i=t[l];0!==o[i]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build/";var l=this["webpackJsonprandom-quote-machine"]=this["webpackJsonprandom-quote-machine"]||[],i=l.push.bind(l);l.push=r,l=l.slice();for(var c=0;c<l.length;c++)r(l[c]);var f=i;t()}([]);
//# sourceMappingURL=runtime-main.c1bc5a42.js.map
@@ -0,0 +1 @@
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrBiB,EAAG,GAGAZ,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU8B,QAGnC,IAAIC,EAASH,EAAiB5B,GAAY,CACzCK,EAAGL,EACHgC,GAAG,EACHF,QAAS,IAUV,OANAhB,EAAQd,GAAUW,KAAKoB,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAG/DK,EAAOC,GAAI,EAGJD,EAAOD,QAKfJ,EAAoBO,EAAInB,EAGxBY,EAAoBQ,EAAIN,EAGxBF,EAAoBS,EAAI,SAASL,EAASM,EAAMC,GAC3CX,EAAoBY,EAAER,EAASM,IAClC5B,OAAO+B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEX,EAAoBgB,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CpC,OAAO+B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DrC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKzC,OAAO0C,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBzC,OAAO+B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBS,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAL,EAAoBS,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRX,EAAoBY,EAAI,SAASgB,EAAQC,GAAY,OAAO/C,OAAOC,UAAUC,eAAeC,KAAK2C,EAAQC,IAGzG7B,EAAoB8B,EAAI,yEAExB,IAAIC,EAAaC,KAAK,oCAAsCA,KAAK,qCAAuC,GACpGC,EAAmBF,EAAW5C,KAAKuC,KAAKK,GAC5CA,EAAW5C,KAAOf,EAClB2D,EAAaA,EAAWG,QACxB,IAAI,IAAIvD,EAAI,EAAGA,EAAIoD,EAAWlD,OAAQF,IAAKP,EAAqB2D,EAAWpD,IAC3E,IAAIU,EAAsB4C,EAI1BxC,I","file":"static/js/runtime-main.c1bc5a42.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\nLine truncated
+76
View File
@@ -1077,6 +1077,43 @@
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz",
"integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg=="
}, },
"@fortawesome/fontawesome-common-types": {
"version": "0.2.28",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz",
"integrity": "sha512-gtis2/5yLdfI6n0ia0jH7NJs5i/Z/8M/ZbQL6jXQhCthEOe5Cr5NcQPhgTvFxNOtURE03/ZqUcEskdn2M+QaBg=="
},
"@fortawesome/fontawesome-svg-core": {
"version": "1.2.28",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.28.tgz",
"integrity": "sha512-4LeaNHWvrneoU0i8b5RTOJHKx7E+y7jYejplR7uSVB34+mp3Veg7cbKk7NBCLiI4TyoWS1wh9ZdoyLJR8wSAdg==",
"requires": {
"@fortawesome/fontawesome-common-types": "^0.2.28"
}
},
"@fortawesome/free-brands-svg-icons": {
"version": "5.13.0",
"resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.13.0.tgz",
"integrity": "sha512-/6xXiJFCMEQxqxXbL0FPJpwq5Cv6MRrjsbJEmH/t5vOvB4dILDpnY0f7zZSlA8+TG7jwlt12miF/yZpZkykucA==",
"requires": {
"@fortawesome/fontawesome-common-types": "^0.2.28"
}
},
"@fortawesome/free-solid-svg-icons": {
"version": "5.13.0",
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.0.tgz",
"integrity": "sha512-IHUgDJdomv6YtG4p3zl1B5wWf9ffinHIvebqQOmV3U+3SLw4fC+LUCCgwfETkbTtjy5/Qws2VoVf6z/ETQpFpg==",
"requires": {
"@fortawesome/fontawesome-common-types": "^0.2.28"
}
},
"@fortawesome/react-fontawesome": {
"version": "0.1.9",
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.9.tgz",
"integrity": "sha512-49V3WNysLZU5fZ3sqSuys4nGRytsrxJktbv3vuaXkEoxv22C6T7TEG0TW6+nqVjMnkfCQd5xOnmJoZHMF78tOw==",
"requires": {
"prop-types": "^15.7.2"
}
},
"@hapi/address": { "@hapi/address": {
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
@@ -6063,6 +6100,14 @@
"minimalistic-crypto-utils": "^1.0.1" "minimalistic-crypto-utils": "^1.0.1"
} }
}, },
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"requires": {
"react-is": "^16.7.0"
}
},
"hosted-git-info": { "hosted-git-info": {
"version": "2.8.8", "version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
@@ -10816,6 +10861,18 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
}, },
"react-redux": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz",
"integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==",
"requires": {
"@babel/runtime": "^7.5.5",
"hoist-non-react-statics": "^3.3.0",
"loose-envify": "^1.4.0",
"prop-types": "^15.7.2",
"react-is": "^16.9.0"
}
},
"react-scripts": { "react-scripts": {
"version": "3.4.1", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz",
@@ -10938,6 +10995,20 @@
"strip-indent": "^3.0.0" "strip-indent": "^3.0.0"
} }
}, },
"redux": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
"integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
"requires": {
"loose-envify": "^1.4.0",
"symbol-observable": "^1.2.0"
}
},
"redux-thunk": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
"integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
},
"regenerate": { "regenerate": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -12377,6 +12448,11 @@
"util.promisify": "~1.0.0" "util.promisify": "~1.0.0"
} }
}, },
"symbol-observable": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
},
"symbol-tree": { "symbol-tree": {
"version": "3.2.4", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+10 -7
View File
@@ -2,14 +2,21 @@
"name": "random-quote-machine", "name": "random-quote-machine",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"homepage":"http://192.168.1.55:3000", "homepage": "https://github.com/TrentSPalmer/fcc-challenges/tree/gh-pages/random-quote-machine/build",
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.28",
"@fortawesome/free-brands-svg-icons": "^5.13.0",
"@fortawesome/free-solid-svg-icons": "^5.13.0",
"@fortawesome/react-fontawesome": "^0.1.9",
"@testing-library/jest-dom": "^4.2.4", "@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0", "@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1", "@testing-library/user-event": "^7.2.1",
"react": "^16.13.1", "react": "^16.13.1",
"react-dom": "^16.13.1", "react-dom": "^16.13.1",
"react-scripts": "3.4.1" "react-redux": "^7.2.0",
"react-scripts": "3.4.1",
"redux": "^4.0.5",
"redux-thunk": "^2.3.0"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",
@@ -21,11 +28,7 @@
"extends": "react-app" "extends": "react-app"
}, },
"browserslist": { "browserslist": {
"production": [ "production": [">0.2%", "not dead", "not op_mini all"],
">0.2%",
"not dead",
"not op_mini all"
],
"development": [ "development": [
"last 1 chrome version", "last 1 chrome version",
"last 1 firefox version", "last 1 firefox version",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

+11 -31
View File
@@ -2,42 +2,22 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> <link rel="icon" href="#" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" /> <meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!-- <title>
Notice the use of %PUBLIC_URL% in the tags above. Random Quote Machine - Build a Random Quote Machine - Front End Libraries
It will be replaced with the URL of the `public` folder during the build. Projects
Only files inside the `public` folder can be referenced from the HTML. </title>
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head> </head>
<body> <body>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div> <div id="root">
<!-- <div>
This HTML file is a template. <script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script>
If you open it directly in the browser, you will see an empty page. </div>
<br />
You can add webfonts, meta tags, or analytics to this file. </div>
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body> </body>
</html> </html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

+2 -19
View File
@@ -1,23 +1,6 @@
{ {
"short_name": "React App", "short_name": "random-quote-machine",
"name": "Create React App Sample", "name": "random-quote-machine",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".", "start_url": ".",
"display": "standalone", "display": "standalone",
"theme_color": "#000000", "theme_color": "#000000",
+12 -23
View File
@@ -2,37 +2,26 @@
text-align: center; text-align: center;
} }
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header { .App-header {
background-color: #282c34;
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: calc(10px + 2vmin); font-size: calc(10px + 2vmin);
}
.red-background {
background-color: #ff0000;
color: black;
}
.blue-background {
background-color: #0000ff;
color: white; color: white;
} }
.App-link { .yellow-background {
color: #61dafb; background-color: #ffff00;
} color: black;
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
} }
+20 -23
View File
@@ -1,26 +1,23 @@
import React from 'react'; import React from "react";
import logo from './logo.svg'; import { connect } from "react-redux";
import './App.css';
function App() { import "./App.css";
return ( import QuoteBox from "./QuoteBox";
<div className="App">
<header className="App-header"> const mapStateToProps = (state) => ({ ...state });
<img src={logo} className="App-logo" alt="logo" />
<p> class App extends React.Component {
Edit <code>src/App.js</code> and save to reload. render() {
</p> const colors = ["red-background", "blue-background", "yellow-background"];
<a const appHeaderClass = "App-header " + colors[this.props.colorCount];
className="App-link" return (
href="https://reactjs.org" <div className="App">
target="_blank" <header className={appHeaderClass}>
rel="noopener noreferrer" <QuoteBox />
> </header>
Learn React </div>
</a> );
</header> }
</div>
);
} }
export default App; export default connect(mapStateToProps)(App);
+4 -4
View File
@@ -1,8 +1,8 @@
import React from 'react'; import React from "react";
import { render } from '@testing-library/react'; import { render } from "@testing-library/react";
import App from './App'; import App from "./App";
test('renders learn react link', () => { test("renders learn react link", () => {
const { getByText } = render(<App />); const { getByText } = render(<App />);
const linkElement = getByText(/learn react/i); const linkElement = getByText(/learn react/i);
expect(linkElement).toBeInTheDocument(); expect(linkElement).toBeInTheDocument();
+28
View File
@@ -0,0 +1,28 @@
.NewQuote {
text-align: center;
height: 60%;
width: 45%;
border: none;
border-radius: 5px;
font-size: 0.8em;
font-weight: bold;
}
.NewQuote:focus {
outline: 0;
}
.red-background {
background-color: #ff0000;
color: #000000;
}
.blue-background {
background-color: #0000ff;
color: #ff8000;
}
.yellow-background {
background-color: #ffff00;
color: #0080ff;
}
+44
View File
@@ -0,0 +1,44 @@
import React from "react";
import { connect } from "react-redux";
import "./NewQuote.css";
import { colorCounterAction } from "./actions/colorCounterAction";
import { quoteFetchActionCreator } from "./actions/quoteFetchActionCreator";
const mapStateToProps = (state) => ({ ...state });
const mapDispatchToProps = (dispatch) => ({
colorCounterAction: (count) => dispatch(colorCounterAction(count)),
quoteFetch: () => dispatch(quoteFetchActionCreator()),
});
class NewQuote extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.props.colorCounterAction(
this.props.colorCount > 1 ? 0 : this.props.colorCount + 1
);
this.props.quoteFetch();
}
render() {
const colors = ["red-background", "blue-background", "yellow-background"];
const newQuoteClass = "NewQuote " + colors[this.props.colorCount];
return (
<button
onClick={this.handleClick}
className={newQuoteClass}
id="new-quote"
>
Click Me!
</button>
);
}
}
export default connect(mapStateToProps, mapDispatchToProps)(NewQuote);
+53
View File
@@ -0,0 +1,53 @@
.QuoteBox {
background-color: white;
text-align: center;
max-width: 80%;
max-height: 60vh;
width: 500px;
height: 500px;
border-radius: 10px;
box-shadow: 4px 3px black;
}
.red-complimentary-background {
background-color: #0080ff;
color: white;
}
.blue-complimentary-background {
background-color: #7fff00;
color: white;
}
.yellow-complimentary-background {
background-color: #8000ff;
color: black;
}
.quote-box-top {
height: 70%;
display: flex;
flex-direction: column;
justify-content: space-around;
}
.quote-box-bottom {
height: 30%;
display: flex;
flex-direction: row;
justify-content: flex-start;
}
.quote-box-bottom-left {
width: 50%;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.quote-box-bottom-right {
width: 50%;
display: flex;
flex-direction: row;
justify-content: space-around;
}
+37
View File
@@ -0,0 +1,37 @@
import React from "react";
import { connect } from "react-redux";
import "./QuoteBox.css";
import NewQuote from "./NewQuote";
import TweetQuote from "./TweetQuote";
import TextAuthor from "./TextAuthor";
const mapStateToProps = (state) => ({ ...state });
class QuoteBox extends React.Component {
render() {
const colors = [
"red-complimentary-background",
"blue-complimentary-background",
"yellow-complimentary-background",
];
const quoteBoxClass = "QuoteBox " + colors[this.props.colorCount];
return (
<div className={quoteBoxClass} id="quote-box">
<div className="quote-box-top">
<TextAuthor />
</div>
<div className="quote-box-bottom">
<div className="quote-box-bottom-left">
<TweetQuote />
</div>
<div className="quote-box-bottom-right">
<NewQuote />
</div>
</div>
</div>
);
}
}
export default connect(mapStateToProps)(QuoteBox);
+23
View File
@@ -0,0 +1,23 @@
.red {
color: #00ff80;
}
.blue {
color: #0000ff;
}
.yellow {
color: #ffff00;
}
.text {
margin-left: 10%;
margin-right: 10%;
font-weight: bold;
}
.author {
margin-left: 10%;
margin-right: 10%;
font-style: oblique;
}
+42
View File
@@ -0,0 +1,42 @@
import React from "react";
import { connect } from "react-redux";
import "./TextAuthor.css";
import { quoteFetchActionCreator } from "./actions/quoteFetchActionCreator";
const mapStateToProps = state => ({ ...state });
const mapDispatchToProps = dispatch => ({
quoteFetch: () => dispatch(quoteFetchActionCreator())
});
class TextAuthor extends React.Component {
componentDidMount() {
if (this.props.newQuote.quote === "") {
this.props.quoteFetch();
}
}
render() {
let quote = "";
let author = "";
if (typeof this.props.newQuote.quote === "object") {
quote = this.props.newQuote.quote.quote;
author = this.props.newQuote.quote.author;
}
const colors = ["red", "blue", "yellow"];
const textClass = "text " + colors[this.props.colorCount];
const authorClass = "author " + colors[this.props.colorCount];
return (
<div style={{ fontSize: ".7em" }}>
<p className={textClass} id="text">
{quote}
</p>
<p className={authorClass} id="author">
--{author}
</p>
</div>
);
}
}
export default connect(mapStateToProps, mapDispatchToProps)(TextAuthor);
+39
View File
@@ -0,0 +1,39 @@
.TweetQuote {
height: 60%;
width: 45%;
border: none;
border-radius: 5px;
font-size: 2.2em;
font-weight: bold;
display: flex;
flex-direction: column;
justify-content: center;
align-content: center;
}
.tweetQuoteContainer {
height: 100%;
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.TweetQuote:focus {
outline: 0;
}
.red-background {
background-color: #ff0000;
color: #000000;
}
.blue-background {
background-color: #0000ff;
color: #ff8000;
}
.yellow-background {
background-color: #ffff00;
color: #0080ff;
}
+43
View File
@@ -0,0 +1,43 @@
import React from "react";
import { connect } from "react-redux";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faTwitter } from "@fortawesome/free-brands-svg-icons";
import "./TweetQuote.css";
const mapStateToProps = state => ({ ...state });
class TweetQuote extends React.Component {
render() {
const colors = ["red-background", "blue-background", "yellow-background"];
const tweetQuoteClass = "TweetQuote " + colors[this.props.colorCount];
let href = "https://twitter.com/intent/tweet?text=";
if (typeof this.props.newQuote.quote === "object") {
href += encodeURIComponent(
this.props.newQuote.quote.quote +
"\n--" +
this.props.newQuote.quote.author
);
}
return (
<div className="tweetQuoteContainer">
<div className={tweetQuoteClass}>
<a
href={href}
target="_blank"
rel="noopener noreferrer"
id="tweet-quote"
>
<FontAwesomeIcon
icon={faTwitter}
className={colors[this.props.colorCount]}
/>
</a>
</div>
</div>
);
}
}
export default connect(mapStateToProps)(TweetQuote);
@@ -0,0 +1,8 @@
export const INCCOLORCOUNT = "INCCOLORCOUNT";
export const colorCounterAction = (count) => {
return {
type: INCCOLORCOUNT,
count: count,
};
};
@@ -0,0 +1,32 @@
export const RECEIVED_QUOTE = "RECEIVED_QUOTE";
export const REQUESTING_QUOTE = "REQUESTING_QUOTE";
export const receivedQuoteAction = quote => {
return {
type: RECEIVED_QUOTE,
newQuote: quote
};
};
export const requestingQuoteAction = () => {
return {
type: REQUESTING_QUOTE
};
};
export const quoteFetchActionCreator = () => {
return function (dispatch) {
dispatch(requestingQuoteAction());
fetch(
"https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json"
)
.then(response => response.json())
.then(quotes => {
dispatch(
receivedQuoteAction(
quotes.quotes[Math.floor(Math.random() * quotes.quotes.length)]
)
);
});
};
};
+3 -3
View File
@@ -1,13 +1,13 @@
body { body {
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif; sans-serif;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
code { code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace; monospace;
} }
+11 -8
View File
@@ -1,14 +1,17 @@
import React from 'react'; import React from "react";
import ReactDOM from 'react-dom'; import ReactDOM from "react-dom";
import './index.css'; import { Provider } from "react-redux";
import App from './App'; import store from "./store";
import * as serviceWorker from './serviceWorker';
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
ReactDOM.render( ReactDOM.render(
<React.StrictMode> <Provider store={store}>
<App /> <App />
</React.StrictMode>, </Provider>,
document.getElementById('root') document.getElementById("root")
); );
// If you want your app to work offline and load faster, you can change // If you want your app to work offline and load faster, you can change
-7
View File
@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
<g fill="#61DAFB">
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
<circle cx="420.9" cy="296.5" r="45.7"/>
<path d="M520.5 78.1z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@@ -0,0 +1,13 @@
import { REQUESTING_QUOTE } from "../actions/quoteFetchActionCreator";
import { RECEIVED_QUOTE } from "../actions/quoteFetchActionCreator";
export default (state = { fetching: false, quote: "" }, action) => {
switch (action.type) {
case REQUESTING_QUOTE:
return { fetching: true, quote: "" };
case RECEIVED_QUOTE:
return { fetching: false, quote: action.newQuote };
default:
return state;
}
};
@@ -0,0 +1,10 @@
import { INCCOLORCOUNT } from "../actions/colorCounterAction";
export default (state = 1, action) => {
switch (action.type) {
case INCCOLORCOUNT:
return action.count;
default:
return state;
}
};
@@ -0,0 +1,8 @@
import { combineReducers } from "redux";
import colorCounterReducer from "./colorCounterReducer";
import asyncQuoteReducer from "./asyncQuoteReducer";
export default combineReducers({
colorCount: colorCounterReducer,
newQuote: asyncQuoteReducer,
});
+22 -22
View File
@@ -11,9 +11,9 @@
// opt-in, read https://bit.ly/CRA-PWA // opt-in, read https://bit.ly/CRA-PWA
const isLocalhost = Boolean( const isLocalhost = Boolean(
window.location.hostname === 'localhost' || window.location.hostname === "localhost" ||
// [::1] is the IPv6 localhost address. // [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' || window.location.hostname === "[::1]" ||
// 127.0.0.0/8 are considered localhost for IPv4. // 127.0.0.0/8 are considered localhost for IPv4.
window.location.hostname.match( window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
@@ -21,7 +21,7 @@ const isLocalhost = Boolean(
); );
export function register(config) { export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) {
// The URL constructor is available in all browsers that support SW. // The URL constructor is available in all browsers that support SW.
const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) { if (publicUrl.origin !== window.location.origin) {
@@ -31,7 +31,7 @@ export function register(config) {
return; return;
} }
window.addEventListener('load', () => { window.addEventListener("load", () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (isLocalhost) { if (isLocalhost) {
@@ -42,8 +42,8 @@ export function register(config) {
// service worker/PWA documentation. // service worker/PWA documentation.
navigator.serviceWorker.ready.then(() => { navigator.serviceWorker.ready.then(() => {
console.log( console.log(
'This web app is being served cache-first by a service ' + "This web app is being served cache-first by a service " +
'worker. To learn more, visit https://bit.ly/CRA-PWA' "worker. To learn more, visit https://bit.ly/CRA-PWA"
); );
}); });
} else { } else {
@@ -57,21 +57,21 @@ export function register(config) {
function registerValidSW(swUrl, config) { function registerValidSW(swUrl, config) {
navigator.serviceWorker navigator.serviceWorker
.register(swUrl) .register(swUrl)
.then(registration => { .then((registration) => {
registration.onupdatefound = () => { registration.onupdatefound = () => {
const installingWorker = registration.installing; const installingWorker = registration.installing;
if (installingWorker == null) { if (installingWorker == null) {
return; return;
} }
installingWorker.onstatechange = () => { installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') { if (installingWorker.state === "installed") {
if (navigator.serviceWorker.controller) { if (navigator.serviceWorker.controller) {
// At this point, the updated precached content has been fetched, // At this point, the updated precached content has been fetched,
// but the previous service worker will still serve the older // but the previous service worker will still serve the older
// content until all client tabs are closed. // content until all client tabs are closed.
console.log( console.log(
'New content is available and will be used when all ' + "New content is available and will be used when all " +
'tabs for this page are closed. See https://bit.ly/CRA-PWA.' "tabs for this page are closed. See https://bit.ly/CRA-PWA."
); );
// Execute callback // Execute callback
@@ -82,7 +82,7 @@ function registerValidSW(swUrl, config) {
// At this point, everything has been precached. // At this point, everything has been precached.
// It's the perfect time to display a // It's the perfect time to display a
// "Content is cached for offline use." message. // "Content is cached for offline use." message.
console.log('Content is cached for offline use.'); console.log("Content is cached for offline use.");
// Execute callback // Execute callback
if (config && config.onSuccess) { if (config && config.onSuccess) {
@@ -93,25 +93,25 @@ function registerValidSW(swUrl, config) {
}; };
}; };
}) })
.catch(error => { .catch((error) => {
console.error('Error during service worker registration:', error); console.error("Error during service worker registration:", error);
}); });
} }
function checkValidServiceWorker(swUrl, config) { function checkValidServiceWorker(swUrl, config) {
// Check if the service worker can be found. If it can't reload the page. // Check if the service worker can be found. If it can't reload the page.
fetch(swUrl, { fetch(swUrl, {
headers: { 'Service-Worker': 'script' }, headers: { "Service-Worker": "script" },
}) })
.then(response => { .then((response) => {
// Ensure service worker exists, and that we really are getting a JS file. // Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type'); const contentType = response.headers.get("content-type");
if ( if (
response.status === 404 || response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1) (contentType != null && contentType.indexOf("javascript") === -1)
) { ) {
// No service worker found. Probably a different app. Reload the page. // No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then(registration => { navigator.serviceWorker.ready.then((registration) => {
registration.unregister().then(() => { registration.unregister().then(() => {
window.location.reload(); window.location.reload();
}); });
@@ -123,18 +123,18 @@ function checkValidServiceWorker(swUrl, config) {
}) })
.catch(() => { .catch(() => {
console.log( console.log(
'No internet connection found. App is running in offline mode.' "No internet connection found. App is running in offline mode."
); );
}); });
} }
export function unregister() { export function unregister() {
if ('serviceWorker' in navigator) { if ("serviceWorker" in navigator) {
navigator.serviceWorker.ready navigator.serviceWorker.ready
.then(registration => { .then((registration) => {
registration.unregister(); registration.unregister();
}) })
.catch(error => { .catch((error) => {
console.error(error.message); console.error(error.message);
}); });
} }
+1 -1
View File
@@ -2,4 +2,4 @@
// allows you to do things like: // allows you to do things like:
// expect(element).toHaveTextContent(/react/i) // expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom // learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom/extend-expect'; import "@testing-library/jest-dom/extend-expect";
+7
View File
@@ -0,0 +1,7 @@
import { createStore, applyMiddleware } from "redux";
import thunk from "redux-thunk";
import rootReducer from "./reducers/rootReducer";
const store = createStore(rootReducer, applyMiddleware(thunk));
export default store;