|
18 | 18 |
|
19 | 19 | </head> |
20 | 20 |
|
21 | | -<body class="{% if DARK_MODE %}dark-mode{% endif %}"> |
22 | | - <div class="{% if DARK_MODE %}bg-dark border-dark{% else %}bg-light border-bottom{% endif %}"> |
| 21 | +<body class="{% if DARK_MODE %}dark-mode{% endif %}" data-dark-mode="{% if DARK_MODE %}true{% else %}false{% endif %}"> |
| 22 | + {% if user.is_authenticated %} |
| 23 | + <input type="hidden" id="csrf-token" value="{{ csrf_token }}"> |
| 24 | + {% endif %} |
| 25 | + <div class="{% if DARK_MODE %}bg-dark border-dark{% else %}bg-light border-bottom{% endif %}" id="header-container"> |
23 | 26 | <header class="container"> |
24 | 27 | <nav class="d-flex justify-content-between align-items-center py-2"> |
25 | 28 | <div class="breadcrumbs"> |
|
37 | 40 | {% if user.is_authenticated %} |
38 | 41 | <li class="mr-2"> |
39 | 42 | <button id="dark-mode-toggle" class="btn btn-sm {% if DARK_MODE %}btn-light{% else %}btn-dark{% endif %}" title="Toggle dark mode"> |
40 | | - <i class="fas {% if DARK_MODE %}fa-sun{% else %}fa-moon{% endif %}"></i> |
| 43 | + <i id="dark-mode-icon" class="fas {% if DARK_MODE %}fa-sun{% else %}fa-moon{% endif %}"></i> |
41 | 44 | </button> |
42 | 45 | </li> |
43 | 46 | <li class="mr-2"><i class="fas fa-user"></i> {{ user.username }}</li> |
|
52 | 55 | </div> |
53 | 56 |
|
54 | 57 | <div id="content" class="container"> |
55 | | - <div class="form-container mt-4 {% if DARK_MODE %}bg-dark{% else %}bg-light{% endif %} border rounded"> |
| 58 | + <div class="form-container mt-4 {% if DARK_MODE %}bg-dark{% else %}bg-light{% endif %} border rounded" id="main-content"> |
56 | 59 | {% block content %} |
57 | 60 | <!-- The specific content of each page will be inserted here --> |
58 | 61 | {% endblock %} |
|
71 | 74 | <script> |
72 | 75 | $(document).ready(function() { |
73 | 76 | $('#dark-mode-toggle').click(function() { |
| 77 | + var csrfToken = $('#csrf-token').val(); |
74 | 78 | $.ajax({ |
75 | 79 | url: '{% url "toggle_dark_mode" %}', |
76 | 80 | type: 'POST', |
77 | 81 | headers: { |
78 | | - 'X-CSRFToken': '{{ csrf_token }}' |
| 82 | + 'X-CSRFToken': csrfToken |
79 | 83 | }, |
80 | 84 | success: function(data) { |
81 | | - location.reload(); |
| 85 | + var isDarkMode = data.dark_mode; |
| 86 | + var $html = $('html'); |
| 87 | + var $body = $('body'); |
| 88 | + var $toggle = $('#dark-mode-toggle'); |
| 89 | + var $icon = $('#dark-mode-icon'); |
| 90 | + var $header = $('#header-container'); |
| 91 | + var $content = $('#main-content'); |
| 92 | + |
| 93 | + if (isDarkMode) { |
| 94 | + $html.addClass('dark-mode'); |
| 95 | + $body.addClass('dark-mode').attr('data-dark-mode', 'true'); |
| 96 | + $toggle.removeClass('btn-dark').addClass('btn-light'); |
| 97 | + $icon.removeClass('fa-moon').addClass('fa-sun'); |
| 98 | + $header.removeClass('bg-light border-bottom').addClass('bg-dark border-dark'); |
| 99 | + $content.removeClass('bg-light').addClass('bg-dark'); |
| 100 | + } else { |
| 101 | + $html.removeClass('dark-mode'); |
| 102 | + $body.removeClass('dark-mode').attr('data-dark-mode', 'false'); |
| 103 | + $toggle.removeClass('btn-light').addClass('btn-dark'); |
| 104 | + $icon.removeClass('fa-sun').addClass('fa-moon'); |
| 105 | + $header.removeClass('bg-dark border-dark').addClass('bg-light border-bottom'); |
| 106 | + $content.removeClass('bg-dark').addClass('bg-light'); |
| 107 | + } |
82 | 108 | }, |
83 | 109 | error: function(xhr, status, error) { |
84 | 110 | console.error('Error toggling dark mode:', error); |
|
0 commit comments