From c95f30017d04650cb6811401419f6f217743570a Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Wed, 17 Jul 2019 13:31:18 +0200 Subject: [PATCH 01/75] deciding on topics --- README.md | 60 +++++++++++++++----- Week1/LESSONPLAN.md | 0 Week1/README.md | 121 ++++++++++------------------------------- Week2/LESSONPLAN.md | 0 Week2/README.md | 37 ++++++++----- Week3/LESSONPLAN.md | 0 Week3/README.md | 28 +++++----- assets/javascript2.png | Bin 0 -> 85323 bytes 8 files changed, 111 insertions(+), 135 deletions(-) create mode 100644 Week1/LESSONPLAN.md create mode 100644 Week2/LESSONPLAN.md create mode 100644 Week3/LESSONPLAN.md create mode 100644 assets/javascript2.png diff --git a/README.md b/README.md index 018e220bb..2eff3cdcc 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,61 @@ -> Please help us improve and share your feedback! If you find better tutorials -or links, please share them by [opening a pull request](https://github.com/HackYourFuture/JavaScript2/pulls). +> If you are following the HackYourFuture curriculum we recommend you to start with module 1: [HTML/CSS/GIT](https://github.com/HackYourFuture/HTML-CSS). To get a complete overview of the HackYourFuture curriculum first, click [here](https://github.com/HackYourFuture/curriculum). -# HackYourFuture - JavaScript 2 +> Please help us improve and share your feedback! If you find better tutorials or links, please share them by [opening a pull request](https://github.com/HackYourFuture/JavaScript1/pulls). -Here you can find course content and homework for the JavaScript2 module +# Module #3 - JavaScript 2: DOM Manipulation (Frontend) -|Week|Topic|Read|Homework| -|----|-----|----|--------| -|1.|• Capturing user input through forms
• [Events](http://javascript.info/introduction-browser-events)
• [Basic DOM manipulations](../../../fundamentals/blob/master/fundamentals/DOM_manipulation.md)
• [Code debugging using the browser](http://javascript.info/debugging-chrome)
• [Code commenting](../../../fundamentals/blob/master/fundamentals/code_commenting.md)
• Structuring code files
• [Code formatting](../../../fundamentals/blob/master/fundamentals/code_formatting.md)
• [Handing in homework via PR](../../..//fundamentals/blob/master/fundamentals/homework_pr.md) |[Reading Week 1](/Week1/README.md)|[Homework Week 1](/Week1/MAKEME.md)| -|2.|• Functions + JSON/Arrays
• [Array Manipulations](../../../fundamentals/blob/master/fundamentals/array_manipulation.md)
• JSON
• [Map and filter](../../../fundamentals/blob/master/fundamentals/map_filter.md)
• Arrow functions |[Reading Week 2](/Week2/README.md)|[Homework Week 2](/Week2/MAKEME.md)| -|3.|• [Closures](../../../fundamentals/blob/master/fundamentals/scope_closures_this.md)
• Callbacks|[Reading Week 3](/Week3/README.md)|[Homework Week 3](/Week3/MAKEME.md)| +![JavaScript2](./assets/javascript2.png) + +If you were to ask a random person on the street the question "What is a browser?", you'll most likely get a variety of (incorrect) answers. For proof, check [this](https://www.youtube.com/watch?v=o4MwTvtyrUQ) out. + +You might be one of those people right now, but after this module no more. + +## Learning goals + +In order to successfully complete this module you will need to master the following: + +- + +- Learn how to think like a programmer + +## How to use this repository + +This repository consists of 3 essential parts: + +1. `Reading materials`: this document contains all the required theory you need to know _**while**_ you're coding. It's meant as both study material and as a reference to understand what you're doing. +2. `Homework`: this document contains the instructions for each week's homework. +3. `Lesson Plans`: this part is meant for teachers as a reference. However, as a student don't be shy to take a look at it as well! + +After your first class you should start off with checking the `reading materials` for that week. At the beginning that would be the [Week 1 Reading](/Week1/README.md). Study all the concepts and try to get the gist of everything. After, you can get started with the `homework` for that week. + +If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯, please ask/comment on Slack! + +## Planning + +| Week | Topic | Reading Materials | Homework | Lesson Plan | +| ---- | --------------------------------------------- | ------------------------------ | ------------------------------- | ---------------------------------- | +| 1. | Document-Object Model (DOM), DOM manipulation | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/MAKEME.md) | +| 2. | , Cookies & Sessions | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/MAKEME.md) | +| 3. | Callbacks, Closures & Scope | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/MAKEME.md) | ## Test -At the end of this module you'll be doing a formative test. It will be done on **paper** and will consist of **4 exercises** that will test your JavaScript1 and JavaScript2 knowledge. -Why on paper, you might ask? Fundamental understanding should become intuitive. Only after having learned and mastered a concept deeply will you be able to use it creatively. If you rely too much on others, or Google, you'll make it very hard to cultivate the habit to think for yourself. +At the end of this module you'll be doing a formative test. It will be done on **paper** and will consist of **4 exercises** that will test your JavaScript1 and JavaScript2 knowledge. + +Why on paper, you might ask? Fundamental understanding should become intuitive. Only after having learned and mastered a concept deeply will you be able to use it creatively. If you rely too much on others, on Google or your code editor to do your thinking you'll make it very hard to cultivate the habit to think for yourself. Also important to note: this test is done for 2 reasons only. -(1) **HackYourFuture wants to know** what skill level you are at. +(1) **HackYourFuture wants to know** what skill level you are at. (2) The test will **give you an indication** of what skill level you are at. +## Finished? + +Did you finish the module? Good job! You're doing great! -### Overall -A good understanding of all the above mentioned topics. Want to check your Knowledge? Go through the [JavaScript Fundamentals README](../../../fundamentals/blob/master/fundamentals/README.md) and research/ ask for help (Slack!) with the concepts that are not entirely clear. +If you feel ready for the next challenge, click [here](https://www.github.com/HackYourFuture/JavaScript3) to go to JavaScript3! -*The HackYourFuture curriculum is subject to CC BY copyright. This means you can freely use our materials, but just make sure to give us credit for it :)* +_The HackYourFuture curriculum is subject to CC BY copyright. This means you can freely use our materials, but just make sure to give us credit for it :)_ Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/Week1/LESSONPLAN.md b/Week1/LESSONPLAN.md new file mode 100644 index 000000000..e69de29bb diff --git a/Week1/README.md b/Week1/README.md index c509afe0a..965aa92c3 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -1,94 +1,39 @@ -# Reading material for the first lecture: +# Reading Material JavaScript2 Week 1 -``` -In week one we will discuss the following topics: -• Capturing user input -• Basic DOM manipulations[img src, innerHTML] -• Code debugging using the browser -• Events -• Code commenting -• Structuring code files -• Code formatting -• Handing in homework via PR -``` +## Agenda -## Software installation for the JavaScript 2 Module +These are the topics for week 1: -**_To save time, please do these preparations at home before coming to the first lecture._** +1. What is a browser? + - How a browser works + - Different browsers +2. What is the Document-Object Model (DOM)? + - The DOM tree + - JavaScript and the browser + - Traversing the DOM +3. What is DOM Manipulation? + - Browser events + - Event handlers -1. Install the following extensions in VSCode (you may have installed some of them already): +[DOM Crash Course](https://www.youtube.com/playlist?list=PLillGF-RfqbYE6Ik_EuXA2iZFcE082B3s) - - Code Spell Checker - - ESLint - - Prettier - Code formatter - - open in browser - - Live Server - - Bracket Pair Colorizer +## 1. What is a browser? -2. Modify the VSCode User Settings to include the settings listed below. If a particular setting is already present in your User Settings, make sure that the setting value listed below is used and change it if necessary. +A browser is software that allows you to access websites. - To open your user and workspace settings, use the following VS Code menu command: +### How a browser works - - On Windows/Linux - **File** > **Preferences** > **Settings** - - On macOS - **Code** > **Preferences** > **Settings** +[How a web browser functions](https://www.youtube.com/watch?v=z0HN-fG6oT4) - Then, click on the `{ }` button in the top-right corner of the settings screen to access the settings in JSON format. +## 2. What is the Document-Object Model (DOM)? - - ```json - /// Place your settings in this file to overwrite the default settings - { - "editor.detectIndentation": false, - "editor.formatOnSave": true, - "editor.minimap.enabled": false, - "editor.renderIndentGuides": true, - "editor.tabSize": 2, - "editor.codeActionsOnSave": { - "source.fixAll": true - }, - "eslint.autoFixOnSave": true, - "files.autoSave": "onFocusChange", - "prettier.printWidth": 100, - "prettier.singleQuote": true, - "prettier.trailingComma": "all" - } - ``` +### JavaScript and the browser -3. Install the ESLint CLI tool globally by issuing the following command from the command line: +### Traversing the DOM - ``` - npm install -g eslint-cli - ``` +- [Traversing the DOM with JavaScript](https://zellwk.com/blog/dom-traversals/) -4. Fork this repository (i.e., **JavaScript2**) and clone your fork to your laptop. - -5. Open the `JavaScript2` folder from the cloned repository in VSCode. - -6. Open a terminal window in VSCode and type the following command: - - ``` - npm install - ``` - -## Review of JavaScript1 - -As a refresher, go through the topics of JavaScript1: - -### Week 2 - -- [Variables (var, let, const)](./../../../../fundamentals/blob/master/fundamentals/variables.md) -- [Basic Data types (Strings, Numbers, Arrays, Booleans)](./../../../../fundamentals/blob/master/fundamentals/values.md) -- [Operators](./../../../../fundamentals/blob/master/fundamentals/operators.md) -- [Naming conventions](./../../../../fundamentals/blob/master/fundamentals/naming_conventions.md) - -### Week 3 - -- [Advanced data types (objects)](./../../../../fundamentals/blob/master/fundamentals/objects.md) -- [Conditional execution](./../../../../fundamentals/blob/master/fundamentals/conditional_execution.md)
-- [Statements vs Expressions](./../../../../fundamentals/blob/master/fundamentals/statements_expressions.md)
-- [Loops (for/while)](./../../../../fundamentals/blob/master/fundamentals/loops.md) -- [Functions](./../../../../fundamentals/blob/master/fundamentals/functions.md) -- [Scope](./../../../../fundamentals/blob/master/fundamentals/scope.md) +## 3. What is DOM Manipulation? ## Required readings for the first lecture @@ -108,28 +53,18 @@ Extras: - [Strict mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode) - [Chrome DevTools Debugging](https://developers.google.com/web/tools/chrome-devtools/) -### Recommended readings +* Chapter 13: [JavaScript and the Browser](http://eloquentjavascript.net/13_browser.html) -These chapters from _Eloquent JavaScript_ give in-depth explanations of the topics that will be discussed during the lecture. Highly recommended (if time permits). - -- Chapter 13: [JavaScript and the Browser](http://eloquentjavascript.net/13_browser.html) - -- Chapter 14: [The Document Object Model](http://eloquentjavascript.net/14_dom.html) +* Chapter 14: [The Document Object Model](http://eloquentjavascript.net/14_dom.html) _You can skip the following sections:_ - Moving through the tree -- Chapter 15: [Handling Events](http://eloquentjavascript.net/15_event.html) +* Chapter 15: [Handling Events](http://eloquentjavascript.net/15_event.html) Notes: for the lectures and homework you only need to know about these events: `click`, `change`, `keyup` and `load`. - _You can skip the following sections (but come to these sections when doing the React module):_ - - - Touch events - - Scroll events - - Focus events - - Events and the Event Loop - - Debouncing +## Finished? -_Please go through the material and come to class prepared!_ +Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md new file mode 100644 index 000000000..e69de29bb diff --git a/Week2/README.md b/Week2/README.md index c58b21eb5..623c74956 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -1,35 +1,46 @@ -### Reading Week 2 +# Reading Material JavaScript2 Week 3 -# Reading material for the second lecture: +## Agenda -``` -In week two we will discuss the following topics: -• Functions + JSON/Arrays -• Array Manipulations -• JSON -• Map and filter -• Arrow functions -``` +These are the topics for week 3: -## Here are resources that we like you to read as a preparation for the coming lecture. +1. What is a library? + - Popular libraries + - Library versus framework +2. What is jQuery? + - Difference between 'vanilla' JavaScript and jQuery + - How jQuery works + +## 1. What is a library? + +## 2. What is jQuery? + +## Finished? + +Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). + +## Here are resources that we like you to read as a preparation for the coming lecture. ### JSON + - [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) (MDN) ### Map and Filter + - :dizzy: [Fun fun functional](https://www.youtube.com/playlist?list=PL0zVEGEvSaeEd9hlmCXrk5yUyqUag-n84) :dizzy: Check the first 3-4 videos. ### Code conventions + - Code conventions: http://crockford.com/javascript/code.html ### Array cardio + - Wes Bos' awesome free tutorials. Just make a free account and do Array Cardio #1 [here](https://javascript30.com/) ### From _Eloquent JavaScript_ - Objects continued: http://eloquentjavascript.net/06_object.html - ## Recommended readings This chapter from _Eloquent JavaScript_ gives in-depth explanations of the topics that will be discussed during the lecture. Highly recommended (if time permits). @@ -37,4 +48,4 @@ This chapter from _Eloquent JavaScript_ gives in-depth explanations of the topic - Chapter 3 - [Functions](http://eloquentjavascript.net/03_functions.html) - Chapter 5 - [Higher-Order Functions](http://eloquentjavascript.net/05_higher_order.html) -_Please go through the material and come to class prepared!_ \ No newline at end of file +_Please go through the material and come to class prepared!_ diff --git a/Week3/LESSONPLAN.md b/Week3/LESSONPLAN.md new file mode 100644 index 000000000..e69de29bb diff --git a/Week3/README.md b/Week3/README.md index 8904cbcc1..92a137fd4 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -1,21 +1,21 @@ -# Reading material for the third lecture: +# Reading Material JavaScript2 Week 2 -``` -In week three we will discuss the following topics: -• Closures -• Scope -• Callbacks -``` +## Agenda -## Here are resources that we like you to read as a preparation for the coming lecture: +These are the topics for week 2: -### Closures +1. Callbacks + - sfsdf + - sdf +2. Scope + - sdfsd + - asdas +3. Closures -- [Closures](http://javascriptissexy.com/understand-javascript-closures-with-ease/) -- [MDN Closures](https://developer.mozilla.org/en/docs/Web/JavaScript/Closures) +## 1. What is a library? -### Design patterns +## 2. What is jQuery? -- [Learning JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailnamespacing) up to and including chapter 3 +## Finished? -_Please go through the material and come to class prepared!_ +Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). diff --git a/assets/javascript2.png b/assets/javascript2.png new file mode 100644 index 0000000000000000000000000000000000000000..c55feb5c5ffa7a8b4a3ca39e3e3904ab0c0ffeb4 GIT binary patch literal 85323 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 Date: Tue, 30 Jul 2019 17:47:13 +0200 Subject: [PATCH 02/75] finished readings week 1 --- README.md | 10 ++-- Week1/README.md | 116 +++++++++++++++++++++++++++++++++++------- Week2/MAKEME.md | 27 ++++------ Week2/README.md | 20 ++++++-- assets/simple-dom.png | Bin 0 -> 13743 bytes 5 files changed, 127 insertions(+), 46 deletions(-) create mode 100644 assets/simple-dom.png diff --git a/README.md b/README.md index 9ff5c0c6c..50237b668 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,11 @@ If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯ ## Planning -| Week | Topic | Reading Materials | Homework | Lesson Plan | -| ---- | --------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | -| 1. | Document-Object Model (DOM), DOM manipulation | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | -| 2. | Developer tools, Event Loop, Callbacks | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | -| 3. | SPA vs. MPA, Scope, Closures | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | +| Week | Topic | Reading Materials | Homework | Lesson Plan | +| ---- | --------------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | +| 1. | Document-Object Model (DOM), DOM manipulation | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | +| 2. | Developer tools, Web Storage, Event Loop, Callbacks | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | +| 3. | SPA vs. MPA, Scope, Closures | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | ## Test diff --git a/Week1/README.md b/Week1/README.md index a15a2afcd..212705421 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -4,27 +4,59 @@ These are the topics for week 1: -1. What is a browser? +1. What is a web browser? - How a browser works - - Different browsers + - Different browsers work differently 2. What is the Document-Object Model (DOM)? - JavaScript and the browser - The DOM - The Critical Rendering Path - Traversing the DOM 3. What is DOM Manipulation? + - Manipulating elements - Browser events - Event listeners and handlers [DOM Crash Course](https://www.youtube.com/playlist?list=PLillGF-RfqbYE6Ik_EuXA2iZFcE082B3s) -## 1. What is a browser? +## 1. What is a web browser? -A browser is software that allows you to access websites. +A web browser is software that allows you to access websites. ### How a browser works -[How a web browser functions](https://www.youtube.com/watch?v=z0HN-fG6oT4) +In your journey into becomeing a web developer it's important to know the tools you'll be using intimately. One such is the browser, which will be used to display your websites. In the following resources you'll learn about the many parts any web browser consists of and what their use is: + +- [How a web browser functions](https://www.youtube.com/watch?v=z0HN-fG6oT4) +- [How do web browsers work?](https://medium.com/@monica1109/how-does-web-browsers-work-c95ad628a509) + +### Different browsers work differently + +A website, ultimately is a set of instructions describing how a series of webpages should look. It's up to the browser to render it by reading the code from your HTML/CSS and JavaScript files. There are, however, differences in the code interpretation of the different browsers, thus making the output look differently. + +That's why you should check the way your website looks on different browsers during the development of your website. This is called making it **cross browser compatible**> + +You can use the following online tool in order see how your pages look on multiple browsers: + +- [Browsershots](http://browsershots.org) + +A good website should look and function the same in any browser. + +Unfortunately, there is no easy solution for that. You should check the specificities of each browser that fails to display your website correctly and make the necessary adjustments to your code. Such compatibility issues may occur not only in different browsers but because of an old browser version which does not support completely the latest standards. + +This is because browser development doesn't go at the same speed as programming language development. More often than not, the web technologies you're using will have more features you as a developer can make use of than the browser can currently handle. This is important to keep in mind. + +When you do your styling, especially, it's important to know if a certain browser (and browser version) is even able to understand it. A helpful tool in identifying this is a website called **caniuse.com**: + +- [caniuse](https://caniuse.com/) +- [Check HTML5/CSS3 Support with CANIUSE.COM](https://www.youtube.com/watch?v=el7McMP8CB8) + +Generally speaking, you want to support as many browsers (and browser versions) with your code as possible. + +For more research, check out the following resources: + +- [Dealing with Cross Browser Compatibility](https://www.youtube.com/watch?v=9tEixRJ3GeI) +- [Understanding The Stacking Context for Cross Browser Compatibility](https://medium.com/@mattcroak718/understanding-the-stacking-context-for-cross-browser-compatibility-2b21db1cf621) ## 2. What is the Document-Object Model (DOM)? @@ -42,51 +74,97 @@ For our purposes, it's only important to understand that the browser looks at Ja - [JavaScript, the Browser, and the DOM](https://www.youtube.com/watch?v=31ViueuIXGE) -## The DOM +### The DOM + +The Document-Object Model (DOM) is a tree-like representation of the structure of a webpage. The following is a simple example: + +![Simple DOM](./../assets/simple-dom.png) JavaScript is made accessible to the DOM by embedding it into an HTML file. You might've seen the before; well, this is how the browser becomes aware of JavaScript. - [What exactly is the DOM](https://bitsofco.de/what-exactly-is-the-dom/) - [JavaScript and the browser](https://eloquentjavascript.net/13_browser.html) -## The Critical Rendering Path +### The Critical Rendering Path The actual process of transforming HTML, CSS and JavaScript into a user-viewable version of a webpage is called **the Critical Rendering Path**. - [Understanding the Critical Rendering Path](https://bitsofco.de/understanding-the-critical-rendering-path/) -### Traversing the DOM +## 3. What is DOM Manipulation? + +**DOM manipulation** refers to the activity of selecting and modifying DOM elements. The main reason why this is done is that **you want to show the user different things depending their activity**, for example: + +- You click on a [hamburger menu icon](https://bit.ly/2Yr4O7Z) and a navigation menu slides in +- You scroll down and the elements of + +Finding the right elements is called **traversing the DOM**. Traversing the DOM essential means: using JavaScript to select certain elements within the DOM in order to modify them (change color, size or make them disappear, for example). + +### Manipulating elements + +Look at the following code sample: + +```js +const body = document.querySelector('body'); // you can also use 'document.body' +const newParagraph = document.createElement('p'); +newParagraph.innerText = 'This paragraph will be added to the body!'; +newParagraph.style.background = 'red'; +body.appendChild(newParagraph); +``` + +In this example we're executing the following steps: -Traversing the DOM essential means: using JavaScript to select certain elements within the DOM in order to modify them (change color, size or make them disappear, for example). The modification of elements is also known as **DOM manipulation**. +1. We're first selecting the body: this is always necessary, as we can only add or remove elements from the body of the document +2. Secondly, we're creating a new DOM element: a

element +3. Thirdly, we're injecting content into the element +4. Fourthly, we give our element a background color +5. Finally, we add the

element in the body -Learning how to write JavaScript that targets the DOM is an essential part of being a web developer. In the following resources +Test this code out by copying and pasting it in the Developer Console of your browser. After you've pressed the Enter/Return key you will find your new

at the end of the page! + +Learning how to write JavaScript that targets the DOM is an essential part of being a web developer. In the following resources you'll more about how to do that: - [Traversing the DOM with JavaScript](https://zellwk.com/blog/dom-traversals/) - [JavaScript DOM Crash Course - Part 2](https://www.youtube.com/watch?v=mPd2aJXCZ2g) -## 3. What is DOM Manipulation? - ### Browser events -Browser events are very much like real-life events: they are important things that happen. In real-life this could be getting a job, graduating from school or receiving a birthday gift. In terms of the browser, this is much more small scale: user actions like `clicking`, `scrolling` or `typing` are all considered events. +Browser events (also known as DOM events) are very much like real-life events: they are important things that happen. In real-life this could be getting a job, graduating from school or receiving a birthday gift. In terms of the browser, this is much more small scale: user actions like `clicking`, `scrolling` or `typing` are all considered events. + +These events are important to know about, because based on those we manipulate the DOM. For example, user clicks on an image and as a result it increases in size. -These events are important to know about, because based on those we manipulate the DOM. It's cause and effect: user clicks on an image and as a result it, for example, increases in size. +Effectively it's cause and effect. + +Check out the following resources to learn more about what events there are, and what you can do to manipulate elements after an event has happened: - [What are browser events?](https://www.youtube.com/watch?v=LeKKU3a4AQo) +- [Introduction to browser events](https://javascript.info/introduction-browser-events) - [JavaScript DOM Crash Course - Part 3](https://www.youtube.com/watch?v=wK2cBMcDTss) ### Event listeners and handlers -The process of DOM manipulation happens in three steps: +Take a look at this code: + +```js +const body = document.querySelector('body'); +body.addEventListener('click', function() { + body.style.background = 'black'; +}); +``` + +Test this code out by copying and pasting it in the Developer Console of your browser. After you've pressed the Enter/Return click the website. You should see the whole becoming black! + +This is DOM manipulation in its simplest form. It goes in three essential steps: -(1) an event happens ("User clicks on a button") -(2) JavaScript is aware and looking for this specific user action -(3) JavaScript modifies the DOM as a result ("The button disappears and is replaced by an image") +(1) An event happens ("User clicks on the page") +(2) JavaScript is aware and looks for this specific user action (The browser is listening for the event*), in this case a `click` event) +(3) JavaScript modifies the DOM as a result (\_A function that makes the body background color black is executed*) -The second step is called **listening for the event**. We do this by using a by the browser predefined function called `addEventListener()`, which we get from the `document` object. +The second step is called **listening for the event**. We do this by using a by the browser predefined function called `addEventListener()`, which we get from the `document` object in the browser. The browser needs to listen to the event in order to know what it should do ("make the body background color black") in case a certain event (`click`) happens to a certain element (`body`). The third and final step is called **handling the event**. The term "handler" effectively means "taking care of" the event; the response to the event. The handler itself is nothing more than a function that executes more JavaScript code in order to manipulate a particular part of the page (either the element that experienced the event or a totally different part of the page). +- [Events in JavaScript](https://www.youtube.com/watch?v=7UstS0hsHgI) - [JavaScript Events Tutorial](https://www.youtube.com/watch?v=e57ReoUn6kM) ## Finished? diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 709cc5439..5641a0488 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -11,24 +11,7 @@ ## **2. JavaScript exercises** -## **3. Code along** - -- [Building a Real-World Application](https://www.youtube.com/watch?v=NYq9J-Eur9U) - -## **4. PROJECT:** - -``` -Topics discussed this week: -• Functions + JSON/Arrays -• Array Manipulations -• JSON -• Map and filter -• Arrow functions -``` - -> [Here](/Week3/README.md) you find the readings you have to complete before the third lecture. - -## Step 1: More map, filter and `=>` +# Step 1: More map, filter and `=>` _Deadline Wednesday_ @@ -114,6 +97,14 @@ Follow these steps. Each step should build on the result of the previous step. - Choose variable and parameters names that most accurately describe their contents or purpose. When naming an array, use a plural form, e.g. `durations`. For a single item, use a singular form, e.g. `duration`. For details, see [Naming Conventions](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/naming_conventions.md). - Don't forget to use `=>`. +## **3. Code along** + +- [Building a Real-World Application](https://www.youtube.com/watch?v=NYq9J-Eur9U) + +## **4. PROJECT:** + +# + ## Step 2: Testing your homework We have provided _unit tests_ in this repo that allow you to verify that your homework produces the expected results. diff --git a/Week2/README.md b/Week2/README.md index 1a7ede07c..d1b23996a 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -4,13 +4,25 @@ These are the topics for week 3: -1. Web Storage +1. Callbacks 2. Event Loop -3. Callbacks +3. Developer Tools +4. Web Storage -## 1. What is a library? +## 1. Callbacks -## 2. What is jQuery? +## 2. Event Loop + +How does the browser know what to do first? This is where the Event Loop comes in. + +For further study, check out the following resources + +- [What the heck is an event loop?](https://www.youtube.com/watch?v=8aGhZQkoFbQ) +- [JavaScript Event Loop](https://www.youtube.com/watch?v=XzXIMZMN9k4) + +## 3. Developer Tools + +- [Google Chrome Developer Tools Crash Course](https://www.youtube.com/watch?v=8aGhZQkoFbQ) ## Finished? diff --git a/assets/simple-dom.png b/assets/simple-dom.png new file mode 100644 index 0000000000000000000000000000000000000000..2a76607d89908acf31b27609a6643d2f73d9a0c7 GIT binary patch literal 13743 zcmb7q1yo$ol5JzbJy_^KaJOKM6C}91I|OSQcMSxBCTIv2+}+(FNN}ft#zSx?=S_!TXBw!>y$e>&3tg3Bn#vEIphlA=atNjUq-w5+M(shY zhceGj{jK6>Nkmiy%BT9A3U{@GhwO;q;TGMh>@#|lx!L3P>-KYh*W)bi-TOkzqjqk< z&zZBlDPc{LAV0ZaR;t&Dyj*M<(!UVV#Dj@X5Z?-S7!JqA#UZGEIC@ItpU>t^WT}v^ zaN2z;{fQpxA_|Zd?n^}!5To390KoG7ipv0i9FCdgQPxk)r7&933EN8S(yxIuo$L7$LK>tDO^-v zWqTz2S3hx7A5<5+f*p@e+SbeC)Vt(9h6;=?zc3^zEb+VVOSV38PZh-daDgtHR!@Ut zj)@ITY2v0Mai`z@z`2BzL%q21!-Asmm!i}D_ZYAc&GXIbsgN65_e?Kq94EszLCQ9? zJ^&6H66?1h8bU=>0deT+G88kg*oGQ_`(2z54^bz^`a6vlFHP{glq%L^s4Uu6Z$Ng5 z9u;HgtxB){2;*+YY;`vM z+gvrQ(;BxAtRL6=IL)7Ph5QUn+j!#zpg^jmf_T9?n$}bs0+$IX2nEq_(dW@JLJg+- z=xQo|nFXJIBYYb%F_Zq=>PM4^immlu(UdU;OvJM!G%t0h3@Aw_YS`jK{M?2E{V+9wm?J4!})u&(6pAv7UxznAl5&`Ww z77h-@tpN#A*4{%D;G5{9!7c>311A~)(&*Otjxj4}=uHJ+o(NV+M6Uwyb>Yu#BDB2$ zpdqZA0wa**USTVS84-71vLbPJ1FP^7gE6WQ%TQ)b2^SDOg0i}eC$MmWH(~q`3PZ&C zu9rgeDuuSzy32S={xlE$p_nYnM64UqYm~HFQX@~Qgm!AZ7 zgt(ixFZiZMa6^cXFmxc#Go#N>$!>)Gn2ckNyV6b)Ziwy?R>K47C(x~tNkYVe6~4%R zryr$F#AildMngp_giX&Vc}da|q)MUY;QGCoju7Zu?91=N?px`z=)*B5sm_w3PW@yk z8=MCsh|?5jrYUDQq<%?fMDL!k`nmplvL&tyvOoqaRmvxpA)z6e?Q9MT_-ERDM}3VH}SWE2bb3nmHPxv~Gc_@(Z4=q}JAyyD%$+k)!u^z&+; z>jHYYadCE;{OfQ=sPtMhE6=HtvVvoRV|FbkP@*#`n9G3__$=%6r3K68^W5d2cQDf~ z-tSyRoHvW#R=$m^u0f*BBF#RV#jKn4D$@_t*|?;7k8Y2)kM57+zTJ82K$AU5koz`w z+PPS+VO{>K0sV>GNs46d^B(sZ>h-@gj{cP1HbP z`Lw~+f!x7qS?$2@P|9QfKzX^n-m^-j{%N&i@v-=QHPU?cLU#9h1~Xam8~^IptYeu6!r2;L&NY&$fTR|6XlW zjVo9FEpMEU=#q!q?a!oKmAJ=)o$ch^hS|f|){Z;SHNmy^bqd88g2%!i@g8v@=Vo?R&fTQj7qxDsoz)Iub^_ejKs|N4z~6{^_#rugX8te7wGn@vPSQlZ8glL}!pudONoX8VAzz*YefIjjva3iV=pQ z&7t{(2KQ+7Fz5yAmDXfhqgq#v9pR%yF-y0b$2RHTQ!_BzXpAjGo1lly@4bt?ThE7n zll?}eyNx#-8rmbCjw^DO9Ds@lk3a;o3GDeSRzWW(Cf)cCt!&{<#G3}_5%GuDlg9_eKBlSCv z_oltuF;wK_{HabQ3m5A$r*ZuJGGK5?ZDlD`0;=A$eL9y|UKn`xP#lo9*AVHL)u7Pe zc_h2wT(er(5m2}|wvGMneNMK`{FYHl0M1=={$#!LIe6zNQp7aQe4Mh=^4`VY>0-6P zzvJ%3_3~k*NEb+THI(Ov-7kA$UeAWSdN&}@v#Ol;+htc}Zoo>w_g|_%%zArA;#A`j zDaeHN{py~+T<9L39&8#pPA?s$fAQM*HH6NvtRkHycy7?=#GqWOLMcM%wKJjjRErAF zH+#`z|Bk(o`7oqT--m#2E3NH&Iph7w3IQqlLIWPaW}x5io1`k1PNQvOkwCU9{lUwv zeSRm!j!AC~$oXD*n*j%yWR;?+7RJ5~{w=cNn{@r-X#Qbj&!knTT?khU%@?w6w$UqO zbYEc;w-qPqks?|kR^ey z?S;V#%Q+Vf0Kl|tQ4{7cwDD(R9~dWjExHj;lJ3cG1p+-KlJ9%r-zk(;6*Z-wo}Or_ z8E*IXuU6L1$EO}{?=EK-&PK<9z2SlgNF8208D zXGX`BrDpv6`7ttdHY(C<>))DL z)R5b}&woU&EZ8Qp=Lc57asln$cnqx4at*8}R_q=qHL_geFr=%lD!)k2B;A0Bl4Q(< zwW3-lW;I1_9tE=z?j!=b5s+mduRtM4Xt6MH2r?=j@ZVzy4JZf(_>U0}_-`=IACYc+ z;E4$q`@qdv0!6@ZzSFTGpGHY4EXV{CeAtdHH#O%w68~J`*Z_L4osq*QgcX7mz}8d^ zQj{B>#VMtYvE+x#-@T8DTA^JTF!xQ!;{}xs8>CT#VAmDvEk?O{w#!=akuNuJS=x0} zIxyJ>WFfDb0xfDKS9>vi->oR$ZLljeUl$wt9G*wm)h#Jxa&-4E+8r7s^7uLpT4cq$ z?D^Ay@Swfa>8%UmQ_2KA`S56|yQ`P@w&zKBR0} zYw4ij*?iFrL$A}A23edklyH7CI%fPUoyD+cVOkz14rb-BJ-5$0|N%! zZpV1@S`BR+8Poj^+t;!A8FQvik+y;1#I5g_{By(LQIBJA_ODH=dp7T#-Xns{A4mbc z#WVb(UVCS!LgWjypz98XQHX^*%pY;)r?(}BZyr;=_w|%-mY-JcADOUAxrho!L=LaS zgQDRKjetB@<3d((lt)UH66%igfob%^QIcZAWg{FE7V9C`dO%o!$<$BQ4WAqymmxpkGuGvznq?GdY@B+Sl7^hexKH z<6DitsBCQYLc?!r=k#}-0;Zj2p0(|bo3@@j0sbT_;Ez4PKN9zUz6ZdQ`(K#&MofI@X#jK+cXS`-c{c1EiM-PJa0U>9glrHm=i$ z^3EU|Cl$f`LYt$P%AhP^TPFewpz_a>=@!T}qy>HZu&sLqUa1<;x1||yVySRO8O2A;MW5v(?oorx{6@aoLiPz3Ca3Zg-x}xS)rN;f zR)ZOR()KqaFB=bMu6+%045#3A#FeXF=9N!dv95VJC8%E2 z?r=w4el(xR*#C=Dq3Y$-r@8_Qj8=SL2N<#x`>X*rNIh`M^k^Wvvbhjb1$UWpvr zkb0dac1W{bd}IV@Rw_@OxA!naA-FV8Asw32@Uz3sjW_Hb6kaNw=i!LG4}XbseO334L%CJ#+a3mGaPJaQimezx7}xNzvn$CF zHrm+LoR@@4qOmRx3xE<=NsHwvYCe1^rh>S89wv1ql`Q3DP(kpCaFCA%V~)=Yc-MeEsQIl zjS-hr5a1iwoYnR$O3cnSD53-BNShva+#9_FxJw2|55cIGC3ewVOI9*5Tt4kRa(kLF z=O4LuB*OMPEtO$a!(H_(a%bQY>((dBNcc*LSC~JSkt>vxjE~NC#f&tLhG8&RwK9iw znfV9X`>p${S?=O~n`>6_Q}b+Wbu_x^yBmm%NDRA{ws2hMW>NPwsUs9OnV~j!JzhpJ zXkhZ&@Yjx97`+>fl>N0_DmB%^&|!M|dXA*YgrZ4qeBMZU_jqZ4y!b6i$J>idi?v4p zVz@i%kpifrous-Sk<%TvFpc~Q0tlvoe~{3C!ASqULj#J#(13qv|CRn1K?8XOsl@+$8vi&4cL0Eh ziU+TOIDe<&F!(g63*pbykMcjU{C7CL*&yUWNBMPIDkEM*z8W!1fM~n zwlro-T%RQ)&Kr%s1rzQ#f9q1)2(o{fV2YWJRtpLxX<~$SaTQ2;1!M9%)ogD|LPQAR z_L>a9{rDg}5HnCb489HU;~a~D+J@DL0$~26N%t^qzMYbKn(?g?8_g{l11h_0|V;oCw~|IL4dUddG+qBv%lu4@1;uQxs}-6 zD*9;6wzMzkF$1-K7T-bYH68+Cbw?Yv1=w(l`=t;QBpn91cv7tdTDkb^V3s9?*ZFX} zN@Sq40$aVJ7D1)yy7sPj@mDnRl3_@}X<%6;SQ7vk6%mp`K2%aWN$H5{tJs}u3P&sh4!!Nw7mLx zqj34mQb?`|v*A*aHFeBayCwLt@iK1~y9D5`|5qQ3*X6aG%5_rI*TuuqS`>cg_Q>T_ zux9vV!~JY;QAm}qSmG&(`RfJ_bR0v6{L;^H*A};3Lj|;3g>NP>C>tOcRpQRf8gl_}1W*!t$2#{lqTK|R+9zO(l zsNg#OM6T-&A_@=sKVk}x_J4}zpX0zOa?}e)!@Yq=p^~dc zM`FKM5j=O<_Rl>mf^b$CzHBAPqd<2TvdVRVPLJtJ^;sKs1gKE%W1(9!C-# z7xVuCb8^U-QQQien_#!4SCPK|{r$armkYMm_qH62n7EpnG0ZOz_aP^o&1q4^ttyZ3 zgY7iO_BKqb62h{DWd&v7AJbdn5xqm>TZb&-AG8>jAh^K&GX^31{sZ<< zt(J4z64Tw7F4lpB#Voc5uihSFQ{#bzqDOPn!BlNsz12q#YF^Rwt|JNEZphhWLJ@I- z7c9ox_nx+7?-56a&w4;`G|$G_qkxD|fK|XL!Lj__a$~^=ZRGkwPLps$k%iU&*5l08 zhcPB5wfdm#hr=Oc6t1_bw$MV<`n99ECl%|QE2?K_$@dtQt}_fXHSc{75a;>QdeBN( zm2B^?cn4#P#+&zW;kLcy=zUqg3%J)-+m5SuRW1cY#8w9=6q~7!5~j20$6ac|I31&Osklo0AOps_g}3xBlh(POaDr;_Tvy2mLKeB*^E zdJkC`;4rhWMn2;vzo6l;84Rxdg-nI!FUC4nCn0`SkM2**lWwbZ(uK1lNf7iR{5H~z{TEp(^ynYDwjcEAi=ELyNp*~N~$7eI}wCSVtJQ2 z%BLYPMV8T~g&zhJB@gEkPMm`Z2XrfaZ6bydM%sYcW>W({|Qyai`_$LDJ)wu05gs z$B0!I@0R0G=fft=ej8`hq;_q*L2tTknBF~Ug>~S`x=xghC)NFDEw<3~2i+qvQKhc)>29cK)NcGjPXU5z=mssST%7^}-`J~fduJU!)} z0|xR2odI$|3I4Zc@y6hB{pYO}EnYj*P}{IM!p3pe7QCMJ$~0{kPHue}2hHE=1I+z< z5{x;IZmnC@yYQ1>z9(#{PI+@_e<~yM`5o`->twxX9=AAFgDq956lMNhHkzg}`lld-L@Zz5=GaD2-?_{k1jO9IP4(;t5E7yK+~=z8hswN{XxHqqU0Zt= zcvL50wpO%miGYzbxYw}lM)f?GtLyGUml7@#^4n={Px*Uu^E3v^#v%Wjlyp**M}e6; zI>(f2Cr`_Cq!fTnC28TFPi+@h`d3U350d&<1i}ztsq&{aa;a8d>&G8<8e5-foOkvP zu+oLfC(csB=@ia0o*QgU^jy5tO;qsVVZq*2W~meB0r+8>G;n3_rB0%jDkSedgPXVZ z*?Y0-7qPje%p((cL0=Mt6ZOdcb@Q8E#C}@*)8#VBgxe%LIu(2c(=}AF+5=8hF4-hy zp|%;{C`|||%rI^^^-9j8UU!}wU};Gg9-QxvXO6eM9lxA|QtVzj8kjMU_Z>gDfqtF@ z)^RP7TGY*n1ztfw?Pi0=MjOj}ke`_alk^|zt?vcWSBt-kD0)wPcALxo|b z-KX*NDQD5HV)Zl@^Rk1STmss-xE1Sw?3~#EO(Ig!Jyr8trgFmDO({JXi2SnkhM-1f z^&;49Ya0nDw=G#%bX`nXkXkvtT6Xh6$(W`Ke}lN5@ml*O@H>+UDky!EgK-eyC{X#d zP6PJ+Z2$`7q62^fBgFy$yYScHcYiMgU>E#S>xB>hCjMdJ@&4ufCn6pk`Im_QPg&R> z%6}#vp#-}sX^;giQ$o10ks$U+HtDYV_T{((0{n}bsp@kGP@k@s(XM07kHksGTBF=p zUFFz@?C~CAyz-hNmsv#AdswaNz1}iSEv>T3`QCS1-DwiYumCE^qA)B1vWj1Usw|~> zl<6Z8MAL&{_zBJC9LkK(^byjD39=~pWz0&dvx0g0o-2u4s)>y{-7dqmo}k*AbGrTD z2x}UFANs{Mfb|vtc7-WACPfUBm)Fl}B}YaS<@{eOL#E%8U4fJO$G6jOd80e*2kU$ZQ@uA)qKS198sfF*`c zTZ(sphpEePBLAQ)?{#i{Ew#6mVg}9!Ip1F0LZ#KP?gQdI09d69TfKfx`Q!630iD&1 zTvsjjcp*nH+v^>Ofg95uw8LGWzvMi;;CZ!j>ndj>yA>PtEKC>yY{F!vmu#iC#NMMt z9S;v6!BG8N0h6n}23@?ThogJS1m3!K9K>61r#OOHNkwywxY&*Nb+o$?fYmMODi9NL z=lGQ;HzLK8LR0FpOY3E#{ydKopWW9cLn-Erj}iOm3G)2ZQ$H(`YmbQcYC5vfAwth8 z2tL;wYI@@EI5DT-cGb5VA%N4W#o4Ic$MrgQ3R`@8M0@t+<(3v~xLtylQ6Uw_GFQ_x z6;eM-g4M87)OsCJ3|XiTReSe*v330PmaL>}1nk2BU>cYryLl-%OztUdx7V6VBVjL zls&rLQ&H3XyKU1@eLACEu6=To(4@FS(XUr=kMPg?Gt94V`xrg;Wl|42|> zUpoWYmucd-TUWH-?npjUz5F2OWNVo(#oCH;^(?*h@MbRe<=TLjyQ@LO(bpCi{WVb= zL+-~Uv_=BRO6)O5>zUCkPwooh6KR3^AGb)zn;7Iquh(AR-64#TH`(&t+1MDOKq`?8 zWf7o)T`@go1;q7=fFm7%3^sh>^%<>MNbp<(H0qWU;4i-mLITwxLX^Pg4(pTj08|Ko zzwtv_U?TdTiUB1?1X2Gj67VWO1xLa!yFbH!5dT((oDY9F|CRW+;`kh*g{uLMNXXBF z@I5Q9GtN9f7HRYR^l$I8RGlyu0QZV&^y=K#wZ(}PS1s(qBwh~X^id$ zox}=AOW~YO(Wi+^u&P6SX9|qw@Q6Y|ELQH!%&GIla&GdZFU=D1*`T7-!DTqE|IUNE z3vaN4=g_<9b89#%9w>%-XHh!4V)P0Yzj^uA(085eII6Ls(}25^%=sjit*>8ayAgR?&XUy!c@l}f|3?Q9OMH%=fjT@SB5;kqAj~I4>v+VHf6V zr2+U5^j6d>)k+n4!nkM`#6pq)q%pcKIyo0M_zEmf7Gv<<3Q%pQ<#Hf{>wJTrEtFjL zBC7Du-0-kGOk=LauB*d@>G9t+vo~)0)?U%Adg7Y0bYA3K2JDd_c~au)>W`Ifb7Qt@ zUAym=SzS4MQfvYOVFTMV{oN&P#f!N2pu*aZ0gSnRd{;gIevc+yi!i@|(g4yIBV|^` zMVyDm9Iy}ZA-T$PMe|827-E8Gk!4fi{M(KEKX99TN1D5wDiX(8!I*1vuQ6pZSc|g| z*%nWc!QHxOzfV0*A94EC7;1^io?W4^H_!BVnYQ~4R0f!`olm)mE*SQcHwB&KX6?I= z!>Ks;wZAR9c-R4uq0w5K$+O$;yVke6F1gJyk$Co-5`aOyPG@h-R0&~$JxqTMo^57R z7Ev_F5YfiQq7Y{5huHd2?p(Qr^jBDr^h@%LMhHt>Wi)ECC35hueDN-4zX6sRTz-T4 zGNG&z`U`LB>>vw&hjc&sVdb@T+KYJW?Q_&wEZ4-%)u2t<3$#f0naj@uXSA!-d5-Hr zAwHe<*a6>yP9LHbJ4s-AK9rVit5-NjvQMGu(+Am zWjG3WO|kIJ4+jg#kR86scAHeYYxeZI!RJ%Cbc;VDC&Unilr`&P77NxU!dn3qJLtq3 zkhE#bFUwFh)_0fNIc{lt=GMt%yS*6HK~)%L}LCogXoLO|e3XT|I= zJOKO@MKK#kIe$vN{O9OJ!ZNK91v!+W`T3Eco8bE`GW%sn9d#s1M74=bP`YlVA z1;U^j!^lB~)1;GN?X*QbDn2eqS;FMxJD+~v_)&0dqu^snj8|7VZ~KFEnxq?yU`f+4*o+V8-B&IperI|eu|x4-_*dP>`24rb2;48H<3c+ z-gutg-CCdVikhQSQf4NEviP;1^xUt1F^3qyI*vSF9JgHIRMrBu)SfDRPiF-~47TKd zTr*x8WnSv>XIHkrw4>`jRr={U&|0uh)rzY>OlC2cbQ{RleYzJ+>DxK1)Vs2KU}e0< zI8O)#rJk5QmRw$4UNYgzuk;-1t3h&G4Hru9Z%giAyMY`PM|TCvd~&R1Oif%=eZHxk zc4F^D*m2wJpW?1z6}B;@7+^oulC^T3#g|_#Sauo96XR)znun_e++6F-?k&fb9?BJ# zHrJh!C*2FD?M+Zi@6;d9Q;v_p+Id1EXHhEB_AejrBz^=|4DC(S&F3x*H;BY-5Ns|y zuE2~L!*k1;fVhDY`$x+VyV$|aYX7~cQPri+`=ZTi0qB<&iZTo`i)g=&ox!Y~JTOhG zFgw;*#pk4yg4VdkrDe#$(U6k1xer7!mg&g8f~*gB9^WJu`qyO_Cr!|7v@|4} ztuEQ>jTSmwfy?evdBAu5>l&V}5R2}1ocJ{C zB6^9{76y*7!<}YfIE1jmqFalh=>tmRrX#&#Q}{H$B8VPH7;7X?3?I=4Lo9l@)6A5{+RIccwy1dZ#D#+;sJ$C#$KO zEJgM?V(vIt4nYqDtFasweJMg&gJ*>sYVX_KT#LPeXGq>JooG+U4k#fpeBQMv!hwO- z7#Q{Jf>Q%6B0w>E77^6xqX$73x9%xFP#;KCN5E5;|5%{?I(k0|7D1d2F{VoYWu^w9 zYm#$kqYuf|Svuuh4$*{vg_QJ=TAaw~DAO^w7lYH^Lka>Fe@lka zpmr@L?zk|~rG}j;)Z)dqHCoC;L_4Zsw|PVTlbX)Y4b^)kCw{yR@ePI$qs@@JK_uO6 zy;$3s)#U>{zUJ~EF?`Dc4w9jzJpb1BKC~8*c`{m#Fu|3c$!bhZU6D?PiHSaqItJfj z$or-KWvU5E|wgIqB1s>6F< zfye;aD9>WR5+KZcctn`2x^@r)b^O!<=*GsHrAG~I z;O8J334$5p&bu7~=qDa3@$}r@^S;CnYx^P3zP(@k014t9*bFOMF-B&ny-DWzSkg$8 z>x6o^jL(ja%#<6F+Z{W?$uaPFT-0$&B_it7DGtJKyIu`fz>=AQ(xsoQ`W_o)(aQxz zy+O~P9t}kTSovl$WkK-_?Ou_l5}j1Z@T0ElBZ+H><=WkXy6FI``u0S|-zzz!LAlwo z#KF|4-QMEf_T{Kj9R$FB!!}Qq-M%a;XkK~>$`K*B#yG);zb;TCu^AoJ%!dWfmJ`Ah zgZNB^&mlga$EL{HRnMkdY78XuHr7Yb zcIrS5!v587(N+RMH7r8$v_`Z?4igZ|9>R?=@i`*rWqj$xqGbYtS56r-P5S+g@O>R? z5YK(IF#q}iZfNeSx|cfL{8Z^^Tmb_$T~(T8XH6&NoMoi@80ZYOF9-;1AhZbL8P~2@ za?d|U|5_u?VegS!9By!2P7C42nMhS6m2CvA6Tp7Bwkq!$gx@8G9d{cSh9oRr`sRmL ze1_!R`O}hgPgW5*E|4Yke>&Rt^eZM{rh#^jAg(od&>=7u1}=sOaI6!&s&gG%JTwQb zao~t{o){FuzTcf^ZXLA0jP4D`i%j*C9SXRIPx2lnEP4lf<`PYV!++Yz{{b8{k)bA?RUAOYw9sM9246`Hc73kIu2? zDuaFvZ1QcNKg<4mZ|J!^_M5;Nc_ZZA#9L{Ia`Ae!iFQe&*RV2rz7x`}S`SlxPGa5% zd4c>MRTG)`vJgCph|{|D+fbHcZ(*DEo<@&$Q1E>VE%$B){Z{a&Xf7^*dG0h~Wfqxr z_i4G&NRj}G&4mDeLVvGqjlkbd;@?wl^cLY`UfxaLYK0Hl;I;be^(!h6Mvw~?=(103 z#T$(w)D+%?M7NFQ2|wf&`S_I%v4-ZV8+X2ofp?wdk1$&4eaWirkL9)8D@(H-t7!24 z1?C9x&5yb(v1E#yZ^aQ0WtqJuWqh&3cP>7EP5Q} zn|72?8c782mma5A8Df%A=4F~`)>pM4CgE4u$c@*04hLfOMr`97clU8ZK2LzW|F4R#73&-_%^2h$IlM)oDrL?itetZ R)!hCd<)oFRDkMxp{tq0GG{XP@ literal 0 HcmV?d00001 From ff329e591c169d588e0eb881a5dd65d7016098df Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Wed, 7 Aug 2019 11:35:39 +0200 Subject: [PATCH 03/75] added sync vs async content, not finished --- .DS_Store | Bin 0 -> 6148 bytes README.md | 6 +- Week1/MAKEME.md | 6 +- Week1/README.md | 3 +- Week2/MAKEME.md | 67 +------------------ Week2/README.md | 100 +++++++++++++++++++--------- Week3/README.md | 26 +++++--- assets/javascript-sync-vs-async.png | Bin 0 -> 17627 bytes 8 files changed, 94 insertions(+), 114 deletions(-) create mode 100644 .DS_Store create mode 100644 assets/javascript-sync-vs-async.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..15c6b9430e53da8bb440dcfa9acbbb25ca6952a0 GIT binary patch literal 6148 zcmeHKI|>3p3{CuiU}I@HSI`p-q9?GhwNNY+1wrerJeNoF<2f}Fa^D4vJCu#=@f=%x+o4eb zDnJFO02QDDpH?6%>}dSygLxhmpaMUyfZY!TZdenWK)*ULcnbg=Anb;@_Y%Nj0bosR z0ug~}P=P_!Y%w(Gh?mT(iA`Y8MYH+Pe6wbUqW*TAUp!s326ChVRG_UuKb8}#|10>L z{=ZG)iV9GHzfwR4%k^@BPs-Zb`8cb!1-^w_&J%8ixl=HBIR<(;#=^?+)RQ8w*c|&c Vu?ciK;!X$hXTWr!QGstO@B({y6gB_= literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 50237b668..beed10039 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ If you were to ask a random person on the street the question "What is a browser?", you'll most likely get a variety of (incorrect) answers. For proof, check [this](https://www.youtube.com/watch?v=o4MwTvtyrUQ) out. -You might be one of those people right now, but after this module no more. In **JavaScript2** +You might be one of those people right now, but after this module no more. In **JavaScript2** you'll learn all about how to use JavaScript within the browser. ## Learning goals @@ -35,8 +35,8 @@ If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯ | Week | Topic | Reading Materials | Homework | Lesson Plan | | ---- | --------------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | | 1. | Document-Object Model (DOM), DOM manipulation | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | -| 2. | Developer tools, Web Storage, Event Loop, Callbacks | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | -| 3. | SPA vs. MPA, Scope, Closures | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | +| 2. | Synchronous vs. asynchronous, Event Loop, Callbacks | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | +| 3. | Scope, Hoisting, Closures | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | ## Test diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index dd783e00f..fb4a0bfc8 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -9,6 +9,8 @@ ## **1. Practice the concepts** +- [Making webpages interactive](https://www.khanacademy.org/computing/computer-programming/html-css-js) + ## **2. JavaScript exercises** ### 1. The book list @@ -129,9 +131,9 @@ Start with this webpage, which has a single img tag of an animated GIF of a cat ## **SUBMIT YOUR HOMEWORK!** -After you've finished your todo list it's time to show us what you got! Starting from this week you'll be submitting all your homework through GitHub. What you'll be doing is upload all your files to a forked repository (a copy from the original, which in this case is the [JavaScript1](https://www.github.com/HackYourFuture/JavaScript1) repository) using GIT. +After you've finished your todo list it's time to show us what you got! Upload all your files to a forked repository (a copy from the original, which in this case is the [JavaScript2](https://www.github.com/HackYourFuture/JavaScript2) repository) using GIT. Then make a pull request to the original. -Take a look at the following [guide](../hand-in-homework-guide.md) to see how it's done. +If you need a refresher, take a look at the following [guide](../hand-in-homework-guide.md) to see how it's done.§ The homework that needs to be submitted is the following: diff --git a/Week1/README.md b/Week1/README.md index 212705421..1b44fbbe1 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -17,8 +17,6 @@ These are the topics for week 1: - Browser events - Event listeners and handlers -[DOM Crash Course](https://www.youtube.com/playlist?list=PLillGF-RfqbYE6Ik_EuXA2iZFcE082B3s) - ## 1. What is a web browser? A web browser is software that allows you to access websites. @@ -84,6 +82,7 @@ JavaScript is made accessible to the DOM by embedding it into an HTML file. You - [What exactly is the DOM](https://bitsofco.de/what-exactly-is-the-dom/) - [JavaScript and the browser](https://eloquentjavascript.net/13_browser.html) +- [JavaScript DOM Crash Course - Part 1](https://www.youtube.com/watch?v=0ik6X4DJKCc) ### The Critical Rendering Path diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 5641a0488..7330f9ebe 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -11,7 +11,7 @@ ## **2. JavaScript exercises** -# Step 1: More map, filter and `=>` +Step 1: More map, filter and _Deadline Wednesday_ @@ -103,70 +103,6 @@ Follow these steps. Each step should build on the result of the previous step. ## **4. PROJECT:** -# - -## Step 2: Testing your homework - -We have provided _unit tests_ in this repo that allow you to verify that your homework produces the expected results. - -> **Unit test**: A _unit test_ is a piece of code (usually a function) that invokes another piece of code and checks the correctness of some assumptions afterwards. If the assumptions turn out to be wrong, the unit test has failed. A 'unit' is a method or function. -> -> Adapted from: Roy Osherove (1.09), The art of Unit Testing. Greenwich, CT: Manning. - -At this point it is not important to understand how unit tests work. The only thing you need to know now is how to run the tests and how to determine whether your homework produces the correct results. - -#### Run the tests - -You can test your week 2 homework by typing this command in the terminal window: - -``` -npm run test-week2 -``` - -You will see some output appearing in the console while the tests run. If all is well (no errors), the last couple of lines will look like this: - -``` -Test Suites: 2 passed, 2 total -Tests: 2 passed, 2 total -Snapshots: 0 total -Time: 1.849s -Ran all test suites matching /Week2\//i. -``` - -In case of unexpected results, say from _Maartjes work_ assignment, you might see something like this (you may need to scroll up a bit): - -``` -Test Suites: 1 failed, 1 passed, 2 total -Tests: 1 failed, 1 passed, 2 total -Snapshots: 0 total -Time: 1.255s -Ran all test suites matching /Week2\//i. -``` - -If that's the case, try and fix the error. When done, run the tests again: `npm run test-week2` - -Repeat the previous step until all (= 2 in this case) tests pass. - -## Step 3: ROVER - -Finish up to chapter 7: JSON on [roverjs.com](http://roverjs.com/)! - -## Step 4: **Some freeCodeCamp challenges:** - -_Deadline Saturday_ - -1. [Comparisons with the Logical And Operator](https://www.freecodecamp.com/challenges/comparisons-with-the-logical-and-operator) - -2. [Record Collection](https://www.freecodecamp.com/challenges/record-collection) - -3. [Use the map Method to Extract Data from an Array](https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/functional-programming/use-the-map-method-to-extract-data-from-an-array) - -## Step 5: Read before next lecture - -_Deadline Sunday morning_ - -Go trough the reading material in the [README.md](/Week3/README.md) to prepare for your next class - ## **SUBMIT YOUR HOMEWORK!** After you've finished your todo list it's time to show us what you got! Starting from this week you'll be submitting all your homework through GitHub. What you'll be doing is upload all your files to a forked repository (a copy from the original, which in this case is the [JavaScript1](https://www.github.com/HackYourFuture/JavaScript1) repository) using GIT. @@ -176,5 +112,6 @@ Take a look at the following [guide](../hand-in-homework-guide.md) to see how it The homework that needs to be submitted is the following: 1. JavaScript exercises +2. PROJECT: _Deadline Saturday 23.59 CET_ diff --git a/Week2/README.md b/Week2/README.md index d1b23996a..1f8ebd754 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -1,60 +1,96 @@ -# Reading Material JavaScript2 Week 3 +# Reading Material JavaScript2 Week 2 ## Agenda -These are the topics for week 3: +These are the topics for week 2: -1. Callbacks -2. Event Loop -3. Developer Tools -4. Web Storage +1. Synchronous vs. asynchronous + - Synchronous + - Asynchronous +2. Callbacks +3. Event Loop -## 1. Callbacks +## 1. Synchronous vs. asynchronous -## 2. Event Loop +### Synchronous -How does the browser know what to do first? This is where the Event Loop comes in. +In the previous module you've learned about **control flow**. In short: it's the order in which the computer executes statements in a script. In JavaScript this goes from left to right, top to bottom. -For further study, check out the following resources +Let's look at code execution from another angle. The program that executes your code can do it in two basic ways: synchronous or asynchronous. Whenever code blocks are executed line after line (from top to bottom) we call this **synchronous execution**. -- [What the heck is an event loop?](https://www.youtube.com/watch?v=8aGhZQkoFbQ) -- [JavaScript Event Loop](https://www.youtube.com/watch?v=XzXIMZMN9k4) +Imagine the following scenario: -## 3. Developer Tools +> Noer wants to have breakfast but he doesn't have any food at home. He decides he want to eat oatmeal. The ingredients (oats and milk) can be bought at the supermarket. How to do this? First Noer takes a shower. Then he puts on some clothes. Then some shoes. Then he opens the door and goes outside. Then he jumps on the bike and goes to the closest supermarket. After looking for some time he finds the ingredients. Then Noer buys the ingredients. Then he jump back on the bike and go home. Then he mixes the ingredients and makes oatmeal. Then Noer eats and feels amazing! -- [Google Chrome Developer Tools Crash Course](https://www.youtube.com/watch?v=8aGhZQkoFbQ) +In this example, each action could only happen after the previous has been completed. Noer can't put on his shoes and then take a shower. Or, he can't eat oatmeal before he has bought the ingredients. -## Finished? +As you can see, each action is executed in a **synchronous** manner. This is to say: in a logical order sequentially and only one action at a time. -Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). +This is also how JavaScript by default operates. Only one operation can happen at a time. If something else wants to start, it has to wait until the current action has finished. + +### Asynchronous + +Sometimes we want to do multiple things, without them being dependent on each other. Consider the following analogy: + +> Wouter is feeling hungry so he decides to go to a restaurant. He arrives there and gets into the line to order food. After ordering he takes a seat and, while he waits, reads a book. Occassionally he looks around and sees different things happening: new people enter the restaurant, some people get their food served and others are just talking. After a short while Wouter's food arrives and it's time to dig in! + +In this example Wouter reads a book, but that doesn't affect his meal from being prepared. Other + +Take a look at the following diagram: + +![Sync vs. Async](../assets/javascript-sync-vs-async.png) + +```js +function first() { + console.log('this finishes first'); +} +function second() { + console.log('this finishes second'); +} -## Here are resources that we like you to read as a preparation for the coming lecture. +first(); +second(); +``` -### JSON +In this example, only after `first()` has been executed will `second()` be executed. Only one thing happens at a time, and the next thing will ONLY happen after the previous thing has finished. This synchronous execution happens predictably and sequentially, without exception. -- [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) (MDN) +On the other hand we have -### Map and Filter +Executing each block of code (whether it's a line or a loop/function/etc.) after each other is called -- :dizzy: [Fun fun functional](https://www.youtube.com/playlist?list=PL0zVEGEvSaeEd9hlmCXrk5yUyqUag-n84) :dizzy: Check the first 3-4 videos. +This method of execution can have undesirable ramifications. Suppose a function is called to start a time consuming process. What if you want to stop the lengthy process? With synchronous execution, your program is “stuck,” waiting for the process to end, with no way out. -### Code conventions +Asynchronous execution avoids this bottleneck. You are essentially saying, “I know this function call is going to take a great deal of time, but my program doesn’t want to wait around while it executes.” -- Code conventions: http://crockford.com/javascript/code.html +## 2. Callbacks -### Array cardio +Imagine the following situation: -- Wes Bos' awesome free tutorials. Just make a free account and do Array Cardio #1 [here](https://javascript30.com/) +> It's 15.00 and you studying at home for an exam on the next day. Suddenly, your phone rings. You pick up and find it's your best friend! They ask if you'd like to hang out later. What do you do? On the one hand, you'd love to hang out have fun. On the other hand, you really should study some more. You don't know so tell your friend that you're going to call back later with your answer. You end the conversation and go back to studying. Maybe you take a short break and -### From _Eloquent JavaScript_ +By default JavaScript works **synchronously**, as we've learned in the previous section. -- Objects continued: http://eloquentjavascript.net/06_object.html +This is why callbacks are important: it allows us to introduce asynchronicity in the control flow of a program. -## Recommended readings +A concrete example for why this might be useful is when you want to -This chapter from _Eloquent JavaScript_ gives in-depth explanations of the topics that will be discussed during the lecture. Highly recommended (if time permits). +Study the following resources to learn more about the importance of callbacks: -- Chapter 3 - [Functions](http://eloquentjavascript.net/03_functions.html) -- Chapter 5 - [Higher-Order Functions](http://eloquentjavascript.net/05_higher_order.html) +- [Asynchronous JavaScript JavaScript](https://www.youtube.com/watch?v=YxWMxJONp7E) +- [Understanding JavaScript Callbacks](https://www.youtube.com/watch?v=Nau-iEEgEoM) +- [Callback Functions](https://www.youtube.com/watch?v=QRq2zMHlBz4) -_Please go through the material and come to class prepared!_ +## 3. Event Loop + +If a webpage contains JavaScript, then the browser knows it has to execute these instructions at some point. But how does the browser know what to do first? This is where the `Event Loop` comes in. + +In layman's terms, the `Event Loop` is + +For further study, check out the following resources + +- [What the heck is an event loop?](https://www.youtube.com/watch?v=8aGhZQkoFbQ) +- [JavaScript Event Loop](https://www.youtube.com/watch?v=XzXIMZMN9k4) + +## Finished? + +Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). diff --git a/Week3/README.md b/Week3/README.md index 7a7eaaf2c..b28c164ab 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -1,20 +1,26 @@ -# Reading Material JavaScript2 Week 2 +# Reading Material JavaScript2 Week 3 ## Agenda -These are the topics for week 2: +These are the topics for week 3: -1. SPA vs. MPA - - sfsdf - - sdf -2. Scope - - sdfsd - - asdas +1. Scope + + - Global vs. local (function and block) + - Const and let + +2. Hoisting 3. Closures -## 1. What is a library? +## 2. Scope + +## 3. Closures + +- [Understanding Closures](https://www.youtube.com/watch?v=rBBwrBRoOOY) + +## 4. Developer Tools -## 2. What is jQuery? +- [Google Chrome Developer Tools Crash Course](https://www.youtube.com/watch?v=8aGhZQkoFbQ) ## Finished? diff --git a/assets/javascript-sync-vs-async.png b/assets/javascript-sync-vs-async.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ef0325f1d25de9134a531f1850021bb928df15 GIT binary patch literal 17627 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 literal 0 HcmV?d00001 From c5c4bc239ec2038a30d6f748bbb2d556319940cc Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Wed, 7 Aug 2019 17:55:06 +0200 Subject: [PATCH 04/75] added some tutorials for the code along --- .DS_Store | Bin 6148 -> 6148 bytes Week1/MAKEME.md | 5 ++--- Week2/MAKEME.md | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 15c6b9430e53da8bb440dcfa9acbbb25ca6952a0..19f35c2d407a08177dbf67c9e46b596ee6108156 100644 GIT binary patch literal 6148 zcmeHK%}&BV5Z;BN3&zO7M2>s$#(^INFD4D*!JA2q9MnLYHqwYKfnuYG>1*g4`2@a> zGrNm|s7GU9rJ$Ka5JHH=0TtnYDGsaxAx*yRy1rY(;i7 z8aC{~1@=zusOu>EEDU=ew(XqzUfj-aAB90=`++wQ&c5rxlFODKxMAD~M}a#O`&e>< zu`J8B^M&!ayk9BuO6_1$lg{n^!}xLX^ekDWa0Ln3QaFVd zFlIu$vj#yg46b1mJw9iuGndzr24DRW{FEY%tH^*lFl=KLgV!-@1~db|GJy932Sqd$ zCKAQf0gWgD0Pz_i1Z=D&(1$BD6($m4282piKLQ=VPAvnyn t9JB+9g6k5A!UYCJzu~2NHo}w@#0|NsP3otMkl?4~&<>cq3Pb}1AWSsn-MRqeM+dsz5 t3LNY#8yg}SH?wo_a{x7N7UcNOJeglamlLG-01z`ww&9W993!%X830+o7S#X% diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index fb4a0bfc8..1fbdb011c 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -124,8 +124,7 @@ Start with this webpage, which has a single img tag of an animated GIF of a cat ## **3. Code along** -- [Item Lister](https://www.youtube.com/watch?v=wK2cBMcDTss) -- [Building a Real-World Application](https://www.youtube.com/watch?v=NYq9J-Eur9U) +- [Build an Issue Tracker](https://www.youtube.com/watch?v=NYq9J-Eur9U) ## **4. PROJECT: ** @@ -133,7 +132,7 @@ Start with this webpage, which has a single img tag of an animated GIF of a cat After you've finished your todo list it's time to show us what you got! Upload all your files to a forked repository (a copy from the original, which in this case is the [JavaScript2](https://www.github.com/HackYourFuture/JavaScript2) repository) using GIT. Then make a pull request to the original. -If you need a refresher, take a look at the following [guide](../hand-in-homework-guide.md) to see how it's done.§ +If you need a refresher, take a look at the following [guide](../hand-in-homework-guide.md) to see how it's done. The homework that needs to be submitted is the following: diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 7330f9ebe..528d19e4c 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -99,7 +99,7 @@ Follow these steps. Each step should build on the result of the previous step. ## **3. Code along** -- [Building a Real-World Application](https://www.youtube.com/watch?v=NYq9J-Eur9U) +- [Build a Rock, Paper, Scissors Game](https://www.youtube.com/watch?v=WR_pWXJZiRY) ## **4. PROJECT:** From d3304aaca44c6c8bca510934f00a5621a1f53999 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Wed, 21 Aug 2019 21:47:33 +0200 Subject: [PATCH 05/75] added homework guide, work on homeworks --- README.md | 26 +++--- Week1/MAKEME.md | 79 +++++++++++-------- Week2/MAKEME.md | 12 +-- Week3/MAKEME.md | 136 +++++++++++++++----------------- Week3/README.md | 59 ++++++++++++-- assets/randomquotegenerator.png | Bin 0 -> 119303 bytes hand-in-homework-guide.md | 39 +++++++++ 7 files changed, 220 insertions(+), 131 deletions(-) create mode 100644 assets/randomquotegenerator.png create mode 100644 hand-in-homework-guide.md diff --git a/README.md b/README.md index beed10039..216fc94db 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,11 @@ You might be one of those people right now, but after this module no more. In ** In order to successfully complete this module you will need to master the following: -- - -- Learn how to think like a programmer +- Understand what the DOM is +- Use the basics of DOM Manipulation +- Differentiate between synchronous and asynchronous operations +- Gain awareness of the inner workings of JavaScript +- Learn to think based on principles, instead of libraries and frameworks ## How to use this repository @@ -32,23 +34,17 @@ If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯ ## Planning -| Week | Topic | Reading Materials | Homework | Lesson Plan | -| ---- | --------------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | -| 1. | Document-Object Model (DOM), DOM manipulation | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | -| 2. | Synchronous vs. asynchronous, Event Loop, Callbacks | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | -| 3. | Scope, Hoisting, Closures | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | +| Week | Topic | Reading Materials | Homework | Lesson Plan | +| ---- | -------------------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | +| 1. | Document-Object Model (DOM), DOM manipulation | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | +| 2. | Synchronous vs. asynchronous, Event Loop, Callbacks | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | +| 3. | Scope, Hoisting, Closures, Thinking like a programmer II | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | ## Test At the end of this module you'll be doing a formative test. It will be done on **paper** and will consist of **4 exercises** that will test your JavaScript1 and JavaScript2 knowledge. -Why on paper, you might ask? Fundamental understanding should become intuitive. Only after having learned and mastered a concept deeply will you be able to use it creatively. If you rely too much on others, on Google or your code editor to do your thinking you'll make it very hard to cultivate the habit to think for yourself. - -Also important to note: this test is done for 2 reasons only. - -(1) **HackYourFuture wants to know** what skill level you are at. - -(2) The test will **give you an indication** of what skill level you are at. +Why on paper? Fundamental understanding should become intuitive. Only after having learned and mastered a concept deeply will you be able to use it creatively. If you rely too much on others, on Google or your code editor to do your thinking you'll make it very hard to cultivate the habit to think for yourself. ## Finished? diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 1fbdb011c..8a118a827 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -5,10 +5,12 @@ 1. Practice the concepts 2. JavaScript exercises 3. Code along -4. PROJECT: +4. PROJECT: Random Quote Generator ## **1. Practice the concepts** +Before we head into the exercises, it might be nice to do some interactive exercises first! In the following resource you'll find some exercises that'll teach you the basics of the interaction between JavaScript and the DOM + - [Making webpages interactive](https://www.khanacademy.org/computing/computer-programming/html-css-js) ## **2. JavaScript exercises** @@ -20,7 +22,7 @@ I'd like to display my three favorite books inside a nice webpage! ```js const books = [ { - title: 'The Design of EveryDay Things', + title: 'The Design of Everyday Things', author: 'Don Norman', alreadyRead: false, }, @@ -36,7 +38,7 @@ const books = [ 2. For each book, create a p element with the book title and author and append it to the page. 3. Use an