<% if task.project && params[:id].blank? %>
-
+
<%= task.project.name %>
<% end %>
diff --git a/public/css/app.css b/public/css/app.css
index 9dbd704..6a5fa2f 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -100,12 +100,42 @@ h6 {
background: #ececec;
}
+.nav-link {
+ color: #000;
+}
+
+.nav-link.active-link {
+ background-color: #343a40;
+ color: #fff;
+}
+
+.dark-mode .nav-link {
+ color: #fff;
+}
+
+.dark-mode .nav-link.active-link {
+ background-color: var(--bs-dark);
+}
+
/* tasks, notes */
+.task-item {
+ background: var(--bs-white);
+}
+
+.dark-mode .task-item,
+.dark-mode .note-item {
+ background: var(--bs-gray-dark);
+}
+
.task-item:hover, .note-item:hover {
background: #fafafa !important;
}
+.dark-mode .task-item:hover, .dark-mode .note-item:hover {
+ background: var(--bs-black) !important;
+}
+
/* task form */
.task-name-input::placeholder {
@@ -127,4 +157,92 @@ h6 {
/* project card */
a.project-card .card:hover {
border: 1px solid #777 !important;
-}
\ No newline at end of file
+}
+
+/* dark mode */
+.dark-mode {
+ background-color: var(--bs-dark);
+ color: var(--bs-light);
+}
+
+.dark-mode .sidebar {
+ background-color: var(--bs-black);
+}
+
+.sidebar .border-top {
+ border-color: #ddd !important;
+}
+
+.dark-mode .sidebar .border-top {
+ border-color: #333 !important;
+}
+
+.dark-mode h1,
+.dark-mode h2,
+.dark-mode h3,
+.dark-mode h4,
+.dark-mode h5,
+.dark-mode h6 {
+ color: var(--bs-light) !important;
+}
+
+.dark-mode .modal .modal-dialog .modal-content {
+ background-color: var(--bs-gray-dark);
+ color: var(--bs-light);
+}
+
+.dark-mode .modal-header {
+ border-color: var(--bs-black);
+}
+
+.dark-mode input,
+.dark-mode tags,
+.dark-mode select,
+.dark-mode textarea {
+ background-color: var(--bs-dark);
+ color: var(--bs-light);
+ border-color: var(--bs-black);
+}
+
+.dark-mode input:focus,
+.dark-mode textarea:focus {
+ background-color: var(--bs-black);
+ color: var(--bs-light);
+}
+
+.dark-mode tag {
+ background-color: var(--bs-gray-dark) !important;
+ color: var(--bs-light) !important;
+}
+
+.dark-mode .project-card .card {
+ background-color: var(--bs-gray-dark) !important;
+ color: var(--bs-light) !important;
+}
+
+.dark-mode .progress {
+ background-color: var(--bs-dark);
+}
+
+.panel-card {
+ background-color: var(--bs-white) !important;
+ color: var(--bs-dark) !important;
+}
+
+.dark-mode .panel-card {
+ background-color: var(--bs-gray-dark) !important;
+ color: var(--bs-light) !important;
+}
+
+.panel {
+ background-color: var(--bs-light);
+}
+
+.dark-mode .panel {
+ background-color: var(--bs-black);
+}
+
+/* .dark-mode .panel .progress {
+ background-color: var(--bs-black);
+} */
+
diff --git a/public/js/app.js b/public/js/app.js
index 9376d0e..d85738d 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -1,6 +1,8 @@
document.addEventListener("DOMContentLoaded", function () {
attachEventListeners();
initializeTagifyOnNotes();
+ initializeDarkModeToggle();
+ setInitialDarkModeState();
});
function attachEventListeners() {
@@ -12,6 +14,46 @@ function attachEventListeners() {
attachNoteClickListeners();
}
+function initializeDarkModeToggle() {
+ const darkModeToggle = document.querySelector('#darkModeToggle');
+ const darkModeIcon = document.querySelector('#darkModeIcon');
+ const isDarkMode = localStorage.getItem('darkMode') === 'true';
+
+ updateDarkMode(isDarkMode);
+
+ darkModeToggle.addEventListener('click', function () {
+ const isDarkMode = localStorage.getItem('darkMode') === 'true';
+ updateDarkMode(!isDarkMode);
+ });
+}
+
+function updateDarkMode(enabled) {
+ document.body.classList.toggle('dark-mode', enabled);
+ localStorage.setItem('darkMode', enabled);
+ darkModeIcon.classList.toggle('bi-moon', !enabled);
+ darkModeIcon.classList.toggle('bi-sun', enabled);
+ // Update link colors and other necessary elements
+ updateLinkColors(enabled);
+}
+
+function updateLinkColors(darkModeEnabled) {
+ const links = document.querySelectorAll('.link-dark, .link-light');
+ links.forEach(link => {
+ link.classList.toggle('link-dark', !darkModeEnabled);
+ link.classList.toggle('link-light', darkModeEnabled);
+ });
+}
+
+function setInitialDarkModeState() {
+ const isDarkMode = localStorage.getItem('darkMode') === 'true';
+ const darkModeToggle = document.querySelector('#darkModeToggle');
+ if (darkModeToggle) {
+ darkModeToggle.checked = isDarkMode;
+ document.body.classList.toggle('dark-mode', isDarkMode);
+ updateLinkColors(isDarkMode);
+ }
+}
+
function initializeTagifyOnNotes() {
document.querySelectorAll('[id^="note_tags_new_"]').forEach(function(element) {
new Tagify(element);