diff --git a/asset-manifest.json b/asset-manifest.json index 904efc9..53d81b1 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,18 +1,18 @@ { "files": { - "main.css": "/tomadoro/static/css/main.b5bb2103.chunk.css", - "main.js": "/tomadoro/static/js/main.257e49c2.chunk.js", - "main.js.map": "/tomadoro/static/js/main.257e49c2.chunk.js.map", + "main.css": "/tomadoro/static/css/main.49e45a7b.chunk.css", + "main.js": "/tomadoro/static/js/main.07f9db80.chunk.js", + "main.js.map": "/tomadoro/static/js/main.07f9db80.chunk.js.map", "runtime-main.js": "/tomadoro/static/js/runtime-main.6dad65da.js", "runtime-main.js.map": "/tomadoro/static/js/runtime-main.6dad65da.js.map", "static/css/2.619dee99.chunk.css": "/tomadoro/static/css/2.619dee99.chunk.css", "static/js/2.dfd5301c.chunk.js": "/tomadoro/static/js/2.dfd5301c.chunk.js", "static/js/2.dfd5301c.chunk.js.map": "/tomadoro/static/js/2.dfd5301c.chunk.js.map", "index.html": "/tomadoro/index.html", - "precache-manifest.086ec62b299434b22bdc5683ccf893c7.js": "/tomadoro/precache-manifest.086ec62b299434b22bdc5683ccf893c7.js", + "precache-manifest.d5ae655a045c31f2b1d593f5afdf1824.js": "/tomadoro/precache-manifest.d5ae655a045c31f2b1d593f5afdf1824.js", "service-worker.js": "/tomadoro/service-worker.js", "static/css/2.619dee99.chunk.css.map": "/tomadoro/static/css/2.619dee99.chunk.css.map", - "static/css/main.b5bb2103.chunk.css.map": "/tomadoro/static/css/main.b5bb2103.chunk.css.map", + "static/css/main.49e45a7b.chunk.css.map": "/tomadoro/static/css/main.49e45a7b.chunk.css.map", "static/media/logo.svg": "/tomadoro/static/media/logo.08ea9508.svg", "static/media/sound.mp3": "/tomadoro/static/media/sound.ec792557.mp3" }, @@ -20,7 +20,7 @@ "static/js/runtime-main.6dad65da.js", "static/css/2.619dee99.chunk.css", "static/js/2.dfd5301c.chunk.js", - "static/css/main.b5bb2103.chunk.css", - "static/js/main.257e49c2.chunk.js" + "static/css/main.49e45a7b.chunk.css", + "static/js/main.07f9db80.chunk.js" ] } \ No newline at end of file diff --git a/index.html b/index.html index 5363aaa..6529b6b 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -tomadoro
\ No newline at end of file +tomadoro
\ No newline at end of file diff --git a/precache-manifest.086ec62b299434b22bdc5683ccf893c7.js b/precache-manifest.d5ae655a045c31f2b1d593f5afdf1824.js similarity index 72% rename from precache-manifest.086ec62b299434b22bdc5683ccf893c7.js rename to precache-manifest.d5ae655a045c31f2b1d593f5afdf1824.js index 257ac64..5761965 100644 --- a/precache-manifest.086ec62b299434b22bdc5683ccf893c7.js +++ b/precache-manifest.d5ae655a045c31f2b1d593f5afdf1824.js @@ -1,6 +1,6 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "bb79a6df92e8ee0dc9b3e420357cd7a9", + "revision": "3b3867754a60b11c6697f673ed8a957a", "url": "/tomadoro/index.html" }, { @@ -8,16 +8,16 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/tomadoro/static/css/2.619dee99.chunk.css" }, { - "revision": "41a29cdb3aad9fbd9b87", - "url": "/tomadoro/static/css/main.b5bb2103.chunk.css" + "revision": "12e0b8f7a5330222acef", + "url": "/tomadoro/static/css/main.49e45a7b.chunk.css" }, { "revision": "3aa35ac144e96857120e", "url": "/tomadoro/static/js/2.dfd5301c.chunk.js" }, { - "revision": "41a29cdb3aad9fbd9b87", - "url": "/tomadoro/static/js/main.257e49c2.chunk.js" + "revision": "12e0b8f7a5330222acef", + "url": "/tomadoro/static/js/main.07f9db80.chunk.js" }, { "revision": "055bcec9d9fcacfc57ce", diff --git a/service-worker.js b/service-worker.js index 93202ba..078b3d2 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/tomadoro/precache-manifest.086ec62b299434b22bdc5683ccf893c7.js" + "/tomadoro/precache-manifest.d5ae655a045c31f2b1d593f5afdf1824.js" ); self.addEventListener('message', (event) => { diff --git a/static/css/main.49e45a7b.chunk.css b/static/css/main.49e45a7b.chunk.css new file mode 100644 index 0000000..b683bba --- /dev/null +++ b/static/css/main.49e45a7b.chunk.css @@ -0,0 +1,2 @@ +@import url(https://fonts.googleapis.com/css?family=Fredoka+One);.App-logo{height:160px;-webkit-filter:drop-shadow(0 0 .28rem rgba(231,216,120,.42));filter:drop-shadow(0 0 .28rem #e7d8786b);align-items:center;justify-content:center;text-align:center;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.App-logo:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.App-logo-rotation{-webkit-animation:App-logo-spin 5s linear infinite;animation:App-logo-spin 5s linear infinite}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.button{font-size:16px;font-weight:lighter;height:50px;border-radius:30px;width:100%;margin:4px 0}.box{padding:6px;background-color:#fff;border-radius:6px;border-bottom:20px solid #c84132;box-shadow:0 2px 3px #8a8888}body{background-color:#2e2929;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:Fredoka One,cursive;color:#fff;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.title{font-weight:700}.App{text-align:center;color:#131313}.App-header{display:flex;min-height:5vh;flex-direction:column;text-align:"left";align-items:center;justify-content:center;font-size:44px;color:#fff;text-shadow:0 2px 4px #909090;margin-bottom:6px}a{color:#f1fb61}a:hover{color:#fddec0}.footer{font-family:Arial,Helvetica,sans-serif;margin-top:8px;color:#fff;text-shadow:0 2px 3px #a3a3a3}.timer{font-size:110px;font-weight:400;text-shadow:0 2px 3px #8a8888;color:#ffebeb} +/*# sourceMappingURL=main.49e45a7b.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.49e45a7b.chunk.css.map b/static/css/main.49e45a7b.chunk.css.map new file mode 100644 index 0000000..f8a93fc --- /dev/null +++ b/static/css/main.49e45a7b.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["main.49e45a7b.chunk.css","Logo.css","Box.css","App.css"],"names":[],"mappings":"AAAA,gEAAgE,CCAhE,UACI,YAAa,CACb,4DAA0C,CAA1C,wCAA0C,CAC1C,kBAAmB,CACnB,sBAAuB,CACvB,iBAAkB,CAClB,sCAA+B,CAA/B,8BACJ,CAEA,gBAAkB,4BAAqB,CAArB,oBAAuB,CAEzC,mBACI,kDAA2C,CAA3C,0CACF,CAEF,iCACI,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAPF,yBACI,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CCtBF,QACI,cAAe,CACf,mBAAoB,CACpB,WAAY,CACZ,kBAAmB,CACnB,UAAW,CACX,YACJ,CAEA,KACI,WAAY,CACZ,qBAAuB,CACvB,iBAAkB,CAClB,gCAAiC,CACjC,4BACJ,CCbA,KACE,wBAAyB,CACzB,wBAAiB,CAAjB,qBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CACjB,+BAAmC,CACnC,UAAY,CACZ,QAAS,CACT,SAAU,CACV,kCAAmC,CACnC,iCACF,CAEA,OACE,eACF,CAEA,KACE,iBAAkB,CAClB,aACF,CAEA,YACE,YAAa,CACb,cAAe,CACf,qBAAsB,CACtB,iBAAkB,CAClB,kBAAmB,CACnB,sBAAuB,CACvB,cAAe,CACf,UAAY,CACZ,6BAA+B,CAC/B,iBACF,CAEA,EACE,aACF,CAEA,QACE,aACF,CAEA,QACE,sCAAyC,CACzC,cAAe,CACf,UAAc,CACd,6BACF,CAGA,OACE,eAAgB,CAChB,eAAmB,CACnB,6BAA+B,CAC/B,aACF","file":"main.49e45a7b.chunk.css","sourcesContent":["@import url(https://fonts.googleapis.com/css?family=Fredoka+One);\n.App-logo {\n height: 160px;\n -webkit-filter: drop-shadow(0 0 0.28rem #e7d8786b);\n filter: drop-shadow(0 0 0.28rem #e7d8786b);\n align-items: center;\n justify-content: center;\n text-align: center;\n -webkit-transition: all .3s ease-in-out;\n transition: all .3s ease-in-out;\n}\n\n.App-logo:hover { -webkit-transform: scale(1.1); transform: scale(1.1); }\n\n.App-logo-rotation {\n -webkit-animation: App-logo-spin infinite 5s linear;\n animation: App-logo-spin infinite 5s linear;\n }\n \n@-webkit-keyframes App-logo-spin {\n from {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n \n@keyframes App-logo-spin {\n from {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n.button {\n font-size: 16px;\n font-weight: lighter;\n height: 50px;\n border-radius: 30px;\n width: 100%;\n margin: 4px 0px 4px 0px;\n}\n\n.box {\n padding: 6px;\n background-color: white;\n border-radius: 6px;\n border-bottom: 20px solid #c84132;\n box-shadow: 0 2px 3px #8a8888;\n}\nbody {\n background-color: #2e2929; /* e74c3c f04d3b 272222 */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n font-family: 'Fredoka One', cursive;\n color: white;\n margin: 0;\n padding: 0;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.title {\n font-weight: bold;\n}\n\n.App {\n text-align: center;\n color: #131313;\n}\n\n.App-header {\n display: flex;\n min-height: 5vh;\n flex-direction: column;\n text-align: 'left';\n align-items: center;\n justify-content: center;\n font-size: 44px;\n color: white; \n text-shadow: 0 2px 4px #909090; /* 909090 */\n margin-bottom: 6px;\n}\n\na {\n color: #f1fb61;\n}\n\na:hover {\n color: #fddec0;\n}\n\n.footer {\n font-family: Arial, Helvetica, sans-serif;\n margin-top: 8px;\n color: #ffffff;\n text-shadow: 0 2px 3px #a3a3a3;\n}\n\n\n.timer {\n font-size: 110px; \n font-weight: normal;\n text-shadow: 0 2px 3px #8a8888; /*0 0 1px #4b4b4b, 0 0 5px rgb(193, 194, 190); a3a3a3*/\n color: #ffebeb;\n}\n",".App-logo {\n height: 160px;\n filter: drop-shadow(0 0 0.28rem #e7d8786b);\n align-items: center;\n justify-content: center;\n text-align: center;\n transition: all .3s ease-in-out;\n}\n\n.App-logo:hover { transform: scale(1.1); }\n\n.App-logo-rotation {\n animation: App-logo-spin infinite 5s linear;\n }\n \n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }",".button {\n font-size: 16px;\n font-weight: lighter;\n height: 50px;\n border-radius: 30px;\n width: 100%;\n margin: 4px 0px 4px 0px;\n}\n\n.box {\n padding: 6px;\n background-color: white;\n border-radius: 6px;\n border-bottom: 20px solid #c84132;\n box-shadow: 0 2px 3px #8a8888;\n}","@import url('https://fonts.googleapis.com/css?family=Fredoka+One');\n\nbody {\n background-color: #2e2929; /* e74c3c f04d3b 272222 */\n user-select: none;\n font-family: 'Fredoka One', cursive;\n color: white;\n margin: 0;\n padding: 0;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.title {\n font-weight: bold;\n}\n\n.App {\n text-align: center;\n color: #131313;\n}\n\n.App-header {\n display: flex;\n min-height: 5vh;\n flex-direction: column;\n text-align: 'left';\n align-items: center;\n justify-content: center;\n font-size: 44px;\n color: white; \n text-shadow: 0 2px 4px #909090; /* 909090 */\n margin-bottom: 6px;\n}\n\na {\n color: #f1fb61;\n}\n\na:hover {\n color: #fddec0;\n}\n\n.footer {\n font-family: Arial, Helvetica, sans-serif;\n margin-top: 8px;\n color: #ffffff;\n text-shadow: 0 2px 3px #a3a3a3;\n}\n\n\n.timer {\n font-size: 110px; \n font-weight: normal;\n text-shadow: 0 2px 3px #8a8888; /*0 0 1px #4b4b4b, 0 0 5px rgb(193, 194, 190); a3a3a3*/\n color: #ffebeb;\n}"]} \ No newline at end of file diff --git a/static/css/main.b5bb2103.chunk.css b/static/css/main.b5bb2103.chunk.css deleted file mode 100644 index 63636db..0000000 --- a/static/css/main.b5bb2103.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Fredoka+One);.App-logo{height:130px;-webkit-filter:drop-shadow(0 0 .3rem #f8ff9c);filter:drop-shadow(0 0 .3rem #f8ff9c);align-items:center;justify-content:center;text-align:center;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.App-logo:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.App-logo-rotation{-webkit-animation:App-logo-spin 5s linear infinite;animation:App-logo-spin 5s linear infinite}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.button{font-size:16px;font-weight:lighter;height:50px;border-radius:40px;width:100%;margin:5px 0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;box-shadow:0 0 1px #111110,0 0 10px #c1c2be}.box{padding:10px;background-color:#fff;border-radius:10px;box-shadow:0 0 1px #111010,0 0 10px #c1c2be}.button:focus,.button:hover{-webkit-transform:scale(1.01);transform:scale(1.01)}.button:focus{box-shadow:0 0 5px #111010,0 0 10px #c1c2be}body{background-color:#f04d3b;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:Fredoka One,cursive;color:#fff;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.title{font-weight:700}.App{text-align:center;color:#131313}.App-header{background-color:#c94233;display:flex;min-height:5vh;flex-direction:column;align-items:center;justify-content:center;font-size:calc(25px + 2vmin);color:#fff;text-shadow:0 0 1px #2b0f0f,0 0 2px #c1c2be;margin-bottom:20px;box-shadow:0 0 2px #cf4242,0 0 6px #2b2d1f}a{color:#f1fb61}a:hover{color:#fddec0}.footer{font-family:Arial,Helvetica,sans-serif;margin-top:15px;color:#fff;text-shadow:0 0 2px #cf4242,0 0 3px #c1c2be}.timer{font-size:100px;font-weight:400;text-shadow:0 0 1px #4b4b4b,0 0 5px #c1c2be;color:#fff} -/*# sourceMappingURL=main.b5bb2103.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.b5bb2103.chunk.css.map b/static/css/main.b5bb2103.chunk.css.map deleted file mode 100644 index e4305a7..0000000 --- a/static/css/main.b5bb2103.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["main.b5bb2103.chunk.css","Logo.css","Box.css","App.css"],"names":[],"mappings":"AAAA,gEAAgE,CCAhE,UACI,YAAa,CACb,6CAAwC,CAAxC,qCAAwC,CACxC,kBAAmB,CACnB,sBAAuB,CACvB,iBAAkB,CAClB,sCAA+B,CAA/B,8BACJ,CAEA,gBAAkB,4BAAqB,CAArB,oBAAuB,CAEzC,mBACI,kDAA2C,CAA3C,0CACF,CAEF,iCACI,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAPF,yBACI,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CCtBF,QACI,cAAe,CACf,mBAAoB,CACpB,WAAY,CACZ,kBAAmB,CACnB,UAAW,CACX,YAAuB,CACvB,sCAA+B,CAA/B,8BAA+B,CAC/B,2CACJ,CAEA,KACI,YAAa,CACb,qBAAuB,CACvB,kBAAmB,CACnB,2CACJ,CAMA,4BAHI,6BAAsB,CAAtB,qBAMJ,CAHA,cAEI,2CACJ,CCvBA,KACE,wBAAyB,CACzB,wBAAiB,CAAjB,qBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CACjB,+BAAmC,CACnC,UAAY,CACZ,QAAS,CACT,SAAU,CACV,kCAAmC,CACnC,iCACF,CAEA,OACE,eACF,CAEA,KACE,iBAAkB,CAClB,aACF,CAEA,YACE,wBAAyB,CACzB,YAAa,CACb,cAAe,CACf,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,4BAA6B,CAC7B,UAAY,CACZ,2CAAwD,CACxD,kBAAmB,CACnB,0CAEF,CAEA,EACE,aACF,CAEA,QACE,aACF,CAEA,QACE,sCAAyC,CACzC,eAAgB,CAChB,UAAc,CACd,2CACF,CAGA,OACE,eAAgB,CAChB,eAAmB,CACnB,2CAAwD,CACxD,UACF","file":"main.b5bb2103.chunk.css","sourcesContent":["@import url(https://fonts.googleapis.com/css?family=Fredoka+One);\n.App-logo {\n height: 130px;\n -webkit-filter: drop-shadow(0 0 0.30rem #f8ff9c);\n filter: drop-shadow(0 0 0.30rem #f8ff9c);\n align-items: center;\n justify-content: center;\n text-align: center;\n -webkit-transition: all .3s ease-in-out;\n transition: all .3s ease-in-out;\n}\n\n.App-logo:hover { -webkit-transform: scale(1.2); transform: scale(1.2); }\n\n.App-logo-rotation {\n -webkit-animation: App-logo-spin infinite 5s linear;\n animation: App-logo-spin infinite 5s linear;\n }\n \n@-webkit-keyframes App-logo-spin {\n from {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n \n@keyframes App-logo-spin {\n from {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n.button {\n font-size: 16px;\n font-weight: lighter;\n height: 50px;\n border-radius: 40px;\n width: 100%;\n margin: 5px 0px 5px 0px;\n -webkit-transition: all .2s ease-in-out;\n transition: all .2s ease-in-out;\n box-shadow:0 0 1px #111110, 0 0 10px rgb(193, 194, 190);\n}\n\n.box {\n padding: 10px;\n background-color: white;\n border-radius: 10px;\n box-shadow:0 0 1px #111010, 0 0 10px rgb(193, 194, 190);\n}\n\n.button:hover { \n -webkit-transform: scale(1.01); \n transform: scale(1.01); \n}\n\n.button:focus { \n -webkit-transform: scale(1.01); \n transform: scale(1.01); \n box-shadow:0 0 5px #111010, 0 0 10px rgb(193, 194, 190);\n}\nbody {\n background-color: #f04d3b; /* e74c3c */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n font-family: 'Fredoka One', cursive;\n color: white;\n margin: 0;\n padding: 0;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.title {\n font-weight: bold;\n}\n\n.App {\n text-align: center;\n color: #131313;\n}\n\n.App-header {\n background-color: #c94233; /*c0392b*/\n display: flex;\n min-height: 5vh;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(25px + 2vmin);\n color: white; \n text-shadow: 0 0 1px #2b0f0f, 0 0 2px rgb(193, 194, 190);\n margin-bottom: 20px;\n box-shadow: 0 0 2px #cf4242, 0 0 6px #2B2D1F;\n\n}\n\na {\n color: #f1fb61;\n}\n\na:hover {\n color: #fddec0;\n}\n\n.footer {\n font-family: Arial, Helvetica, sans-serif;\n margin-top: 15px;\n color: #ffffff;\n text-shadow: 0 0 2px #cf4242, 0 0 3px rgb(193, 194, 190);\n}\n\n\n.timer {\n font-size: 100px; \n font-weight: normal;\n text-shadow: 0 0 1px #4b4b4b, 0 0 5px rgb(193, 194, 190);\n color: white;\n}\n",".App-logo {\n height: 130px;\n filter: drop-shadow(0 0 0.30rem #f8ff9c);\n align-items: center;\n justify-content: center;\n text-align: center;\n transition: all .3s ease-in-out;\n}\n\n.App-logo:hover { transform: scale(1.2); }\n\n.App-logo-rotation {\n animation: App-logo-spin infinite 5s linear;\n }\n \n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }",".button {\n font-size: 16px;\n font-weight: lighter;\n height: 50px;\n border-radius: 40px;\n width: 100%;\n margin: 5px 0px 5px 0px;\n transition: all .2s ease-in-out;\n box-shadow:0 0 1px #111110, 0 0 10px rgb(193, 194, 190);\n}\n\n.box {\n padding: 10px;\n background-color: white;\n border-radius: 10px;\n box-shadow:0 0 1px #111010, 0 0 10px rgb(193, 194, 190);\n}\n\n.button:hover { \n transform: scale(1.01); \n}\n\n.button:focus { \n transform: scale(1.01); \n box-shadow:0 0 5px #111010, 0 0 10px rgb(193, 194, 190);\n}","@import url('https://fonts.googleapis.com/css?family=Fredoka+One');\n\nbody {\n background-color: #f04d3b; /* e74c3c */\n user-select: none;\n font-family: 'Fredoka One', cursive;\n color: white;\n margin: 0;\n padding: 0;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.title {\n font-weight: bold;\n}\n\n.App {\n text-align: center;\n color: #131313;\n}\n\n.App-header {\n background-color: #c94233; /*c0392b*/\n display: flex;\n min-height: 5vh;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(25px + 2vmin);\n color: white; \n text-shadow: 0 0 1px #2b0f0f, 0 0 2px rgb(193, 194, 190);\n margin-bottom: 20px;\n box-shadow: 0 0 2px #cf4242, 0 0 6px #2B2D1F;\n\n}\n\na {\n color: #f1fb61;\n}\n\na:hover {\n color: #fddec0;\n}\n\n.footer {\n font-family: Arial, Helvetica, sans-serif;\n margin-top: 15px;\n color: #ffffff;\n text-shadow: 0 0 2px #cf4242, 0 0 3px rgb(193, 194, 190);\n}\n\n\n.timer {\n font-size: 100px; \n font-weight: normal;\n text-shadow: 0 0 1px #4b4b4b, 0 0 5px rgb(193, 194, 190);\n color: white;\n}"]} \ No newline at end of file diff --git a/static/js/main.257e49c2.chunk.js b/static/js/main.07f9db80.chunk.js similarity index 70% rename from static/js/main.257e49c2.chunk.js rename to static/js/main.07f9db80.chunk.js index 5ecc2a6..5193cfc 100644 --- a/static/js/main.257e49c2.chunk.js +++ b/static/js/main.07f9db80.chunk.js @@ -1,2 +1,2 @@ -(this.webpackJsonptomadoro=this.webpackJsonptomadoro||[]).push([[0],{12:function(e,t,a){e.exports=a.p+"static/media/sound.ec792557.mp3"},15:function(e,t,a){e.exports=a.p+"static/media/logo.08ea9508.svg"},20:function(e,t,a){e.exports=a(32)},26:function(e,t,a){},27:function(e,t,a){},31:function(e,t,a){},32:function(e,t,a){"use strict";a.r(t);var i=a(1),n=a.n(i),o=a(14),s=a.n(o),r=(a(25),a(5)),c=a(6),d=a(10),l=a(7),m=a(2),h=a(11),u=a(35),p=a(33),f=a(34),b=a(15),k=a.n(b),v=(a(26),function(e){function t(e){var a;return Object(r.a)(this,t),(a=Object(d.a)(this,Object(l.a)(t).call(this,e))).defaultClassName="App-logo-rotation",a}return Object(h.a)(t,e),Object(c.a)(t,[{key:"render",value:function(){return n.a.createElement("img",{className:"App-logo ".concat(this.props.isStarted?this.defaultClassName:""),src:k.a,alt:"Tomato",title:"Click on the tomato to change modes",onClick:this.props.switchMode})}}]),t}(i.Component)),E=a(36),N=(a(27),function(e){function t(e){var a;return Object(r.a)(this,t),(a=Object(d.a)(this,Object(l.a)(t).call(this,e))).state={},a}return Object(h.a)(t,e),Object(c.a)(t,[{key:"render",value:function(){return n.a.createElement("div",{className:"box"},n.a.createElement(p.a,null,n.a.createElement(f.a,{xs:"12"},n.a.createElement(E.a,{className:"button",block:!0,size:"lg",color:"success",onClick:this.props.startTimer,disabled:this.props.isStarted||0===this.props.seconds},"START"))),n.a.createElement(p.a,null,n.a.createElement(f.a,{xs:"6"},n.a.createElement(E.a,{className:"button",color:"danger",size:"lg",onClick:this.props.stopTimer,disabled:!this.props.isStarted},"STOP")),n.a.createElement(f.a,{xs:"6"},n.a.createElement(E.a,{className:"button",color:"secondary",size:"lg",onClick:this.props.resetTimer,disabled:this.props.isStarted},"RESET"))))}}]),t}(i.Component)),O=a(18),S=a.n(O),j=a(12),y=a.n(j),g=function(e){function t(e){var a;return Object(r.a)(this,t),(a=Object(d.a)(this,Object(l.a)(t).call(this,e))).state={ignore:!0,title:""},a.handlePermissionGranted=a.handlePermissionGranted.bind(Object(m.a)(a)),a.handlePermissionDenied=a.handlePermissionDenied.bind(Object(m.a)(a)),a.handleNotSupported=a.handleNotSupported.bind(Object(m.a)(a)),a.sendNotification=a.sendNotification.bind(Object(m.a)(a)),a.handleNotificationOnShow=a.handleNotificationOnShow.bind(Object(m.a)(a)),a.playSound=a.playSound.bind(Object(m.a)(a)),a}return Object(h.a)(t,e),Object(c.a)(t,[{key:"componentDidUpdate",value:function(){this.props.send&&(this.sendNotification(),this.props.handleNotification(!1))}},{key:"handlePermissionGranted",value:function(){this.setState({ignore:!1})}},{key:"handlePermissionDenied",value:function(){this.setState({ignore:!0})}},{key:"handleNotSupported",value:function(){this.setState({ignore:!0})}},{key:"handleNotificationOnError",value:function(e,t){console.log(e,"Notification error tag:"+t)}},{key:"handleNotificationOnShow",value:function(){this.playSound()}},{key:"sendNotification",value:function(){if(!this.state.ignore){var e={tag:Date.now(),body:"Time is Up! \ud83c\udf45",lang:"en",sound:{sound:y.a}};this.setState({title:"tomadoro",options:e})}}},{key:"playSound",value:function(){document.getElementById("sound").play()}},{key:"render",value:function(){return n.a.createElement("div",null,n.a.createElement(S.a,{ignore:this.state.ignore,onPermissionGranted:this.handlePermissionGranted,onPermissionDenied:this.handlePermissionDenied,notSupported:this.handleNotSupported,onError:this.onError,timeout:5e3,title:this.state.title,options:this.state.options,onShow:this.handleNotificationOnShow}),n.a.createElement("audio",{id:"sound",preload:"auto"},n.a.createElement("source",{src:y.a,type:"audio/mpeg"}),n.a.createElement("embed",{hidden:!0,src:y.a})))}}]),t}(i.Component),T=(a(31),function(e){function t(e){var a;return Object(r.a)(this,t),(a=Object(d.a)(this,Object(l.a)(t).call(this,e))).appName="tomadoro",a.pomodoroSeconds=1500,a.breakSeconds=300,a.state={startClickNotification:!1,seconds:0,started:!1,break:!1,sendNotification:!1},a.startTimer=a.startTimer.bind(Object(m.a)(a)),a.stopTimer=a.stopTimer.bind(Object(m.a)(a)),a.resetTimer=a.resetTimer.bind(Object(m.a)(a)),a.terminatedTimer=a.terminatedTimer.bind(Object(m.a)(a)),a.pomodoroMode=a.pomodoroMode.bind(Object(m.a)(a)),a.breakMode=a.breakMode.bind(Object(m.a)(a)),a.switchMode=a.switchMode.bind(Object(m.a)(a)),a.formatMinute=a.formatMinute.bind(Object(m.a)(a)),a.handleNotification=a.handleNotification.bind(Object(m.a)(a)),a}return Object(h.a)(t,e),Object(c.a)(t,[{key:"componentWillMount",value:function(){this.pomodoroMode()}},{key:"formatMinute",value:function(e){return(e-(e%=60))/60+(9\n )\n }\n\n}\n\nexport default Logo;","import React, { Component } from 'react';\nimport { Button, Row, Col } from 'reactstrap';\nimport './Box.css';\n\nclass Box extends Component {\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n render() {\n return (\n
\n \n \n \n START\n \n \n \n \n \n \n STOP\n \n \n \n \n RESET\n \n \n \n
\n );\n }\n }\n \n export default Box;","import React, { Component } from 'react';\nimport WebNotification from 'react-web-notification';\nimport sound from '../sound.mp3';\n\nclass Notification extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n ignore: true,\n title: ''\n };\n\n this.handlePermissionGranted = this.handlePermissionGranted.bind(this);\n this.handlePermissionDenied = this.handlePermissionDenied.bind(this);\n this.handleNotSupported = this.handleNotSupported.bind(this);\n this.sendNotification = this.sendNotification.bind(this);\n this.handleNotificationOnShow = this.handleNotificationOnShow.bind(this);\n this.playSound = this.playSound.bind(this);\n }\n\n componentDidUpdate() {\n if(this.props.send) {\n this.sendNotification()\n this.props.handleNotification(false)\n };\n }\n\n handlePermissionGranted() {\n this.setState({\n ignore: false\n });\n }\n\n handlePermissionDenied() {\n this.setState({\n ignore: true\n });\n }\n\n handleNotSupported() {\n this.setState({\n ignore: true\n });\n }\n\n handleNotificationOnError(e, tag) {\n console.log(e, 'Notification error tag:' + tag);\n }\n\n handleNotificationOnShow() {\n this.playSound();\n }\n\n sendNotification() {\n if (this.state.ignore) {\n return;\n }\n\n const title = 'tomadoro';\n const body = 'Time is Up! 🍅';\n const tag = Date.now();\n\n const options = {\n tag: tag,\n body: body,\n lang: 'en',\n sound: { sound }\n };\n\n this.setState({\n title: title,\n options: options\n });\n }\n\n playSound() {\n document.getElementById('sound').play();\n }\n\n render() {\n return(\n
\n \n \n\n \n
\n );\n }\n}\n\nexport default Notification;","import React, { Component } from 'react';\nimport { Container, Row, Col } from 'reactstrap';\nimport Logo from './components/Logo';\nimport Box from './components/Box';\nimport Notification from './components/Notification';\nimport './App.css';\n\nclass App extends Component {\n constructor(props) {\n super(props);\n\n this.appName = 'tomadoro';\n this.pomodoroSeconds = 1500;\n this.breakSeconds = 300;\n\n this.state = {\n startClickNotification: false, // TODO: refactoring identificativo \n seconds: 0,\n started: false,\n break: false,\n sendNotification: false\n };\n\n // binding\n this.startTimer = this.startTimer.bind(this);\n this.stopTimer = this.stopTimer.bind(this);\n this.resetTimer = this.resetTimer.bind(this);\n this.terminatedTimer = this.terminatedTimer.bind(this);\n this.pomodoroMode = this.pomodoroMode.bind(this);\n this.breakMode = this.breakMode.bind(this);\n this.switchMode = this.switchMode.bind(this);\n this.formatMinute = this.formatMinute.bind(this);\n this.handleNotification = this.handleNotification.bind(this);\n }\n\n componentWillMount() {\n this.pomodoroMode();\n }\n\n formatMinute(s) {\n return (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + s;\n }\n\n tick() {\n this.setState(state => ({\n seconds: state.seconds - 1\n }));\n\n document.title = `(${this.formatMinute(this.state.seconds)}) ${this.appName}`;\n\n if (this.state.seconds === 0) {\n this.stopTimer();\n this.terminatedTimer();\n }\n }\n\n startTimer() {\n this.setState({\n started: true,\n startClickNotification: true\n });\n\n this.interval = setInterval(() => this.tick(), 1000);\n }\n\n stopTimer() {\n this.setState({\n started: false\n });\n\n clearInterval(this.interval);\n }\n\n resetTimer() {\n if (this.state.break) {\n this.breakMode();\n } else {\n this.pomodoroMode();\n }\n\n document.title = this.appName;\n }\n\n terminatedTimer() {\n this.setState({\n sendNotification: true\n });\n\n this.switchMode();\n }\n\n pomodoroMode() {\n this.setState({\n seconds: this.pomodoroSeconds,\n break: false\n });\n }\n\n breakMode() {\n this.setState({\n seconds: this.breakSeconds,\n break: true\n });\n }\n\n switchMode() { // TODO: refactoring naming\n if (this.state.break && !this.state.started) {\n this.pomodoroMode();\n } else if (!this.state.break && !this.state.started) {\n this.breakMode();\n }\n }\n\n handleNotification(flag) {\n this.setState({\n sendNotification: flag\n });\n }\n\n render() {\n return (\n
\n
\n tomadoro\n
\n\n \n \n \n \n \n \n\n \n \n

\n {this.formatMinute(this.state.seconds)}\n

\n \n
\n\n \n \n \n \n \n
\n\n { // notification\n this.state.startClickNotification ? (\n )\n : ''}\n\n
\n

\n tomadoro{` `}\n by Francesco Esposito\n

\n
\n
\n );\n }\n}\n\nexport default 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.1/8 is 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 .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.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\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/static/js/main.257e49c2.chunk.js.map b/static/js/main.257e49c2.chunk.js.map deleted file mode 100644 index 97f51cd..0000000 --- a/static/js/main.257e49c2.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["sound.mp3","logo.svg","components/Logo.js","components/Box.js","components/Notification.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","Logo","props","defaultClassName","className","this","isStarted","src","logoSVG","alt","title","onClick","switchMode","Component","Box","state","Row","Col","xs","Button","block","size","color","startTimer","disabled","seconds","stopTimer","resetTimer","Notification","ignore","handlePermissionGranted","bind","handlePermissionDenied","handleNotSupported","sendNotification","handleNotificationOnShow","playSound","send","handleNotification","setState","e","tag","console","log","options","Date","now","body","lang","sound","document","getElementById","play","onPermissionGranted","onPermissionDenied","notSupported","onError","timeout","onShow","id","preload","type","hidden","App","appName","pomodoroSeconds","breakSeconds","startClickNotification","started","break","terminatedTimer","pomodoroMode","breakMode","formatMinute","s","interval","setInterval","tick","clearInterval","flag","Container","sm","offset","md","lg","href","Boolean","window","location","hostname","match","ReactDOM","render","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"wFAAAA,EAAOC,QAAU,IAA0B,mC,mBCA3CD,EAAOC,QAAU,IAA0B,kC,4QCwB5BC,G,kBAnBb,WAAYC,GAAQ,IAAD,8BACjB,4CAAMA,KACDC,iBAAmB,oBAFP,E,sEAMjB,OACE,yBACEC,UAAS,mBAAcC,KAAKH,MAAMI,UAAYD,KAAKF,iBAAkB,IACrEI,IAAKC,IACLC,IAAI,SACJC,MAAM,sCACNC,QAASN,KAAKH,MAAMU,iB,GAbTC,c,QCqDAC,G,kBAnDjB,WAAYZ,GAAQ,IAAD,8BACjB,4CAAMA,KACDa,MAAQ,GAFI,E,sEAMjB,OACE,yBAAKX,UAAU,OACb,kBAACY,EAAA,EAAD,KACE,kBAACC,EAAA,EAAD,CAAKC,GAAG,MACN,kBAACC,EAAA,EAAD,CACEf,UAAU,SACVgB,OAAK,EACLC,KAAK,KACLC,MAAM,UACNX,QAASN,KAAKH,MAAMqB,WACpBC,SAAUnB,KAAKH,MAAMI,WAAkC,IAArBD,KAAKH,MAAMuB,SAN/C,WAYJ,kBAACT,EAAA,EAAD,KACE,kBAACC,EAAA,EAAD,CAAKC,GAAG,KACN,kBAACC,EAAA,EAAD,CACEf,UAAU,SACVkB,MAAM,SACND,KAAK,KACLV,QAASN,KAAKH,MAAMwB,UACpBF,UAAWnB,KAAKH,MAAMI,WALxB,SAUF,kBAACW,EAAA,EAAD,CAAKC,GAAG,KACJ,kBAACC,EAAA,EAAD,CACEf,UAAU,SACVkB,MAAM,YACND,KAAK,KACLV,QAASN,KAAKH,MAAMyB,WACpBH,SAAUnB,KAAKH,MAAMI,WALvB,gB,GArCIO,c,kCCqGHe,E,YApGb,WAAY1B,GAAQ,IAAD,8BACjB,4CAAMA,KAEDa,MAAQ,CACXc,QAAQ,EACRnB,MAAO,IAGT,EAAKoB,wBAA0B,EAAKA,wBAAwBC,KAA7B,gBAC/B,EAAKC,uBAAyB,EAAKA,uBAAuBD,KAA5B,gBAC9B,EAAKE,mBAAqB,EAAKA,mBAAmBF,KAAxB,gBAC1B,EAAKG,iBAAmB,EAAKA,iBAAiBH,KAAtB,gBACxB,EAAKI,yBAA2B,EAAKA,yBAAyBJ,KAA9B,gBAChC,EAAKK,UAAY,EAAKA,UAAUL,KAAf,gBAbA,E,kFAiBd1B,KAAKH,MAAMmC,OACZhC,KAAK6B,mBACL7B,KAAKH,MAAMoC,oBAAmB,M,gDAKhCjC,KAAKkC,SAAS,CACZV,QAAQ,M,+CAKVxB,KAAKkC,SAAS,CACZV,QAAQ,M,2CAKVxB,KAAKkC,SAAS,CACZV,QAAQ,M,gDAIcW,EAAGC,GAC3BC,QAAQC,IAAIH,EAAG,0BAA4BC,K,iDAI3CpC,KAAK+B,c,yCAIL,IAAI/B,KAAKU,MAAMc,OAAf,CAIA,IAIMe,EAAU,CACdH,IAHUI,KAAKC,MAIfC,KALW,2BAMXC,KAAM,KACNC,MAAO,CAAEA,YAGX5C,KAAKkC,SAAS,CACZ7B,MAZY,WAaZkC,QAASA,O,kCAKXM,SAASC,eAAe,SAASC,S,+BAIjC,OACE,6BACE,kBAAC,IAAD,CACEvB,OAAQxB,KAAKU,MAAMc,OACnBwB,oBAAqBhD,KAAKyB,wBAC1BwB,mBAAoBjD,KAAK2B,uBACzBuB,aAAclD,KAAK4B,mBACnBuB,QAASnD,KAAKmD,QACdC,QAAS,IACT/C,MAAOL,KAAKU,MAAML,MAClBkC,QAASvC,KAAKU,MAAM6B,QACpBc,OAAQrD,KAAK8B,2BAIf,2BAAOwB,GAAG,QAAQC,QAAQ,QACxB,4BAAQrD,IAAK0C,IAAOY,KAAK,eACzB,2BAAOC,QAAM,EAACvD,IAAK0C,Y,GA9FFpC,aC+KZkD,G,kBA3Kb,WAAY7D,GAAQ,IAAD,8BACjB,4CAAMA,KAED8D,QAAU,WACf,EAAKC,gBAAkB,KACvB,EAAKC,aAAe,IAEpB,EAAKnD,MAAQ,CACXoD,wBAAwB,EACxB1C,QAAS,EACT2C,SAAS,EACTC,OAAO,EACPnC,kBAAkB,GAIpB,EAAKX,WAAa,EAAKA,WAAWQ,KAAhB,gBAClB,EAAKL,UAAY,EAAKA,UAAUK,KAAf,gBACjB,EAAKJ,WAAa,EAAKA,WAAWI,KAAhB,gBAClB,EAAKuC,gBAAkB,EAAKA,gBAAgBvC,KAArB,gBACvB,EAAKwC,aAAe,EAAKA,aAAaxC,KAAlB,gBACpB,EAAKyC,UAAY,EAAKA,UAAUzC,KAAf,gBACjB,EAAKnB,WAAa,EAAKA,WAAWmB,KAAhB,gBAClB,EAAK0C,aAAe,EAAKA,aAAa1C,KAAlB,gBACpB,EAAKO,mBAAqB,EAAKA,mBAAmBP,KAAxB,gBAxBT,E,kFA4BjB1B,KAAKkE,iB,mCAGMG,GACX,OAAQA,GAAKA,GAAK,KAAO,IAAM,EAAIA,EAAI,IAAM,MAAQA,I,6BAIrDrE,KAAKkC,UAAS,SAAAxB,GAAK,MAAK,CACtBU,QAASV,EAAMU,QAAU,MAG3ByB,SAASxC,MAAT,WAAqBL,KAAKoE,aAAapE,KAAKU,MAAMU,SAAlD,aAA+DpB,KAAK2D,SAEzC,IAAvB3D,KAAKU,MAAMU,UACbpB,KAAKqB,YACLrB,KAAKiE,qB,mCAIK,IAAD,OACXjE,KAAKkC,SAAS,CACZ6B,SAAS,EACTD,wBAAwB,IAG1B9D,KAAKsE,SAAWC,aAAY,kBAAM,EAAKC,SAAQ,O,kCAI/CxE,KAAKkC,SAAS,CACZ6B,SAAS,IAGXU,cAAczE,KAAKsE,Y,mCAIftE,KAAKU,MAAMsD,MACbhE,KAAKmE,YAELnE,KAAKkE,eAGPrB,SAASxC,MAAQL,KAAK2D,U,wCAItB3D,KAAKkC,SAAS,CACZL,kBAAkB,IAGpB7B,KAAKO,e,qCAILP,KAAKkC,SAAS,CACZd,QAASpB,KAAK4D,gBACdI,OAAO,M,kCAKThE,KAAKkC,SAAS,CACZd,QAASpB,KAAK6D,aACdG,OAAO,M,mCAKLhE,KAAKU,MAAMsD,QAAUhE,KAAKU,MAAMqD,QAClC/D,KAAKkE,eACKlE,KAAKU,MAAMsD,OAAUhE,KAAKU,MAAMqD,SAC1C/D,KAAKmE,c,yCAIUO,GACjB1E,KAAKkC,SAAS,CACZL,iBAAkB6C,M,+BAKpB,OACE,yBAAK3E,UAAU,OACb,yBAAKA,UAAU,cAAf,YAIA,kBAAC4E,EAAA,EAAD,KACE,kBAAChE,EAAA,EAAD,KACE,kBAACC,EAAA,EAAD,KACE,kBAAC,EAAD,CACEX,UAAWD,KAAKU,MAAMqD,QACtBxD,WAAYP,KAAKO,eAKvB,kBAACI,EAAA,EAAD,KACE,kBAACC,EAAA,EAAD,KACE,uBAAGb,UAAU,SACVC,KAAKoE,aAAapE,KAAKU,MAAMU,YAKpC,kBAACT,EAAA,EAAD,KACE,kBAACC,EAAA,EAAD,CACEgE,GAAI,CAAE5D,KAAM,GAAI6D,OAAQ,GACxBC,GAAI,CAAE9D,KAAM,EAAG6D,OAAQ,GACvBE,GAAI,CAAE/D,KAAM,EAAG6D,OAAQ,IAEvB,kBAAC,EAAD,CACE3D,WAAYlB,KAAKkB,WACjBG,UAAWrB,KAAKqB,UAChBpB,UAAWD,KAAKU,MAAMqD,QACtBzC,WAAYtB,KAAKsB,WACjBF,QAASpB,KAAKU,MAAMU,aAO1BpB,KAAKU,MAAMoD,uBACT,kBAAC,EAAD,CACE9B,KAAMhC,KAAKU,MAAMmB,iBACjBI,mBAAoBjC,KAAKiC,qBACzB,GAEN,yBAAKlC,UAAU,UACb,2BACE,uBAAGiF,KAAK,yCAAR,YADF,UAEK,uBAAGA,KAAK,gCAAR,cAFL,+B,GAlKQxE,cCKEyE,QACW,cAA7BC,OAAOC,SAASC,UAEe,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MACvB,2DCZNC,IAASC,OAAO,kBAAC,EAAD,MAAS1C,SAASC,eAAe,SD2H3C,kBAAmB0C,WACrBA,UAAUC,cAAcC,MAAMC,MAAK,SAAAC,GACjCA,EAAaC,kB","file":"static/js/main.257e49c2.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/sound.ec792557.mp3\";","module.exports = __webpack_public_path__ + \"static/media/logo.08ea9508.svg\";","import React, { Component } from 'react';\nimport logoSVG from '../logo.svg';\nimport './Logo.css';\n\nclass Logo extends Component {\n constructor(props) {\n super(props);\n this.defaultClassName = 'App-logo-rotation';\n }\n\n render() {\n return (\n \n )\n }\n\n}\n\nexport default Logo;","import React, { Component } from 'react';\nimport { Button, Row, Col } from 'reactstrap';\nimport './Box.css';\n\nclass Box extends Component {\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n render() {\n return (\n
\n \n \n \n START\n \n \n \n \n \n \n STOP\n \n \n \n \n RESET\n \n \n \n
\n );\n }\n }\n \n export default Box;","import React, { Component } from 'react';\nimport WebNotification from 'react-web-notification';\nimport sound from '../sound.mp3';\n\nclass Notification extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n ignore: true,\n title: ''\n };\n\n this.handlePermissionGranted = this.handlePermissionGranted.bind(this);\n this.handlePermissionDenied = this.handlePermissionDenied.bind(this);\n this.handleNotSupported = this.handleNotSupported.bind(this);\n this.sendNotification = this.sendNotification.bind(this);\n this.handleNotificationOnShow = this.handleNotificationOnShow.bind(this);\n this.playSound = this.playSound.bind(this);\n }\n\n componentDidUpdate() {\n if(this.props.send) {\n this.sendNotification()\n this.props.handleNotification(false)\n };\n }\n\n handlePermissionGranted() {\n this.setState({\n ignore: false\n });\n }\n\n handlePermissionDenied() {\n this.setState({\n ignore: true\n });\n }\n\n handleNotSupported() {\n this.setState({\n ignore: true\n });\n }\n\n handleNotificationOnError(e, tag) {\n console.log(e, 'Notification error tag:' + tag);\n }\n\n handleNotificationOnShow() {\n this.playSound();\n }\n\n sendNotification() {\n if (this.state.ignore) {\n return;\n }\n\n const title = 'tomadoro';\n const body = 'Time is Up! 🍅';\n const tag = Date.now();\n\n const options = {\n tag: tag,\n body: body,\n lang: 'en',\n sound: { sound }\n };\n\n this.setState({\n title: title,\n options: options\n });\n }\n\n playSound() {\n document.getElementById('sound').play();\n }\n\n render() {\n return(\n
\n \n \n\n \n
\n );\n }\n}\n\nexport default Notification;","import React, { Component } from 'react';\nimport { Container, Row, Col } from 'reactstrap';\nimport Logo from './components/Logo';\nimport Box from './components/Box';\nimport Notification from './components/Notification';\nimport './App.css';\n\nclass App extends Component {\n constructor(props) {\n super(props);\n\n this.appName = 'tomadoro';\n this.pomodoroSeconds = 1500;\n this.breakSeconds = 300;\n\n this.state = {\n startClickNotification: false, // TODO: refactoring identificativo \n seconds: 0,\n started: false,\n break: false,\n sendNotification: false\n };\n\n // binding\n this.startTimer = this.startTimer.bind(this);\n this.stopTimer = this.stopTimer.bind(this);\n this.resetTimer = this.resetTimer.bind(this);\n this.terminatedTimer = this.terminatedTimer.bind(this);\n this.pomodoroMode = this.pomodoroMode.bind(this);\n this.breakMode = this.breakMode.bind(this);\n this.switchMode = this.switchMode.bind(this);\n this.formatMinute = this.formatMinute.bind(this);\n this.handleNotification = this.handleNotification.bind(this);\n }\n\n componentWillMount() {\n this.pomodoroMode();\n }\n\n formatMinute(s) {\n return (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + s;\n }\n\n tick() {\n this.setState(state => ({\n seconds: state.seconds - 1\n }));\n\n document.title = `(${this.formatMinute(this.state.seconds)}) ${this.appName}`;\n\n if (this.state.seconds === 0) {\n this.stopTimer();\n this.terminatedTimer();\n }\n }\n\n startTimer() {\n this.setState({\n started: true,\n startClickNotification: true\n });\n\n this.interval = setInterval(() => this.tick(), 1000);\n }\n\n stopTimer() {\n this.setState({\n started: false\n });\n\n clearInterval(this.interval);\n }\n\n resetTimer() {\n if (this.state.break) {\n this.breakMode();\n } else {\n this.pomodoroMode();\n }\n\n document.title = this.appName;\n }\n\n terminatedTimer() {\n this.setState({\n sendNotification: true\n });\n\n this.switchMode();\n }\n\n pomodoroMode() {\n this.setState({\n seconds: this.pomodoroSeconds,\n break: false\n });\n }\n\n breakMode() {\n this.setState({\n seconds: this.breakSeconds,\n break: true\n });\n }\n\n switchMode() { // TODO: refactoring naming\n if (this.state.break && !this.state.started) {\n this.pomodoroMode();\n } else if (!this.state.break && !this.state.started) {\n this.breakMode();\n }\n }\n\n handleNotification(flag) {\n this.setState({\n sendNotification: flag\n });\n }\n\n render() {\n return (\n
\n
\n tomadoro\n
\n\n \n \n \n \n \n \n\n \n \n

\n {this.formatMinute(this.state.seconds)}\n

\n \n
\n\n \n \n \n \n \n
\n\n { // notification\n this.state.startClickNotification ? (\n )\n : ''}\n\n
\n

\n tomadoro{` `}\n by @frsposito (Francesco Esposito)\n

\n
\n
\n );\n }\n}\n\nexport default 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.1/8 is 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 .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.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\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