Welcome to your pre-course final project. You are going to build a task-management application.
- Fork this repo into your account.
- Clone the forked repo to your computer.
- Run the setup script.
- Create a new git branch for your work.
- Complete the project requirements.
- Push your work to GitHub.
- Submit your work.
Execute npm run final <your name> (replace <your name> with your name). This command will install all the needed dependencies, and generate an api-data.txt file.
There should be 3 section elements. One for to-do tasks, one for in-progress tasks, and one for done tasks.
Each section should contain:
- a
ulelement with the appropriate class -to-do-tasks/in-progress-tasks/done-tasks - an
inputelement with an appropriate id -add-to-do-task/add-in-progress-task/add-done-task - a
buttonelement with an appropriate id -submit-add-to-do/submit-add-in-progress/submit-add-done - Each
ulshould contain task elements, which arelielements with thetaskclass.
In addition the page should contain:
- a heading with a
page-titleid - a global input with the
searchid
- When the user clicks on one of the add-task buttons, a new task will be added to the respective list. The task content will be taken from the respective input field.
- Trying to submit empty tasks should cause an alert.
- Double clicking a task element will enable the user to edit its text. When the task element loses focus (
blurevent) the change will be saved. - Hovering over a task element and pressing
alt + 1-3will move the task to the appropriate list (1: todo,2: in-progress,3: done). - The search input should filter tasks case-insensitively, so that only tasks that match the search string are displayed. The filter will be reapplied every time the user changes the content of the search input (on every keystroke).
- The data of all the tasks should be saved to
localStoragefollowing any changes made to the data. The data should be saved under a storage key namedtasks. It should be saved in the following format (use the data saved in the local storage to keep the data on the page after refresh):
{
"todo": [],
"in-progress": [],
"done": []
}- Even if there are no tasks, there should still be a
taskskey in thelocalStorage, in the above format (the arrays will just be empty).
-
Implement drag-and-drop sorting of tasks.
-
Add API integration:
- Add save and load buttons that sync the current tasks to the API (see details in the api-data.txt file).
- Remove the
.skipfrom the two last tests inmain.test.js. - While waiting for a response from the API display a loader with the class
loader. - If an error occurs show an alert.
- If the data loaded from the API is different from the local data, replace the local data with the API data. Make sure you update both the
localStorageand the DOM.
-
Add any additional cool features you can think of...
You are expected to change the README of your project to showcase your application. Make it readable and explain what your app does. Put a screenshot and a link to GitHub pages.
You are provided with a template to write your code in, inside the solution folder. You should write your code inside index.html, index.js, style.css. You may create additional files for your convenience, but do not change the names of the existing ones.
Once you complete the initial setup you will see an api-data.txt file that was created in the project folder. This file will contain the URLs which you can access the API with, using a unique bin ID that was generated for you.
The API is a simple remote storage that gives you a "bin" where you can store data. It allows you to save a chunk of data, or load it.
We have added some automated tests for you to use. They will help you make sure your code covers the requirements.
To run the tests, execute npm run test.
Your work will be graded based on the following considerations:
- The number of tests you pass
- Readable and ordered code
- Spacing & indentation
- Indicative vairable/function names
- Comments (where necessary)
- Proper use of Git
- Small, standalone commits
- Descriptive commit messages
- Working in branches and creating a proper PR
- Convenient visual design (make your app b-e-a-utiful)
- Extra features you might have added
- On GitHub, open a pull request from your branch to the main branch.
- Do not merge the pull request!
- Add the user
Cyber4sPopoas collaborator to your repo. - Deploy your application to GitHub pages.
- Submit in Google Classroom:
- a link to the pull request
- a link to your site on GitHub pages
- a 5 minutes min selfie video, where you talk about yourself in a few words (age, location, military background, technological background). Think about this video as a part of your interview.
- another 2-5 minute video where you talk about your submission solution, showing how your app works and any special features you added.
