From 4db5a1aadb2a074916c2fd4b9b7b3820f1c75c8b Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Sun, 20 Jan 2019 15:50:41 -0500 Subject: [PATCH 01/34] Remove index-FINISHED.html files to re-start the learning process --- 01 - JavaScript Drum Kit/index-FINISHED.html | 83 ------ 02 - JS and CSS Clock/index-FINISHED.html | 99 ------- 03 - CSS Variables/index-FINISHED.html | 76 ------ 04 - Array Cardio Day 1/index-FINISHED.html | 106 ------- 05 - Flex Panel Gallery/index-FINISHED.html | 147 ---------- 06 - Type Ahead/index-FINISHED.html | 61 ----- 07 - Array Cardio Day 2/index-FINISHED.html | 68 ----- .../index-FINISHED.html | 73 ----- 09 - Dev Tools Domination/index-FINISHED.html | 89 ------ .../index-FINISHED.html | 130 --------- 11 - Custom Video Player/scripts-FINISHED.js | 55 ---- .../index-FINISHED.html | 25 -- 13 - Slide in on Scroll/index-FINISHED.html | 143 ---------- .../index-FINISHED.html | 99 ------- 15 - LocalStorage/index-FINISHED.html | 77 ------ .../index-FINISHED.html | 67 ----- .../index-FINISHED.html | 207 -------------- 19 - Webcam Fun/scripts-FINISHED.js | 110 -------- 20 - Speech Detection/index-FINISHED.html | 87 ------ 21 - Geolocation/index-FINISHED.html | 74 ----- .../index-FINISHED.html | 55 ---- 23 - Speech Synthesis/index-FINISHED.html | 75 ----- 24 - Sticky Nav/index-FINISHED.html | 67 ----- 24 - Sticky Nav/style-FINISHED.css | 101 ------- .../index-FINISHED.html | 67 ----- .../index-FINISHED.html | 258 ------------------ 27 - Click and Drag/index-FINISHED.html | 71 ----- .../index-FINISHED.html | 39 --- 29 - Countdown Timer/scripts-FINISHED.js | 55 ---- 30 - Whack A Mole/index-FINISHED.html | 87 ------ 30 files changed, 2751 deletions(-) delete mode 100644 01 - JavaScript Drum Kit/index-FINISHED.html delete mode 100644 02 - JS and CSS Clock/index-FINISHED.html delete mode 100644 03 - CSS Variables/index-FINISHED.html delete mode 100644 04 - Array Cardio Day 1/index-FINISHED.html delete mode 100644 05 - Flex Panel Gallery/index-FINISHED.html delete mode 100644 06 - Type Ahead/index-FINISHED.html delete mode 100644 07 - Array Cardio Day 2/index-FINISHED.html delete mode 100644 08 - Fun with HTML5 Canvas/index-FINISHED.html delete mode 100644 09 - Dev Tools Domination/index-FINISHED.html delete mode 100644 10 - Hold Shift and Check Checkboxes/index-FINISHED.html delete mode 100644 11 - Custom Video Player/scripts-FINISHED.js delete mode 100644 12 - Key Sequence Detection/index-FINISHED.html delete mode 100644 13 - Slide in on Scroll/index-FINISHED.html delete mode 100644 14 - JavaScript References VS Copying/index-FINISHED.html delete mode 100644 15 - LocalStorage/index-FINISHED.html delete mode 100644 17 - Sort Without Articles/index-FINISHED.html delete mode 100644 18 - Adding Up Times with Reduce/index-FINISHED.html delete mode 100755 19 - Webcam Fun/scripts-FINISHED.js delete mode 100644 20 - Speech Detection/index-FINISHED.html delete mode 100644 21 - Geolocation/index-FINISHED.html delete mode 100644 22 - Follow Along Link Highlighter/index-FINISHED.html delete mode 100644 23 - Speech Synthesis/index-FINISHED.html delete mode 100644 24 - Sticky Nav/index-FINISHED.html delete mode 100644 24 - Sticky Nav/style-FINISHED.css delete mode 100644 25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html delete mode 100644 26 - Stripe Follow Along Nav/index-FINISHED.html delete mode 100644 27 - Click and Drag/index-FINISHED.html delete mode 100644 28 - Video Speed Controller/index-FINISHED.html delete mode 100644 29 - Countdown Timer/scripts-FINISHED.js delete mode 100644 30 - Whack A Mole/index-FINISHED.html diff --git a/01 - JavaScript Drum Kit/index-FINISHED.html b/01 - JavaScript Drum Kit/index-FINISHED.html deleted file mode 100644 index 1a16d0997c..0000000000 --- a/01 - JavaScript Drum Kit/index-FINISHED.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - JS Drum Kit - - - - - -
-
- A - clap -
-
- S - hihat -
-
- D - kick -
-
- F - openhat -
-
- G - boom -
-
- H - ride -
-
- J - snare -
-
- K - tom -
-
- L - tink -
-
- - - - - - - - - - - - - - - - diff --git a/02 - JS and CSS Clock/index-FINISHED.html b/02 - JS and CSS Clock/index-FINISHED.html deleted file mode 100644 index 7449fc52f5..0000000000 --- a/02 - JS and CSS Clock/index-FINISHED.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - JS + CSS Clock - - - - -
-
-
-
-
-
-
- - - - - - - diff --git a/03 - CSS Variables/index-FINISHED.html b/03 - CSS Variables/index-FINISHED.html deleted file mode 100644 index 2f0d1464ff..0000000000 --- a/03 - CSS Variables/index-FINISHED.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Scoped CSS Variables and JS - - -

Update CSS Variables with JS

- -
- - - - - - - - -
- - - - - - - - - - diff --git a/04 - Array Cardio Day 1/index-FINISHED.html b/04 - Array Cardio Day 1/index-FINISHED.html deleted file mode 100644 index ede883f1f9..0000000000 --- a/04 - Array Cardio Day 1/index-FINISHED.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Array Cardio 💪 - - -

Psst: have a look at the JavaScript Console 💁

- - - diff --git a/05 - Flex Panel Gallery/index-FINISHED.html b/05 - Flex Panel Gallery/index-FINISHED.html deleted file mode 100644 index bfa64d6be3..0000000000 --- a/05 - Flex Panel Gallery/index-FINISHED.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - Flex Panels 💪 - - - - - - -
-
-

Hey

-

Let's

-

Dance

-
-
-

Give

-

Take

-

Receive

-
-
-

Experience

-

It

-

Today

-
-
-

Give

-

All

-

You can

-
-
-

Life

-

In

-

Motion

-
-
- - - - - diff --git a/06 - Type Ahead/index-FINISHED.html b/06 - Type Ahead/index-FINISHED.html deleted file mode 100644 index 5902b43936..0000000000 --- a/06 - Type Ahead/index-FINISHED.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Type Ahead 👀 - - - - -
- - -
- - - diff --git a/07 - Array Cardio Day 2/index-FINISHED.html b/07 - Array Cardio Day 2/index-FINISHED.html deleted file mode 100644 index 24efbf91b0..0000000000 --- a/07 - Array Cardio Day 2/index-FINISHED.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Array Cardio 💪💪 - - -

Psst: have a look at the JavaScript Console 💁

- - - diff --git a/08 - Fun with HTML5 Canvas/index-FINISHED.html b/08 - Fun with HTML5 Canvas/index-FINISHED.html deleted file mode 100644 index f2c9b120fe..0000000000 --- a/08 - Fun with HTML5 Canvas/index-FINISHED.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - HTML5 Canvas - - - - - - - - - diff --git a/09 - Dev Tools Domination/index-FINISHED.html b/09 - Dev Tools Domination/index-FINISHED.html deleted file mode 100644 index 55cd3a2f42..0000000000 --- a/09 - Dev Tools Domination/index-FINISHED.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - Console Tricks! - - - -

×BREAK×DOWN×

- - - - diff --git a/10 - Hold Shift and Check Checkboxes/index-FINISHED.html b/10 - Hold Shift and Check Checkboxes/index-FINISHED.html deleted file mode 100644 index d967b249cd..0000000000 --- a/10 - Hold Shift and Check Checkboxes/index-FINISHED.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - Hold Shift to Check Multiple Checkboxes - - - - -
-
- -

This is an inbox layout.

-
-
- -

Check one item

-
-
- -

Hold down your Shift key

-
-
- -

Check a lower item

-
-
- -

Everything in between should also be set to checked

-
-
- -

Try do it without any libraries

-
-
- -

Just regular JavaScript

-
-
- -

Good Luck!

-
-
- -

Don't forget to tweet your result!

-
-
- - - - diff --git a/11 - Custom Video Player/scripts-FINISHED.js b/11 - Custom Video Player/scripts-FINISHED.js deleted file mode 100644 index 4656b218a7..0000000000 --- a/11 - Custom Video Player/scripts-FINISHED.js +++ /dev/null @@ -1,55 +0,0 @@ -/* Get Our Elements */ -const player = document.querySelector('.player'); -const video = player.querySelector('.viewer'); -const progress = player.querySelector('.progress'); -const progressBar = player.querySelector('.progress__filled'); -const toggle = player.querySelector('.toggle'); -const skipButtons = player.querySelectorAll('[data-skip]'); -const ranges = player.querySelectorAll('.player__slider'); - -/* Build out functions */ -function togglePlay() { - const method = video.paused ? 'play' : 'pause'; - video[method](); -} - -function updateButton() { - const icon = this.paused ? '►' : '❚ ❚'; - console.log(icon); - toggle.textContent = icon; -} - -function skip() { - video.currentTime += parseFloat(this.dataset.skip); -} - -function handleRangeUpdate() { - video[this.name] = this.value; -} - -function handleProgress() { - const percent = (video.currentTime / video.duration) * 100; - progressBar.style.flexBasis = `${percent}%`; -} - -function scrub(e) { - const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration; - video.currentTime = scrubTime; -} - -/* Hook up the event listeners */ -video.addEventListener('click', togglePlay); -video.addEventListener('play', updateButton); -video.addEventListener('pause', updateButton); -video.addEventListener('timeupdate', handleProgress); - -toggle.addEventListener('click', togglePlay); -skipButtons.forEach(button => button.addEventListener('click', skip)); -ranges.forEach(range => range.addEventListener('change', handleRangeUpdate)); -ranges.forEach(range => range.addEventListener('mousemove', handleRangeUpdate)); - -let mousedown = false; -progress.addEventListener('click', scrub); -progress.addEventListener('mousemove', (e) => mousedown && scrub(e)); -progress.addEventListener('mousedown', () => mousedown = true); -progress.addEventListener('mouseup', () => mousedown = false); diff --git a/12 - Key Sequence Detection/index-FINISHED.html b/12 - Key Sequence Detection/index-FINISHED.html deleted file mode 100644 index 562127a0d2..0000000000 --- a/12 - Key Sequence Detection/index-FINISHED.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Key Detection - - - - - - diff --git a/13 - Slide in on Scroll/index-FINISHED.html b/13 - Slide in on Scroll/index-FINISHED.html deleted file mode 100644 index 2f8c318d04..0000000000 --- a/13 - Slide in on Scroll/index-FINISHED.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Document - - - -
- -

Slide in on Scroll

- -

Consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariaturlores sunt esse magni, ut, dignissimos.

-

Lorem ipsum cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Adipisicing elit. Tempore tempora rerum..

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

- - - -

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

- - - -

at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

- - - -

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis

- - -

laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

- - - -

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

- - - - -
- - - - - - - diff --git a/14 - JavaScript References VS Copying/index-FINISHED.html b/14 - JavaScript References VS Copying/index-FINISHED.html deleted file mode 100644 index e6de86456b..0000000000 --- a/14 - JavaScript References VS Copying/index-FINISHED.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - JS Reference VS Copy - - - - - - - diff --git a/15 - LocalStorage/index-FINISHED.html b/15 - LocalStorage/index-FINISHED.html deleted file mode 100644 index 2c492b1088..0000000000 --- a/15 - LocalStorage/index-FINISHED.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - LocalStorage - - - - - - - -
-

LOCAL TAPAS

-

- -
- - -
-
- - - - - - - diff --git a/17 - Sort Without Articles/index-FINISHED.html b/17 - Sort Without Articles/index-FINISHED.html deleted file mode 100644 index 3dffe7b3e7..0000000000 --- a/17 - Sort Without Articles/index-FINISHED.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Sort Without Articles - - - - - - - - - - - diff --git a/18 - Adding Up Times with Reduce/index-FINISHED.html b/18 - Adding Up Times with Reduce/index-FINISHED.html deleted file mode 100644 index 20d099644c..0000000000 --- a/18 - Adding Up Times with Reduce/index-FINISHED.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - Videos - - - - - - diff --git a/19 - Webcam Fun/scripts-FINISHED.js b/19 - Webcam Fun/scripts-FINISHED.js deleted file mode 100755 index df07fa123a..0000000000 --- a/19 - Webcam Fun/scripts-FINISHED.js +++ /dev/null @@ -1,110 +0,0 @@ -const video = document.querySelector('.player'); -const canvas = document.querySelector('.photo'); -const ctx = canvas.getContext('2d'); -const strip = document.querySelector('.strip'); -const snap = document.querySelector('.snap'); - -function getVideo() { - navigator.mediaDevices.getUserMedia({ video: true, audio: false }) - .then(localMediaStream => { - console.log(localMediaStream); - -// DEPRECIATION : -// The following has been depreceated by major browsers as of Chrome and Firefox. -// video.src = window.URL.createObjectURL(localMediaStream); -// Please refer to these: -// Depreceated - https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL -// Newer Syntax - https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject - - video.srcObject = localMediaStream; - video.play(); - }) - .catch(err => { - console.error(`OH NO!!!`, err); - }); -} - -function paintToCanvas() { - const width = video.videoWidth; - const height = video.videoHeight; - canvas.width = width; - canvas.height = height; - - return setInterval(() => { - ctx.drawImage(video, 0, 0, width, height); - // take the pixels out - let pixels = ctx.getImageData(0, 0, width, height); - // mess with them - // pixels = redEffect(pixels); - - pixels = rgbSplit(pixels); - // ctx.globalAlpha = 0.8; - - // pixels = greenScreen(pixels); - // put them back - ctx.putImageData(pixels, 0, 0); - }, 16); -} - -function takePhoto() { - // played the sound - snap.currentTime = 0; - snap.play(); - - // take the data out of the canvas - const data = canvas.toDataURL('image/jpeg'); - const link = document.createElement('a'); - link.href = data; - link.setAttribute('download', 'handsome'); - link.innerHTML = `Handsome Man`; - strip.insertBefore(link, strip.firstChild); -} - -function redEffect(pixels) { - for (let i = 0; i < pixels.data.length; i+=4) { - pixels.data[i + 0] = pixels.data[i + 0] + 200; // RED - pixels.data[i + 1] = pixels.data[i + 1] - 50; // GREEN - pixels.data[i + 2] = pixels.data[i + 2] * 0.5; // Blue - } - return pixels; -} - -function rgbSplit(pixels) { - for (let i = 0; i < pixels.data.length; i+=4) { - pixels.data[i - 150] = pixels.data[i + 0]; // RED - pixels.data[i + 500] = pixels.data[i + 1]; // GREEN - pixels.data[i - 550] = pixels.data[i + 2]; // Blue - } - return pixels; -} - -function greenScreen(pixels) { - const levels = {}; - - document.querySelectorAll('.rgb input').forEach((input) => { - levels[input.name] = input.value; - }); - - for (i = 0; i < pixels.data.length; i = i + 4) { - red = pixels.data[i + 0]; - green = pixels.data[i + 1]; - blue = pixels.data[i + 2]; - alpha = pixels.data[i + 3]; - - if (red >= levels.rmin - && green >= levels.gmin - && blue >= levels.bmin - && red <= levels.rmax - && green <= levels.gmax - && blue <= levels.bmax) { - // take it out! - pixels.data[i + 3] = 0; - } - } - - return pixels; -} - -getVideo(); - -video.addEventListener('canplay', paintToCanvas); diff --git a/20 - Speech Detection/index-FINISHED.html b/20 - Speech Detection/index-FINISHED.html deleted file mode 100644 index fdc53090d8..0000000000 --- a/20 - Speech Detection/index-FINISHED.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - Speech Detection - - - -
-
- - - - - - - - diff --git a/21 - Geolocation/index-FINISHED.html b/21 - Geolocation/index-FINISHED.html deleted file mode 100644 index 7a8f6db18a..0000000000 --- a/21 - Geolocation/index-FINISHED.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - Document - - - - - - -

- 0 - KM/H -

- - - - - diff --git a/22 - Follow Along Link Highlighter/index-FINISHED.html b/22 - Follow Along Link Highlighter/index-FINISHED.html deleted file mode 100644 index 869d8dab94..0000000000 --- a/22 - Follow Along Link Highlighter/index-FINISHED.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - 👀👀👀Follow Along Nav - - - - - - -
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est explicabo unde natus necessitatibus esse obcaecati distinctio, aut itaque, qui vitae!

-

Aspernatur sapiente quae sint soluta modi, atque praesentium laborum pariatur earum quaerat cupiditate consequuntur facilis ullam dignissimos, aperiam quam veniam.

-

Cum ipsam quod, incidunt sit ex tempore placeat maxime corrupti possimus veritatis ipsum fugit recusandae est doloremque? Hic, quibusdam, nulla.

-

Esse quibusdam, ad, ducimus cupiditate nulla, quae magni odit totam ut consequatur eveniet sunt quam provident sapiente dicta neque quod.

-

Aliquam dicta sequi culpa fugiat consequuntur pariatur optio ad minima, maxime odio, distinctio magni impedit tempore enim repellendus repudiandae quas!

-
- - - - - diff --git a/23 - Speech Synthesis/index-FINISHED.html b/23 - Speech Synthesis/index-FINISHED.html deleted file mode 100644 index 5ea9a4a8e7..0000000000 --- a/23 - Speech Synthesis/index-FINISHED.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - Speech Synthesis - - - - - -
- -

The Voiceinator 5000

- - - - - - - - - - - - - -
- - - - - diff --git a/24 - Sticky Nav/index-FINISHED.html b/24 - Sticky Nav/index-FINISHED.html deleted file mode 100644 index 37dd5ac3a4..0000000000 --- a/24 - Sticky Nav/index-FINISHED.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Document - - - - -
-

A story about getting lost.

-
- - - -
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

- -

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

- -

at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

- -

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

-
- - - - - - diff --git a/24 - Sticky Nav/style-FINISHED.css b/24 - Sticky Nav/style-FINISHED.css deleted file mode 100644 index df1922580b..0000000000 --- a/24 - Sticky Nav/style-FINISHED.css +++ /dev/null @@ -1,101 +0,0 @@ -html { - box-sizing: border-box; - background: #eeeeee; - font-family: 'helvetica neue'; - font-size: 20px; - font-weight: 200; -} - -body { - margin: 0; -} - -*, *:before, *:after { - box-sizing: inherit; -} - -.site-wrap { - max-width: 700px; - margin: 70px auto; - background: white; - padding: 40px; - text-align: justify; - box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.05); - transform: scale(0.98); - transition: transform 0.5s; -} - -body.fixed-nav .site-wrap { - transform: scale(1); -} - -header { - text-align: center; - height: 50vh; - background: url(http://wes.io/iEgP/wow-so-deep.jpg) bottom center no-repeat; - background-size: cover; - display: flex; - align-items: center; - justify-content: center; -} - -h1 { - color: white; - font-size: 7vw; - text-shadow: 3px 4px 0 rgba(0,0,0,0.2); -} - -nav { - background: black; - top: 0; - width: 100%; - transition:all 0.5s; - position: relative; - z-index: 1; -} - -body.fixed-nav nav { - position: fixed; - box-shadow: 0 5px 0 rgba(0,0,0,0.1); -} - -nav ul { - margin: 0; - padding: 0; - list-style: none; - display: flex; -} - -nav li { - flex: 1; - text-align: center; - display: flex; - justify-content: center; - align-items: center; -} - -li.logo { - max-width: 0; - overflow: hidden; - background: white; - transition: all 0.5s; - font-weight: 600; - font-size: 30px; -} - -li.logo a { - color: black; -} - -.fixed-nav li.logo { - max-width: 500px; -} - -nav a { - text-decoration: none; - padding: 20px; - display: inline-block; - color: white; - transition: all 0.2s; - text-transform: uppercase; -} diff --git a/25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html b/25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html deleted file mode 100644 index 6515565abd..0000000000 --- a/25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Understanding JavaScript's Capture - - - -
-
-
-
-
-
- - - - - - - diff --git a/26 - Stripe Follow Along Nav/index-FINISHED.html b/26 - Stripe Follow Along Nav/index-FINISHED.html deleted file mode 100644 index 90c6888b2d..0000000000 --- a/26 - Stripe Follow Along Nav/index-FINISHED.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - Follow Along Nav - - -

Cool

- - - - - - - - diff --git a/27 - Click and Drag/index-FINISHED.html b/27 - Click and Drag/index-FINISHED.html deleted file mode 100644 index 52eb86628c..0000000000 --- a/27 - Click and Drag/index-FINISHED.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Click and Drag - - - -
-
01
-
02
-
03
-
04
-
05
-
06
-
07
-
08
-
09
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
- - - - - diff --git a/28 - Video Speed Controller/index-FINISHED.html b/28 - Video Speed Controller/index-FINISHED.html deleted file mode 100644 index d1fa16a72e..0000000000 --- a/28 - Video Speed Controller/index-FINISHED.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Video Speed Scrubber - - - - -
- -

-

-
-
-
- - - - diff --git a/29 - Countdown Timer/scripts-FINISHED.js b/29 - Countdown Timer/scripts-FINISHED.js deleted file mode 100644 index 581cadb270..0000000000 --- a/29 - Countdown Timer/scripts-FINISHED.js +++ /dev/null @@ -1,55 +0,0 @@ -let countdown; -const timerDisplay = document.querySelector('.display__time-left'); -const endTime = document.querySelector('.display__end-time'); -const buttons = document.querySelectorAll('[data-time]'); - -function timer(seconds) { - // clear any existing timers - clearInterval(countdown); - - const now = Date.now(); - const then = now + seconds * 1000; - displayTimeLeft(seconds); - displayEndTime(then); - - countdown = setInterval(() => { - const secondsLeft = Math.round((then - Date.now()) / 1000); - // check if we should stop it! - if(secondsLeft < 0) { - clearInterval(countdown); - return; - } - // display it - displayTimeLeft(secondsLeft); - }, 1000); -} - -function displayTimeLeft(seconds) { - const minutes = Math.floor(seconds / 60); - const remainderSeconds = seconds % 60; - const display = `${minutes}:${remainderSeconds < 10 ? '0' : '' }${remainderSeconds}`; - document.title = display; - timerDisplay.textContent = display; -} - -function displayEndTime(timestamp) { - const end = new Date(timestamp); - const hour = end.getHours(); - const adjustedHour = hour > 12 ? hour - 12 : hour; - const minutes = end.getMinutes(); - endTime.textContent = `Be Back At ${adjustedHour}:${minutes < 10 ? '0' : ''}${minutes}`; -} - -function startTimer() { - const seconds = parseInt(this.dataset.time); - timer(seconds); -} - -buttons.forEach(button => button.addEventListener('click', startTimer)); -document.customForm.addEventListener('submit', function(e) { - e.preventDefault(); - const mins = this.minutes.value; - console.log(mins); - timer(mins * 60); - this.reset(); -}); diff --git a/30 - Whack A Mole/index-FINISHED.html b/30 - Whack A Mole/index-FINISHED.html deleted file mode 100644 index 39bbc40836..0000000000 --- a/30 - Whack A Mole/index-FINISHED.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - Whack A Mole! - - - - - -

Whack-a-mole! 0

- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - From e5257ae5607bdd981a354ca1cceaf20b5e21ae3f Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Tue, 22 Jan 2019 11:05:07 -0500 Subject: [PATCH 02/34] Add solution for the Day 01 - Drum Kit tutorial --- 01 - JavaScript Drum Kit/index-FINISHED.html | 84 ++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 01 - JavaScript Drum Kit/index-FINISHED.html diff --git a/01 - JavaScript Drum Kit/index-FINISHED.html b/01 - JavaScript Drum Kit/index-FINISHED.html new file mode 100644 index 0000000000..995a80d977 --- /dev/null +++ b/01 - JavaScript Drum Kit/index-FINISHED.html @@ -0,0 +1,84 @@ + + + + + JS Drum Kit + + + + + +
+
+ A + clap +
+
+ S + hihat +
+
+ D + kick +
+
+ F + openhat +
+
+ G + boom +
+
+ H + ride +
+
+ J + snare +
+
+ K + tom +
+
+ L + tink +
+
+ + + + + + + + + + + + + + + + From d628bf4f4dd8b3635d982862a335329e09fe8c7b Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Wed, 23 Jan 2019 11:56:40 -0500 Subject: [PATCH 03/34] Add solution for Day 02 - CSS and JS Clock tutorial --- 02 - JS and CSS Clock/index-FINISHED.html | 98 +++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 02 - JS and CSS Clock/index-FINISHED.html diff --git a/02 - JS and CSS Clock/index-FINISHED.html b/02 - JS and CSS Clock/index-FINISHED.html new file mode 100644 index 0000000000..57a4d47ef7 --- /dev/null +++ b/02 - JS and CSS Clock/index-FINISHED.html @@ -0,0 +1,98 @@ + + + + + JS + CSS Clock + + + + +
+
+
+
+
+
+
+ + + + + + + From a400e6623a27b4c03cd9790beabdf3fba3b01b04 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Wed, 23 Jan 2019 15:28:09 -0500 Subject: [PATCH 04/34] Add solution for Day 03 - CSS Variables --- 03 - CSS Variables/index-FINISHED.html | 81 +++++++++++++++++++++++++ 03 - CSS Variables/logo-512.png | Bin 0 -> 99873 bytes 2 files changed, 81 insertions(+) create mode 100644 03 - CSS Variables/index-FINISHED.html create mode 100644 03 - CSS Variables/logo-512.png diff --git a/03 - CSS Variables/index-FINISHED.html b/03 - CSS Variables/index-FINISHED.html new file mode 100644 index 0000000000..ee9f771ca9 --- /dev/null +++ b/03 - CSS Variables/index-FINISHED.html @@ -0,0 +1,81 @@ + + + + + Scoped CSS Variables and JS + + +

Update CSS Variables with JS

+ +
+ + + + + + + + +
+ + + + + + + + + diff --git a/03 - CSS Variables/logo-512.png b/03 - CSS Variables/logo-512.png new file mode 100644 index 0000000000000000000000000000000000000000..3792d17156b03fe1a289b10a8817f1f2c396208b GIT binary patch literal 99873 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 Date: Thu, 24 Jan 2019 22:11:12 -0500 Subject: [PATCH 05/34] Add solution for Day 04 - Array Cardio Day 1 --- 04 - Array Cardio Day 1/index-FINISHED.html | 87 +++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 04 - Array Cardio Day 1/index-FINISHED.html diff --git a/04 - Array Cardio Day 1/index-FINISHED.html b/04 - Array Cardio Day 1/index-FINISHED.html new file mode 100644 index 0000000000..c2e02e021c --- /dev/null +++ b/04 - Array Cardio Day 1/index-FINISHED.html @@ -0,0 +1,87 @@ + + + + + Array Cardio 💪 + + +

Psst: have a look at the JavaScript Console 💁

+ + + From bca1afff71d558f4162e76effcb2e731cdc1eeaf Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Fri, 25 Jan 2019 12:26:51 -0500 Subject: [PATCH 06/34] Add solution for Day 05 - Flex Panel Gallery --- 05 - Flex Panel Gallery/index-FINISHED.html | 143 ++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 05 - Flex Panel Gallery/index-FINISHED.html diff --git a/05 - Flex Panel Gallery/index-FINISHED.html b/05 - Flex Panel Gallery/index-FINISHED.html new file mode 100644 index 0000000000..dd786edd38 --- /dev/null +++ b/05 - Flex Panel Gallery/index-FINISHED.html @@ -0,0 +1,143 @@ + + + + + Flex Panels 💪 + + + + + + +
+
+

Hey

+

Let's

+

Dance

+
+
+

Give

+

Take

+

Receive

+
+
+

Experience

+

It

+

Today

+
+
+

Give

+

All

+

You can

+
+
+

Life

+

In

+

Motion

+
+
+ + + + + From d50292aa07553eaab44cf3fff3aefcfe9d184ac0 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Mon, 28 Jan 2019 23:07:55 -0500 Subject: [PATCH 07/34] Add solution for Day 06 - Type Ahead --- 06 - Type Ahead/index-FINISHED.html | 73 +++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 06 - Type Ahead/index-FINISHED.html diff --git a/06 - Type Ahead/index-FINISHED.html b/06 - Type Ahead/index-FINISHED.html new file mode 100644 index 0000000000..40a82a0249 --- /dev/null +++ b/06 - Type Ahead/index-FINISHED.html @@ -0,0 +1,73 @@ + + + + + Type Ahead 👀 + + + + +
+ +
    +
  • Loading data, please wait...
  • +
+
+ + + From 58cd85eebbe21dad6589f8dbc21513af5906bb14 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Mon, 28 Jan 2019 23:25:34 -0500 Subject: [PATCH 08/34] Add solution for Day 06 - Type Ahead --- 06 - Type Ahead/index-FINISHED.html | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 06 - Type Ahead/index-FINISHED.html diff --git a/06 - Type Ahead/index-FINISHED.html b/06 - Type Ahead/index-FINISHED.html new file mode 100644 index 0000000000..53a3c6ca75 --- /dev/null +++ b/06 - Type Ahead/index-FINISHED.html @@ -0,0 +1,74 @@ + + + + + Type Ahead 👀 + + + + +
+ +
    +
  • Loading data, please wait...
  • +
+
+ + + From 09bb986da92cb985e90fdba6b240e5b1f6c02286 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Fri, 8 Feb 2019 16:20:47 -0500 Subject: [PATCH 09/34] Add solution for Day 07 - Array Cardio Day 2 --- 07 - Array Cardio Day 2/index-FINISHED.html | 58 +++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 07 - Array Cardio Day 2/index-FINISHED.html diff --git a/07 - Array Cardio Day 2/index-FINISHED.html b/07 - Array Cardio Day 2/index-FINISHED.html new file mode 100644 index 0000000000..36fd28a745 --- /dev/null +++ b/07 - Array Cardio Day 2/index-FINISHED.html @@ -0,0 +1,58 @@ + + + + + Array Cardio 💪💪 + + +

Psst: have a look at the JavaScript Console 💁

+ + + From 8d0c8c89274d37a338734de5816cf078506c2f53 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Tue, 12 Feb 2019 16:52:46 -0500 Subject: [PATCH 10/34] Add solution for Day 08 - Fun with HTML5 Canvas --- .../index-FINISHED.html | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 08 - Fun with HTML5 Canvas/index-FINISHED.html diff --git a/08 - Fun with HTML5 Canvas/index-FINISHED.html b/08 - Fun with HTML5 Canvas/index-FINISHED.html new file mode 100644 index 0000000000..33d5588fd7 --- /dev/null +++ b/08 - Fun with HTML5 Canvas/index-FINISHED.html @@ -0,0 +1,63 @@ + + + + + + HTML5 Canvas + + + + + + + + + + + \ No newline at end of file From 46fbc196241efe19afe43985aa56fa883b3ed71e Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Thu, 14 Feb 2019 16:49:16 -0500 Subject: [PATCH 11/34] Add solution for Day 09 - Dev Tools Domination --- 09 - Dev Tools Domination/index-FINISHED.html | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 09 - Dev Tools Domination/index-FINISHED.html diff --git a/09 - Dev Tools Domination/index-FINISHED.html b/09 - Dev Tools Domination/index-FINISHED.html new file mode 100644 index 0000000000..d8ebc67662 --- /dev/null +++ b/09 - Dev Tools Domination/index-FINISHED.html @@ -0,0 +1,80 @@ + + + + + + Console Tricks! + + + + +

×BREAK×DOWN×

+ + + + + \ No newline at end of file From 1d0b7aeaf3426f376f2a41cb1a818ffda8e17e5a Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Sun, 17 Feb 2019 23:59:19 -0500 Subject: [PATCH 12/34] Add solution for Day 10 --- .../index-FINISHED.html | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 10 - Hold Shift and Check Checkboxes/index-FINISHED.html diff --git a/10 - Hold Shift and Check Checkboxes/index-FINISHED.html b/10 - Hold Shift and Check Checkboxes/index-FINISHED.html new file mode 100644 index 0000000000..382ed8cc02 --- /dev/null +++ b/10 - Hold Shift and Check Checkboxes/index-FINISHED.html @@ -0,0 +1,129 @@ + + + + + Hold Shift to Check Multiple Checkboxes + + + + +
+
+ +

This is an inbox layout.

+
+
+ +

Check one item

+
+
+ +

Hold down your Shift key

+
+
+ +

Check a lower item

+
+
+ +

Everything in between should also be set to checked

+
+
+ +

Try to do it without any libraries

+
+
+ +

Just regular JavaScript

+
+
+ +

Good Luck!

+
+
+ +

Don't forget to tweet your result!

+
+
+ + + + From 2be6e8e633ef8a5e2e04da0ee93cbb835f79d43d Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Mon, 18 Feb 2019 00:21:45 -0500 Subject: [PATCH 13/34] Use Array.prototype.findIndex to find the index of the current checkbox --- .../index-FINISHED.html | 55 ++++++++----------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/10 - Hold Shift and Check Checkboxes/index-FINISHED.html b/10 - Hold Shift and Check Checkboxes/index-FINISHED.html index 382ed8cc02..28ce63f570 100644 --- a/10 - Hold Shift and Check Checkboxes/index-FINISHED.html +++ b/10 - Hold Shift and Check Checkboxes/index-FINISHED.html @@ -1,12 +1,13 @@ + Hold Shift to Check Multiple Checkboxes + - + + + +
+

LOCAL TAPAS

+

+
    +
  • Loading Tapas...
  • +
+
+ + +
+
+ + + + + + + From 4cf46a43aa438136a134e91d7c13e639850adea1 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Tue, 26 Feb 2019 23:59:14 -0500 Subject: [PATCH 21/34] Add solution for Day 21 - Geolocation --- 21 - Geolocation/index-FINISHED.html | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 21 - Geolocation/index-FINISHED.html diff --git a/21 - Geolocation/index-FINISHED.html b/21 - Geolocation/index-FINISHED.html new file mode 100644 index 0000000000..4d4699a3ea --- /dev/null +++ b/21 - Geolocation/index-FINISHED.html @@ -0,0 +1,105 @@ + + + + + Document + + + + + + +

+ 0 + KM/H +

+ +
+ + + + + + + From 17ec749668b7359f9dfffa40f12b3c62ff3ff83f Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Wed, 27 Feb 2019 00:37:48 -0500 Subject: [PATCH 22/34] Update Google Maps code and API key --- 21 - Geolocation/index-FINISHED.html | 36 +++++++++++++++------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/21 - Geolocation/index-FINISHED.html b/21 - Geolocation/index-FINISHED.html index 4d4699a3ea..b83141a63e 100644 --- a/21 - Geolocation/index-FINISHED.html +++ b/21 - Geolocation/index-FINISHED.html @@ -14,7 +14,7 @@

KM/H

-
+
- + From b1344c6dd11e1064cff4b9717af4e0928ffee641 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Thu, 28 Feb 2019 15:54:49 -0500 Subject: [PATCH 23/34] Add solution for Day 16 - Mouse Move Shadow --- 16 - Mouse Move Shadow/index-finished.html | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/16 - Mouse Move Shadow/index-finished.html b/16 - Mouse Move Shadow/index-finished.html index fdf6035afd..f96e75f2b8 100644 --- a/16 - Mouse Move Shadow/index-finished.html +++ b/16 - Mouse Move Shadow/index-finished.html @@ -37,27 +37,26 @@

🔥WOAH!

+ + From 48f1fa7d0a71eff6a26691c50d1712715cfb9514 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Sat, 2 Mar 2019 23:13:56 -0500 Subject: [PATCH 25/34] Add solution for Day 22 - Follow Along Links --- .../index-FINISHED.html | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 22 - Follow Along Link Highlighter/index-FINISHED.html diff --git a/22 - Follow Along Link Highlighter/index-FINISHED.html b/22 - Follow Along Link Highlighter/index-FINISHED.html new file mode 100644 index 0000000000..e7f776d529 --- /dev/null +++ b/22 - Follow Along Link Highlighter/index-FINISHED.html @@ -0,0 +1,52 @@ + + + + + 👀👀👀Follow Along Nav + + + + +
+ +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est explicabo unde natus necessitatibus esse obcaecati distinctio, aut itaque, qui vitae!

+

Aspernatur sapiente quae sint soluta modi, atque praesentium laborum pariatur earum quaerat cupiditate consequuntur facilis ullam dignissimos, aperiam quam veniam.

+

Cum ipsam quod, incidunt sit ex tempore placeat maxime corrupti possimus veritatis ipsum fugit recusandae est doloremque? Hic, quibusdam, nulla.

+

Esse quibusdam, ad, ducimus cupiditate nulla, quae magni odit totam ut consequatur eveniet sunt quam provident sapiente dicta neque quod.

+

Aliquam dicta sequi culpa fugiat consequuntur pariatur optio ad minima, maxime odio, distinctio magni impedit tempore enim repellendus repudiandae quas!

+
+ + + + + From 749cfbe7af04d00f03fe77c63351579be72e69bd Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Mon, 11 Mar 2019 13:57:05 -0400 Subject: [PATCH 26/34] Add solution for Day 19 - Webcam Fun --- 19 - Webcam Fun/index.html | 15 ++++-- 19 - Webcam Fun/scripts.js | 105 +++++++++++++++++++++++++++++++++++++ 19 - Webcam Fun/snap.mp3 | Bin 0 -> 29131 bytes 3 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 19 - Webcam Fun/snap.mp3 diff --git a/19 - Webcam Fun/index.html b/19 - Webcam Fun/index.html index d4ffc4dc2a..3d95bd584a 100755 --- a/19 - Webcam Fun/index.html +++ b/19 - Webcam Fun/index.html @@ -10,7 +10,16 @@
- +
@@ -37,7 +46,7 @@
- + diff --git a/19 - Webcam Fun/scripts.js b/19 - Webcam Fun/scripts.js index 00355f5a9c..adca806902 100644 --- a/19 - Webcam Fun/scripts.js +++ b/19 - Webcam Fun/scripts.js @@ -3,3 +3,108 @@ const canvas = document.querySelector('.photo'); const ctx = canvas.getContext('2d'); const strip = document.querySelector('.strip'); const snap = document.querySelector('.snap'); +const videoFilter = document.querySelector('.videoFilter'); +const greenScreenFilter = videoFilter.querySelector('#greenScreen'); +const rgbButtons = document.querySelector('.rgb'); + +function getVideo() { + navigator.mediaDevices.getUserMedia({ video: true, audio: false}) + .then(localMediaStream => { + video.srcObject = localMediaStream; + video.play(); + paintToCanvas(); + }) + .catch(err => { + console.error('OH NO!!!', err); + }); +} + +function paintToCanvas() { + const [width, height] = [video.videoWidth, video.videoHeight]; + [canvas.width, canvas.height] = [width, height]; + + setInterval(() => { + if (!width || !height) return; + + const filter = videoFilter.querySelector('input[name="filter"]:checked'); + if (!filter) return; + const filterFunction = window[filter.value]; + if (!typeof filterFunction === 'function') return; + + ctx.drawImage(video, 0, 0, width, height); + let pixels = ctx.getImageData(0, 0, width, height); + pixels = filterFunction(pixels); + ctx.putImageData(pixels, 0, 0); + }, 16); +} + +function takePhoto() { + // play the sound + snap.currentTime = 0; + snap.play(); + + // take the data out of the canvas + const data = canvas.toDataURL('image/jpeg'); + const link = document.createElement('a'); + link.href = data; + link.setAttribute('download', 'handsome'); + link.innerHTML = `Handsome Man`; + strip.insertBefore(link, strip.firstChild); +} + +function redEffect(pixels) { + for (let i = 0; i < pixels.data.length; i+=4) { + pixels.data[i + 0] = pixels.data[i + 0] + 100; // RED + pixels.data[i + 1] = pixels.data[i + 1] - 50; // GREEN + pixels.data[i + 2] = pixels.data[i + 2] * 0.5; // BLUE + } + return pixels; +} + +function rgbSplit(pixels) { + for (let i = 0; i < pixels.data.length; i+=4) { + pixels.data[i - 150] = pixels.data[i + 0]; // RED + pixels.data[i + 500] = pixels.data[i + 1]; // GREEN + pixels.data[i - 550] = pixels.data[i + 2]; // BLUE + } + return pixels; +} + +function greenScreen(pixels) { + const levels = {}; + + rgbButtons.querySelectorAll('input').forEach((input) => { + levels[input.name] = input.value; + }); + + for (let i = 0; i < pixels.data.length; i+=4) { + const red = pixels.data[i + 0]; + const green = pixels.data[i + 1]; + const blue = pixels.data[i + 2]; + + if (red >= levels.rmin + && green >= levels.gmin + && blue >= levels.bmin + && red <= levels.rmax + && green <= levels.gmax + && blue <= levels.bmax) { + // take out the alpha property (i.e. hide the pixel) + pixels.data[i + 3] = 0; + } + } + return pixels; +} + +function toggleRgbButtons(e) { + if (this === greenScreenFilter) { + rgbButtons.style.display = 'block'; + } else { + rgbButtons.style.display = 'none'; + } +} + +getVideo(); + +video.addEventListener('canplay', paintToCanvas); + +videoFilter.querySelectorAll('input[name="filter"]').forEach(cb => cb.addEventListener('change', toggleRgbButtons)); diff --git a/19 - Webcam Fun/snap.mp3 b/19 - Webcam Fun/snap.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..16a288858adceddb511b5cb886346fbd460f00c8 GIT binary patch literal 29131 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 Date: Tue, 12 Mar 2019 23:58:52 -0400 Subject: [PATCH 27/34] Add solution for Day 20 - Speech Recognition --- 20 - Speech Detection/index-FINISHED.html | 85 +++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 20 - Speech Detection/index-FINISHED.html diff --git a/20 - Speech Detection/index-FINISHED.html b/20 - Speech Detection/index-FINISHED.html new file mode 100644 index 0000000000..29b6939d56 --- /dev/null +++ b/20 - Speech Detection/index-FINISHED.html @@ -0,0 +1,85 @@ + + + + + Speech Detection + + + +
+
+ + + + + + + + From b602763b09832b091aa5a8074a621f144704a2d6 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Wed, 13 Mar 2019 23:50:51 -0400 Subject: [PATCH 28/34] Add solution for Day 23 - Speech Synthesis --- 23 - Speech Synthesis/index-FINISHED.html | 73 +++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 23 - Speech Synthesis/index-FINISHED.html diff --git a/23 - Speech Synthesis/index-FINISHED.html b/23 - Speech Synthesis/index-FINISHED.html new file mode 100644 index 0000000000..5a790c3f17 --- /dev/null +++ b/23 - Speech Synthesis/index-FINISHED.html @@ -0,0 +1,73 @@ + + + + + Speech Synthesis + + + + + +
+ +

The Voiceinator 5000

+ + + + + + + + + + + + + +
+ + + + + From cde9105a1ccafe373d383aea00b2eab34b82c261 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Thu, 14 Mar 2019 23:49:15 -0400 Subject: [PATCH 29/34] Add solution for Day 24 - Sticky Nav --- 24 - Sticky Nav/index-FINISHED.html | 75 +++++++++++++++++++++ 24 - Sticky Nav/style-FINISHED.css | 101 ++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 24 - Sticky Nav/index-FINISHED.html create mode 100644 24 - Sticky Nav/style-FINISHED.css diff --git a/24 - Sticky Nav/index-FINISHED.html b/24 - Sticky Nav/index-FINISHED.html new file mode 100644 index 0000000000..e4fb7a0254 --- /dev/null +++ b/24 - Sticky Nav/index-FINISHED.html @@ -0,0 +1,75 @@ + + + + + Sticky Nav + + + + +
+

A story about getting lost.

+
+ + + +
+ +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore tempora rerum, est autem cupiditate, corporis a qui libero ipsum delectus quidem dolor at nulla, adipisci veniam in reiciendis aut asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut, dignissimos.

+ + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates, deserunt facilis et iste corrupti omnis tenetur est. Iste ut est dicta dolor itaque adipisci, dolorum minima, veritatis earum provident error molestias. Ratione magni illo sint vel velit ut excepturi consectetur suscipit, earum modi accusamus voluptatem nostrum, praesentium numquam, reiciendis voluptas sit id quisquam. Consequatur in quis reprehenderit modi perspiciatis necessitatibus saepe, quidem, suscipit iure natus dignissimos ipsam, eligendi deleniti accusantium, rerum quibusdam fugit perferendis et optio recusandae sed ratione. Culpa, dolorum reprehenderit harum ab voluptas fuga, nisi eligendi natus maiores illum quas quos et aperiam aut doloremque optio maxime fugiat doloribus. Eum dolorum expedita quam, nesciunt

+ + + +

at provident praesentium atque quas rerum optio dignissimos repudiandae ullam illum quibusdam. Vel ad error quibusdam, illo ex totam placeat. Quos excepturi fuga, molestiae ea quisquam minus, ratione dicta consectetur officia omnis, doloribus voluptatibus? Veniam ipsum veritatis architecto, provident quas consequatur doloremque quam quidem earum expedita, ad delectus voluptatum, omnis praesentium nostrum qui aspernatur ea eaque adipisci et cumque ab? Ea voluptatum dolore itaque odio. Eius minima distinctio harum, officia ab nihil exercitationem. Tempora rem nemo nam temporibus molestias facilis minus ipsam quam doloribus consequatur debitis nesciunt tempore officiis aperiam quisquam, molestiae voluptates cum, fuga culpa. Distinctio accusamus quibusdam, tempore perspiciatis dolorum optio facere consequatur quidem ullam beatae architecto, ipsam sequi officiis dignissimos amet impedit natus necessitatibus tenetur repellendus dolor rem! Dicta dolorem, iure, facilis illo ex nihil ipsa amet officia, optio temporibus eum autem odit repellendus nisi. Possimus modi, corrupti error debitis doloribus dicta libero earum, sequi porro ut excepturi nostrum ea voluptatem nihil culpa? Ullam expedita eligendi obcaecati reiciendis velit provident omnis quas qui in corrupti est dolore facere ad hic, animi soluta assumenda consequuntur reprehenderit! Voluptate dolor nihil veniam laborum voluptas nisi pariatur sed optio accusantium quam consectetur, corrupti, sequi et consequuntur, excepturi doloremque. Tempore quis velit corporis neque fugit non sequi eaque rem hic. Facere, inventore, aspernatur. Accusantium modi atque, asperiores qui nobis soluta cumque suscipit excepturi possimus doloremque odit saepe perferendis temporibus molestiae nostrum voluptatum quis id sint quidem nesciunt culpa. Rerum labore dolor beatae blanditiis praesentium explicabo velit optio esse aperiam similique, voluptatem cum, maiores ipsa tempore. Reiciendis sed culpa atque inventore, nam ullam enim expedita consectetur id velit iusto alias vitae explicabo nemo neque odio reprehenderit soluta sint eaque. Aperiam, qui ut tenetur, voluptate doloremque officiis dicta quaerat voluptatem rerum natus magni. Eum amet autem dolor ullam.

+ + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

+ + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores adipisci quibusdam repudiandae dolor vero placeat esse sit! Quibusdam saepe aperiam explicabo placeat optio, consequuntur nihil voluptatibus expedita quia vero perferendis, deserunt et incidunt eveniet temporibus doloremque possimus facilis. Possimus labore, officia dolore! Eaque ratione saepe, alias harum laboriosam deserunt laudantium blanditiis eum explicabo placeat reiciendis labore iste sint. Consectetur expedita dignissimos, non quos distinctio, eos rerum facilis eligendi. Asperiores laudantium, rerum ratione consequatur, culpa consectetur possimus atque ab tempore illum non dolor nesciunt. Neque, rerum. A vel non incidunt, quod doloremque dignissimos necessitatibus aliquid laboriosam architecto at cupiditate commodi expedita in, quae blanditiis. Deserunt labore sequi, repellat laboriosam est, doloremque culpa reiciendis tempore excepturi. Enim nostrum fugit itaque vel corporis ullam sed tenetur ipsa qui rem quam error sint, libero. Laboriosam rem, ratione. Autem blanditiis laborum neque repudiandae quam, cumque, voluptate veritatis itaque, placeat veniam ad nisi. Expedita, laborum reprehenderit ratione soluta velit natus, odit mollitia. Corporis rerum minima fugiat in nostrum. Assumenda natus cupiditate hic quidem ex, quas, amet ipsum esse dolore facilis beatae maxime qui inventore, iste? Maiores dignissimos dolore culpa debitis voluptatem harum, excepturi enim reiciendis, tempora ab ipsam illum aspernatur quasi qui porro saepe iure sunt eligendi tenetur quaerat ducimus quas sequi omnis aperiam suscipit! Molestiae obcaecati officiis quo, ratione eveniet, provident pariatur. Veniam quasi expedita distinctio, itaque molestiae sequi, dolorum nisi repellendus quia facilis iusto dignissimos nam? Tenetur fugit quos autem nihil, perspiciatis expedita enim tempore, alias ab maiores quis necessitatibus distinctio molestias eum, quidem. Delectus impedit quidem laborum, fugit vel neque quo, ipsam, quasi aspernatur quas odio nihil? Veniam amet reiciendis blanditiis quis reprehenderit repudiandae neque, ab ducimus, odit excepturi voluptate saepe ipsam. Voluptatem eum error voluptas porro officiis, amet! Molestias, fugit, ut! Tempore non magnam, amet, facere ducimus accusantium eos veritatis neque.

+
+ + + + + diff --git a/24 - Sticky Nav/style-FINISHED.css b/24 - Sticky Nav/style-FINISHED.css new file mode 100644 index 0000000000..10cc50a6e0 --- /dev/null +++ b/24 - Sticky Nav/style-FINISHED.css @@ -0,0 +1,101 @@ +html { + box-sizing: border-box; + background: #eeeeee; + font-family: 'helvetica neue'; + font-size: 20px; + font-weight: 200; +} + +body { + margin: 0; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +.site-wrap { + max-width: 700px; + margin: 70px auto; + background: white; + padding: 40px; + text-align: justify; + box-shadow: 0 0 10px 5px rgba(0, 0, 0, 0.05); + transform: scale(0.98); + transition: transform 0.5s; +} + +header { + text-align: center; + height: 50vh; + background: url(http://wes.io/iEgP/wow-so-deep.jpg) bottom center no-repeat; + background-size: cover; + display: flex; + align-items: center; + justify-content: center; +} + +h1 { + color: white; + font-size: 7vw; + text-shadow: 3px 4px 0 rgba(0,0,0,0.2); +} + +nav { + background: black; + top: 0; + width: 100%; + transition: all 0.5s; + position: relative; + z-index: 1; +} + +.fixed-nav nav { + position: fixed; + box-shadow: 0 5px rgba(0,0,0,0.1); +} + +.fixed-nav li.logo { + max-width: 500px; +} + +.fixed-nav .site-wrap { + transform: scale(1); +} + +nav ul { + margin: 0; + padding:0; + list-style: none; + display: flex; +} + +nav li { + flex: 1; + text-align: center; + display: flex; + justify-content: center; + align-items: center; +} + +li.logo { + max-width: 0; + overflow: hidden; + background: white; + transition: all .5s; + font-weight: 600; + font-size: 30px; +} + +li.logo a { + color: black; +} + +nav a { + text-decoration: none; + padding: 20px; + display: inline-block; + color: white; + transition: all 0.2s; + text-transform: uppercase; +} From a1041f7c5756df13639e879aa7d8cb453e445063 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Fri, 15 Mar 2019 23:40:50 -0400 Subject: [PATCH 30/34] Add solution for Day 25 - Event Capture, Propagation, Bubbling and Once --- .../index-FINISHED.html | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html diff --git a/25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html b/25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html new file mode 100644 index 0000000000..826433de8c --- /dev/null +++ b/25 - Event Capture, Propagation, Bubbling and Once/index-FINISHED.html @@ -0,0 +1,65 @@ + + + + + Understanding JavaScript's Capture + + + +
+
+
+
+
+
+ + + + + + + From 9f8d7bcd983875d54865732db3d776256687ed7e Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Sat, 16 Mar 2019 23:56:23 -0400 Subject: [PATCH 31/34] Add solution for Day 26 - Stripe Follow Along Nav --- .../index-FINISHED.html | 261 ++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 26 - Stripe Follow Along Nav/index-FINISHED.html diff --git a/26 - Stripe Follow Along Nav/index-FINISHED.html b/26 - Stripe Follow Along Nav/index-FINISHED.html new file mode 100644 index 0000000000..e43c0598d8 --- /dev/null +++ b/26 - Stripe Follow Along Nav/index-FINISHED.html @@ -0,0 +1,261 @@ + + + + + Follow Along Nav + + +

Cool

+ + + + + + + + From f65798e65983a0f559bbaf5bb5006a48ad9b1689 Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Mon, 18 Mar 2019 23:57:54 -0400 Subject: [PATCH 32/34] Add solution for Day 27 - Click and Drag to Scroll --- 27 - Click and Drag/index-FINISHED.html | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 27 - Click and Drag/index-FINISHED.html diff --git a/27 - Click and Drag/index-FINISHED.html b/27 - Click and Drag/index-FINISHED.html new file mode 100644 index 0000000000..d5307daeb1 --- /dev/null +++ b/27 - Click and Drag/index-FINISHED.html @@ -0,0 +1,71 @@ + + + + + Click and Drag + + + +
+
01
+
02
+
03
+
04
+
05
+
06
+
07
+
08
+
09
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
+ + + + + From 49e4b8c1091305652e7df7b44e04d37062c78bbe Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Thu, 21 Mar 2019 21:29:14 -0400 Subject: [PATCH 33/34] Add solution for Day 28 - Video Speed Controller --- .../index-FINISHED.html | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 28 - Video Speed Controller/index-FINISHED.html diff --git a/28 - Video Speed Controller/index-FINISHED.html b/28 - Video Speed Controller/index-FINISHED.html new file mode 100644 index 0000000000..993588720e --- /dev/null +++ b/28 - Video Speed Controller/index-FINISHED.html @@ -0,0 +1,37 @@ + + + + + Video Speed Scrubber + + + + +
+ +
+
+
+
+ + + + From 2505d970fd35fb9b340b418224a8bd6f1be13c4c Mon Sep 17 00:00:00 2001 From: iaroslavn Date: Tue, 26 Mar 2019 23:55:38 -0400 Subject: [PATCH 34/34] Add solution for Day 29 - Countdown Clock --- 29 - Countdown Timer/index.html | 2 +- 29 - Countdown Timer/scripts-FINISHED.js | 53 ++++++++++++++++++++++++ 29 - Countdown Timer/scripts-START.js | 0 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 29 - Countdown Timer/scripts-FINISHED.js delete mode 100644 29 - Countdown Timer/scripts-START.js diff --git a/29 - Countdown Timer/index.html b/29 - Countdown Timer/index.html index d54f447dd9..a89bff0faa 100644 --- a/29 - Countdown Timer/index.html +++ b/29 - Countdown Timer/index.html @@ -24,6 +24,6 @@

- + diff --git a/29 - Countdown Timer/scripts-FINISHED.js b/29 - Countdown Timer/scripts-FINISHED.js new file mode 100644 index 0000000000..070775bc1e --- /dev/null +++ b/29 - Countdown Timer/scripts-FINISHED.js @@ -0,0 +1,53 @@ +let countdown; +const timerDisplay = document.querySelector('.display__time-left'); +const endTime = document.querySelector('.display__end-time'); +const buttons = document.querySelectorAll('button[data-time]'); + +function timer(seconds) { + // clear any existing timers + clearInterval(countdown); + + const now = Date.now(); + const then = now + seconds * 1000; + displayTimeLeft(seconds); + displayEndTime(then); + + countdown = setInterval(() => { + const secondsLeft = Math.round((then - Date.now()) / 1000); + if (secondsLeft < 0) { + clearInterval(countdown); + endTime.textContent = ''; + alert('Time is up!'); + return; + } + displayTimeLeft(secondsLeft); + }, 1000); +} + +function displayTimeLeft(seconds) { + const minutes = Math.floor(seconds / 60); + const remainderSeconds = seconds % 60; + const display = `${minutes}:${remainderSeconds < 10 ? '0' : ''}${remainderSeconds}`; + timerDisplay.textContent = display; + document.title = display; +} + +function displayEndTime(timestamp) { + const end = new Date(timestamp); + const hour = end.getHours(); + const minutes = end.getMinutes(); + endTime.textContent = `Be Back At ${hour > 12 ? hour - 12: hour}:${minutes < 10 ? '0' : ''}${minutes}`; +} + +function startTimer() { + const seconds = parseInt(this.dataset.time); + timer(seconds); +} + +buttons.forEach(button => button.addEventListener('click', startTimer)); +document.customForm.addEventListener('submit', function(e) { + e.preventDefault(); + const mins = this.minutes.value; + timer(mins * 60); + this.reset(); +}); \ No newline at end of file diff --git a/29 - Countdown Timer/scripts-START.js b/29 - Countdown Timer/scripts-START.js deleted file mode 100644 index e69de29bb2..0000000000