1+ window . onload = function ( ) {
2+ displayTasks ( ) ;
3+ } ;
4+
5+ function getTasks ( ) {
6+ let tasks = localStorage . getItem ( "tasks" ) ;
7+ return tasks ? JSON . parse ( tasks ) : [ ] ;
8+ }
9+
10+ function saveTasks ( tasks ) {
11+ localStorage . setItem ( "tasks" , JSON . stringify ( tasks ) ) ;
12+ }
13+
14+ function addTask ( ) {
15+ let input = document . getElementById ( "taskInput" ) ;
16+ let dueDate = document . getElementById ( "dueDate" ) . value ;
17+ let priority = document . getElementById ( "priority" ) . value ;
18+
19+ let task = input . value . trim ( ) ;
20+ if ( task === "" ) {
21+ alert ( "Please enter a task!" ) ;
22+ return ;
23+ }
24+
25+ let tasks = getTasks ( ) ;
26+ tasks . push ( {
27+ text : task ,
28+ completed : false ,
29+ dueDate : dueDate || "No date" ,
30+ priority : priority
31+ } ) ;
32+
33+ saveTasks ( tasks ) ;
34+ input . value = "" ;
35+ document . getElementById ( "dueDate" ) . value = "" ;
36+ document . getElementById ( "priority" ) . value = "Medium" ;
37+ displayTasks ( ) ;
38+ }
39+
40+ function toggleTask ( index ) {
41+ let tasks = getTasks ( ) ;
42+ tasks [ index ] . completed = ! tasks [ index ] . completed ;
43+ saveTasks ( tasks ) ;
44+ displayTasks ( ) ;
45+ }
46+
47+ function deleteTask ( index ) {
48+ let tasks = getTasks ( ) ;
49+ tasks . splice ( index , 1 ) ;
50+ saveTasks ( tasks ) ;
51+ displayTasks ( ) ;
52+ }
53+
54+ function sortTasks ( tasks ) {
55+ const priorityOrder = { "High" : 1 , "Medium" : 2 , "Low" : 3 } ;
56+ return tasks . sort ( ( a , b ) => {
57+ if ( a . completed !== b . completed ) {
58+ return a . completed - b . completed ; // completed goes last
59+ }
60+ if ( priorityOrder [ a . priority ] !== priorityOrder [ b . priority ] ) {
61+ return priorityOrder [ a . priority ] - priorityOrder [ b . priority ] ;
62+ }
63+ return new Date ( a . dueDate ) - new Date ( b . dueDate ) ;
64+ } ) ;
65+ }
66+
67+ function displayTasks ( ) {
68+ let taskList = document . getElementById ( "taskList" ) ;
69+ taskList . innerHTML = "" ;
70+
71+ let tasks = getTasks ( ) ;
72+ tasks = sortTasks ( tasks ) ;
73+
74+ tasks . forEach ( ( task , index ) => {
75+ let li = document . createElement ( "li" ) ;
76+ li . className = task . completed ? "completed" : "" ;
77+ li . classList . add ( task . priority . toLowerCase ( ) ) ;
78+
79+ li . innerHTML =
80+ < > < div class = "task-top" >
81+ < span > ${ task . text } </ span >
82+ < small > 📅 ${ task . dueDate } </ small >
83+ </ div > < div class = "task-actions" >
84+ < button class = "complete-btn" onclick = "toggleTask(${index})" > ${ task . completed ? "Undo" : "Complete" } </ button >
85+ < button class = "delete-btn" onclick = "deleteTask(${index})" > Delete</ button >
86+ </ div > </ >
87+ ;
88+
89+ taskList . appendChild ( li ) ;
90+ } ) ;
91+ }
0 commit comments