Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on May 14, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions 6 .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"cSpell.words": [
"orgs",
"repos"
]
}
6 changes: 3 additions & 3 deletions 6 README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ Here you can find course content and homework for the JavaScript3 modules

|Week|Topic|Read|Homework|
|----|-----|----|--------|
|1.|• [Object Oriented Programming and Classes](../../../fundamentals/blob/master/fundamentals/oop_classes.md)<br>• [The `this` keyword](../../../fundamentals/blob/master/fundamentals/this.md) |[Reading Week 1](/Week1/README.md)|[Homework Week 1](/Week1/MAKEME.md)|
|2.|• Structure for a basic SPA (Single Page Application) <br>• [XMLHttpRequests](../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) <br>• API calls|[Reading Week 2](/Week2/README.md)|[Homework Week 2](/Week2/MAKEME.md)|
|3.|• [Promises](../../../fundamentals/blob/master/fundamentals/promises.md)<br> • (re)writing data structures (in JSON) <br>• Async vs Sync <br>• [Event Loop (order of execution)](../../../fundamentals/blob/master/fundamentals/event_loop.md) |[Reading Week 3](/Week3/README.md)|[Homework Week 3](/Week3/MAKEME.md)|
|1.|• Structure for a basic SPA (Single Page Application) <br>• [XMLHttpRequests](../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) <br>• API calls|[Reading Week 1](/Week1/README.md)|[Homework Week 1](/Week1/MAKEME.md)|
|2.|• Async vs Sync <br>• [Event Loop (order of execution)](../../../fundamentals/blob/master/fundamentals/event_loop.md)<br>• [Promises](../../../fundamentals/blob/master/fundamentals/promises.md)|[Reading Week 2](/Week2/README.md)|[Homework Week 2](/Week2/MAKEME.md)|
|3.|• [Object Oriented Programming and ES6 Classes](../../../fundamentals/blob/master/fundamentals/oop_classes.md)<br>• [The `this` keyword](../../../fundamentals/blob/master/fundamentals/this.md)<br>• call, apply, bind |[Reading Week 3](/Week3/README.md)|[Homework Week 3](/Week3/MAKEME.md)|

__Kind note:__

Expand Down
185 changes: 76 additions & 109 deletions 185 Week1/MAKEME.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,168 +2,135 @@

```
Topics discussed this week:
• Object Oriented Programming
• this
• call
• apply
• bind
• Code flow (order of execution)
• Structure for a basic SPA
• XMLHttpRequests
• API calls
```

>[Here](/Week2/README.md) you find the readings you have to complete before the eighth lecture.

## Step 1: Give feedback
>[Here](/Week3/README.md) you find the readings you have to complete before the ninth lecture.

_Deadline Monday_
## Step 1: Feedback

Give feedback on Step 4 and 5 of last weeks homework. Please provide the feedback in an issue.
_Deadline Monday_

## Step 2: Issues
Please provide feedback in an issue.

_Deadline Monday_

- Solve all your Git issues. DO NO CLOSE AN ISSUE WITHOUT AN EXPLANATION OR CODE COMMIT REFERENCING THAT ISSUE.
## Step 2: FINISH ALL YOUR JAVASCRIPT HOMEWORK

_Deadline Saturday_

## Step 3: Fix issues
:point_up:

_Deadline Thursday_
## Step 3: SPA :sweat_drops:

- Fix the issues from the last weeks and make sure you explain how you fixed the issue in a comment (or commit message)
_Deadline Saturday_

## Step 4: Some Challenges
You are going to write a SPA (Single Page Application) that uses the [GitHub API](https://developer.github.com/guides/getting-started/).

_Deadline Saturday_
This application should display information about the available [HYF repositories](https://github.com/hackyourfuture):

- You should be able to select a repository from a list of available repositories.
- The application should display high-level information about the selected repository and show a list of its contributors.

Figure 1 below shows an example of what your application could look like. Note that this is just an example. If you find it boring or unimaginative, please improve on it! On the other hand, a simpler version is OK too, so long as you implement the expected functionality.

Let's practice working with Objects and Arrays. Go to FreeCodeCamp and complete all challenges under "Object Oriented and Functional Programming" and the _first four challenges_ under "Basic Algorithm Scripting", up until 'Find the longest word in a string.'
![UI Example](./assets/hyf-github.png)

Also make:
Figure 1. Example User Interface using [Material Design](https://material.io/guidelines/) principles.

1. [Comparisons with the Logical And Operator](https://www.freecodecamp.com/challenges/comparisons-with-the-logical-and-operator)
### Instructions

2. [Record Collection](https://www.freecodecamp.com/challenges/record-collection)
1. Create this application in the `week1` folder of your `hyf-javascript1` repo. Your application should at minimum consist of the files `index.html`, `style.css` and `app.js`.
2. Your `index.html` file should load the `style.css` and `app.js` files, using the appropriate HTML tags.
3. The `body` of your `index.html` should contain a single `div` element like this: `<div id="root"></div>`.
4. All other HTML elements should be generated programmatically by your `app.js` file and ultimately be hanging off the root `div` element.
5. Implement the repository selection list by means of an HTML [\<select\>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select) element.

3. [Iterate over Arrays with map](https://www.freecodecamp.com/challenges/iterate-over-arrays-with-map)
You will need to use XMLHttpRequests against the GitHub API to get the relevant information. The GitHub API documentation is very extensive. An overview is given [here](https://developer.github.com/v3/) but we will point you to the relevant sections in the documentation needed for this assignment.

## Step 5: OOP
#### List of repositories

_Deadline Wednesday_
You can obtain a list of HYF repositories through this API endpoint ([What is an API Endpoint?](https://teamtreehouse.com/community/what-is-an-api-endpoint)):

Complete the following code:
```
https://api.github.com/orgs/HackYourFuture/repos?per_page=100
```

```js
class Movie {
constructor(title, director) {
// add your code here
}
GitHub API documentation: [List organization repositories](https://developer.github.com/v3/repos/#list-organization-repositories)

getTitle() {
// add your code here
}
Note the query string `?per_page=100`. If you don't specify this query string you will only get the first 30 repositories (the default `per_page` is 30 and HYF has more than 30 - but less than 100).

getDirector() {
// add your code here
}
#### Get repository information

addStar(star) {
// add your code here
}
You can get information about a specific repository through this API endpoint:

getStars() {
// add your code here
}
```
https://api.github.com/repos/HackYourFuture/[repositoryName]
```

addWriter(writer) {
// add your code here
}
You should replace `[repositoryName]` with the actual name of the repository.

getWriters() {
// add your code here
}
GitHub API documentation: [Get](https://developer.github.com/v3/repos/#get)

addRating(rating) {
// add your code here
}
### Get contributor information

getAverageRating() {
// add your code here
}
The response object that is returned by GitHub from the request to get repository information includes a property with the `contributors_url`. Use the value of this property to make a new request to GitHub to obtain a list of contributors.

// ... Add yours :-) Look to IMDB for inspiration
}
Note that, as a result of selecting a repository from the `<select>` element, your code must make two XMLHttpRequests, one after the other:

class StaffMember {
constructor(name, role, dateOfBirth) {
// add your code here
}
1. A first request to obtain repository information.
2. A second request using the `contributors_url` obtained from (1) to get a list of contributor information.

addMovie(movie) {
// add your code here
}
Both requests must be done asynchronously.

getName() {
// add your code here
}
Making two XMLHttpRequests in a row, where the second requests depends on the response of the first request is part of the assignment. While it is possible to figure out beforehand what the value of the `contributors_url` will be (by carefully reading the documentation), and subsequently make two independent XMLHttpRequests, this is not what is expected.

getRole() {
// add your code here
}
In the lecture we developed some utility functions to simplify making XMLHttpRequests and creating and manipulating HTML elements. You are free to copy and use these utility functions, but if you do we expect that you can explain how they work.

getAge() {
// add your code here
}
}
### Refinements

// Pick your favorite movie from http://www.imdb.com/
- Make all the repositories link to their own page in GitHub. Use the value of the key: `name` to make this work (hint: GitHub urls always look like this https://api.github.com/repos/HackYourFuture/[repositoryName] where [repositoryName] would be replaced by the actual `name` of the repository, for example `CommandLine`).
- Make sure the link opens in a new tab.

const myMovie = new Movie(...);

const firstActor = new StaffMember(...);
myMovie.addStar(firstActor);
// create and add more staff members
### Important

// Make sure that the following actions work.
console.log(myMovie.getStars().map(actor => `${actor.getName()} ${actor.getAge()}`));
const director = myMovie.getDirector();
console.log(`Director: ${director.getName()}`);
```
- Do not duplicate code! This is especially important for making requests since we are making multiple ones with different urls and we want to do different actions based on the call we are making. Here are some handles to get you started:
- Write a function called `fetchJSON` (or copy from the lecture code) which accepts (at least) the following parameters: `url` and `callback`.
- Make sure your `callback` is called when the request errors or when it sends a response (look at the documentation)
- Your `callback` functions should accept two parameters so it can handle both errors: `err` and `response`.
So when a user selects a repository from the list you want to call `fetchJSON` with a different `url` and supply it with a function that handles both errors (display an error message to the user for example) and responses (render it correctly as HTML elements in your page).
- When the user changes the selected repository, any existing repository information in your page should be cleared before displaying the new information.
- Make your functions small and reusable (modular)! That means create separate functions to handle certain steps.

Fun extra step: If you get bored, template them and make a page by rendering the results in HTML :smile: with something like `document.querySelector('.move').innerHTML = ...`
Note:

## Step 6: Read before next lecture
1. Please remove all redundant, commented-out code and console.log's from your files before pushing your homework as finished. There is no need for your mentors to review this stuff.
2. Please make sure your code is well-formatted and follows the recommended naming conventions.

_Deadline Sunday morning_
_GO WILD_

Go trough the reading material in the [README.md](/Week2/README.md) to prepare for your next class
Again, check out the GitHub API documentation to see what kind of magic stuff you can do with it.

## _BONUS_ : Code Kata Race
The assignment is to implement something extra that is not in the assignment :scream: (nice and vague, right?)

If you haven't already join our clan: "Hack Your Future" in codewars
Endless fun and possibilities. Need inspiration? Check out the GitHub API documentation. Oh, and please make it look nice (hint: use the stuff you learned in HTML/CSS)!

Solve the following problems:
- [Problem 1](https://www.codewars.com/kata/keep-up-the-hoop)
- [Problem 2](https://www.codewars.com/kata/find-the-first-non-consecutive-number)
- [Problem 3](https://www.codewars.com/kata/negation-of-a-value)
- Some more [Homework](https://www.codewars.com/collections/hyf-homework-1)

_Hints_
- Hint for Q1: split your code into two parts, one part for the case that one of the two strings has an extra letter at the start or the end but is otherwise identical & one part for the case that the strings are the same length but one character is different in one of the strings
- Also for Q1 this function on strings might be useful: [JavaScript String slice() method](https://www.w3schools.com/jsref/jsref_slice_string.asp)
- Also potentially useful: [JavaScript String charAt() Method](https://www.w3schools.com/jsref/jsref_charat.asp)
- [Hint for Q2](https://www.w3schools.com/jsref/jsref_sort.asp) Also there are no sample tests, you need to use submit
_BONUS_ : Code Kata Race

Remember the person with the most kata points gets a prize from Gijs (and you can do exercises on this website without us assigning them - anything kyu 7 or kyu 8 you can try to do - kyu 6 or lower is probably too hard) -->
- [Codewars](https://www.codewars.com/collections/hyf-homework-number-2)

-[MORE BONUS](https://www.codewars.com/collections/hyf-homework-1-bonus-credit) :collision:

## To watch before the next lecture:
## Step 5: Read before next lecture

(watch in this order)
_Deadline Sunday morning_

1. [Stacks/Queues](https://www.youtube.com/watch?v=wjI1WNcIntg) (5 mins)
2. [JS Event Loops](https://www.youtube.com/watch?v=8aGhZQkoFbQ) (26 mins, watch this one twice or until you understand it)
Go trough the reading material in the [README.md](/Week2/README.md) to prepare for your next class.

>Create a new repository "hyf-javascript3". Also create a new folder "week1" inside this repository.
Upload your homework files inside the week1 folder and write a description for this “commit”.
Your hyf-javascript3/week1 should now contain the files of your homework.
Place the link to your repository folder in Trello.
>Commit and push your homework in your "hyf-javascript3" GitHub repository.
Make sure that your commit message are meaningful.
Place the link to your repository folder in Trello.
32 changes: 13 additions & 19 deletions 32 Week1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,21 @@

```
In week one we will discuss the following topics:
• (Object Oriented Programming)
• this
• call
• apply
• bind
• Promises
• Structure for a basic SPA (Single Page Application)
• XMLHttpRequests
• API calls
```

### Here are resources that we like you to read as a preparation for the coming lecture:
Here are resources that we like you to read as a preparation for the first lecture:

### `call` `apply`, `bind`
- [Function.prototype.call()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)
- [Function.prototype.apply()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)
- [Function.prototype.bind()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)
### Fundamentals

#### Promises
Some nice resources about promises :ring:
- [Googles post about Promises](https://developers.google.com/web/fundamentals/getting-started/primers/promises)
- [A nice article from David Walsh](https://davidwalsh.name/promises)
- [A real life example](https://github.com/mdn/js-examples/blob/master/promises-test/index.html)
- [stackoverflow](http://stackoverflow.com/questions/13343340/calling-an-asynchronous-function-within-a-for-loop-in-javascript)
- [promises](https://www.youtube.com/watch?v=WBupia9oidU)
- [XMLHttpRequest](../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md)

_Please go through the material and come to class prepared!_
### APIs

- Read about APIS: https://www.programmableweb.com/api-university/what-are-apis-and-how-do-they-work

### XMLHttpRequests

- [Making HTTP Requests in JavaScript](https://www.kirupa.com/html5/making_http_requests_js.htm)
Binary file added BIN +69.6 KB Week1/assets/hyf-github.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 38 additions & 0 deletions 38 Week1/lecture/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true
},
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"sourceType": "module"
},
"extends": ["eslint:recommended"],
"rules": {
"no-const-assign": "warn",
"no-this-before-super": "warn",
"no-undef": "warn",
"no-unreachable": "warn",
"no-unused-vars": "warn",
"constructor-super": "warn",
"valid-typeof": "warn",
"no-var": "warn",
"prefer-const": "warn",
"no-multiple-empty-lines": "warn",
"eol-last": ["error", "always"],
"no-console": "off",
"camelcase": "warn",
"eqeqeq": [
"error",
"always",
{
"null": "ignore"
}
],
"semi": ["warn", "always"]
}
}
Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.