Skip to content
Open

hw4 #21

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
128 changes: 128 additions & 0 deletions style/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="uk">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do List</title>
<link rel="stylesheet" href="style.css">
</head>
<body>

<div class="app-container">
<header>
<h1>To-Do List</h1>
</header>

<div class="controls-container">
<div class="add-task-form">
<input type="text" id="newTaskInput" placeholder="Add a new task">
<button class="add-btn">Add</button>
</div>
<div class="filter-sort-controls">
<div class="select-wrapper">
<label for="sortBy">Sort by:</label>
<select id="sortBy">
<option value="date">Date</option>
<option value="priority">Priority</option>
</select>
</div>
<div class="select-wrapper">
<label for="filterBy">Filter:</label>
<select id="filterBy">
<option value="all">All</option>
<option value="completed">Completed</option>
<option value="pending">Pending</option>
</select>
</div>
</div>
</div>

<ul class="task-list">
<li class="task-item">
<div class="task-content">
<input type="checkbox" id="task1">
<label for="task1">Complete the project</label>
</div>
<div class="task-details">
<span class="priority medium">Medium</span>
<span class="due-date">May 1, 2024</span>
<div class="task-actions">
<button class="icon-btn edit-btn">✎</button>
<button class="icon-btn delete-btn">🗑</button>
</div>
</div>
</li>
<li class="task-item completed">
<div class="task-content">
<input type="checkbox" id="task2" checked>
<label for="task2">Read the book</label>
</div>
<div class="task-details">
<span class="priority low">Low</span>
<span class="due-date">April 25, 2024</span>
<div class="task-actions">
<button class="icon-btn edit-btn">✎</button>
<button class="icon-btn delete-btn">🗑</button>
</div>
</div>
</li>
<li class="task-item">
<div class="task-content">
<input type="checkbox" id="task3">
<label for="task3">Go to the gym</label>
</div>
<div class="task-details">
<span class="priority high">High</span>
<span class="due-date">April 23, 2024</span>
<div class="task-actions">
<button class="icon-btn edit-btn">✎</button>
<button class="icon-btn delete-btn">🗑</button>
</div>
</div>
</li>
<li class="task-item">
<div class="task-content">
<input type="checkbox" id="task4">
<label for="task4">Make a doctor's appointment</label>
</div>
<div class="task-details">
<span class="priority medium">Medium</span>
<span class="due-date">April 20, 2024</span>
<div class="task-actions">
<button class="icon-btn edit-btn">✎</button>
<button class="icon-btn delete-btn">🗑</button>
</div>
</div>
</li>
</ul>
</div>

<div id="task-modal" class="modal-overlay" style="display: none;"> <div class="modal-content">
<form id="task-form">
<h2 id="modal-title">Add Task</h2>
<div class="form-group">
<label for="task-title-input">Task</label>
<input type="text" id="task-title-input" placeholder="e.g., Read a book" required>
</div>
<div class="form-group">
<label for="task-date-input">Due Date</label>
<input type="date" id="task-date-input" required>
</div>
<div class="form-group">
<label for="task-priority-select">Priority</label>
<select id="task-priority-select">
<option value="high">High</option>
<option value="medium" selected>Medium</option>
<option value="low">Low</option>
</select>
</div>
<div class="form-actions">
<button type="button" class="cancel-btn">Cancel</button>
<button type="submit" class="save-btn">Save Task</button>
</div>
</form>
</div>
</div>

</body>
</html>
199 changes: 199 additions & 0 deletions style/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
:root {
--primary-color: #007bff;
--primary-color-hover: #0056b3;
--high-priority: #dc3545;
--medium-priority: #fd7e14;
--low-priority: #6c757d;

--text-color: #212529;
--text-muted: #6c757d;
--border-color: #ced4da;
--background-light: #f8f9fa;
--background-white: #ffffff;

--border-radius-sm: 6px;
--border-radius-md: 8px;
--border-radius-lg: 12px;

--focus-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
--default-transition: all 0.2s ease-in-out;
}


*, *::before, *::after {
box-sizing: border-box;
}

body {
font-family: 'Inter', sans-serif;
background-color: var(--background-light);
color: var(--text-color);
margin: 0;
padding: 2rem;
display: flex;
justify-content: center;
}


.app-container {
width: 100%;
max-width: 700px;
background-color: var(--background-white);
border-radius: var(--border-radius-lg);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
padding: 2rem;
}

header h1 {
font-size: 2.5rem;
text-align: center;
margin-bottom: 2rem;
}


.add-task-form {
display: flex;
gap: 0.75rem;
margin-bottom: 1.5rem;
}


#newTaskInput, .select-wrapper select, .form-group input, .form-group select {
border: 1px solid var(--border-color);
border-radius: var(--border-radius-md);
font-size: 1rem;
transition: var(--default-transition);
}

#newTaskInput:focus, .select-wrapper select:focus, .form-group input:focus, .form-group select:focus {
outline: none;
border-color: #80bdff;
box-shadow: var(--focus-shadow);
}

#newTaskInput {
flex-grow: 1;
padding: 0.75rem 1rem;
}

.filter-sort-controls {
display: flex;
gap: 1.5rem;
align-items: center;
margin-bottom: 1.5rem;
font-size: 0.9rem;
color: var(--text-muted);
}

.select-wrapper select {
padding: 0.5rem;
cursor: pointer;
background-color: var(--background-white);
}


.add-btn, .form-actions button {
padding: 0.75rem 1.5rem;
border-radius: var(--border-radius-md);
font-size: 1rem;
font-weight: 500;
cursor: pointer;
border: 1px solid transparent;
transition: var(--default-transition);
}

.add-btn, .save-btn {
background-color: var(--primary-color);
color: var(--background-white);
}

.add-btn:hover, .save-btn:hover {
background-color: var(--primary-color-hover);
}



.task-list {
list-style: none;
padding: 0;
margin: 0;
}

.task-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 0;
border-bottom: 1px solid #e9ecef;
}
.task-item:last-child { border-bottom: none; }
.task-item:hover { background-color: var(--background-light); }
.task-item:hover .task-actions { opacity: 1; }

.task-content { display: flex; align-items: center; gap: 0.75rem; }
.task-content label { cursor: pointer; }
.task-item.completed label { text-decoration: line-through; color: var(--text-muted); }


.task-content input[type="checkbox"] {
appearance: none;
width: 20px;
height: 20px;
border: 2px solid var(--border-color);
border-radius: 50%;
cursor: pointer;
position: relative;
transition: var(--default-transition);
}
.task-content input[type="checkbox"]:checked {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
.task-content input[type="checkbox"]:checked::after {
content: '✔';
font-size: 12px;
color: white;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

.task-details { display: flex; align-items: center; gap: 1rem; color: var(--text-muted); }
.priority { font-size: 0.8rem; font-weight: 600; padding: 0.25rem 0.6rem; border-radius: 12px; color: var(--background-white); }
.priority.high { background-color: var(--high-priority); }
.priority.medium { background-color: var(--medium-priority); }
.priority.low { background-color: var(--low-priority); }

.task-actions { display: flex; gap: 0.5rem; opacity: 0; transition: opacity 0.2s; }
.icon-btn { background: none; border: none; cursor: pointer; font-size: 1.1rem; color: var(--text-muted); }
.icon-btn:hover { color: var(--text-color); }


.modal-overlay {
position: fixed;
inset: 0;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}

.modal-content {
background-color: var(--background-white);
padding: 2rem;
border-radius: var(--border-radius-lg);
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
width: 90%;
max-width: 450px;
}

.modal-content h2 { margin-top: 0; margin-bottom: 1.5rem; font-size: 1.75rem; }
.form-group { margin-bottom: 1.25rem; }
.form-group label { display: block; margin-bottom: 0.5rem; font-weight: 500; }
.form-group input, .form-group select { width: 100%; padding: 0.75rem; }

.form-actions { display: flex; justify-content: flex-end; gap: 0.75rem; margin-top: 2rem; }
.cancel-btn { background-color: var(--background-light); border-color: var(--border-color); color: var(--text-color); }
.cancel-btn:hover { background-color: #e2e6ea; }