diff --git a/.github/workflows/hugo.yml b/.github/workflows/hugo.yml index 2464ce1..5d3d9b7 100644 --- a/.github/workflows/hugo.yml +++ b/.github/workflows/hugo.yml @@ -30,7 +30,7 @@ jobs: build: runs-on: ubuntu-latest env: - HUGO_VERSION: 0.108.0 + HUGO_VERSION: 0.130.0 steps: - name: Install Hugo CLI run: | diff --git a/.gitmodules b/.gitmodules index 943e664..44727c0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,9 @@ [submodule "layouts"] path = layouts url = https://github.com/LaunchCode-Hugo-Submodules/layouts -[submodule "static"] - path = static - url = https://github.com/LaunchCode-Hugo-Submodules/static [submodule "archetypes"] path = archetypes url = https://github.com/LaunchCode-Hugo-Submodules/archetypes +[submodule "assets"] + path = assets + url = https://github.com/LaunchCode-Hugo-Submodules/assets diff --git a/archetypes b/archetypes index 995b515..4d21cb1 160000 --- a/archetypes +++ b/archetypes @@ -1 +1 @@ -Subproject commit 995b515ca3806baa6f30769a296c32e13cdd426b +Subproject commit 4d21cb17d5d5f445563299c7f3012b3d22601a07 diff --git a/static b/assets similarity index 100% rename from static rename to assets diff --git a/config.toml b/config.toml index b351ea1..dedcab7 100644 --- a/config.toml +++ b/config.toml @@ -6,7 +6,7 @@ theme = "hugo-theme-relearn" canonifyURLs = true [outputs] - home = ["HTML", "RSS", "JSON"] + home = ["HTML", "RSS", "SEARCH"] [params] themeVariant = ["lc-light", "lc-dark-blue", "lc-dark-blue-two"] diff --git a/content/assignments/techjobs-console/_index.md b/content/assignments/techjobs-console/_index.md index 2402a0a..dc5d904 100644 --- a/content/assignments/techjobs-console/_index.md +++ b/content/assignments/techjobs-console/_index.md @@ -66,15 +66,15 @@ Blake has now handed the task off to you. You must add a couple of features and then get feedback from the Company Team. After you work through the tasks Blake has laid out for you, tackle one -or more of the [bonus missions]({{< relref "./submission/#bonus-missions" >}}). +or more of the [bonus missions]({{% relref "./submission/#bonus-missions" %}}). ## Getting Started {{% notice blue Note "rocket" %}} -You may need to enable actions within your github repository if you have not done so already. Please refer back to the instructions on how to do so in the [Running the Autograding Tests through Github Actions]({{< relref "../hello-world/#running-the-autograding-tests-through-github-actions" >}}) section of `Assignment 0` +You may need to enable actions within your github repository if you have not done so already. Please refer back to the instructions on how to do so in the [Running the Autograding Tests through Github Actions]({{% relref "../hello-world/#running-the-autograding-tests-through-github-actions" %}}) section of `Assignment 0` {{% /notice %}} -In Canvas, **Graded Assignment #1: TechJobs Console** contains a GitHub starter code repo link. Fork the repository to your personal profile, copy the repo’s URL for cloning, and open up IntelliJ. and then set up the project in IntelliJ. Refer back to the setup instructions from [assignment 0]({{< relref "../hello-world/#getting-started" >}}) for more details. +In Canvas, **Graded Assignment #1: TechJobs Console** contains a GitHub starter code repo link. Fork the repository to your personal profile, copy the repo’s URL for cloning, and open up IntelliJ. and then set up the project in IntelliJ. Refer back to the setup instructions from [assignment 0]({{% relref "../hello-world/#getting-started" %}}) for more details. Before diving in and starting to code, make sure you understand what the code you've been given does. Since you're starting with a functioning---albeit diff --git a/content/assignments/techjobs-console/submission/index.md b/content/assignments/techjobs-console/submission/index.md index 0037f2e..ec3a3ea 100644 --- a/content/assignments/techjobs-console/submission/index.md +++ b/content/assignments/techjobs-console/submission/index.md @@ -28,7 +28,7 @@ Before submitting, make sure that your application: {{< youtube Ai9ceGDWkac >}} ### How to Submit -To turn in your assignment and get credit, follow the [submission instructions]({{< relref "../../hello-world/#submitting-your-work-on-canvas" >}}). +To turn in your assignment and get credit, follow the [submission instructions]({{% relref "../../hello-world/_index.md#submitting-your-work-on-canvas" %}}). ### Bonus Missions diff --git a/content/assignments/techjobs-mvc/getting-started/_index.md b/content/assignments/techjobs-mvc/getting-started/_index.md index f4de722..f5d0c4e 100644 --- a/content/assignments/techjobs-mvc/getting-started/_index.md +++ b/content/assignments/techjobs-mvc/getting-started/_index.md @@ -16,10 +16,10 @@ lastMod: 2023-09-23T09:59:59-05:00 # UPDATE ANY TIME CHANGES ARE MADE Set up a local copy of the project: -1. In Canvas, **Graded Assignment #3: TechJobs (MVC Edition)** contains a GitHub repo link. Fork, clone, and then set up the project in IntelliJ. Refer back to the instructions from [Assignment 0]({{< relref "../../hello-world/#getting-started">}}) for details. +1. In Canvas, **Graded Assignment #3: TechJobs (MVC Edition)** contains a GitHub repo link. Fork, clone, and then set up the project in IntelliJ. Refer back to the instructions from [Assignment 0]({{% relref "../../hello-world/#getting-started" %}}) for details. 1. Launch the application (via the Gradle pane, *Tasks > Application > bootRun*) to make sure it starts up. Then shut it down. -1. Run the autograding tests. The tests for this assignment are set up the same way as for [Assignment 2]({{< relref "../../techjobs-oo/task7/#run-the-tests" >}}). There are four tasks for this assignment, but the first doesn't require any coding on your part. Therefore, there are 3 test files (for tasks 2-4). As with Assignment 2, we recommend that you only run the tests for the task you are currently working on. +1. Run the autograding tests. The tests for this assignment are set up the same way as for [Assignment 2]({{% relref "../../techjobs-oo/task7/#run-the-tests" %}}). There are four tasks for this assignment, but the first doesn't require any coding on your part. Therefore, there are 3 test files (for tasks 2-4). As with Assignment 2, we recommend that you only run the tests for the task you are currently working on. ## Review the Code diff --git a/content/assignments/techjobs-mvc/submission/_index.md b/content/assignments/techjobs-mvc/submission/_index.md index e3fc710..7258df6 100644 --- a/content/assignments/techjobs-mvc/submission/_index.md +++ b/content/assignments/techjobs-mvc/submission/_index.md @@ -20,7 +20,7 @@ You might also want to check your app's behavior against that of [our demo app]( ## How to Submit -To turn in your assignment and get credit, follow the [submission instructions]({{< relref "../../hello-world/#submitting-your-work-on-canvas" >}}). +To turn in your assignment and get credit, follow the [submission instructions]({{% relref "../../hello-world/#submitting-your-work-on-canvas" %}}). ## Bonus Missions diff --git a/content/assignments/techjobs-oo/_index.md b/content/assignments/techjobs-oo/_index.md index bb153e7..afcf4a2 100644 --- a/content/assignments/techjobs-oo/_index.md +++ b/content/assignments/techjobs-oo/_index.md @@ -44,10 +44,10 @@ In this project, you’ll show that you can: ### Get the Starter Code {{% notice blue Note "rocket" %}} -You may need to enable actions within your github repository if you have not done so already. Please refer back to the instructions on how to do so in the [Running the Autogtrading Tests through Github Actions]({{< relref "../hello-world/#running-the-autograding-tests-through-github-actions" >}}) section of `Assignment 0` +You may need to enable actions within your github repository if you have not done so already. Please refer back to the instructions on how to do so in the [Running the Autogtrading Tests through Github Actions]({{% relref "../hello-world/#running-the-autograding-tests-through-github-actions" %}}) section of `Assignment 0` {{% /notice %}} -In Canvas, **Graded Assignment #2: Object-Oriented Edition** contains a GitHub starter code repo link. Fork the repository to your personal profile, copy the repo’s URL for cloning, and open up IntelliJ. and then set up the project in IntelliJ. Refer back to the setup instructions from [assignment 0]({{< relref "../hello-world/#getting-started" >}}) for more details. +In Canvas, **Graded Assignment #2: Object-Oriented Edition** contains a GitHub starter code repo link. Fork the repository to your personal profile, copy the repo’s URL for cloning, and open up IntelliJ. and then set up the project in IntelliJ. Refer back to the setup instructions from [assignment 0]({{% relref "../hello-world/#getting-started" %}}) for more details. ## Introduction Sally has gotten the ball rolling by adding a `Job` class, along with classes to represent the individual properties of a job: `Employer`, `Location`, `PositionType`, and `CoreCompetency`. She completed the Employer class, and she left you the task of filling in the others. @@ -112,7 +112,7 @@ If we were to store these four new properties as strings within the `Job` class, ### Running the Autograding Tests -Before diving into your tasks, review [Assignment #0: Hello, World!]({{< relref "../hello-world/_index.md" >}}) for details on running the autograding tests for this assignment. This assignment has many more tests than the previous two, so we’ve organized them into separate files. +Before diving into your tasks, review [Assignment #0: Hello, World!]({{% relref "../hello-world/_index.md" %}}) for details on running the autograding tests for this assignment. This assignment has many more tests than the previous two, so we’ve organized them into separate files. {{< rawhtml >}} File tree image @@ -150,4 +150,4 @@ The list below provides a general overview of your assigned tasks. Specific deta 1. Use TDD to design and code a custom `toString` method for the `Job` class. 1. Use inheritance to DRY the code within `Employer`, `Location`, `CoreCompetency`, and `PositionType`. -[Next]({{< relref "../../../assignments/techjobs-oo/task1/index.md" >}}) +[Next]({{% relref "../../../assignments/techjobs-oo/task1/index.md" %}}) diff --git a/content/assignments/techjobs-oo/task1/index.md b/content/assignments/techjobs-oo/task1/index.md index c8ca38e..026d91f 100644 --- a/content/assignments/techjobs-oo/task1/index.md +++ b/content/assignments/techjobs-oo/task1/index.md @@ -50,5 +50,5 @@ public class Employer { 1. The second constructor (lines 11 - 14) assigns `aValue` to the `value` field. However, it ALSO initializes `id` for the object by calling the first constructor with the `this();` statement. Including `this();` in any `Employer` constructor makes initializing id a default behavior. -[Next]({{< relref "../../../assignments/techjobs-oo/task2/index.md" >}}) +[Next]({{% relref "../../../assignments/techjobs-oo/task2/index.md" %}}) diff --git a/content/assignments/techjobs-oo/task2/index.md b/content/assignments/techjobs-oo/task2/index.md index df250ca..8459aaa 100644 --- a/content/assignments/techjobs-oo/task2/index.md +++ b/content/assignments/techjobs-oo/task2/index.md @@ -46,13 +46,13 @@ Be careful, though. If you forget to remove `setID`, then users can change the ` Open the class file. This time the constructors, getters, and setters are done. Sally’s comments direct you to where you need to add the custom methods. 1. Code a `toString` method that just returns the `value` of a `PositionType` object. -1. Use the _Generate_ option again to add the `equals` and `hashCode` methods. Refer to the [Classes and Objects Part 2]({{< relref "../../../../classes-part-2/reading/intellij-shortcut/index.md" >}}) IntelliJ Generator Shortcut section if you need a quick review. +1. Use the _Generate_ option again to add the `equals` and `hashCode` methods. Refer to the [Classes and Objects Part 2]({{% relref "../../../../classes-part-2/reading/intellij-shortcut/index.md" %}}) IntelliJ Generator Shortcut section if you need a quick review. 1. Assume that two `PositionType` objects are equal when their id fields match. {{% notice green "Tip" "rocket" %}} Now would be a good time to `save`, `commit`, and `push` your work up to GitHub. {{% /notice %}} -[Next]({{< relref "../../../assignments/techjobs-oo/task3/index.md" >}}) +[Next]({{% relref "../../../assignments/techjobs-oo/task3/index.md" %}}) diff --git a/content/assignments/techjobs-oo/task3/index.md b/content/assignments/techjobs-oo/task3/index.md index c5ec6e3..aee0d8e 100644 --- a/content/assignments/techjobs-oo/task3/index.md +++ b/content/assignments/techjobs-oo/task3/index.md @@ -28,4 +28,4 @@ Now open the `Job` file. OOF! There are a lot of fields declared and not much el Now would be a good time to `save`, `commit`, and `push` your work up to GitHub. {{% /notice %}} -[Next]({{< relref "../../../assignments/techjobs-oo/task4/index.md" >}}) +[Next]({{% relref "../../../assignments/techjobs-oo/task4/index.md" %}}) diff --git a/content/assignments/techjobs-oo/task4/index.md b/content/assignments/techjobs-oo/task4/index.md index bf978e4..9cc3a28 100644 --- a/content/assignments/techjobs-oo/task4/index.md +++ b/content/assignments/techjobs-oo/task4/index.md @@ -113,5 +113,5 @@ Time to `save`, `commit`, and `push` your work to GitHub again. {{% /notice %}} -[Next]({{< relref "../../../assignments/techjobs-oo/task5/index.md" >}}) +[Next]({{% relref "../../../assignments/techjobs-oo/task5/index.md" %}}) diff --git a/content/assignments/techjobs-oo/task5/index.md b/content/assignments/techjobs-oo/task5/index.md index 3a0c20a..c518dcd 100644 --- a/content/assignments/techjobs-oo/task5/index.md +++ b/content/assignments/techjobs-oo/task5/index.md @@ -66,4 +66,4 @@ In the `Job` class, create a `toString` method that passes the first test. Since Cool! Your `Job` class is now complete and operates as desired. -[Next]({{< relref "../../../assignments/techjobs-oo/task6/index.md" >}}) \ No newline at end of file +[Next]({{% relref "../../../assignments/techjobs-oo/task6/index.md" %}}) \ No newline at end of file diff --git a/content/assignments/techjobs-oo/task6/index.md b/content/assignments/techjobs-oo/task6/index.md index 740ac6d..fefa39a 100644 --- a/content/assignments/techjobs-oo/task6/index.md +++ b/content/assignments/techjobs-oo/task6/index.md @@ -68,4 +68,4 @@ Rerun your unit tests to verify that your classes and methods still work. You know you need to do this, but here is the reminder anyway. `Save`, `commit`, and `push` your work to GitHub. {{% /notice %}} -[Next]({{< relref "../../../assignments/techjobs-oo/task7/index.md" >}}) \ No newline at end of file +[Next]({{% relref "../../../assignments/techjobs-oo/task7/index.md" %}}) \ No newline at end of file diff --git a/content/assignments/techjobs-persistent/_index.md b/content/assignments/techjobs-persistent/_index.md index 51b515c..daf45a9 100644 --- a/content/assignments/techjobs-persistent/_index.md +++ b/content/assignments/techjobs-persistent/_index.md @@ -18,7 +18,7 @@ You will once again work with the `Tech Jobs` application. This time around you' functionality by using Spring Data. You will be responsible for completing the code to allow users to create new job data. -Your final application will have the same list and search capabilities as your [Tech Jobs (MVC Edition)]({{< relref "../techjobs-mvc" >}}) but +Your final application will have the same list and search capabilities as your [Tech Jobs (MVC Edition)]({{% relref "../techjobs-mvc" %}}) but you'll need to do the work to connect the project to a database for storing user-submitted job data. Each of the four sections of this assignment will also ask you to demonstrate your SQL skills under an item labelled **SQL TASK**. diff --git a/content/assignments/techjobs-persistent/part-four/index.md b/content/assignments/techjobs-persistent/part-four/index.md index a736a13..4a34ea0 100644 --- a/content/assignments/techjobs-persistent/part-four/index.md +++ b/content/assignments/techjobs-persistent/part-four/index.md @@ -40,7 +40,7 @@ As before, there are a few tests in `TestTaskFour` that have been commented out ## Updating `HomeController`, Again You next need to wire `HomeController` with the skills data in order to add skills objects to a new job. -This will look almost precisely like what you have done for employer data above. Refer back to [that section]({{< relref "../part-three/index.md#updating-homecontroller" >}}) to inject the controller with skill data. +This will look almost precisely like what you have done for employer data above. Refer back to [that section]({{% relref "../part-three/index.md#updating-homecontroller" %}}) to inject the controller with skill data. There is, however, one difference to keep in mind. The job form being processed only accepts one employer by an `id` field. Many skills can be added to a single job, though. Here's what we'll say about how to send the right skills along with the job form. @@ -64,7 +64,7 @@ As with a job's employer, you only need to query your database for skills if the ## It's Your Job, List It and Re-Search It -You now have all the tools in place to re-implement the list and search views from [TechJobs MVC]({{< relref "../../techjobs-mvc" >}}). +You now have all the tools in place to re-implement the list and search views from [TechJobs MVC]({{% relref "../../techjobs-mvc/_index.md" %}}). 1. In the `ListController` class, add fields for `EmployerRepository ` and `SkillRepository`, both annotated with `@Autowired`. 1. You'll also need to pass the employer and skill data from those repositories into the view template rendered at `list/`. Add the right `model.addAttribute(name, value)` statements to pass this info into `templates/list.html`. diff --git a/content/assignments/techjobs-persistent/part-one/index.md b/content/assignments/techjobs-persistent/part-one/index.md index a6683f0..c46481e 100644 --- a/content/assignments/techjobs-persistent/part-one/index.md +++ b/content/assignments/techjobs-persistent/part-one/index.md @@ -49,4 +49,4 @@ locally in the browser at `http://localhost:8080` (unless of course you have cha Your running application still has limited functionality. You won't yet be able to add a job with the *Add Job* form. You also won't yet be able to view the list of jobs or search for jobs - but this is mostly because you have no job data. Move on to -[Part 2]({{< relref "../part-two/index.html" >}}) below to start adding these functionalities. \ No newline at end of file +[Part 2]({{% relref "../part-two/index.html" %}}) below to start adding these functionalities. \ No newline at end of file diff --git a/content/assignments/techjobs-persistent/part-three/index.md b/content/assignments/techjobs-persistent/part-three/index.md index d8130e9..0d5e612 100644 --- a/content/assignments/techjobs-persistent/part-three/index.md +++ b/content/assignments/techjobs-persistent/part-three/index.md @@ -70,4 +70,4 @@ You have changed the architecture of your job table. You will still be able to a The *List* and *Search* functionality still isn't quite fixed so to view a job in the application, make a note of the job's id in the SQL table. Back in your browser, enter the path for `/view/{jobId}`. -When everything works, move on to [Part 4]({{< relref "../part-four/index.html" >}}) below. \ No newline at end of file +When everything works, move on to [Part 4]({{% relref "../part-four/index.html" %}}) below. \ No newline at end of file diff --git a/content/assignments/techjobs-persistent/part-two/index.md b/content/assignments/techjobs-persistent/part-two/index.md index 419dfe6..8f64044 100644 --- a/content/assignments/techjobs-persistent/part-two/index.md +++ b/content/assignments/techjobs-persistent/part-two/index.md @@ -12,7 +12,7 @@ lastEditorGitHub: colinbrock # update any time edits are made after review lastMod: 2023-09-06 # UPDATE ANY TIME CHANGES ARE MADE --- -You will need to have completed the [setup steps]({{< relref "../part-one/index.html" >}}) before starting this +You will need to have completed the [setup steps]({{% relref "../part-one/index.html" %}}) before starting this section. ### AbstractEntity diff --git a/content/assignments/techjobs-persistent/starter-code-review/index.md b/content/assignments/techjobs-persistent/starter-code-review/index.md index bd7fe1d..0428846 100644 --- a/content/assignments/techjobs-persistent/starter-code-review/index.md +++ b/content/assignments/techjobs-persistent/starter-code-review/index.md @@ -17,26 +17,26 @@ lastMod: # UPDATE ANY TIME CHANGES ARE MADE Set up a local copy of the project: -1. In Canvas, find **Graded Assignment #4: TechJobs (Persistent Edition)** and click on the starter code repo link. Fork the repository to your personal profile, copy the repo's URL for cloning, and open up IntelliJ. Refer back to the instructions from [assignment0]({{< relref "../../hello-world/_index.md#getting-started" >}}) for more details. +1. In Canvas, find **Graded Assignment #4: TechJobs (Persistent Edition)** and click on the starter code repo link. Fork the repository to your personal profile, copy the repo's URL for cloning, and open up IntelliJ. Refer back to the instructions from [assignment0]({{% relref "../../hello-world/_index.md#getting-started" %}}) for more details. 1. Launch the application (via the Gradle pane, *Tasks > Application > bootRun*) to make sure it starts up properly. Then shut it down. -1. The tests for this assignment are set up the same way as for [Tech Jobs OO]({{< relref "../../techjobs-oo" >}}). +1. The tests for this assignment are set up the same way as for [Tech Jobs OO]({{% relref "../../techjobs-oo/_index.md" %}}). You won't be able to run your application or the tests yet. If you try to do so, you'll see a host of errors relating to the -Spring Data annotations and classes. Some of these have already been used in the code, but the dependency that includes them has not yet been declared. That will be one of your tasks. You'll need to complete [Part 1]({{< relref "../part-one/index.html" >}}) before you can run the application and view it in a browser. +Spring Data annotations and classes. Some of these have already been used in the code, but the dependency that includes them has not yet been declared. That will be one of your tasks. You'll need to complete [Part 1]({{% relref "../part-one/index.html" %}}) before you can run the application and view it in a browser. That said, it's a good idea to scan the classes and templates even before you're able to execute -`bootRun`. Take a gander at the `Job` class. It will look somewhat similar to the model in [Tech Jobs (MVC Edition)]({{< relref "../../techjobs-mvc" >}}), with a few key differences. +`bootRun`. Take a gander at the `Job` class. It will look somewhat similar to the model in [Tech Jobs (MVC Edition)]({{% relref "../../techjobs-mvc/_index.md" %}}), with a few key differences. You're no longer using a csv file to load job data, instead, we'll be creating new Job objects via a -user form. The Job data will be stored in a MySQL database that you'll setup in [Part 1]({{< relref "../part-one/index.html" >}}) of this assignment. +user form. The Job data will be stored in a MySQL database that you'll setup in [Part 1]({{% relref "../part-one/index.html" %}}) of this assignment. As you explore the starter code, you'll notice that the `JobField` abstract class is no longer present. Your task for -[Part 2]({{< relref "../part-two/index.html" >}}) is to complete the work to persist some of the classes. +[Part 2]({{% relref "../part-two/index.html" %}}) is to complete the work to persist some of the classes. You'll do this for `Employer` and `Skill` classes, as well as `Job`. -The `Job` class will also look different from how you have last seen it. In [Part 3]({{< relref "../part-three/index.html" >}}) and [Part 4]({{< relref "../part-four/index.html" >}}), you'll add object relational mapping on the `Job` class by refactoring the `employer` and `skills` (formerly `coreCompetency`) +The `Job` class will also look different from how you have last seen it. In [Part 3]({{% relref "../part-three/index.html" %}}) and [Part 4]({{% relref "../part-four/index.html" %}}), you'll add object relational mapping on the `Job` class by refactoring the `employer` and `skills` (formerly `coreCompetency`) fields. In your IntelliJ project, you'll see an empty file in the root directory called `queries.sql`. After completing the diff --git a/content/assignments/techjobs-persistent/submission/index.md b/content/assignments/techjobs-persistent/submission/index.md index 325489e..a44aa96 100644 --- a/content/assignments/techjobs-persistent/submission/index.md +++ b/content/assignments/techjobs-persistent/submission/index.md @@ -20,4 +20,4 @@ If a test in `TestCommentedTests` fails, this means that you failed to uncomment ## How to Submit -To turn in your assignment and get credit, follow the [Submission Instructions]({{< relref "../../hello-world/_index.md#submitting-your-work-on-canvas" >}}) \ No newline at end of file +To turn in your assignment and get credit, follow the [Submission Instructions]({{% relref "../../hello-world/_index.md#submitting-your-work-on-canvas" %}}) \ No newline at end of file diff --git a/content/authentication/reading/creating-user-model/_index.md b/content/authentication/reading/creating-user-model/_index.md index 2352524..990affe 100644 --- a/content/authentication/reading/creating-user-model/_index.md +++ b/content/authentication/reading/creating-user-model/_index.md @@ -54,7 +54,7 @@ public class User extends AbstractEntity { } ``` -Notice that the constructor takes a parameter named `password` and uses it to set the value of `pwHash`. We mentioned [previously]({{< relref "../hashing-passwords/_index.md" >}}) that we should never store passwords, so in a moment, we will update line 26 by creating a hash from the given password to store. +Notice that the constructor takes a parameter named `password` and uses it to set the value of `pwHash`. We mentioned [previously]({{% relref "../hashing-passwords/_index.md" %}}) that we should never store passwords, so in a moment, we will update line 26 by creating a hash from the given password to store. {{% notice blue Note "rocket" %}} Our validation annotations on `User` are very lenient. This is okay, however, because we will validate user input used to make `User` objects using a DTO with more restrictive validation. diff --git a/content/authentication/reading/hashing-passwords/_index.md b/content/authentication/reading/hashing-passwords/_index.md index 182c02f..b461a5b 100644 --- a/content/authentication/reading/hashing-passwords/_index.md +++ b/content/authentication/reading/hashing-passwords/_index.md @@ -62,7 +62,7 @@ Then we store Jamie's username along with her hashed password in our `user` tabl |-------------|----------------------------------------| | tswizzle_fan | bd62d7e13ef465fa705f30de198ba0cb | -This is very secure. Even if somebody breaks into the database and finds Jamie's info, they will not be able to log in. Since we used a hash function, the hacker will have a very hard time turning the hash into a password (see [property 2]({{< relref "#hash-properties" >}}) above). +This is very secure. Even if somebody breaks into the database and finds Jamie's info, they will not be able to log in. Since we used a hash function, the hacker will have a very hard time turning the hash into a password (see [property 2]({{% relref "#hash-properties" %}}) above). We can still authenticate Jamie, however. When they come to our site to log in, they will submit a username and password. Let's call the password value `submittedPassword`. Some basic logic will allow us to determine, with an *extremely* high rate of probability, whether or not the pair is valid. @@ -85,11 +85,11 @@ To check Jamie's username/password pair, we can do something like this: } ``` -The conditional compares the values of the hash stored in the database with the hash generated from the *submitted* password. By [property 1]({{< relref "#hash-properties" >}}), we know that if the hash values are different, then there is no way the passwords are the same. By [property 3]({{< relref "#hash-properties" >}}), we can safely assume that the passwords are the same. +The conditional compares the values of the hash stored in the database with the hash generated from the *submitted* password. By [property 1]({{% relref "#hash-properties" %}}), we know that if the hash values are different, then there is no way the passwords are the same. By [property 3]({{% relref "#hash-properties" %}}), we can safely assume that the passwords are the same. ### Hashing Isn't Perfect -Using hash functions to process passwords is not a cure-all. One vulnerability is the possibility for **collisions**. A collision occurs when two different messages have the same hash value. By [property 3]({{< relref "#hash-properties" >}}), this is supposed to be rare. However, if a collision is found for a given hash function, then it may be possible to create an algorithm to *generate* collisions. In other words, given a specific hash value, the algorithm could generate a string with the *same* hash value. +Using hash functions to process passwords is not a cure-all. One vulnerability is the possibility for **collisions**. A collision occurs when two different messages have the same hash value. By [property 3]({{% relref "#hash-properties" %}}), this is supposed to be rare. However, if a collision is found for a given hash function, then it may be possible to create an algorithm to *generate* collisions. In other words, given a specific hash value, the algorithm could generate a string with the *same* hash value. The once-popular MD5 and SHA1 hash algorithms [quickly become obsolete](https://arstechnica.com/information-technology/2017/02/at-deaths-door-for-years-widely-used-sha1-function-is-now-dead/) (for cryptographic purposes, at least) once collisions were found. diff --git a/content/authentication/studio/_index.md b/content/authentication/studio/_index.md index e7a3c17..c042284 100644 --- a/content/authentication/studio/_index.md +++ b/content/authentication/studio/_index.md @@ -15,11 +15,11 @@ lastMod: # UPDATE ANY TIME CHANGES ARE MADE For this studio, you'll be tasked with adding simple user authentication to your `techjobs` application. The steps to do this will match what you have already done in `codingevents`. You should refer back to the tutorial starting -[here]({{< relref "../reading/creating-user-model/_index.md/#a-user-model" >}}). +[here]({{% relref "../reading/creating-user-model/_index.md/#a-user-model" %}}). -1. [Create the User Model]({{< relref "#create-the-user-model" >}}) -1. [Create the Login and Registration Forms]({{< relref "#create-the-login-and-registration-forms" >}}) -1. [Filter Requests]({{< relref "#filter-requests" >}}) +1. [Create the User Model]({{% relref "#create-the-user-model" %}}) +1. [Create the Login and Registration Forms]({{% relref "#create-the-login-and-registration-forms" %}}) +1. [Filter Requests]({{% relref "#filter-requests" %}}) ## The Starter Code diff --git a/content/classes-part-2/exercises/_index.md b/content/classes-part-2/exercises/_index.md index 2fd4459..2dcebbd 100644 --- a/content/classes-part-2/exercises/_index.md +++ b/content/classes-part-2/exercises/_index.md @@ -12,7 +12,7 @@ lastEditorGitHub: # update any time edits are made after review lastMod: # UPDATE ANY TIME CHANGES ARE MADE --- -Work on these exercises in the IntelliJ `java-web-dev-projects/classes-part-two/exercises` project. You will update your `Student.java` file by implementing the `addGrade` and `getGradeLevel` methods that were sketched out in the [Instance Methods]({{< relref "../reading/instance-and-static-methods/_index.md" >}}) section. +Work on these exercises in the IntelliJ `java-web-dev-projects/classes-part-two/exercises` project. You will update your `Student.java` file by implementing the `addGrade` and `getGradeLevel` methods that were sketched out in the [Instance Methods]({{% relref "../reading/instance-and-static-methods/_index.md" %}}) section. ## 1. The `getGradeLevel` Method @@ -100,4 +100,4 @@ public boolean equals(Object toBeCompared) { ``` {{% /expand %}} -Add custom `equals()` and `toString()` methods to the `Course` class which you started in the exercises for the [previous chapter]({{< relref "../../../classes/exercises" >}}). \ No newline at end of file +Add custom `equals()` and `toString()` methods to the `Course` class which you started in the exercises for the [previous chapter]({{% relref "../../../classes/exercises" %}}). \ No newline at end of file diff --git a/content/classes-part-2/reading/instance-and-static-methods/index.md b/content/classes-part-2/reading/instance-and-static-methods/index.md index 7633c15..eac2f5a 100644 --- a/content/classes-part-2/reading/instance-and-static-methods/index.md +++ b/content/classes-part-2/reading/instance-and-static-methods/index.md @@ -15,7 +15,7 @@ lastMod: # UPDATE ANY TIME CHANGES ARE MADE We explored configuring data within classes with fields and properties. Now let’s turn our attention back to class _behavior_ (methods). ## Quick Method Review -In the [last chapter]({{< relref "../../../classes/reading/methods" >}}), we learned that: +In the [last chapter]({{% relref "../../../classes/reading/methods" %}}), we learned that: 1. A method belongs to a class and performs an action. @@ -105,7 +105,7 @@ Now let’s examine them in the context of what we’ve recently learned about c Just like static fields, **static methods** belong to the class as a whole, and not to any of the specific instances of the class. Thus, they are sometimes also called **class methods**. A static method is essentially the opposite of an instance method, since the two cases are mutually exclusive. _Instance methods_ rely on each object’s specific data, while static methods must NOT rely on data from a specific object. -We call a static method by preceding it with the class name and using dot-notation. Here’s an example that we looked at [previously]({{< relref "../../../data-types/reading/more-data-types/_index.md#static-methods" >}}). +We call a static method by preceding it with the class name and using dot-notation. Here’s an example that we looked at [previously]({{% relref "../../../data-types/reading/more-data-types/_index.md#static-methods" %}}). {{% notice blue "Example" "rocket" %}} `HelloMethods.java` diff --git a/content/classes-part-2/reading/special-methods/index.md b/content/classes-part-2/reading/special-methods/index.md index 8ba2d12..878f056 100644 --- a/content/classes-part-2/reading/special-methods/index.md +++ b/content/classes-part-2/reading/special-methods/index.md @@ -59,7 +59,7 @@ System.out.println(person); ## `equals` -Suppose we have two objects of type `Student`, say `student1` and `student2`, and we want to determine if they are equal. If we try to compare them using `==`, we will likely get a result we did not expect. This is because `student1` and `student2` are [reference variables]({{< relref "../../../data-types/reading/more-data-types/_index.md#reference-variables" >}}), which means they hold a reference to, or the address of, the actual `Student` objects. `student1` and `student2` evaluate as equal only when they have the same memory address. +Suppose we have two objects of type `Student`, say `student1` and `student2`, and we want to determine if they are equal. If we try to compare them using `==`, we will likely get a result we did not expect. This is because `student1` and `student2` are [reference variables]({{% relref "../../../data-types/reading/more-data-types/_index.md#reference-variables" %}}), which means they hold a reference to, or the address of, the actual `Student` objects. `student1` and `student2` evaluate as equal only when they have the same memory address. To state that again: `student1` and `student2` will be equal (`==`) only when they refer to, or point at, the exact same object. Consider the example below, which creates two `Student` objects: diff --git a/content/classes-part-2/studio/index.md b/content/classes-part-2/studio/index.md index 1fa8a0e..e1ce395 100644 --- a/content/classes-part-2/studio/index.md +++ b/content/classes-part-2/studio/index.md @@ -12,7 +12,7 @@ lastEditorGitHub: # update any time edits are made after review lastMod: # UPDATE ANY TIME CHANGES ARE MADE --- -We began designing and implementing our `Menu` and `MenuItem` classes in the [last studio]({{< relref "../../classes/studio/_index.md" >}}). Let’s continue working on these classes by adding some methods. +We began designing and implementing our `Menu` and `MenuItem` classes in the [last studio]({{% relref "../../classes/studio/_index.md" %}}). Let’s continue working on these classes by adding some methods. ## 1. Design diff --git a/content/control-flow-and-collections/reading/array/index.md b/content/control-flow-and-collections/reading/array/index.md index 06bd0a8..0f594d4 100644 --- a/content/control-flow-and-collections/reading/array/index.md +++ b/content/control-flow-and-collections/reading/array/index.md @@ -87,7 +87,7 @@ using `Arrays` instead of `ArrayLists`: Note that we have to decide up front how large our `Arrays` `students` and `grades` are going to be. Thus, this program sets an arbitrary maximum amount of students, likely larger than any user will enter. It may seem obvious, then, -that `Array` has no equivalent [add() method]({{< relref "../arraylist/#arraylist-methods" >}}). The only +that `Array` has no equivalent [add() method]({{% relref "../arraylist/index.md#arraylist-methods" %}}). The only way to access and alter an element in an `Array` is with **bracket notation**, using an explicit index. For example, gradebook defines a counter variable, `numStudents`. When the first student is entered by the user, the value is stored in `newStudent`. diff --git a/content/data-types/reading/more-data-types/_index.md b/content/data-types/reading/more-data-types/_index.md index 3197c34..c0dce52 100644 --- a/content/data-types/reading/more-data-types/_index.md +++ b/content/data-types/reading/more-data-types/_index.md @@ -151,7 +151,7 @@ Let’s examine two classes in Java to explore defining and using methods. The f We won’t explore every new aspect of this example, but instead focus on the two methods. -1. The `main` method in the `HelloMethods` class has the same structure as that of our [temperature conversion example]({{< relref "../../../data-types/reading/some-java-practice/#temperature-conversion" >}}). +1. The `main` method in the `HelloMethods` class has the same structure as that of our [temperature conversion example]({{% relref "../../../data-types/reading/some-java-practice/#temperature-conversion" %}}). 1. Take a look at the `Message` class. Note that it does NOT have a `main` method, so it can’t be run on its own. Code within the `Message` class must be called from elsewhere in order to execute. diff --git a/content/enums/reading/enums-model-classes/_index.md b/content/enums/reading/enums-model-classes/_index.md index 8690ba4..db537c1 100644 --- a/content/enums/reading/enums-model-classes/_index.md +++ b/content/enums/reading/enums-model-classes/_index.md @@ -38,7 +38,7 @@ types. ![Enum type selection.](pictures/enumTypeSelection.png?classes=border) -Because enum values are constants, we use [naming-conventions]({{< relref "../../../intro-and-setup/naming-conventions/index.md" >}}) and write them in all caps. Each value is demarcated with a comma and the list is completed with a semicolon. +Because enum values are constants, we use [naming-conventions]({{% relref "../../../intro-and-setup/naming-conventions/index.md" %}}) and write them in all caps. Each value is demarcated with a comma and the list is completed with a semicolon. `EventType`: @@ -182,7 +182,7 @@ In `templates/events/create.html`: As with the other form inputs on the page, the `th:field` attribute determines the `name` and `id` attributes for the `select` tag. We make an `option` tag for each of the `EventType` -values, making use of the `types` variable we passed in from the controller in [the previous step]({{< relref "./_index.md#pass-enum-values-through-the-controller" >}}). We set the `value` attribute for the +values, making use of the `types` variable we passed in from the controller in [the previous step]({{% relref "./_index.md#pass-enum-values-through-the-controller" %}}). We set the `value` attribute for the model data to be the `EventType` value using `th:value`. And the type name shown to the user of the form as the `displayName` of the type, using `th:text`. diff --git a/content/enums/reading/intro-to-enums/_index.md b/content/enums/reading/intro-to-enums/_index.md index f1d4fad..355b4d1 100644 --- a/content/enums/reading/intro-to-enums/_index.md +++ b/content/enums/reading/intro-to-enums/_index.md @@ -279,7 +279,7 @@ An application can change the way it logs messages by changing the log level. {{% /notice %}} {{% notice blue Example "note" %}} -An enum that you have [already encountered]({{< relref "../../../controllers-and-routing/reading/simple-controllers/_index.md" >}}) is `RequestMapping`, which we have used to specify which HTTP methods a controller method can respond to. This enum has values `RequestMapping.GET`, `RequestMapping.POST`, `RequestMapping.DELETE`, and so on. +An enum that you have [already encountered]({{% relref "../../../controllers-and-routing/reading/simple-controllers/_index.md" %}}) is `RequestMapping`, which we have used to specify which HTTP methods a controller method can respond to. This enum has values `RequestMapping.GET`, `RequestMapping.POST`, `RequestMapping.DELETE`, and so on. {{% /notice %}} ## Adding Properties to Enums diff --git a/content/exceptions/reading/temperature-walkthrough/index.md b/content/exceptions/reading/temperature-walkthrough/index.md index 5434b01..edfbb75 100644 --- a/content/exceptions/reading/temperature-walkthrough/index.md +++ b/content/exceptions/reading/temperature-walkthrough/index.md @@ -14,7 +14,7 @@ lastMod: # UPDATE ANY TIME CHANGES ARE MADE To get started with exceptions, open up `java-web-dev-projects/exceptions/chapter-example` on your machine so you can code along. Inside the `Temperature` package, take a look at the `Temperature` class. -We worked with this exact class when learning more about [classes]({{< relref "../../../classes/reading/encapsulation/#getters-and-setters">}}). +We worked with this exact class when learning more about [classes]({{% relref "../../../classes/reading/encapsulation/#getters-and-setters" %}}). ```java {linenos=table, linenostart=3} public class Temperature { diff --git a/content/inheritance/reading/testing-inheritance/_index.md b/content/inheritance/reading/testing-inheritance/_index.md index abda82e..bebaf45 100644 --- a/content/inheritance/reading/testing-inheritance/_index.md +++ b/content/inheritance/reading/testing-inheritance/_index.md @@ -16,7 +16,7 @@ Not sure you get the whole inheritance idea? Still not sure which fields and met which are overridden? Looking to *test* your understanding? (wink) -Knowing what we know now about [unit-testing](unit-testing) and [inheritance]({{< relref "../../_index.md" >}}), we can test that our +Knowing what we know now about [unit-testing](unit-testing) and [inheritance]({{% relref "../../_index.md" %}}), we can test that our subclasses extend their base classes. We can add a `test` folder to our `inheritance` package and write some code to ensure that diff --git a/content/interfaces/exercises/_index.md b/content/interfaces/exercises/_index.md index 0606582..121ac4c 100644 --- a/content/interfaces/exercises/_index.md +++ b/content/interfaces/exercises/_index.md @@ -18,7 +18,7 @@ As a new Java coder, it might take you some time to recognize the usefulness of To help overcome this, let’s consider a common occurrence—sorting an `ArrayList` of objects. -If the list contains `String` or numerical entries, then sorting the list is [trivial]({{< relref "../../../control-flow-and-collections/reading/arraylist/" >}}): +If the list contains `String` or numerical entries, then sorting the list is [trivial]({{% relref "../../../control-flow-and-collections/reading/arraylist/" %}}): ```java Collections.sort(arrayListName); ``` diff --git a/content/interfaces/reading/common-interfaces/index.md b/content/interfaces/reading/common-interfaces/index.md index b177394..20c4d0e 100644 --- a/content/interfaces/reading/common-interfaces/index.md +++ b/content/interfaces/reading/common-interfaces/index.md @@ -27,7 +27,7 @@ The first situations where you’ll want to use interfaces involve applying pre- [Comparator Documentation](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html) -This interface can be used to determine, given two objects of the given type, which one is “greater” than the other. It is also used by collections such as an [ArrayList]({{< relref "../../../control-flow-and-collections/reading/arraylist/" >}}) to sort its contents with the `sort()` method. +This interface can be used to determine, given two objects of the given type, which one is “greater” than the other. It is also used by collections such as an [ArrayList]({{% relref "../../../control-flow-and-collections/reading/arraylist/" %}}) to sort its contents with the `sort()` method. {{% notice blue "Note" "rocket" %}} For more on the differences between Comparator and Comparable, see [this article](https://www.javatpoint.com/difference-between-comparable-and-comparator). diff --git a/content/interfaces/reading/intro/index.md b/content/interfaces/reading/intro/index.md index 8054940..19dc825 100644 --- a/content/interfaces/reading/intro/index.md +++ b/content/interfaces/reading/intro/index.md @@ -18,7 +18,7 @@ The third pillar of Object-Oriented Programming that we’ll explore is polymorp **Polymorphism** is an object-oriented mechanism that allows for objects of different types to be used in the same way. -We’ve already encountered polymorphism made possible by inheritance when talking about [casting]({{< relref "../../../inheritance/reading/casting/" >}}) with our `Cat` and `HouseCat` classes. In that case, we stored an object of type `HouseCat` in its compatible type, `Cat`. +We’ve already encountered polymorphism made possible by inheritance when talking about [casting]({{% relref "../../../inheritance/reading/casting/" %}}) with our `Cat` and `HouseCat` classes. In that case, we stored an object of type `HouseCat` in its compatible type, `Cat`. Let’s take a closer look at how polymorphism might work in our cat-centric application. diff --git a/content/interfaces/reading/unit-testing/index.md b/content/interfaces/reading/unit-testing/index.md index 659fd98..eb4731a 100644 --- a/content/interfaces/reading/unit-testing/index.md +++ b/content/interfaces/reading/unit-testing/index.md @@ -13,7 +13,7 @@ lastMod: 2023-07-10T14:01:05-05:00 # UPDATE ANY TIME CHANGES ARE MADE --- After all that we have learned about interfaces, you are probably wondering, _how do I write my unit tests with interfaces?_ -The best practices to [testing interfaces]({{< relref "../../../inheritance/reading/testing-inheritance/" >}}) are very similar to those of testing inheritance. You want to focus on testing the contract that the interface is supposed to be upholding as opposed to the interface itself. +The best practices to [testing interfaces]({{% relref "../../../inheritance/reading/testing-inheritance/" %}}) are very similar to those of testing inheritance. You want to focus on testing the contract that the interface is supposed to be upholding as opposed to the interface itself. {{% notice blue "Example" "rocket" %}} We have a `Temperature` interface, a `Celsius` class, and a `Fahrenheit` class. diff --git a/content/intro-and-setup/java-terminal/index.md b/content/intro-and-setup/java-terminal/index.md index b20c0e6..01a2fae 100644 --- a/content/intro-and-setup/java-terminal/index.md +++ b/content/intro-and-setup/java-terminal/index.md @@ -57,7 +57,7 @@ You should see your greeting printed! Whenever using the terminal in this course, use Git Bash as opposed to Windows Command Prompt. {{% /notice %}} -Recall from the walk-through on the [previous page]({{< relref "../setup/">}}), Java needs to be compiled before executing. Java version 17 has +Recall from the walk-through on the [previous page]({{% relref "../setup/index.md" %}}), Java needs to be compiled before executing. Java version 17 has the capability to compile single-file Java programs without explicitly running a command to compile. If our `Hello, World` program were more complex and contained another file, we would need to first run `javac HelloWorld.java`, to compile, followed by `java HelloWorld.java`. diff --git a/content/intro-and-setup/setup/index.md b/content/intro-and-setup/setup/index.md index 5266203..0dc4579 100644 --- a/content/intro-and-setup/setup/index.md +++ b/content/intro-and-setup/setup/index.md @@ -47,7 +47,7 @@ Open a terminal window on your machine and enter the following command: java -version ``` -If the response returns a major version 17, you can move on to the next page, [Java in the Terminal]({{< relref "../java-terminal/" >}}). +If the response returns a major version 17, you can move on to the next page, [Java in the Terminal]({{% relref "../java-terminal/index.md" %}}). If you do not have Java 17, or the command does not work, you can download it [here](https://www.oracle.com/java/technologies/downloads/#java17). diff --git a/content/intro-orm-mapping/reading/orm/_index.md b/content/intro-orm-mapping/reading/orm/_index.md index 8b3b52f..e841216 100644 --- a/content/intro-orm-mapping/reading/orm/_index.md +++ b/content/intro-orm-mapping/reading/orm/_index.md @@ -56,7 +56,7 @@ CREATE TABLE contactinfo ( In Java, this API is called a **JPA** or **Java Persistence API**. JPAs makes use of **data layers**. -When we learned about models, we learned that [data layers]({{< relref "../../../models-and-model-binding/reading/models-and-data/_index.md" >}}) add abstraction between models and the data we want to store. +When we learned about models, we learned that [data layers]({{% relref "../../../models-and-model-binding/reading/models-and-data/_index.md" %}}) add abstraction between models and the data we want to store. Models are NOT persistent data stores and relational databases do NOT shape the Java objects we will be using. We want to make sure that the two remain separate. diff --git a/content/intro-orm-mapping/studio/_index.md b/content/intro-orm-mapping/studio/_index.md index a27466c..bcc0a3b 100644 --- a/content/intro-orm-mapping/studio/_index.md +++ b/content/intro-orm-mapping/studio/_index.md @@ -12,7 +12,7 @@ lastEditorGitHub: # update any time edits are made after review lastMod: # UPDATE ANY TIME CHANGES ARE MADE --- -In [Exercises: OMG the ORM!]({{< relref "../exercises/_index.md" >}}), you created a new persistent class, `EventCategory`. We will eventually use this class to categorize events in our application. However, your application now has a fair amount of duplication across the two model classes. In this studio, you will reduce repetition (i.e. "DRY out your code") using inheritance and abstract classes. +In [Exercises: OMG the ORM!]({{% relref "../exercises/_index.md" %}}), you created a new persistent class, `EventCategory`. We will eventually use this class to categorize events in our application. However, your application now has a fair amount of duplication across the two model classes. In this studio, you will reduce repetition (i.e. "DRY out your code") using inheritance and abstract classes. ## Getting Ready @@ -51,7 +51,7 @@ Your objective in this studio is to reduce this repetition by creating a class t ### Create and Extend `AbstractEntity` -In the `models` package, create a new class named `AbstractEntity`. Add the `abstract` keyword to the class declaration. We do this because, while we want to share code across our two models, we'll never need to create an instance of `AbstractEntity`. If you need a quick refresher, review our section on [abstract classes]({{< relref "../../inheritance/reading/abstract-inheritance/_index.md#abstract-classes" >}}). +In the `models` package, create a new class named `AbstractEntity`. Add the `abstract` keyword to the class declaration. We do this because, while we want to share code across our two models, we'll never need to create an instance of `AbstractEntity`. If you need a quick refresher, review our section on [abstract classes]({{% relref "../../inheritance/reading/abstract-inheritance/_index.md#abstract-classes" %}}). {{% notice green Tip "rocket" %}} This class name seems a little odd at first, but it makes sense after a brief explanation. diff --git a/content/thymeleaf-views/reading/creating-templates/_index.md b/content/thymeleaf-views/reading/creating-templates/_index.md index c902cd2..6c3d100 100644 --- a/content/thymeleaf-views/reading/creating-templates/_index.md +++ b/content/thymeleaf-views/reading/creating-templates/_index.md @@ -82,8 +82,8 @@ In the `dependencies` block, just paste in the `implementation` statement seen i Open up your `hello-spring` project in IntelliJ and code along with the following video. {{% notice blue Note "rocket" %}} -We're assuming you've completed these [Controllers and Routing Exercises]({{< relref "../../../controllers-and-routing/exercises/" >}}) on your own ``hello-spring`` application and committed your changes to a branch reserved for the exercises. No matter where you are with those exercises, be sure that your own `hello-spring` application roughly matches the [hello-spring forms branch](https://github.com/LaunchCodeEducation/hello-spring/tree/forms) so that you can follow along with the video lessons in this chapter. If you are using git branches to track your work, you can simply return to the branch you were on before starting the video walkthrough -on [this page]({{< relref "../../../controllers-and-routing/reading/controllers-classes/" >}}). +We're assuming you've completed these [Controllers and Routing Exercises]({{% relref "../../../controllers-and-routing/exercises/" %}}) on your own ``hello-spring`` application and committed your changes to a branch reserved for the exercises. No matter where you are with those exercises, be sure that your own `hello-spring` application roughly matches the [hello-spring forms branch](https://github.com/LaunchCodeEducation/hello-spring/tree/forms) so that you can follow along with the video lessons in this chapter. If you are using git branches to track your work, you can simply return to the branch you were on before starting the video walkthrough +on [this page]({{% relref "../../../controllers-and-routing/reading/controllers-classes/" %}}). {{% /notice %}} {{% notice orange Warning "rocket" %}} diff --git a/content/thymeleaf-views/reading/forms-thymeleaf/_index.md b/content/thymeleaf-views/reading/forms-thymeleaf/_index.md index 216ddc5..ba4a83a 100644 --- a/content/thymeleaf-views/reading/forms-thymeleaf/_index.md +++ b/content/thymeleaf-views/reading/forms-thymeleaf/_index.md @@ -40,7 +40,7 @@ Now that you have `codingevents` up and running, add features to it by coding al {{% notice blue Note "rocket" %}} The following videos will demonstrate features we've added to a new MVC application we'll be working with called `codingevents`. You may notice that parts of this video include references to `Java11`. Your project should be using `Java17`. -You should create your own version of `codingevents` from [Spring Initializer](https://start.spring.io/) and refer to [this branch](https://github.com/LaunchCodeEducation/CodingEventsJava/tree/starter) and the [Coding Events Setup - Text]({{< relref "#codingevents-setup---text" >}}) walkthrough to replicate our code. You may fork and clone from the `CodingEventsJava` project for reference. +You should create your own version of `codingevents` from [Spring Initializer](https://start.spring.io/) and refer to [this branch](https://github.com/LaunchCodeEducation/CodingEventsJava/tree/starter) and the [Coding Events Setup - Text]({{% relref "#codingevents-setup---text" %}}) walkthrough to replicate our code. You may fork and clone from the `CodingEventsJava` project for reference. {{% /notice %}} ## Coding Events Setup - Text diff --git a/content/thymeleaf-views/reading/iterating-templates/_index.md b/content/thymeleaf-views/reading/iterating-templates/_index.md index 7b1ab52..e8f43df 100644 --- a/content/thymeleaf-views/reading/iterating-templates/_index.md +++ b/content/thymeleaf-views/reading/iterating-templates/_index.md @@ -203,7 +203,7 @@ Assume you have a collection of different coffee shop objects, and each object s ## Check Your Understanding -Use the three code samples listed in the [location matters]({{< relref "#location-matters" >}}) section to answer the following questions: +Use the three code samples listed in the [location matters]({{% relref "#location-matters" %}}) section to answer the following questions: {{% notice green Question "rocket" %}} Which option produces one heading, 4 ordered lists, and 4 coffee names (each name labeled as "1")? diff --git a/content/thymeleaf-views/reading/using-templates/_index.md b/content/thymeleaf-views/reading/using-templates/_index.md index c8ba0cc..532560b 100644 --- a/content/thymeleaf-views/reading/using-templates/_index.md +++ b/content/thymeleaf-views/reading/using-templates/_index.md @@ -12,7 +12,7 @@ lastEditorGitHub: tpenn # update any time edits are made after review lastMod: 2023-09-22T08:34:55-05:00 # UPDATE ANY TIME CHANGES ARE MADE --- -In the [next video]({{< relref "../conditionals-templates/_index.md#try-it" >}}), you will extend your `hello-spring` project and practice using Thymeleaf templates as you code along with the clip. +In the [next video]({{% relref "../conditionals-templates/_index.md#try-it" %}}), you will extend your `hello-spring` project and practice using Thymeleaf templates as you code along with the clip. Before you get there, however, we need to review a few core skills and best-practices. diff --git a/content/tools-in-intellij/reading/debugging/index.md b/content/tools-in-intellij/reading/debugging/index.md index 918991d..160cd17 100644 --- a/content/tools-in-intellij/reading/debugging/index.md +++ b/content/tools-in-intellij/reading/debugging/index.md @@ -16,8 +16,8 @@ lastMod: # UPDATE ANY TIME CHANGES ARE MADE Watch this video to learn the basics of the debugging tools available in IntelliJ. If you want to follow along, Chris is working with `ArrayListGradebook` -from the [Control Flow and Collections chapter]({{< relref "../../../control-flow-and-collections/reading/arraylist/" >}}) -and the `HelloMethods` and `Message` from [Classes and Objects, Part 2 chapter]({{< relref "../../../classes-part-2/reading/instance-and-static-methods/" >}}). +from the [Control Flow and Collections chapter]({{% relref "../../../control-flow-and-collections/reading/arraylist/" %}}) +and the `HelloMethods` and `Message` from [Classes and Objects, Part 2 chapter]({{% relref "../../../classes-part-2/reading/instance-and-static-methods/" %}}). You should have already downloaded this code from `java-web-dev-projects`. {{% notice blue "Note" "rocket" %}} diff --git a/content/web-api-rest/exercises/_index.md b/content/web-api-rest/exercises/_index.md index 0df793c..eca8a02 100644 --- a/content/web-api-rest/exercises/_index.md +++ b/content/web-api-rest/exercises/_index.md @@ -197,4 +197,4 @@ Some items to consider: ### Install Postman Now that we've explored working with those endpoints, we're almost ready to start running the API and test sending those requests. -You'll need to [install Postman]({{< relref "../../../appendices/install-postman/_index.md" >}}) to work with this lesson's studio and practice running these requests. +You'll need to [install Postman]({{% relref "../../../appendices/install-postman/_index.md" %}}) to work with this lesson's studio and practice running these requests. diff --git a/content/web-api-rest/reading/web-api/_index.md b/content/web-api-rest/reading/web-api/_index.md index b1f826d..7d348bf 100644 --- a/content/web-api-rest/reading/web-api/_index.md +++ b/content/web-api-rest/reading/web-api/_index.md @@ -125,7 +125,7 @@ While there are many languages and frameworks available in web development, they JSON is currently a universal representation of data accepted by client applications. This means our web API packages data requested by a client application as JSON. The web API also transfers this JSON in its communication with a client application. -Let's revisit the last two steps from our [Web API work flow]({{< relref "_index.md#transference-of-data" >}}) +Let's revisit the last two steps from our [Web API work flow]({{% relref "_index.md#transference-of-data" %}}) 1. The controller transforms the object into a JSON representation. 1. The controller responds to the client with the JSON representation. diff --git a/content/web-api-rest/studio/_index.md b/content/web-api-rest/studio/_index.md index 5ae2437..dc2f629 100644 --- a/content/web-api-rest/studio/_index.md +++ b/content/web-api-rest/studio/_index.md @@ -18,7 +18,7 @@ The UI of a browser is designed to make simple `GET` requests for URLs entered i ### Install Postman -If you haven't done so already, [install Postman]({{< relref "../../../appendices/install-postman/_index.md" >}}). +If you haven't done so already, [install Postman]({{% relref "../../../appendices/install-postman/_index.md" %}}). ### Fork and Clone the API Source Code diff --git a/netlify.toml b/netlify.toml index bd8277a..97c9257 100644 --- a/netlify.toml +++ b/netlify.toml @@ -5,8 +5,8 @@ publish = "public" [build.environment] - HUGO_VERSION = "0.106.0" + HUGO_VERSION = "0.130.0" [context.deploy-preview] command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL" - HUGO_VERSION = "0.106.0" + HUGO_VERSION = "0.130.0" diff --git a/static/images/LaunchCode_white.png b/static/images/LaunchCode_white.png new file mode 100644 index 0000000..23a5c52 Binary files /dev/null and b/static/images/LaunchCode_white.png differ diff --git a/static/images/favicon.ico b/static/images/favicon.ico new file mode 100644 index 0000000..569b1fb Binary files /dev/null and b/static/images/favicon.ico differ diff --git a/static/images/favicon.png b/static/images/favicon.png new file mode 100644 index 0000000..bfa9a18 Binary files /dev/null and b/static/images/favicon.png differ diff --git a/themes/hugo-theme-relearn b/themes/hugo-theme-relearn index 1d5e3e8..778e944 160000 --- a/themes/hugo-theme-relearn +++ b/themes/hugo-theme-relearn @@ -1 +1 @@ -Subproject commit 1d5e3e86afad2904350249156e7494fc7a966e3b +Subproject commit 778e94499c73c272db5da88bb0edb74e3a205b72