From a3a236711e7051beb2759b74dbf9aba47ae6e0e2 Mon Sep 17 00:00:00 2001 From: Kat Brandt Date: Mon, 10 Jun 2024 10:44:18 -0600 Subject: [PATCH 01/12] Adds advanced routing lesson. --- module2/lessons/advanced_routing.md | 206 ++++++++++++++++++++++++++++ module2/lessons/index.md | 3 + 2 files changed, 209 insertions(+) create mode 100644 module2/lessons/advanced_routing.md diff --git a/module2/lessons/advanced_routing.md b/module2/lessons/advanced_routing.md new file mode 100644 index 00000000..cb45b9b8 --- /dev/null +++ b/module2/lessons/advanced_routing.md @@ -0,0 +1,206 @@ +--- +title: Advanced Routing +layout: page +--- +## Learning Goals + +- Understand what the `resources` syntax in `routes.rb` generates for us. +- Understand what nesting `resources` in `routes.rb` generates for us. +- Understand the 5 pieces of information `rails routes` gives us. +- Use route helpers +- Understand the difference between namespacing and nested `resources`` + +## Vocabulary + +- routes +- route helper +- namespace + +## Set Up +For part of this lesson we'll use the `advanced-routing` branch of the Set List Tutorial [here](https://github.com/turingschool-examples/set-list-7/tree/advanced-routing). + +## Warm Up + +In your notebook, without using your computer, fill in the following table for the 8 ReSTful routes for a generic "resource” + +Include the following for each: + +- Verb +- URI Pattern +- Controller#Action + +## Rails Resources + +Rails gives us a handy shortcut for generating the 8 ReSTful routes in our routes.rb file. Open up any Rails app, such as SetList, and add the following line anywhere in your routes file: + +**config/routes.rb** + +```ruby +resources :dogs +``` + +Run `rails routes -c dogs` from the command line. The `-c` stands for controller, so it will only show you routes for the dogs. + +With a partner, explore what this output gives you. + +## Only/Except + +You never want to create routes that you haven't implemented in your code. If you have `resources :dogs` in your routes file, but you haven't implemented the `DogsController#destroy` action, you would be exposing an unused route. Instead, we give our resource an `only` option to explicitly say which ReSTful routes we want created. For example, if we only wanted the dogs index, new, and create actions, we could put this in our routes file. + +**config/routes.rb** + +```ruby +resources :dogs, only: [:index, :new, :create] +``` + +You can also use `except`, which will generate the 8 ReSTful routes *except* the ones specified. + +**config/routes.rb** + +```ruby +resources :dogs, except: [:destroy] +``` + +This would be the same as: + +**config/routes.rb** + +```ruby +resources :dogs, only: [:index, :show, :new, :create, :edit, :update] +``` + +Note: Generally its better to use `only` and not `except` because it’s easier to think in terms of positive rather than negative, and it’s preferred to use `only` instead of `except` even if it results in longer code. + +With a partner, refactor some of the ReSTful routes in SetList to use the `resources` syntax. + +## Nested Resources + +Some resources are logically dependent on other resources. In SetList, Songs can't exist without an Artist. + +If we look in our routes for SetList, we'll see: + +```ruby +get "/artists/:artist_id/songs/new", to: "songs#new" +``` + +When we want to make a new song, we need to know which artist we are making the song for. We can also accomplish this with the `resources` syntax by nesting with a `do` block: + +```ruby +resources :artists do + resources :songs +end +``` + +This will generate 8 ReSTful routes for artists *and* 8 ReSTful routes for songs that are nested under an artist. You can also use only/except for nested resources: + +```ruby +resources :artists, only: [:show] do + resources :songs, only: [:edit] +end +``` + +Just like before, we only want to create the routes we need. + +With a partner, refactor the nested routes in SetList to use the `resources` syntax. + +## What's the difference between Nested Resources and Namespacing? + +Namespacing a route is an organizational tool that helps us categorize routes. Take a look at this routes file: + +```ruby + resources :songs, only: [:index] + namespace :admin do + resources :songs, only: [:index, :show] + end +``` + +While this might look similar to nested resources, the routes it will produce are different. The paths listed under `namespace` will have `/admin/` tacked on the beginning of them, but `admin` itself is not a resource. It does not map to a database table like `artists` and it does not have associated IDs. In this case, prepending the routes with `admin` is purely for organization and categorization. Using namespacing is akin to putting existing routes in a folder called `admin`. Take a look at what `rails routes` will output for these routes. + +```ruby + Prefix Verb URI Pattern Controller#Action + songs GET /songs(.:format) songs#index + admin_songs GET /admin/songs(.:format) admin/songs#index + admin_song GET /admin/songs/:id(.:format) admin/songs#show +``` + +When creating a controller for actions that come from namespaced routes, it's conventional to declare the namespace title as a module, like so: + +`class Admin::SongsController < ApplicationController` + +The path for the above controller in the application's file directory would likely be `controllers/admin/songs_controller.rb`. Note the `admin` sub-directory. + +## Route Helpers + +If you run `rails routes`, you'll notice the first column is called "prefix". Rails will use the "prefix" column to build route helpers. + +Route helpers will generate a path for you (note: just the path, not the VERB). All you have to do is append `_path` to the end of the prefix name. For example, if you have this in your routes: + +```ruby +resources :dogs, only: [:index] +``` + +Then `rails routes -c dogs` should give you: + +```bash +Prefix Verb URI Pattern Controller#Action + dogs GET /dogs(.:format) dogs#index +``` + +Using that prefix `dogs` we can use `dogs_path` anywhere in our Rails app to generate the path `/dogs`. + +Generally, any row in your `rails routes` output that does not include a prefix uses the same prefix as the line above it. + +## Passing Parameters to Route Helpers + +Some paths include parameters. For example: + +```ruby +resources :dogs, only: [:show] +``` + +Gives you this `rails routes` output: + +```bash +Prefix Verb URI Pattern Controller#Action + dog GET /dogs/:id(.:format) dogs#show +``` + +You can’t generate the path using `dog_path` because it is expecting to be passed an `:id`. Any time a route helper needs a dynamic parameter like `:id`, we MUST pass a value to the route helper. For example, `dog_path(29)` will generate `/dogs/29`. + +We can also pass an object rather than the actual value of the parameter and Rails is smart enough to extract that object's id. This below, is considered best practice. + +```ruby +journey = Artist.create(name: 'Journey') +visit artist_path(journey) +``` + +Be careful. If you forget to pass a parameter to a route helper that needs it, the error message will start to look like a "missing route" error. Read the ENTIRE error, and it will actually tell you that the route helper is missing a parameter. + +## Partner Practice + +Refactor some of the code in setlist to use Route Helpers rather than hardcoded routes. + +## Checks for Understanding + +- What are the 7 ReSTful routes and their controller/actions? +- What routes would `resources :dogs, only: [:destroy, :index]` generate? +- What routes would the following generate? + +```ruby +resources :owners, only: [:index] do + resources :dogs, only: [:show] +end +``` + +- Why should you use `only`/`except`? +- How can you use the prefix column from `rails routes`? + + + +Completed code can be found on the `advanced-routing-complete` branch [here](https://github.com/turingschool-examples/set-list-7/tree/advanced-routing-complete). + + +## Additional Resources + +- [Video](https://www.loom.com/share/604d8bb6a2dc41f6b97dd9a0dc01272f) +- [Rails guides on routing](https://guides.rubyonrails.org/v7.0.4/routing.html#resource-routing-the-rails-default) \ No newline at end of file diff --git a/module2/lessons/index.md b/module2/lessons/index.md index a469db7b..7dfaa0ae 100644 --- a/module2/lessons/index.md +++ b/module2/lessons/index.md @@ -6,6 +6,9 @@ title: Module 2 - Lessons ## Introduction To Rails * [Beginner Rails Workshop](./beginner_rails_workshop) +## Rails Application and Development +* [Advanced Routing](./advanced_routing.md) + ## Professional Development * [Overview](./pd_overview) * [Building Your Brand on LinkedIn](https://docs.google.com/presentation/d/e/2PACX-1vS8CZUjYkpnkTJrp2Ga8um-UUFUsJ-5JA85FF9x875J-l_eKy7IyL47sAt8kl_FOlg7rG5ntVxpk5he/pub?start=false&loop=false&delayms=3000) From 16690de9e676a78480bf13dc72bf11397dfacb68 Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Fri, 12 Jul 2024 17:06:08 -0600 Subject: [PATCH 02/12] Begin adding prototype method content --- module2/lessons/index.md | 30 +- module2/lessons/js_prototype_methods.md | 411 ++++++++++++++++++++++++ 2 files changed, 431 insertions(+), 10 deletions(-) create mode 100644 module2/lessons/js_prototype_methods.md diff --git a/module2/lessons/index.md b/module2/lessons/index.md index ad53c17c..2a86d315 100644 --- a/module2/lessons/index.md +++ b/module2/lessons/index.md @@ -3,6 +3,19 @@ layout: page title: Module 2 - Lessons --- +## HTML/CSS +* [HTML: Fundamentals](./html_fundamentals) + + + + +## JavaScript + + + +* [JS: Prototype Methods](./js_prototype_methods) + + ## Introduction To Rails * [Beginner Rails Workshop](./beginner_rails_workshop) * [One to Many Relationships in the Database](./one_to_many_relationships_part1) @@ -10,25 +23,22 @@ title: Module 2 - Lessons * [Introduction to MVC](./intro_to_mvc) -## Professional Development -* [Overview](./pd_overview) -* [Building Your Brand on LinkedIn](https://docs.google.com/presentation/d/e/2PACX-1vS8CZUjYkpnkTJrp2Ga8um-UUFUsJ-5JA85FF9x875J-l_eKy7IyL47sAt8kl_FOlg7rG5ntVxpk5he/pub?start=false&loop=false&delayms=3000) -* [Networking, Outreach and Coffee Chats](./networking) -* [Networking](https://docs.google.com/presentation/d/e/2PACX-1vQa672IV-XwWG9q-ujEJ0w72QCBzf4jVMNI-trwLuKt9kk_ewe0l6Mk6YSWoo9UYMETbJ5RZ3akKyux/pub?start=false&loop=false&delayms=3000) -* [Getting Job Hunt Ready](https://docs.google.com/presentation/d/e/2PACX-1vTDlRAiXiR_PSsAFGQtP8je_pcUWmLdk1kYc4jO4hTyzxDuksNWUMdUITMNXp1pRFMM0gKDiAVyXL0c/pub?start=false&loop=false&delayms=3000) - ## Databases * [SQL and Active Record](./sql_and_active_record) * [Joins](./joins) -## HTML and CSS -* [HTML: Fundamentals](./html_fundamentals) - ## Active Record * [Class vs Instance Methods](./class_vs_instance_methods.md) +## Professional Development +* [Overview](./pd_overview) +* [Building Your Brand on LinkedIn](https://docs.google.com/presentation/d/e/2PACX-1vS8CZUjYkpnkTJrp2Ga8um-UUFUsJ-5JA85FF9x875J-l_eKy7IyL47sAt8kl_FOlg7rG5ntVxpk5he/pub?start=false&loop=false&delayms=3000) +* [Networking, Outreach and Coffee Chats](./networking) +* [Networking](https://docs.google.com/presentation/d/e/2PACX-1vQa672IV-XwWG9q-ujEJ0w72QCBzf4jVMNI-trwLuKt9kk_ewe0l6Mk6YSWoo9UYMETbJ5RZ3akKyux/pub?start=false&loop=false&delayms=3000) +* [Getting Job Hunt Ready](https://docs.google.com/presentation/d/e/2PACX-1vTDlRAiXiR_PSsAFGQtP8je_pcUWmLdk1kYc4jO4hTyzxDuksNWUMdUITMNXp1pRFMM0gKDiAVyXL0c/pub?start=false&loop=false&delayms=3000) + ## Additional Resources * [Chrome Dev Tools](./chrome_dev_tools) diff --git a/module2/lessons/js_prototype_methods.md b/module2/lessons/js_prototype_methods.md new file mode 100644 index 00000000..835c1140 --- /dev/null +++ b/module2/lessons/js_prototype_methods.md @@ -0,0 +1,411 @@ +--- +title: "JS: Array Prototype Methods" +length: 90 +tags: javascript, arrays, prototypes, mutator, accessor, callback functions +--- + +## Learning Goals + +* Be able to describe prototype methods, mutators and accessors +* Practice using MDN documentation +* Practice using array prototype methods for data manipulaton and problem solving +* Understand the use-cases for different prototype methods + +## Vocabulary + +- `Array Prototype` - methods that are built specifically for arrays. They help us change the arrays themselves or get certain information from or about the array. +- `Mutator` - methods that mutate, or change, the original array +- `Accessor` - methods that do not mutate the original array, rather just give us some information from or about the array +- `callback function` A function passed into another function as an argument, which is then invoked inside the outer function + +
+### Warm Up + +
+ +### Exploration + +In your notebook, brainstorm how you might complete the following challenges. Don't use any code. Pseudocode your thought process as a set of instructions; as step-by-step as possible. + +```javascript +var instructors = ["Erin", "Heather", "Abdul"]; +``` + +For the array above, +- Oops! We're missing an instructor in this array. We need to add "Kayla" to the list. What are the **instructions** you would want to tell the computer to take in order to add a new instructor to the array? +- I need to know if a certain instructor named "Heather" is in the instructors array. What are the **instructions** you would want to tell the computer to take in order to find out if "Heather" is included in the array? +- Extra: How would you programmatically find the number of elements in the array above? +
+ +
+### Discuss + +- Consider the processes you just thought through. Both of the challenges above are based on array prototype methods. One is based on a mutator method and one is based on an accessor method. Which do you think was which? Why? (Refer to the vocabulary terms above for a reminder on what `Mutator` and `Accessor` mean.) + +
+
+ + + + + + + + + + +## Prototype Methods +When working with data, we often want to do something _with_ that data, or do something _to_ that data. Programming languages have built in methods that help us do this. You've already worked with built-in Ruby methods like each, join, split, filter, map and more. Just like Ruby, JavaScript has built-in prototype methods that let us access or mutate data. + +As we use prototype methods, it's important to know if the method is, or isn't, modifying our original data. + +For example: +The **accessor method** [includes()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) lets us check if an element exists within an array. It doesn't modify or mutate the original array, it simply returns the information we're seeking about the array as `true` or `false`. + +```js +var instructors = ["Erin", "Heather", "Abdul"]; + +var instructorExists = instructors.includes('Heather'); + +console.log(instructorExists); // logs true +``` + +The **mutator method** [push()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) changes (mutates) the original array by adding an additional element to it at the end. + + +```js +var instructors = ["Erin", "Heather", "Abdul"]; + +instructors.push('Kayla'); + +console.log(instructors) // logs ["Erin", "Heather", "Abdul", "Kayla"]; +``` +
+ +## Array Iteration Prototype Methods + +Some of the most useful array prototype methods in JavaScript are the ones we can use to iterate over arrays. These iterator methods are a simpler, modern and more sophisticated option than reaching for a `for loop`. + +They allow us to loop through an existing array, looking at each element one at a time and applying a `callback function` to that element to do something _to_ or _with_ that element. + + +### Callback Functions + +Iteration prototype methods (such as forEach, filter, etc.) **take in a callback function as an argument**. The callback function is what takes in the mandatory and optional parameters! + +```js +someArrayData.somePrototypeMethod(function callBack (/* parameter(s) */) { + // some statements + // often a return statement +}) +``` + +Since these prototype methods were introduced as part of ES6, the document will show them written using a fat arrow like below. You are encouraged to use this same syntax for your iterator callbacks. +```js +someArrayData.somePrototypeMethod((/* parameter(s) */) => { + // some statements + // often a return statement +}) +``` + +
+### More on these callbacks + +Many callbacks require a return statement in order to work. When working with iterators (or really any code), we'll be putting that code within a well-named, reusable function so we can control exactly when that code is run. + +**You will often need *TWO* return statements in a function that has an iterator method inside it!** One return value will determine what the CALLBACK of the iterator return. This value may need to be captured in a variable. The other return value will determine what the METHOD returns which would be the 'final answer' or value you want to get back when running that function. + + + +Note that ES6 arrow functions have a "shortcut" syntax option that allows for *implicit return* - meaning that the function IS returning a value without having to use the `return` keyword. This is only possible in one-line arrow functions that do not open up curly braces. More on this later. +
+ + +We are going to focus on: +* `filter()` +* `forEach()` +* `map()` +* `reduce()` +* `sort()` + +## How to use `Array.filter(callbackFunction)` + +First, let's do `filter` together. The instructor will model how they would use documentation to research. + +
+### Exercises + +#### Example #1 +Return a new array of *odd* numbers using the `filter` prototype method. + +```js +const numbers = [1, 2, 3, 4, 5, 6, 7]; +``` + + +#### Example #2 +Create a new array of *living* beatles using the `filter` method and store them in a `livingBeatles` variable. +```js +var beatles = [ + { name: 'John', living: false, instruments: ['guitar', 'bass', 'piano'] }, + { name: 'Paul', living: true, instruments: ['bass', 'guitar', 'piano'] }, + { name: 'George', living: false, instruments: ['guitar', 'sitar'] }, + { name: 'Ringo', living: true, instruments: ['drums', 'bongos'] }, +]; +``` + +#### Example #3 +Create another array of beatles that play the guitar using the `filter` method and store them in a `guitarPlayingBeatles` variable. (*continue to use the data from above*) + +
+ + + +Note that depending on the syntax you use for your callback function, you may not need to explicitly write the `return` keyword. You can leverage the *implicit return* available in certain arrow function syntax. + +## How to use `Array.forEach(callbackFunction)` + +`forEach` is the prototype method that is most similar to a `for` loop. It simply iterates. It doesn't have additional built in functionality like some others (filter, map, etc). + +There are _occasional_ times when it makes more sense to use a for loop over something like a forEach. For example: + +- If you need to run something a specific number of times, you would want to use a `for` loop. `forEach` always iterates over every element in an array. +- If you want to stop (`break`) a `for` loop, you can do that. There is no way to stop a `forEach` loop. + + +
+### Exercises + +#### Example #1 +Using `forEach`, iterate over the array of prices, increase the price by $1, and add new increased prices to the `increasedPrices` array. + +```js +const prices = [4.99, 5.50, 7.00, 10.25]; +const increasedPrices = []; +``` + +#### Example #2 +- Using the dogs array above, log the dog's name and how many legs it has. + +```js +const dogs = [ + {name: "Fido", numLegs: 4}, + {name: "Greg", numLegs: 5} +]; + +// console output +=> 'Fido has 4 legs.' + 'Greg has 5 legs.' +``` + +
+ + + +## How to use `Array.map(callbackFunction)` + +
+### Exercises + +#### Example #1 +Using `map`, iterate over the array of prices, increase the price by $1, and return a new array of increased prices. Store them in a variable called `increasedPrices`. + +```js +const prices = [4.99, 5.50, 7.00, 10.25]; +``` + +#### Example #2 +Using an array of temperature data in Fahrenheit, convert the date to degrees Celsius and store them in a variable called `degreesC`. [Here is the formula](http://www.rapidtables.com/convert/temperature/how-fahrenheit-to-celsius.htm){:target='blank'} to convert from Fahrenheit to Celsius. + +```js +const degreesF = [67, 32, 55, 102] + +// console output +=> [19.44, 0, 12.77, 38.88] + ``` +
+ +
+### Important Takeaways + +Be sure to include these in your notes, if you haven't already! +* Use `map` when you want a new array based on your original, with some modification to each item. +* Although similar to `forEach`, each time the callback is executed in `map`, whatever is returned from the callback is added to the new array +* `map` will *ALWAYS* return a **new array of the same length** as the original array. +
+ + +## How to use `Array.find(callbackFunction)` + +
+### Exercises + +#### Example #1 +Find the first number that is greater than 20. + +```js +const numbers = [15, 6, 14, 2, 22, 9, 45]; +``` + + +#### Example #2 +Find the first pet that is three years old and store it in a `foundPet` variable. +```js +let pets = [ + { name: 'harvey', age: 1 }, + { name: 'julius', age: 3 }, + { name: 'mishu', age: 3 }, +]; +``` +
+ +
+### Important Takeaways + +Be sure to include these in your notes, if you haven't already! +* Useful for when you need to find a specific item in an array that matches a given condition. +* Always will return the first element where the callback function returns *true*. (even if there are other matches) +* The callback needs to return a **boolean**. You also cannot modify the element you're finding. +
+ +## How to use `Array.reduce(callbackFunction)` + +
+### Helpful Tips + +Note that the `reduce` method is slightly different than the previous iterator methods. `reduce` takes two arguments: + +_Callback Function_ - Within the callback, we have access to the accumulator, the current element in the iteration, the current element's index, and the original array we are looping over + +_Initial Value_ - The initial value to be used as the accumulator (the first argument to the first call of the callback). The accumulator is the *single value* that will eventually be returned. It's called an accumulator because each iteration over the array will modify the accumulator value until the loop is complete. +
+ +
+### Problem Set + +#### Example #1 +Using `reduce`, sum up all of the numbers. + +```js +const numbers = [1, 2, 3, 4, 5]; + +// console output +=> 15 +``` + +#### Example #2 +Using `reduce`, create a new object the stores the lengths of each word. + +```js +const adjectives = ['fantastic', 'amazing', 'childish']; + +// console output +=> { fantastic: 9, amazing: 7, childish: 8 } +``` +
+ +
+### Important Takeaways + +Be sure to include these in your notes, if you haven't already! +* Useful for turning an array into a single value, be it a number, string, object, or another array. +* Useful for returning one that is a combination / sum of values from an original array. +* Also useful for converting an array into another data type. +* REMEMBER...you must always return the *accumulator* in the callback function. +
+ +
+### Before we close out today... + +Take some time this afternoon to review what some of the highlights were for each prototype method. Often when trying to solve a problem, there isn't just one answer. Sometimes problems can be solved through a combination of prototype methods! We'll review these more tomorrow and continue working through a few more examples then! +
+ +## Reviewing Our Prototype Iterator Methods *(Day 2)* + +Now that we've had a chance to go through each of these iterator methods, let's review the highlights. Take a look at the activity below: + +
+### Exploration Activity + +Take a few minutes to consider the following questions for each of the iterator methods (`forEach`, `map`, `find`, `filter`, & `reduce`) +- What does the callback function return? +- What are the mandatory parameters? Optional parameters? +- What are common use cases? When would I use this method? + +As a class, let's go through these questions together in this [JamBoard](https://jamboard.google.com/d/1dMlfYlFx5alIyANQMLM8roC-cTy038c1iVfkg1o0hSk/edit?usp=sharing){:target='blank'}. +
+ +## Practice + +
+### More exercises + +The only way to get better and more comfortable with these prototype methods is to continue practicing them. Here are a [few more examples](https://github.com/turingschool-examples/iterator-methods-stations){:target='blank'} to work through. Focus on the prototype methods that are more challenging for you first! +
+ +
+### Checks for Understanding + +* What is a prototype method? +* Compare and contrast `filter` and `find`. +* Compare and contrast `forEach` and `map`. +* When might `reduce` be a useful method? +* Which prototype methods are the most confusing for you right now? +
+ +### Additional Resources +* [Why and when to use forEach, map, filter, reduce, and find in JavaScript](https://medium.com/@JeffLombardJr/understanding-foreach-map-filter-and-find-in-javascript-f91da93b9f2c){:target='blank'} +* [JavaScript Callback Functions - What are Callbacks in JS and How to Use Them](https://www.freecodecamp.org/news/javascript-callback-functions-what-are-callbacks-in-js-and-how-to-use-them/){:target='blank'} +* [Callback Functions MDN](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function){:target='blank'} + + + +Prototype methods exist for many data types, not just arrays. For example, [`split`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) is a string prototype method that breaks up a string into substrings and returns those substrings to us in an array. There is also a string prototype method [`includes`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) that acts similarly to the array prototype method `includes` used in an example previously. + +There are many array (and other data types) prototype methods we haven't touched in this lesson. Open the MDN documentation for the [`forEach()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) method and skim the left sidebar to see the other array prototype methods available to you. Rather than trying to learn all of those methods, it's enough to just know you can use MDN or simply google something like "remove specific element from array javascript" to find additional methods to meet specific needs as they arise. + + +To be prepared for final assessments (and interview code challenges), you should work towards fluency with the following methods: +- forEach +- filter +- map +- reduce +- sort +- push +- join +- includes +- split + +* **join()** - It joins all elements of an array into a single string. +* **split()** - It splits a string into an array of substrings. +* **includes()** - checks if +* **push()** - pushes a new element into an array (at the end) +* **forEach()** - pushes a new element into an array (at the end) +* **filter()** - pushes a new element into an array (at the end) +* **map()** - pushes a new element into an array (at the end) +* **reduce()** - pushes a new element into an array (at the end) +* **sort()** - pushes a new element into an array (at the end) \ No newline at end of file From 38a6be9ff034b8f6ba1386c6d017ad11cb160b82 Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Mon, 15 Jul 2024 14:24:14 -0600 Subject: [PATCH 03/12] Reorder presentation of methods --- module2/lessons/js_prototype_methods.md | 145 ++++++++++++------------ 1 file changed, 73 insertions(+), 72 deletions(-) diff --git a/module2/lessons/js_prototype_methods.md b/module2/lessons/js_prototype_methods.md index 835c1140..62b21a9b 100644 --- a/module2/lessons/js_prototype_methods.md +++ b/module2/lessons/js_prototype_methods.md @@ -21,7 +21,7 @@ tags: javascript, arrays, prototypes, mutator, accessor, callback functions
### Warm Up -
+ -
+
+* Use `map` when you want a new array based on your original, with some modification to each item. +* Although similar to `forEach`, each time the callback is executed in `map`, whatever is returned from the callback is added to the new array +* `map` will *ALWAYS* return a **new array of the same length** as the original array. + -## How to use `Array.map(callbackFunction)` +## How to use `Array.reduce(callbackFunction)` + +
+### Helpful Tips + +Note that the `reduce` method is slightly different than the previous iterator methods. `reduce` takes two arguments: + +_Callback Function_ - Within the callback, we have access to the accumulator, the current element in the iteration, the current element's index, and the original array we are looping over + +_Initial Value_ - The initial value to be used as the accumulator (the first argument to the first call of the callback). The accumulator is the *single value* that will eventually be returned. It's called an accumulator because each iteration over the array will modify the accumulator value until the loop is complete. +
-### Exercises +### Problem Set #### Example #1 -Using `map`, iterate over the array of prices, increase the price by $1, and return a new array of increased prices. Store them in a variable called `increasedPrices`. +Using `reduce`, sum up all of the numbers. ```js -const prices = [4.99, 5.50, 7.00, 10.25]; +const numbers = [1, 2, 3, 4, 5]; + +// console output +=> 15 ``` #### Example #2 -Using an array of temperature data in Fahrenheit, convert the date to degrees Celsius and store them in a variable called `degreesC`. [Here is the formula](http://www.rapidtables.com/convert/temperature/how-fahrenheit-to-celsius.htm){:target='blank'} to convert from Fahrenheit to Celsius. +Using `reduce`, create a new object the stores the lengths of each word. ```js -const degreesF = [67, 32, 55, 102] +const adjectives = ['fantastic', 'amazing', 'childish']; // console output -=> [19.44, 0, 12.77, 38.88] - ``` +=> { fantastic: 9, amazing: 7, childish: 8 } +```
-
+ - -## How to use `Array.find(callbackFunction)` +## How to use `Array.sort(callbackFunction)`
### Exercises @@ -283,7 +282,7 @@ let pets = [ ```
-
+ -## How to use `Array.reduce(callbackFunction)` -
-### Helpful Tips +## How to use `Array.forEach(callbackFunction)` -Note that the `reduce` method is slightly different than the previous iterator methods. `reduce` takes two arguments: +`forEach` is the prototype method that is most similar to a `for` loop. It simply iterates. It doesn't have additional built in functionality like some others (filter, map, etc). -_Callback Function_ - Within the callback, we have access to the accumulator, the current element in the iteration, the current element's index, and the original array we are looping over +There are _occasional_ times when it makes more sense to use a for loop over something like a forEach. For example: + +- If you need to run something a specific number of times, you would want to use a `for` loop. `forEach` always iterates over every element in an array. +- If you want to stop (`break`) a `for` loop, you can do that. There is no way to stop a `forEach` loop. -_Initial Value_ - The initial value to be used as the accumulator (the first argument to the first call of the callback). The accumulator is the *single value* that will eventually be returned. It's called an accumulator because each iteration over the array will modify the accumulator value until the loop is complete. -
-### Problem Set +### Exercises #### Example #1 -Using `reduce`, sum up all of the numbers. +Using `forEach`, iterate over the array of prices, increase the price by $1, and add new increased prices to the `increasedPrices` array. ```js -const numbers = [1, 2, 3, 4, 5]; - -// console output -=> 15 -``` +const prices = [4.99, 5.50, 7.00, 10.25]; +const increasedPrices = []; +``` #### Example #2 -Using `reduce`, create a new object the stores the lengths of each word. +- Using the dogs array above, log the dog's name and how many legs it has. ```js -const adjectives = ['fantastic', 'amazing', 'childish']; +const dogs = [ + {name: "Fido", numLegs: 4}, + {name: "Greg", numLegs: 5} +]; // console output -=> { fantastic: 9, amazing: 7, childish: 8 } +=> 'Fido has 4 legs.' + 'Greg has 5 legs.' ``` -
-
-### Important Takeaways +
+ + +* `forEach` is useful when you want to perform an operation on every element in an array. +* It is the prototype method that is most similar to a `for` loop and doesn't have additional built in functionality like some others (filter, map, etc) +* `forEach` does **NOT** return anything (even if you have a return statement). You can store element data into a variable, but the variable MUST exist outside of the `forEach`. +
+
### Before we close out today... From 7ec1c102e4b8c80021936d1f1db293f8c6f1f661 Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Mon, 15 Jul 2024 15:38:29 -0600 Subject: [PATCH 04/12] Add more examples --- module2/lessons/js_prototype_methods.md | 225 +++++++++++++++++------- 1 file changed, 166 insertions(+), 59 deletions(-) diff --git a/module2/lessons/js_prototype_methods.md b/module2/lessons/js_prototype_methods.md index 62b21a9b..c027d731 100644 --- a/module2/lessons/js_prototype_methods.md +++ b/module2/lessons/js_prototype_methods.md @@ -46,23 +46,6 @@ For the array above,
- - - - - - - - ## Prototype Methods When working with data, we often want to do something _with_ that data, or do something _to_ that data. Programming languages have built in methods that help us do this. You've already worked with built-in Ruby methods like each, join, split, filter, map and more. Just like Ruby, JavaScript has built-in prototype methods that let us access or mutate data. @@ -175,11 +158,14 @@ Be sure to include these in your notes, if you haven't already! * `filter` will return a new **array** with all elements that match a condition. * Useful for when you need to find a subset of elements in an array that matches a given condition. * The callback needs to return an express that evaluates to a **boolean** value of true or false. -* The matching elements are returned as they are. You cannot modify the element(s) you're filtering for. +* The matching elements are returned as they are. You cannot modify the element(s) you're filtering for within the filtering function. +* `filter` has the conditional logic built in (thats the point). You shouldn't need to write an if/else within a filter.
Note that depending on the syntax you use for your callback function, you may not need to explicitly write the `return` keyword. You can leverage the *implicit return* available in certain arrow function syntax. +
+ ## How to use `Array.map(callbackFunction)`
@@ -212,10 +198,12 @@ Be sure to include these in your notes, if you haven't already! * `map` will *ALWAYS* return a **new array of the same length** as the original array.
+
+ ## How to use `Array.reduce(callbackFunction)` -
-### Helpful Tips +
-### Problem Set +### Exercises #### Example #1 Using `reduce`, sum up all of the numbers. @@ -258,13 +246,60 @@ Be sure to include these in your notes, if you haven't already! * REMEMBER...you must always return the *accumulator* in the callback function.
+
+ ## How to use `Array.sort(callbackFunction)` + + + +As you check out the docs on the `sort` method, ask yourself: +- Is sort an accessor or mutator method? +- What does sort return? +- Within the callback function, how do I sort in ascending order? How do I sort in descending order? +
### Exercises #### Example #1 -Find the first number that is greater than 20. +Sort the numbers in ascending order. ```js const numbers = [15, 6, 14, 2, 22, 9, 45]; @@ -272,25 +307,43 @@ const numbers = [15, 6, 14, 2, 22, 9, 45]; #### Example #2 -Find the first pet that is three years old and store it in a `foundPet` variable. +Write a function `sortDescending(numbers)`that takes in the number array from above as an argument and returns the array with the number sorted in descending order. + + +#### Example #3 +Write a function `sortCitiesByPopulation(cities)` that takes an array of cities and uses the sort method to sort the cities based on their population in descending order. Return the array of sorted cities. + ```js -let pets = [ - { name: 'harvey', age: 1 }, - { name: 'julius', age: 3 }, - { name: 'mishu', age: 3 }, +const cities = [ + { name: 'New York', population: 8398748, country: 'United States' }, + { name: 'Tokyo', population: 37393000, country: 'Japan' }, + { name: 'London', population: 8908081, country: 'United Kingdom' }, + { name: 'Mumbai', population: 12478447, country: 'India' } ]; -``` + +console.log(sortCitiesByPopulation(cities)); +// Output: [ +// { name: 'Tokyo', population: 37393000, country: 'Japan' }, +// { name: 'Mumbai', population: 12478447, country: 'India' }, +// { name: 'London', population: 8908081, country: 'United Kingdom' } +// { name: 'New York', population: 8398748, country: 'United States' }, +// ] +``` +
+
## How to use `Array.forEach(callbackFunction)` @@ -345,6 +398,12 @@ Be sure to include these in your notes, if you haven't already! Take some time this afternoon to review what some of the highlights were for each prototype method. Often when trying to solve a problem, there isn't just one answer. Sometimes problems can be solved through a combination of prototype methods! We'll review these more tomorrow and continue working through a few more examples then!
+
+ +--- + +
+ ## Reviewing Our Prototype Iterator Methods *(Day 2)* Now that we've had a chance to go through each of these iterator methods, let's review the highlights. Take a look at the activity below: @@ -368,13 +427,88 @@ As a class, let's go through these questions together in this [JamBoard](https:/ The only way to get better and more comfortable with these prototype methods is to continue practicing them. Here are a [few more examples](https://github.com/turingschool-examples/iterator-methods-stations){:target='blank'} to work through. Focus on the prototype methods that are more challenging for you first! +## Not just arrays + +Prototype methods exist for many data types, not just arrays. For example, [`split`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) is a string prototype method that breaks up a string into substrings and returns those substrings to us in an array. There is also a string prototype method [`includes`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) that acts similarly to the array prototype method `includes` used in our accessor example from part 1 of this lesson. + +There are many array (and other data types) prototype methods we haven't touched in this lesson. Open the MDN documentation for the [`forEach()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) method and skim the left sidebar to see the other array prototype methods available to you. Rather than trying to learn all of those methods, it's enough to just know you can use MDN or simply google something like "remove specific element from array javascript" to find additional methods to meet specific needs as they arise. + +## More Practice + + + + +## Assessment Prep + +To be prepared for final assessments (and interview code challenges), you should work daily towards fluency with the following methods: +* **join()** - joins all elements of an array into a single string. +* **split()** - splits a string into an array of substrings. +* **includes()** - checks if an element (or string) is included in the original array (or string) +* **push()** - pushes a new element into an array (at the end) +* **forEach()** - iterates over each element in an array letting you do something to (or with) each element. Cannot return a value. +* **filter()** - iterates over each element in an array and returns a new array of only the elements that match the specified condition +* **map()** - iterates over each element in an array and returns a new array of the same length with the modified elements +* **reduce()** - iterates over each element in an array and returns a single value (the accumulator) of your specifications +* **sort()** - iterates over each element in an array and sorts the elements (in place) based on your specified sorting +
### Checks for Understanding * What is a prototype method? -* Compare and contrast `filter` and `find`. +* What is a callback function? * Compare and contrast `forEach` and `map`. * When might `reduce` be a useful method? +* When sorting an array of objects, how do you control which property is being used to sort the objects? * Which prototype methods are the most confusing for you right now?
@@ -383,30 +517,3 @@ The only way to get better and more comfortable with these prototype methods is * [JavaScript Callback Functions - What are Callbacks in JS and How to Use Them](https://www.freecodecamp.org/news/javascript-callback-functions-what-are-callbacks-in-js-and-how-to-use-them/){:target='blank'} * [Callback Functions MDN](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function){:target='blank'} - - -Prototype methods exist for many data types, not just arrays. For example, [`split`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) is a string prototype method that breaks up a string into substrings and returns those substrings to us in an array. There is also a string prototype method [`includes`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) that acts similarly to the array prototype method `includes` used in an example previously. - -There are many array (and other data types) prototype methods we haven't touched in this lesson. Open the MDN documentation for the [`forEach()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) method and skim the left sidebar to see the other array prototype methods available to you. Rather than trying to learn all of those methods, it's enough to just know you can use MDN or simply google something like "remove specific element from array javascript" to find additional methods to meet specific needs as they arise. - - -To be prepared for final assessments (and interview code challenges), you should work towards fluency with the following methods: -- forEach -- filter -- map -- reduce -- sort -- push -- join -- includes -- split - -* **join()** - It joins all elements of an array into a single string. -* **split()** - It splits a string into an array of substrings. -* **includes()** - checks if -* **push()** - pushes a new element into an array (at the end) -* **forEach()** - pushes a new element into an array (at the end) -* **filter()** - pushes a new element into an array (at the end) -* **map()** - pushes a new element into an array (at the end) -* **reduce()** - pushes a new element into an array (at the end) -* **sort()** - pushes a new element into an array (at the end) \ No newline at end of file From 649b720f2fd0fe2005eabe6512dbda79e4c67c4a Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Mon, 15 Jul 2024 16:14:34 -0600 Subject: [PATCH 05/12] Rename to array prototype methods --- module2/lessons/index.md | 2 +- .../{js_prototype_methods.md => js_array_prototype_methods.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename module2/lessons/{js_prototype_methods.md => js_array_prototype_methods.md} (100%) diff --git a/module2/lessons/index.md b/module2/lessons/index.md index 2a86d315..45e324ad 100644 --- a/module2/lessons/index.md +++ b/module2/lessons/index.md @@ -13,7 +13,7 @@ title: Module 2 - Lessons -* [JS: Prototype Methods](./js_prototype_methods) +* [JS: Array Prototype Methods](./js_array_prototype_methods) ## Introduction To Rails diff --git a/module2/lessons/js_prototype_methods.md b/module2/lessons/js_array_prototype_methods.md similarity index 100% rename from module2/lessons/js_prototype_methods.md rename to module2/lessons/js_array_prototype_methods.md From 66db68a3f1b84751859883a1796baf57323c3c68 Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Mon, 15 Jul 2024 16:22:19 -0600 Subject: [PATCH 06/12] Update day two warmup --- module2/lessons/js_array_prototype_methods.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/module2/lessons/js_array_prototype_methods.md b/module2/lessons/js_array_prototype_methods.md index c027d731..9ce3740a 100644 --- a/module2/lessons/js_array_prototype_methods.md +++ b/module2/lessons/js_array_prototype_methods.md @@ -86,7 +86,7 @@ They allow us to loop through an existing array, looking at each element one at Iteration prototype methods (such as forEach, filter, etc.) **take in a callback function as an argument**. The callback function is what takes in the mandatory and optional parameters! ```js -someArrayData.somePrototypeMethod(function callBack (/* parameter(s) */) { +someArrayData.forEach(function callBack (/* parameter(s) */) { // some statements // often a return statement }) @@ -94,14 +94,14 @@ someArrayData.somePrototypeMethod(function callBack (/* parameter(s) */) { Since these prototype methods were introduced as part of ES6, the document will show them written using a fat arrow like below. You are encouraged to use this same syntax for your iterator callbacks. ```js -someArrayData.somePrototypeMethod((/* parameter(s) */) => { +someArrayData.forEach((/* parameter(s) */) => { // some statements // often a return statement }) ```
-### More on these callbacks +### Common stumbling blocks Many callbacks require a return statement in order to work. When working with iterators (or really any code), we'll be putting that code within a well-named, reusable function so we can control exactly when that code is run. @@ -411,12 +411,12 @@ Now that we've had a chance to go through each of these iterator methods, let's
### Exploration Activity -Take a few minutes to consider the following questions for each of the iterator methods (`forEach`, `map`, `find`, `filter`, & `reduce`) -- What does the callback function return? +Take a few minutes to jot down notes (again) or a create a visual for the iterator methods (`forEach`, `map`, `filter`, `sort` & `reduce`) +- What does the method (really the callback function) return? - What are the mandatory parameters? Optional parameters? - What are common use cases? When would I use this method? -As a class, let's go through these questions together in this [JamBoard](https://jamboard.google.com/d/1dMlfYlFx5alIyANQMLM8roC-cTy038c1iVfkg1o0hSk/edit?usp=sharing){:target='blank'}. +
## Practice From 99d2b7413943dffb45c602fbbe25ceac13d621cb Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Wed, 17 Jul 2024 16:10:34 -0600 Subject: [PATCH 07/12] Pull DOM lesson into se curriculum --- .../lessons/assets/images/dom/dom-tree.png | Bin 0 -> 48399 bytes module2/lessons/assets/images/dom/html.png | Bin 0 -> 58604 bytes .../lessons/assets/images/dom/inner-text.png | Bin 0 -> 72507 bytes module2/lessons/index.md | 4 +- module2/lessons/js_intro_to_dom.md | 230 ++++++++++++++++++ 5 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 module2/lessons/assets/images/dom/dom-tree.png create mode 100644 module2/lessons/assets/images/dom/html.png create mode 100644 module2/lessons/assets/images/dom/inner-text.png create mode 100644 module2/lessons/js_intro_to_dom.md diff --git a/module2/lessons/assets/images/dom/dom-tree.png b/module2/lessons/assets/images/dom/dom-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5565e7ba92f67ce7fd3c8216545a4a7da76ee0 GIT binary patch literal 48399 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 z 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

g08 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 literal 0 HcmV?d00001 diff --git a/module2/lessons/assets/images/dom/inner-text.png b/module2/lessons/assets/images/dom/inner-text.png new file mode 100644 index 0000000000000000000000000000000000000000..15979210d48ef25c6442b0a17e991080a9b0a77f GIT binary patch literal 72507 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 - ## HTML and CSS * [HTML: Fundamentals](./html_fundamentals) * [CSS: Fundamentals](./css_fundamentals) +## JS and DOM +* [JS: Intro to the DOM](./js_intro_to_dom) + ## Active Record * [Class vs Instance Methods](./class_vs_instance_methods.md) diff --git a/module2/lessons/js_intro_to_dom.md b/module2/lessons/js_intro_to_dom.md new file mode 100644 index 00000000..ff30d680 --- /dev/null +++ b/module2/lessons/js_intro_to_dom.md @@ -0,0 +1,230 @@ +--- +title: "JS: Intro to the DOM" +length: 120 +tags: javascript, dom, browser +--- + +## Learning Goals + +* Access and use the Chrome Developer Tools +* Continue to develop a basic understanding for JavaScript syntax +* Understand how to query DOM elements and update a page after its been loaded + +## Vocabulary + +- `HTML Element` A building block that makes up the structure of a web page. +- `CSS Selector` A way to identify a set of elements to which a set of CSS styles apply, typically using a tag, class or id. +- `Interface` a shared boundary across which two separate components exchange information. +- `DOM` Document Object Model, the JS interface used to interact with HTML + + +## Warm Up + +Head over to [Josh W Comeau's website](https://joshwcomeau.com/)! Take 90 seconds to explore! + +- Click the little sun icon to toggle dark mode! +- Open dropdown menus! +- Mouse over the blog category buttons + +

+### In Your Notebook + +Let's focus on the light-mode/dark-mode toggle button. How do you think this bit of functionality was built? Brainstorm for 2 minutes in your notebook. +
+ +## Document Object Model + +The Document Object Model, DOM, is an interface for HTML. It is what allows us to use JavaScript to manipulate the elements or content of elements on a page. Think about a form on a website (maybe signing up to use an application, or paying for your food delivery). Somehow, JavaScript has to know what was typed into an input field, know that the submission button was clicked, and be able to do whatever needs to happen next (maybe showing you a confirmation message). If we didn't have the DOM, this wouldn't be possible. + +Once the browser runs/interprets our HTML, it creates the DOM. The DOM represents what is in the HTML, but it is formatted in a way that we can interact with those elements via JavaScript. It is _not_ the exact same thing as your HTML document. + +Here's a small HTML file: + + + +Here's the DOM tree that would be created: + + + +Image credit: [bitsofcode](https://bitsofco.de/what-exactly-is-the-dom/). + +This is an abstract concept and can be hard to wrap your mind around - we'll come back to it. For now, you need to know two things: +1. The DOM is essential to building functionality on a page +2. We can use the `document` variable in our JavaScript file to interact with the DOM. From there, we can travel through the DOM and ask for specific elements, or instruct the program to change elements. + +
+### Check It Out + +In your browser dev tools, type in `document`. Click that small arrow to the left of the output. +- What do you see? +- Where else can you find that content? +
+ +At any time, you can call `document` to access the DOM. This is very close to the same thing as viewing the document in the Elements panel of the Dev Tools. We won't get into the details of those small differences; if you are interested, start by reading [this blog post](https://bitsofco.de/what-exactly-is-the-dom/). + +## Accessing a Specific Element + +Our `document` object - it really is a object! - comes built-in with a lot of methods we can use. Today, we will learn about `.querySelector()`. This method allows us to request a specific element from the DOM tree, by its selector. It uses the same syntax for selectors that CSS does. Here's an example: + +```javascript +var title = document.querySelector('h1'); + +title; + +//=>

JS: Intro to the DOM

+``` + +
+### Explore + +Open the Dev Tools while you are looking at this lesson. In the console, paste this in: + +`var box = document.querySelector('.call-to-action');` + +Then, call the `box` variable (by typing in `box`, then hitting `return`). + +**Discuss with your partner:** +- What is returned? +- Where does that element appear in the browser? +- There are several sections with that class name on this page - why do you think that only _one_ of them is stored in the `box` variable? +- Is there a unique identifier on each of those sections that we could use if we wanted to be more specific when querying? +
+ +## Updating Content of an Element + +So far, we haven't made much headway in terms of _doing_ anything - but we've built some important foundations. It is now time to learn how to update the content of an element we've accessed. + +We'll continue using our `title` variable for this example. + +```javascript +var title = document.querySelector('h1'); +``` + +Since our `title` variable stores a DOM element, we now have access to another set of properties and methods that are built for DOM elements. We won't learn about all of them today. We'll focus on `innerText`, and time permitting `innerHTML`. + +### `innerText` + +The [innerText](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText) property holds the text that lives inside of a given element. Right now, the content inside of the `h1` on this page is `Intro to DOM Manipulation` so that is what the `innerText` is. We can use the assignment operator to change it. + + + +After running the code in the console that is pictured above, the text of the `h1` changed from `Intro to DOM Manipulation` to `Hello, World!`. Now, this may feel a bit disconnected because we know that we usually write our JavaScript in a file in our text editor, not in the Dev Tools. **If we wrote this in the JavaScript file associated with the page, we'd have the exact same result.** To reinforce this, you're going to have some time to practice applying this concept. + +
+### Try It + +Fork [this CodePen](https://codepen.io/turing-school/pen/bGGmOrR) and complete the steps listed below, in the `JS` file of the CodePen. + +- Declare a variable `studentName` and assign the value of the element with the class of `student` to it +- Declare a variable `schoolName` and assign the value of the `h3` element to it +- Declare a variable `bestGrade` and assign the value of the element with a class of `grade-2` to it +- Declare a variable `newData` and assign an object with keys of `studentName`, `schoolName`, and `bestGrade` (whose values are new strings with whatever information you want to display on the page instead) to it +- Change the `innerText` of the `studentName` variable to the `studentName` value from your `newData` object +- Change the `innerText` of the `schoolName` variable to the `schoolName` value from your object +- Change the `innerText` of the `bestGrade` variable to be the grade you gave your `bestGrade` key in your object +
+ +### `innerHTML` + +The [innerHTML](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML) property essentially works the same, but has the capacity to do something a little more complex for us. + +It can not only insert plain text, but it can insert HTML elements. For the example below, we will go back to using the "call to action" box. + +```javascript +var box = document.querySelector('#try-it'); + +var pageData = { + title: "Pizza is Tasty", + body: "Yum!" +} + +box.innerHTML = ` +

${pageData.title}

+

${pageData.body}

+`; +``` + +BEFORE you run this code, consider....what do you think is happening? What do you think will happen when it's run? + +Try running this code in the browser and see what happens to the "Try It" box just above on the page! + +## Changing Styles Programmatically + +It isn't rare to see an application change the color of something after a user interacts with it. + +We see things like... +- Toggling light and dark mode +- A grey check mark turn into a green one +- A box or button changing colors once we've already clicked it, or visited that link +... on almost a daily basis! + +We talked earlier about how powerful the DOM is because it allows us to interact with HTML elements via JavaScript. This also gives us the power to **modify the styles applied to said elements** via JavaScript. + +We will briefly discuss two ways to do this: +1. Directly manipulate the style of the element through inline styles +2. **Add or remove classes from the element** (the preferred way). + +### Directly Manipulate the Style of the Element + +We can use dot notation to call the `.style` property on an element, then reference any CSS property and assign a new style value. + +
+### Change My Border! + +We'll use inline styling to change the border of this box to blue. +Type or copy/paste the code snippet below into the dev tools to see it change! +
+ +```javascript +var box = document.querySelector('#change-my-border-box'); + +box.style.borderColor = "blue"; +``` + +We actually avoid inline styling because we usually want to make more than one tiny change and each inline style change requires it's own line of code. This can make for long functions that are difficult to read. Adding or removing classes (examples below) is strongly preferred. Plus, that lets us keep all our styling declarations in one place - the CSS file. Much more maintainable! + +
+### Then Why Bring It Up? + +Often times, your instructors at Turing will share with you an overview of something, including the multiple ways something can be done, but tell you that one is preferred. Why do we bother to bring up the less-than-ideal approaches? + +As a developer, a huge part of your job is researching and learning on your own. That will also be a huge part of being a student at Turing. You'll sift through documentation, blog posts, and Stack Overflow posts. It's important to be familiar with the multiple ways of doing things, different syntax, best practices, etc. so you can more easily sift through those resources and determine what is good and helpful. +
+ +### Add or Remove Classes from the Element + +Since it's common to need to change multiple CSS declarations, we can instead add or remove a class from the list of classes a given element has on it. + +
+### Check It Out + +Fork [this CodePen](https://codepen.io/hannahhudson/pen/JjyKBpW) and follow the directions below: +- Read through the code that is currently written, and observe the result in the mini-browser +- Un-comment line 3. What changed about the button? What remained the same? +- Un-comment line 4. What changed about the button? What remained the same? +
+ +Typically, if you are going to add/remove a class via JavaScript, that class should be declared **below** the class that originally styled the given element. This is because of the cascading nature of CSS; any time rules conflict, the rule declared lower on the sheet will take precedence. + +Read up on [this documentation](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList) to learn how to **remove** a class from an elements classList! Hint: `toggle` may soon be a friend of yours, as well! + +## Wrap Up + +Let's take a few minutes to look back at what we've started to learn! + +
+### One more time... + +Head back over to [Josh W Comeau's website](https://joshwcomeau.com/). Look around again, with new eyeballs. + +In your notebook, add to the brainstorming you did at the beginning of the lesson. Knowing what you know now, how do you think Josh accomplished his light-mode/dark-mode functionality? + +What else about the DOM do you think you would need to know to build something like this yourself? +
+ +### Suggested re-teaching practice + +In order to keep learning about the DOM and DOM manipulation, here are some suggestions: + +- Use CodePen to practice creating HTML elements to interact with using JavaScript +- Practice manipulating the DOM of various websites through the developer tools, using `document.querySelector()` - have fun creating ridiculous things to screenshot \ No newline at end of file From 132df32cff4dceb3d4fdb7df32697a0106067732 Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Wed, 17 Jul 2024 16:26:34 -0600 Subject: [PATCH 08/12] Add clarify notes for CSS bits --- module2/lessons/js_intro_to_dom.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/module2/lessons/js_intro_to_dom.md b/module2/lessons/js_intro_to_dom.md index ff30d680..8bd7961e 100644 --- a/module2/lessons/js_intro_to_dom.md +++ b/module2/lessons/js_intro_to_dom.md @@ -158,9 +158,9 @@ We see things like... - A box or button changing colors once we've already clicked it, or visited that link ... on almost a daily basis! -We talked earlier about how powerful the DOM is because it allows us to interact with HTML elements via JavaScript. This also gives us the power to **modify the styles applied to said elements** via JavaScript. +We talked earlier about how powerful the DOM is because it allows us to interact with HTML elements via JavaScript. This also gives us the power to **modify the styles applied to said elements** via JavaScript. -We will briefly discuss two ways to do this: +Even though you haven't yet learned CSS, we will briefly discuss two ways to do this: 1. Directly manipulate the style of the element through inline styles 2. **Add or remove classes from the element** (the preferred way). @@ -204,10 +204,14 @@ Fork [this CodePen](https://codepen.io/hannahhudson/pen/JjyKBpW) and follow the - Un-comment line 4. What changed about the button? What remained the same?
-Typically, if you are going to add/remove a class via JavaScript, that class should be declared **below** the class that originally styled the given element. This is because of the cascading nature of CSS; any time rules conflict, the rule declared lower on the sheet will take precedence. - Read up on [this documentation](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList) to learn how to **remove** a class from an elements classList! Hint: `toggle` may soon be a friend of yours, as well! +In summary, in your CSS file you can apply styles to a specific class selector - like a "pink" class. Then, in your JS file, you can use `button.classList.add('pink')` to apply all those styles at once by adding that "pink" class to the specified button. + +Note that if you are going to add/remove a class via JavaScript, that class should be declared **below** the original styling for the given element in the CSS file. This is because of the cascading nature of CSS; any time rules conflict, the rule declared lower on the sheet will take precedence. + + + ## Wrap Up Let's take a few minutes to look back at what we've started to learn! From 427676db8aa169b138a32bd566c00bea6fbb2519 Mon Sep 17 00:00:00 2001 From: Zoe Farrell Date: Thu, 18 Jul 2024 08:40:46 -0600 Subject: [PATCH 09/12] Make Battleship Live --- module1/projects/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module1/projects/index.md b/module1/projects/index.md index 7093dae6..c7edf1a1 100644 --- a/module1/projects/index.md +++ b/module1/projects/index.md @@ -15,7 +15,7 @@ The project specs will be linked below as each project is assigned. - Week 2-3 (Solo): [DMV](./dmv/) -- Week 3-4 (Paired): TBD +- Week 3-4 (Paired): [Battleship](./battleship/) - Week 5-6 (Group Final): TBD ## Additional Projects and Resources From 520bd5dd14d12dda4b9f886d2dc3635a7f2a4853 Mon Sep 17 00:00:00 2001 From: Kat Brandt Date: Thu, 18 Jul 2024 10:04:13 -0600 Subject: [PATCH 10/12] update lesson --- module2/lessons/advanced_routing.md | 47 ++++++++++++++++++++--------- module2/lessons/index.md | 2 +- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/module2/lessons/advanced_routing.md b/module2/lessons/advanced_routing.md index cb45b9b8..d5995ca8 100644 --- a/module2/lessons/advanced_routing.md +++ b/module2/lessons/advanced_routing.md @@ -17,11 +17,11 @@ layout: page - namespace ## Set Up -For part of this lesson we'll use the `advanced-routing` branch of the Set List Tutorial [here](https://github.com/turingschool-examples/set-list-7/tree/advanced-routing). +For part of this lesson we'll use the [`advanced-routing`](https://github.com/turingschool-examples/set-list-api/tree/advanced-routing-start) branch of the Set List Tutorial. ## Warm Up -In your notebook, without using your computer, fill in the following table for the 8 ReSTful routes for a generic "resource” +In your notebook, without using your computer, fill in the following table for the 5 ReSTful routes for a generic "resource” Include the following for each: @@ -29,9 +29,26 @@ Include the following for each: - URI Pattern - Controller#Action + + ## Rails Resources -Rails gives us a handy shortcut for generating the 8 ReSTful routes in our routes.rb file. Open up any Rails app, such as SetList, and add the following line anywhere in your routes file: +Rails gives us a handy shortcut for generating the 5 ReSTful routes in our routes.rb file. Open up any Rails app, such as SetList, and add the following line anywhere in your routes file: **config/routes.rb** @@ -41,19 +58,19 @@ resources :dogs Run `rails routes -c dogs` from the command line. The `-c` stands for controller, so it will only show you routes for the dogs. -With a partner, explore what this output gives you. +Explore what this output gives you. ## Only/Except -You never want to create routes that you haven't implemented in your code. If you have `resources :dogs` in your routes file, but you haven't implemented the `DogsController#destroy` action, you would be exposing an unused route. Instead, we give our resource an `only` option to explicitly say which ReSTful routes we want created. For example, if we only wanted the dogs index, new, and create actions, we could put this in our routes file. +You never want to create routes that you haven't implemented in your code. If you have `resources :dogs` in your routes file, but you haven't implemented the `DogsController#destroy` action, you would be exposing an unused route. Instead, we give our resource an `only` option to explicitly say which ReSTful routes we want created. For example, if we only wanted the dogs index, and create actions, we could put this in our routes file. **config/routes.rb** ```ruby -resources :dogs, only: [:index, :new, :create] +resources :dogs, only: [:index, :create] ``` -You can also use `except`, which will generate the 8 ReSTful routes *except* the ones specified. +You can also use `except`, which will generate the 5 ReSTful routes *except* the ones specified. **config/routes.rb** @@ -66,7 +83,7 @@ This would be the same as: **config/routes.rb** ```ruby -resources :dogs, only: [:index, :show, :new, :create, :edit, :update] +resources :dogs, only: [:index, :show, :create, :update] ``` Note: Generally its better to use `only` and not `except` because it’s easier to think in terms of positive rather than negative, and it’s preferred to use `only` instead of `except` even if it results in longer code. @@ -80,7 +97,7 @@ Some resources are logically dependent on other resources. In SetList, Songs can If we look in our routes for SetList, we'll see: ```ruby -get "/artists/:artist_id/songs/new", to: "songs#new" +post "/artists/:artist_id/songs", to: "songs#create" ``` When we want to make a new song, we need to know which artist we are making the song for. We can also accomplish this with the `resources` syntax by nesting with a `do` block: @@ -91,17 +108,17 @@ resources :artists do end ``` -This will generate 8 ReSTful routes for artists *and* 8 ReSTful routes for songs that are nested under an artist. You can also use only/except for nested resources: +This will generate 5 ReSTful routes for artists *and* 5 ReSTful routes for songs that are nested under an artist. You can also use only/except for nested resources: ```ruby resources :artists, only: [:show] do - resources :songs, only: [:edit] + resources :songs, only: [:update] end ``` Just like before, we only want to create the routes we need. -With a partner, refactor the nested routes in SetList to use the `resources` syntax. +Take a moment to refactor the nested routes in SetList to use the `resources` syntax. ## What's the difference between Nested Resources and Namespacing? @@ -176,13 +193,13 @@ visit artist_path(journey) Be careful. If you forget to pass a parameter to a route helper that needs it, the error message will start to look like a "missing route" error. Read the ENTIRE error, and it will actually tell you that the route helper is missing a parameter. -## Partner Practice +## Practice Refactor some of the code in setlist to use Route Helpers rather than hardcoded routes. ## Checks for Understanding -- What are the 7 ReSTful routes and their controller/actions? +- What are the 5 ReSTful routes and their controller/actions? - What routes would `resources :dogs, only: [:destroy, :index]` generate? - What routes would the following generate? @@ -197,7 +214,7 @@ end -Completed code can be found on the `advanced-routing-complete` branch [here](https://github.com/turingschool-examples/set-list-7/tree/advanced-routing-complete). +Completed code can be found on the `advanced-routing-complete` branch [here](https://github.com/turingschool-examples/set-list-api/tree/advanced-routing-refactored). ## Additional Resources diff --git a/module2/lessons/index.md b/module2/lessons/index.md index 6392d0da..d04ff306 100644 --- a/module2/lessons/index.md +++ b/module2/lessons/index.md @@ -11,7 +11,7 @@ title: Module 2 - Lessons * [Introduction to MVC](./intro_to_mvc) ## Rails Application and Development -* [Advanced Routing](./advanced_routing.md) +* [Advanced Routing](./advanced_routing) ## Professional Development * [Overview](./pd_overview) From 6b6a5f78631fe152dc2579b8e9f1d5fb18988226 Mon Sep 17 00:00:00 2001 From: Juliet Eyraud <103968576+juliet-e@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:24:17 -0500 Subject: [PATCH 11/12] Update advanced_routing.md --- module2/lessons/advanced_routing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module2/lessons/advanced_routing.md b/module2/lessons/advanced_routing.md index d5995ca8..9e025498 100644 --- a/module2/lessons/advanced_routing.md +++ b/module2/lessons/advanced_routing.md @@ -17,7 +17,7 @@ layout: page - namespace ## Set Up -For part of this lesson we'll use the [`advanced-routing`](https://github.com/turingschool-examples/set-list-api/tree/advanced-routing-start) branch of the Set List Tutorial. +For part of this lesson we'll use the [`advanced-routing-start`](https://github.com/turingschool-examples/set-list-api/tree/advanced-routing-start) branch of the Set List Tutorial. ## Warm Up @@ -220,4 +220,4 @@ Completed code can be found on the `advanced-routing-complete` branch [here](htt ## Additional Resources - [Video](https://www.loom.com/share/604d8bb6a2dc41f6b97dd9a0dc01272f) -- [Rails guides on routing](https://guides.rubyonrails.org/v7.0.4/routing.html#resource-routing-the-rails-default) \ No newline at end of file +- [Rails guides on routing](https://guides.rubyonrails.org/v7.0.4/routing.html#resource-routing-the-rails-default) From 3d91040986e7b3775de2fea3bba1c3d2b8d41a4b Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Fri, 19 Jul 2024 07:58:05 -0700 Subject: [PATCH 12/12] Fix typos --- module2/lessons/js_array_prototype_methods.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module2/lessons/js_array_prototype_methods.md b/module2/lessons/js_array_prototype_methods.md index 9ce3740a..170f7275 100644 --- a/module2/lessons/js_array_prototype_methods.md +++ b/module2/lessons/js_array_prototype_methods.md @@ -8,7 +8,7 @@ tags: javascript, arrays, prototypes, mutator, accessor, callback functions * Be able to describe prototype methods, mutators and accessors * Practice using MDN documentation -* Practice using array prototype methods for data manipulaton and problem solving +* Practice using array prototype methods for data manipulation and problem solving * Understand the use-cases for different prototype methods ## Vocabulary @@ -463,8 +463,8 @@ const libraryBooks = [ 'Lord of the Flies' ]; -console.log(checkLibrary("Moby Dick"); //true -console.log(checkLibrary("The Color Purple"); //false +console.log(checkLibrary("Moby Dick")); //true +console.log(checkLibrary("The Color Purple")); //false ```