Free and open source ticket system written in python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add new menu and translations

+832 -221
+1 -1
paw/__init__.py
··· 1 1 from django import get_version 2 2 3 - VERSION = (0, 5, 5, "final", 0) 3 + VERSION = (0, 5, 6, "final", 0) 4 4 5 5 __version__ = get_version(VERSION)
+110 -57
paw/locale/de/LC_MESSAGES/django.po
··· 8 8 msgstr "" 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 - "POT-Creation-Date: 2024-03-12 23:27+0000\n" 11 + "POT-Creation-Date: 2024-03-24 23:44+0000\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: LANGUAGE <LL@li.org>\n" ··· 17 17 "Content-Type: text/plain; charset=UTF-8\n" 18 18 "Content-Transfer-Encoding: 8bit\n" 19 19 "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 - #: core/models.py:27 20 + 21 + #: core/forms.py:31 22 + msgid "Please enter your name" 23 + msgstr "Gib bitte deinen Namen an" 24 + 25 + #: core/forms.py:32 26 + msgid "" 27 + "Alphanumeric characters and underscores and dashes only (a-z, 0-9, _, -, @)" 28 + msgstr "Nur Alphanumerische Zeichen, Unterstriche und Striche (a-z, 0-9, _, -, @)" 29 + 30 + #: core/forms.py:35 paw/templates/core/account_finish.html:29 31 + #: paw/templates/core/login.html:24 32 + msgid "Username" 33 + msgstr "Benutzername" 34 + 35 + #: core/models.py:30 21 36 msgid "Google SSO User" 22 37 msgstr "" 23 38 24 - #: paw/settings.py:120 39 + #: paw/settings.py:133 25 40 msgid "English" 26 41 msgstr "" 27 42 28 - #: paw/settings.py:121 43 + #: paw/settings.py:134 29 44 msgid "French" 30 45 msgstr "" 31 46 32 - #: paw/settings.py:122 47 + #: paw/settings.py:135 33 48 msgid "German" 34 49 msgstr "" 35 50 ··· 49 64 msgid "Done" 50 65 msgstr "Fertig" 51 66 52 - #: paw/templates/core/account_finish.html:29 paw/templates/core/login.html:28 53 - msgid "Username" 54 - msgstr "Benutzername" 55 - 56 67 #: paw/templates/core/account_finish.html:34 57 - #: paw/templates/core/settings.html:48 68 + #: paw/templates/core/settings.html:55 58 69 msgid "Save" 59 70 msgstr "Speichern" 60 71 61 - #: paw/templates/core/login.html:11 paw/templates/core/login.html:43 72 + #: paw/templates/core/login.html:7 paw/templates/core/login.html:39 62 73 msgid "Log In" 63 74 msgstr "Anmelden" 64 75 65 - #: paw/templates/core/login.html:13 76 + #: paw/templates/core/login.html:9 66 77 msgid "Register Account" 67 78 msgstr "Account erstellen" 68 79 69 - #: paw/templates/core/login.html:34 80 + #: paw/templates/core/login.html:30 70 81 msgid "Password" 71 82 msgstr "Passwort" 72 83 73 - #: paw/templates/core/login.html:39 84 + #: paw/templates/core/login.html:35 74 85 msgid "Password Reset" 75 86 msgstr "Passwort zurücksetzen" 76 87 77 - #: paw/templates/core/login.html:50 88 + #: paw/templates/core/login.html:46 78 89 msgid "Log in with Google" 79 90 msgstr "Mit Google anmelden" 80 91 81 - #: paw/templates/core/settings.html:7 paw/templates/dashboard_base.html:51 92 + #: paw/templates/core/settings.html:7 paw/templates/dashboard_base.html:85 82 93 msgid "Settings" 83 94 msgstr "Einstellungen" 84 95 ··· 95 106 msgstr "Darkmode benutzen" 96 107 97 108 #: paw/templates/core/settings.html:37 109 + msgid "Receive Email Notifications" 110 + msgstr "Mail-Benachrichtigungen erhalten" 111 + 112 + #: paw/templates/core/settings.html:44 98 113 msgid "Profile Picture" 99 114 msgstr "Profilbild" 100 115 101 - #: paw/templates/core/settings.html:42 102 - #: paw/templates/ticketing/ticket_detail.html:127 116 + #: paw/templates/core/settings.html:49 117 + #: paw/templates/ticketing/ticket_detail.html:152 103 118 msgid "Contact" 104 119 msgstr "Kontakt" 105 120 106 - #: paw/templates/dashboard_base.html:12 121 + #: paw/templates/dashboard_base.html:34 107 122 #: paw/templates/ticketing/create_ticket.html:50 108 123 msgid "Create Ticket" 109 124 msgstr "Ticket erstellen" 110 125 111 - #: paw/templates/dashboard_base.html:16 126 + #: paw/templates/dashboard_base.html:40 112 127 msgid "Tickets" 113 128 msgstr "Tickets" 114 129 115 - #: paw/templates/dashboard_base.html:20 130 + #: paw/templates/dashboard_base.html:46 131 + #: paw/templates/ticketing/tickets_history.html:5 116 132 msgid "History" 117 133 msgstr "Historie" 118 134 119 - #: paw/templates/dashboard_base.html:55 135 + #: paw/templates/dashboard_base.html:53 paw/templates/ticketing/tickets.html:20 136 + msgid "Status" 137 + msgstr "" 138 + 139 + #: paw/templates/dashboard_base.html:79 140 + msgid "Admin" 141 + msgstr "Administration" 142 + 143 + #: paw/templates/dashboard_base.html:89 120 144 msgid "Logout" 121 145 msgstr "Abmelden" 122 146 123 147 #: paw/templates/partials/assigned_to.html:17 124 - #: paw/templates/ticketing/ticket_detail.html:176 148 + #: paw/templates/ticketing/ticket_detail.html:201 125 149 msgid "Unassigned" 126 150 msgstr "Nicht zugewiesen" 127 151 128 - #: paw/templates/partials/ticket_status_badge.html:4 ticketing/models.py:37 152 + #: paw/templates/partials/ticket_status_badge.html:4 ticketing/models.py:40 129 153 msgid "Open" 130 154 msgstr "Offen" 131 155 132 - #: paw/templates/partials/ticket_status_badge.html:6 ticketing/models.py:38 156 + #: paw/templates/partials/ticket_status_badge.html:6 ticketing/models.py:41 133 157 msgid "In Progress" 134 158 msgstr "In Bearbeitung" 135 159 136 - #: paw/templates/partials/ticket_status_badge.html:8 ticketing/models.py:39 160 + #: paw/templates/partials/ticket_status_badge.html:8 ticketing/models.py:42 137 161 msgid "Closed" 138 162 msgstr "Geschlossen" 139 163 ··· 142 166 msgstr "Neues Ticket erstellen" 143 167 144 168 #: paw/templates/ticketing/create_ticket.html:12 145 - #: paw/templates/ticketing/ticket_detail.html:140 169 + #: paw/templates/ticketing/ticket_detail.html:165 146 170 #: paw/templates/ticketing/tickets.html:19 171 + #: paw/templates/ticketing/tickets_history.html:19 147 172 msgid "Category" 148 173 msgstr "Kategorie" 149 174 150 175 #: paw/templates/ticketing/create_ticket.html:19 151 - #: paw/templates/ticketing/tickets.html:17 ticketing/forms.py:73 176 + #: paw/templates/ticketing/tickets.html:17 177 + #: paw/templates/ticketing/tickets_history.html:17 ticketing/forms.py:73 152 178 msgid "Title" 153 179 msgstr "Titel" 154 180 ··· 163 189 164 190 #: paw/templates/ticketing/create_ticket.html:43 165 191 msgid "Create as follow-up to a closed ticket" 166 - msgstr "Als Follow-Up zu einem geschlossenen Ticket erstellen" 192 + msgstr "Als Nachfolge-Ticket zu einem geschlossenen Ticket erstellen" 167 193 168 194 #: paw/templates/ticketing/ticket_detail.html:14 169 195 msgid "Attachment" 170 196 msgstr "Anhang" 171 197 172 - #: paw/templates/ticketing/ticket_detail.html:19 198 + #: paw/templates/ticketing/ticket_detail.html:21 199 + msgid "Follow-Up Ticket to" 200 + msgstr "Nachfolgende-Ticket zu" 201 + 202 + #: paw/templates/ticketing/ticket_detail.html:28 203 + msgid "Followed-Up by" 204 + msgstr "Nachfolgende-Ticket von" 205 + 206 + #: paw/templates/ticketing/ticket_detail.html:36 173 207 msgid "Activity" 174 208 msgstr "Aktivitäten" 175 209 176 - #: paw/templates/ticketing/ticket_detail.html:55 210 + #: paw/templates/ticketing/ticket_detail.html:61 211 + msgid "Internal" 212 + msgstr "Intern" 213 + 214 + #: paw/templates/ticketing/ticket_detail.html:78 177 215 msgid "Apply Template" 178 216 msgstr "Vorlage anwenden" 179 217 180 - #: paw/templates/ticketing/ticket_detail.html:73 218 + #: paw/templates/ticketing/ticket_detail.html:96 181 219 msgid "Add Comment" 182 220 msgstr "Kommentar hinzufügen" 183 221 184 - #: paw/templates/ticketing/ticket_detail.html:75 222 + #: paw/templates/ticketing/ticket_detail.html:98 185 223 msgid "Close Ticket" 186 224 msgstr "Ticket schliessen" 187 225 188 - #: paw/templates/ticketing/ticket_detail.html:84 226 + #: paw/templates/ticketing/ticket_detail.html:107 189 227 msgid "Make this an internal comment" 190 228 msgstr "Mache dies einen internen Kommentar" 191 229 192 - #: paw/templates/ticketing/ticket_detail.html:91 230 + #: paw/templates/ticketing/ticket_detail.html:116 193 231 msgid "Ticket has been closed" 194 232 msgstr "Das Ticket wurde geschlossen" 195 233 196 - #: paw/templates/ticketing/ticket_detail.html:96 234 + #: paw/templates/ticketing/ticket_detail.html:121 197 235 msgid "Re-Open Ticket" 198 236 msgstr "Ticket wieder öffnen" 199 237 200 - #: paw/templates/ticketing/ticket_detail.html:107 238 + #: paw/templates/ticketing/ticket_detail.html:132 201 239 msgid "Created by" 202 240 msgstr "Erstellt von" 203 241 204 - #: paw/templates/ticketing/ticket_detail.html:120 242 + #: paw/templates/ticketing/ticket_detail.html:145 205 243 msgid "Created on" 206 244 msgstr "Erstellt am" 207 245 208 - #: paw/templates/ticketing/ticket_detail.html:124 246 + #: paw/templates/ticketing/ticket_detail.html:149 209 247 msgid "Last updated" 210 248 msgstr "Zuletzt aktualisiert" 211 249 212 - #: paw/templates/ticketing/ticket_detail.html:146 213 - #: paw/templates/ticketing/tickets.html:42 ticketing/forms.py:81 214 - #: ticketing/forms.py:104 250 + #: paw/templates/ticketing/ticket_detail.html:171 251 + #: paw/templates/ticketing/tickets.html:42 252 + #: paw/templates/ticketing/tickets_history.html:42 ticketing/forms.py:81 253 + #: ticketing/forms.py:104 ticketing/models.py:167 ticketing/models.py:180 215 254 msgid "General" 216 255 msgstr "Allgemein" 217 256 218 - #: paw/templates/ticketing/ticket_detail.html:152 257 + #: paw/templates/ticketing/ticket_detail.html:177 219 258 msgid "Assign to new category" 220 259 msgstr "Kategorie zuweisen" 221 260 222 - #: paw/templates/ticketing/ticket_detail.html:155 223 - #: paw/templates/ticketing/ticket_detail.html:185 261 + #: paw/templates/ticketing/ticket_detail.html:180 262 + #: paw/templates/ticketing/ticket_detail.html:210 224 263 msgid "Assign" 225 264 msgstr "Zuweisen" 226 265 227 - #: paw/templates/ticketing/ticket_detail.html:160 266 + #: paw/templates/ticketing/ticket_detail.html:185 228 267 msgid "Assignees" 229 268 msgstr "Bearbeiter" 230 269 231 - #: paw/templates/ticketing/ticket_detail.html:167 270 + #: paw/templates/ticketing/ticket_detail.html:192 232 271 msgid "Assign to me" 233 272 msgstr "Weise mir zu" 234 273 235 - #: paw/templates/ticketing/ticket_detail.html:182 274 + #: paw/templates/ticketing/ticket_detail.html:207 236 275 msgid "Assign to new team" 237 276 msgstr "Team zuweisen" 238 277 ··· 241 280 msgstr "Offene Tickets" 242 281 243 282 #: paw/templates/ticketing/tickets.html:7 283 + #: paw/templates/ticketing/tickets_history.html:7 244 284 msgid "for" 245 285 msgstr "für" 246 286 247 287 #: paw/templates/ticketing/tickets.html:18 288 + #: paw/templates/ticketing/tickets_history.html:18 248 289 msgid "Assigned to" 249 290 msgstr "Zugewiesen an" 250 291 251 - #: paw/templates/ticketing/tickets.html:20 252 - msgid "Status" 253 - msgstr "" 254 - 255 292 #: paw/templates/ticketing/tickets.html:27 293 + #: paw/templates/ticketing/tickets_history.html:27 256 294 msgid "No tickets found" 257 295 msgstr "Keine Tickets gefunden" 258 296 259 297 #: paw/templates/ticketing/tickets.html:49 298 + #: paw/templates/ticketing/tickets_history.html:47 260 299 msgid "View" 261 300 msgstr "Anzeigen" 262 301 302 + #: paw/templates/ticketing/tickets_history.html:20 303 + #, fuzzy 304 + #| msgid "Closed" 305 + msgid "Closed on" 306 + msgstr "Geschlossen" 307 + 308 + #: status/templates/status/incident_list.html:11 309 + msgid "Some services might not be fully operational" 310 + msgstr "Einige Dienste sind sind nicht voll funktionstüchtig" 311 + 312 + #: status/templates/status/incident_list.html:16 313 + msgid "All services are operational" 314 + msgstr "Alle Dienste sind voll funktionstüchtig" 315 + 263 316 #: ticketing/forms.py:39 264 317 msgid "File size must be under 5MB." 265 318 msgstr "Dateigrösse muss unter 5MB sein." ··· 278 331 279 332 #: ticketing/forms.py:82 280 333 msgid "No Follow-up" 281 - msgstr "Kein Follow-Up" 334 + msgstr "Kein Nachfolge-Ticket" 282 335 283 336 #: ticketing/forms.py:99 284 337 msgid "No Team" 285 338 msgstr "Kein Team" 286 339 287 - #: ticketing/models.py:28 340 + #: ticketing/models.py:31 288 341 msgid "" 289 342 "If a team is selected, new tickets will automatically assigned to this team." 290 343 msgstr "" 291 344 292 - #: ticketing/models.py:42 345 + #: ticketing/models.py:45 293 346 msgid "Low" 294 347 msgstr "Niedrig" 295 348 296 - #: ticketing/models.py:43 349 + #: ticketing/models.py:46 297 350 msgid "Medium" 298 351 msgstr "Mittel" 299 352 300 - #: ticketing/models.py:44 353 + #: ticketing/models.py:47 301 354 msgid "High" 302 355 msgstr "Hoch"
+105 -55
paw/locale/en/LC_MESSAGES/django.po
··· 8 8 msgstr "" 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 - "POT-Creation-Date: 2024-03-12 23:27+0000\n" 11 + "POT-Creation-Date: 2024-03-24 23:44+0000\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: LANGUAGE <LL@li.org>\n" ··· 18 18 "Content-Transfer-Encoding: 8bit\n" 19 19 "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 20 21 - #: core/models.py:27 21 + #: core/forms.py:31 22 + msgid "Please enter your name" 23 + msgstr "" 24 + 25 + #: core/forms.py:32 26 + msgid "" 27 + "Alphanumeric characters and underscores and dashes only (a-z, 0-9, _, -, @)" 28 + msgstr "" 29 + 30 + #: core/forms.py:35 paw/templates/core/account_finish.html:29 31 + #: paw/templates/core/login.html:24 32 + msgid "Username" 33 + msgstr "" 34 + 35 + #: core/models.py:30 22 36 msgid "Google SSO User" 23 37 msgstr "" 24 38 25 - #: paw/settings.py:120 39 + #: paw/settings.py:133 26 40 msgid "English" 27 41 msgstr "English" 28 42 29 - #: paw/settings.py:121 43 + #: paw/settings.py:134 30 44 msgid "French" 31 45 msgstr "Français" 32 46 33 - #: paw/settings.py:122 47 + #: paw/settings.py:135 34 48 msgid "German" 35 49 msgstr "Deutsch" 36 50 ··· 50 64 msgid "Done" 51 65 msgstr "" 52 66 53 - #: paw/templates/core/account_finish.html:29 paw/templates/core/login.html:28 54 - msgid "Username" 55 - msgstr "" 56 - 57 67 #: paw/templates/core/account_finish.html:34 58 - #: paw/templates/core/settings.html:48 68 + #: paw/templates/core/settings.html:55 59 69 msgid "Save" 60 70 msgstr "" 61 71 62 - #: paw/templates/core/login.html:11 paw/templates/core/login.html:43 72 + #: paw/templates/core/login.html:7 paw/templates/core/login.html:39 63 73 msgid "Log In" 64 74 msgstr "" 65 75 66 - #: paw/templates/core/login.html:13 76 + #: paw/templates/core/login.html:9 67 77 msgid "Register Account" 68 78 msgstr "" 69 79 70 - #: paw/templates/core/login.html:34 80 + #: paw/templates/core/login.html:30 71 81 msgid "Password" 72 82 msgstr "" 73 83 74 - #: paw/templates/core/login.html:39 84 + #: paw/templates/core/login.html:35 75 85 msgid "Password Reset" 76 86 msgstr "" 77 87 78 - #: paw/templates/core/login.html:50 88 + #: paw/templates/core/login.html:46 79 89 msgid "Log in with Google" 80 90 msgstr "" 81 91 82 - #: paw/templates/core/settings.html:7 paw/templates/dashboard_base.html:51 92 + #: paw/templates/core/settings.html:7 paw/templates/dashboard_base.html:85 83 93 #, fuzzy 84 94 #| msgid "SettingsHeading" 85 95 msgid "Settings" ··· 98 108 msgstr "" 99 109 100 110 #: paw/templates/core/settings.html:37 111 + msgid "Receive Email Notifications" 112 + msgstr "" 113 + 114 + #: paw/templates/core/settings.html:44 101 115 msgid "Profile Picture" 102 116 msgstr "" 103 117 104 - #: paw/templates/core/settings.html:42 105 - #: paw/templates/ticketing/ticket_detail.html:127 118 + #: paw/templates/core/settings.html:49 119 + #: paw/templates/ticketing/ticket_detail.html:152 106 120 msgid "Contact" 107 121 msgstr "" 108 122 109 - #: paw/templates/dashboard_base.html:12 123 + #: paw/templates/dashboard_base.html:34 110 124 #: paw/templates/ticketing/create_ticket.html:50 111 125 msgid "Create Ticket" 112 126 msgstr "" 113 127 114 - #: paw/templates/dashboard_base.html:16 128 + #: paw/templates/dashboard_base.html:40 115 129 msgid "Tickets" 116 130 msgstr "" 117 131 118 - #: paw/templates/dashboard_base.html:20 132 + #: paw/templates/dashboard_base.html:46 133 + #: paw/templates/ticketing/tickets_history.html:5 119 134 msgid "History" 120 135 msgstr "" 121 136 122 - #: paw/templates/dashboard_base.html:55 137 + #: paw/templates/dashboard_base.html:53 paw/templates/ticketing/tickets.html:20 138 + msgid "Status" 139 + msgstr "" 140 + 141 + #: paw/templates/dashboard_base.html:79 142 + msgid "Admin" 143 + msgstr "" 144 + 145 + #: paw/templates/dashboard_base.html:89 123 146 msgid "Logout" 124 147 msgstr "" 125 148 126 149 #: paw/templates/partials/assigned_to.html:17 127 - #: paw/templates/ticketing/ticket_detail.html:176 150 + #: paw/templates/ticketing/ticket_detail.html:201 128 151 msgid "Unassigned" 129 152 msgstr "" 130 153 131 - #: paw/templates/partials/ticket_status_badge.html:4 ticketing/models.py:37 154 + #: paw/templates/partials/ticket_status_badge.html:4 ticketing/models.py:40 132 155 msgid "Open" 133 156 msgstr "" 134 157 135 - #: paw/templates/partials/ticket_status_badge.html:6 ticketing/models.py:38 158 + #: paw/templates/partials/ticket_status_badge.html:6 ticketing/models.py:41 136 159 msgid "In Progress" 137 160 msgstr "" 138 161 139 - #: paw/templates/partials/ticket_status_badge.html:8 ticketing/models.py:39 162 + #: paw/templates/partials/ticket_status_badge.html:8 ticketing/models.py:42 140 163 msgid "Closed" 141 164 msgstr "" 142 165 ··· 145 168 msgstr "" 146 169 147 170 #: paw/templates/ticketing/create_ticket.html:12 148 - #: paw/templates/ticketing/ticket_detail.html:140 171 + #: paw/templates/ticketing/ticket_detail.html:165 149 172 #: paw/templates/ticketing/tickets.html:19 173 + #: paw/templates/ticketing/tickets_history.html:19 150 174 msgid "Category" 151 175 msgstr "" 152 176 153 177 #: paw/templates/ticketing/create_ticket.html:19 154 - #: paw/templates/ticketing/tickets.html:17 ticketing/forms.py:73 178 + #: paw/templates/ticketing/tickets.html:17 179 + #: paw/templates/ticketing/tickets_history.html:17 ticketing/forms.py:73 155 180 msgid "Title" 156 181 msgstr "" 157 182 ··· 172 197 msgid "Attachment" 173 198 msgstr "" 174 199 175 - #: paw/templates/ticketing/ticket_detail.html:19 200 + #: paw/templates/ticketing/ticket_detail.html:21 201 + msgid "Follow-Up Ticket to" 202 + msgstr "" 203 + 204 + #: paw/templates/ticketing/ticket_detail.html:28 205 + msgid "Followed-Up by" 206 + msgstr "" 207 + 208 + #: paw/templates/ticketing/ticket_detail.html:36 176 209 msgid "Activity" 177 210 msgstr "" 178 211 179 - #: paw/templates/ticketing/ticket_detail.html:55 212 + #: paw/templates/ticketing/ticket_detail.html:61 213 + msgid "Internal" 214 + msgstr "" 215 + 216 + #: paw/templates/ticketing/ticket_detail.html:78 180 217 msgid "Apply Template" 181 218 msgstr "" 182 219 183 - #: paw/templates/ticketing/ticket_detail.html:73 220 + #: paw/templates/ticketing/ticket_detail.html:96 184 221 msgid "Add Comment" 185 222 msgstr "" 186 223 187 - #: paw/templates/ticketing/ticket_detail.html:75 224 + #: paw/templates/ticketing/ticket_detail.html:98 188 225 msgid "Close Ticket" 189 226 msgstr "" 190 227 191 - #: paw/templates/ticketing/ticket_detail.html:84 228 + #: paw/templates/ticketing/ticket_detail.html:107 192 229 msgid "Make this an internal comment" 193 230 msgstr "" 194 231 195 - #: paw/templates/ticketing/ticket_detail.html:91 232 + #: paw/templates/ticketing/ticket_detail.html:116 196 233 msgid "Ticket has been closed" 197 234 msgstr "" 198 235 199 - #: paw/templates/ticketing/ticket_detail.html:96 236 + #: paw/templates/ticketing/ticket_detail.html:121 200 237 msgid "Re-Open Ticket" 201 238 msgstr "" 202 239 203 - #: paw/templates/ticketing/ticket_detail.html:107 240 + #: paw/templates/ticketing/ticket_detail.html:132 204 241 msgid "Created by" 205 242 msgstr "" 206 243 207 - #: paw/templates/ticketing/ticket_detail.html:120 244 + #: paw/templates/ticketing/ticket_detail.html:145 208 245 msgid "Created on" 209 246 msgstr "" 210 247 211 - #: paw/templates/ticketing/ticket_detail.html:124 248 + #: paw/templates/ticketing/ticket_detail.html:149 212 249 msgid "Last updated" 213 250 msgstr "" 214 251 215 - #: paw/templates/ticketing/ticket_detail.html:146 216 - #: paw/templates/ticketing/tickets.html:42 ticketing/forms.py:81 217 - #: ticketing/forms.py:104 252 + #: paw/templates/ticketing/ticket_detail.html:171 253 + #: paw/templates/ticketing/tickets.html:42 254 + #: paw/templates/ticketing/tickets_history.html:42 ticketing/forms.py:81 255 + #: ticketing/forms.py:104 ticketing/models.py:167 ticketing/models.py:180 218 256 msgid "General" 219 257 msgstr "" 220 258 221 - #: paw/templates/ticketing/ticket_detail.html:152 259 + #: paw/templates/ticketing/ticket_detail.html:177 222 260 msgid "Assign to new category" 223 261 msgstr "" 224 262 225 - #: paw/templates/ticketing/ticket_detail.html:155 226 - #: paw/templates/ticketing/ticket_detail.html:185 263 + #: paw/templates/ticketing/ticket_detail.html:180 264 + #: paw/templates/ticketing/ticket_detail.html:210 227 265 msgid "Assign" 228 266 msgstr "" 229 267 230 - #: paw/templates/ticketing/ticket_detail.html:160 268 + #: paw/templates/ticketing/ticket_detail.html:185 231 269 msgid "Assignees" 232 270 msgstr "" 233 271 234 - #: paw/templates/ticketing/ticket_detail.html:167 272 + #: paw/templates/ticketing/ticket_detail.html:192 235 273 msgid "Assign to me" 236 274 msgstr "" 237 275 238 - #: paw/templates/ticketing/ticket_detail.html:182 276 + #: paw/templates/ticketing/ticket_detail.html:207 239 277 msgid "Assign to new team" 240 278 msgstr "" 241 279 ··· 244 282 msgstr "" 245 283 246 284 #: paw/templates/ticketing/tickets.html:7 285 + #: paw/templates/ticketing/tickets_history.html:7 247 286 msgid "for" 248 287 msgstr "" 249 288 250 289 #: paw/templates/ticketing/tickets.html:18 290 + #: paw/templates/ticketing/tickets_history.html:18 251 291 msgid "Assigned to" 252 292 msgstr "" 253 293 254 - #: paw/templates/ticketing/tickets.html:20 255 - msgid "Status" 256 - msgstr "" 257 - 258 294 #: paw/templates/ticketing/tickets.html:27 295 + #: paw/templates/ticketing/tickets_history.html:27 259 296 msgid "No tickets found" 260 297 msgstr "" 261 298 262 299 #: paw/templates/ticketing/tickets.html:49 300 + #: paw/templates/ticketing/tickets_history.html:47 263 301 msgid "View" 264 302 msgstr "" 265 303 304 + #: paw/templates/ticketing/tickets_history.html:20 305 + msgid "Closed on" 306 + msgstr "" 307 + 308 + #: status/templates/status/incident_list.html:11 309 + msgid "Some services might not be fully operational" 310 + msgstr "" 311 + 312 + #: status/templates/status/incident_list.html:16 313 + msgid "All services are operational" 314 + msgstr "" 315 + 266 316 #: ticketing/forms.py:39 267 317 msgid "File size must be under 5MB." 268 318 msgstr "" ··· 287 337 msgid "No Team" 288 338 msgstr "" 289 339 290 - #: ticketing/models.py:28 340 + #: ticketing/models.py:31 291 341 msgid "" 292 342 "If a team is selected, new tickets will automatically assigned to this team." 293 343 msgstr "" 294 344 295 - #: ticketing/models.py:42 345 + #: ticketing/models.py:45 296 346 msgid "Low" 297 347 msgstr "" 298 348 299 - #: ticketing/models.py:43 349 + #: ticketing/models.py:46 300 350 msgid "Medium" 301 351 msgstr "" 302 352 303 - #: ticketing/models.py:44 353 + #: ticketing/models.py:47 304 354 msgid "High" 305 355 msgstr ""
+107 -55
paw/locale/fr/LC_MESSAGES/django.po
··· 8 8 msgstr "" 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 - "POT-Creation-Date: 2024-03-12 23:27+0000\n" 11 + "POT-Creation-Date: 2024-03-24 23:44+0000\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: LANGUAGE <LL@li.org>\n" ··· 18 18 "Content-Transfer-Encoding: 8bit\n" 19 19 "Plural-Forms: nplurals=2; plural=(n > 1);\n" 20 20 21 - #: core/models.py:27 21 + #: core/forms.py:31 22 + msgid "Please enter your name" 23 + msgstr "" 24 + 25 + #: core/forms.py:32 26 + msgid "" 27 + "Alphanumeric characters and underscores and dashes only (a-z, 0-9, _, -, @)" 28 + msgstr "" 29 + 30 + #: core/forms.py:35 paw/templates/core/account_finish.html:29 31 + #: paw/templates/core/login.html:24 32 + msgid "Username" 33 + msgstr "" 34 + 35 + #: core/models.py:30 22 36 msgid "Google SSO User" 23 37 msgstr "" 24 38 25 - #: paw/settings.py:120 39 + #: paw/settings.py:133 26 40 msgid "English" 27 41 msgstr "" 28 42 29 - #: paw/settings.py:121 43 + #: paw/settings.py:134 30 44 msgid "French" 31 45 msgstr "" 32 46 33 - #: paw/settings.py:122 47 + #: paw/settings.py:135 34 48 msgid "German" 35 49 msgstr "" 36 50 ··· 50 64 msgid "Done" 51 65 msgstr "" 52 66 53 - #: paw/templates/core/account_finish.html:29 paw/templates/core/login.html:28 54 - msgid "Username" 55 - msgstr "" 56 - 57 67 #: paw/templates/core/account_finish.html:34 58 - #: paw/templates/core/settings.html:48 68 + #: paw/templates/core/settings.html:55 59 69 msgid "Save" 60 70 msgstr "Enregistrer" 61 71 62 - #: paw/templates/core/login.html:11 paw/templates/core/login.html:43 72 + #: paw/templates/core/login.html:7 paw/templates/core/login.html:39 63 73 msgid "Log In" 64 74 msgstr "" 65 75 66 - #: paw/templates/core/login.html:13 76 + #: paw/templates/core/login.html:9 67 77 msgid "Register Account" 68 78 msgstr "" 69 79 70 - #: paw/templates/core/login.html:34 80 + #: paw/templates/core/login.html:30 71 81 msgid "Password" 72 82 msgstr "" 73 83 74 - #: paw/templates/core/login.html:39 84 + #: paw/templates/core/login.html:35 75 85 msgid "Password Reset" 76 86 msgstr "" 77 87 78 - #: paw/templates/core/login.html:50 88 + #: paw/templates/core/login.html:46 79 89 msgid "Log in with Google" 80 90 msgstr "" 81 91 82 - #: paw/templates/core/settings.html:7 paw/templates/dashboard_base.html:51 92 + #: paw/templates/core/settings.html:7 paw/templates/dashboard_base.html:85 83 93 msgid "Settings" 84 94 msgstr "Paramètres" 85 95 ··· 96 106 msgstr "" 97 107 98 108 #: paw/templates/core/settings.html:37 109 + msgid "Receive Email Notifications" 110 + msgstr "" 111 + 112 + #: paw/templates/core/settings.html:44 99 113 msgid "Profile Picture" 100 114 msgstr "Image du profil" 101 115 102 - #: paw/templates/core/settings.html:42 103 - #: paw/templates/ticketing/ticket_detail.html:127 116 + #: paw/templates/core/settings.html:49 117 + #: paw/templates/ticketing/ticket_detail.html:152 104 118 msgid "Contact" 105 119 msgstr "" 106 120 107 - #: paw/templates/dashboard_base.html:12 121 + #: paw/templates/dashboard_base.html:34 108 122 #: paw/templates/ticketing/create_ticket.html:50 109 123 msgid "Create Ticket" 110 124 msgstr "Nouveau ticket" 111 125 112 - #: paw/templates/dashboard_base.html:16 126 + #: paw/templates/dashboard_base.html:40 113 127 msgid "Tickets" 114 128 msgstr "" 115 129 116 - #: paw/templates/dashboard_base.html:20 130 + #: paw/templates/dashboard_base.html:46 131 + #: paw/templates/ticketing/tickets_history.html:5 117 132 msgid "History" 118 133 msgstr "Historique" 119 134 120 - #: paw/templates/dashboard_base.html:55 135 + #: paw/templates/dashboard_base.html:53 paw/templates/ticketing/tickets.html:20 136 + msgid "Status" 137 + msgstr "Statut" 138 + 139 + #: paw/templates/dashboard_base.html:79 140 + msgid "Admin" 141 + msgstr "" 142 + 143 + #: paw/templates/dashboard_base.html:89 121 144 msgid "Logout" 122 145 msgstr "Se déconnecter" 123 146 124 147 #: paw/templates/partials/assigned_to.html:17 125 - #: paw/templates/ticketing/ticket_detail.html:176 148 + #: paw/templates/ticketing/ticket_detail.html:201 126 149 msgid "Unassigned" 127 150 msgstr "Non attribué" 128 151 129 - #: paw/templates/partials/ticket_status_badge.html:4 ticketing/models.py:37 152 + #: paw/templates/partials/ticket_status_badge.html:4 ticketing/models.py:40 130 153 msgid "Open" 131 154 msgstr "Ouvert" 132 155 133 - #: paw/templates/partials/ticket_status_badge.html:6 ticketing/models.py:38 156 + #: paw/templates/partials/ticket_status_badge.html:6 ticketing/models.py:41 134 157 msgid "In Progress" 135 158 msgstr "En cours" 136 159 137 - #: paw/templates/partials/ticket_status_badge.html:8 ticketing/models.py:39 160 + #: paw/templates/partials/ticket_status_badge.html:8 ticketing/models.py:42 138 161 msgid "Closed" 139 162 msgstr "Fermé" 140 163 ··· 143 166 msgstr "Créer un ticket" 144 167 145 168 #: paw/templates/ticketing/create_ticket.html:12 146 - #: paw/templates/ticketing/ticket_detail.html:140 169 + #: paw/templates/ticketing/ticket_detail.html:165 147 170 #: paw/templates/ticketing/tickets.html:19 171 + #: paw/templates/ticketing/tickets_history.html:19 148 172 msgid "Category" 149 173 msgstr "Catégorie" 150 174 151 175 #: paw/templates/ticketing/create_ticket.html:19 152 - #: paw/templates/ticketing/tickets.html:17 ticketing/forms.py:73 176 + #: paw/templates/ticketing/tickets.html:17 177 + #: paw/templates/ticketing/tickets_history.html:17 ticketing/forms.py:73 153 178 msgid "Title" 154 179 msgstr "Titre" 155 180 ··· 170 195 msgid "Attachment" 171 196 msgstr "" 172 197 173 - #: paw/templates/ticketing/ticket_detail.html:19 198 + #: paw/templates/ticketing/ticket_detail.html:21 199 + msgid "Follow-Up Ticket to" 200 + msgstr "" 201 + 202 + #: paw/templates/ticketing/ticket_detail.html:28 203 + msgid "Followed-Up by" 204 + msgstr "" 205 + 206 + #: paw/templates/ticketing/ticket_detail.html:36 174 207 msgid "Activity" 175 208 msgstr "" 176 209 177 - #: paw/templates/ticketing/ticket_detail.html:55 210 + #: paw/templates/ticketing/ticket_detail.html:61 211 + msgid "Internal" 212 + msgstr "" 213 + 214 + #: paw/templates/ticketing/ticket_detail.html:78 178 215 msgid "Apply Template" 179 216 msgstr "" 180 217 181 - #: paw/templates/ticketing/ticket_detail.html:73 218 + #: paw/templates/ticketing/ticket_detail.html:96 182 219 msgid "Add Comment" 183 220 msgstr "Ajouter un commentaire" 184 221 185 - #: paw/templates/ticketing/ticket_detail.html:75 222 + #: paw/templates/ticketing/ticket_detail.html:98 186 223 #, fuzzy 187 224 #| msgid "Create Ticket" 188 225 msgid "Close Ticket" 189 226 msgstr "Nouveau ticket" 190 227 191 - #: paw/templates/ticketing/ticket_detail.html:84 228 + #: paw/templates/ticketing/ticket_detail.html:107 192 229 msgid "Make this an internal comment" 193 230 msgstr "" 194 231 195 - #: paw/templates/ticketing/ticket_detail.html:91 232 + #: paw/templates/ticketing/ticket_detail.html:116 196 233 msgid "Ticket has been closed" 197 234 msgstr "Le ticket a été fermé" 198 235 199 - #: paw/templates/ticketing/ticket_detail.html:96 236 + #: paw/templates/ticketing/ticket_detail.html:121 200 237 msgid "Re-Open Ticket" 201 238 msgstr "Réouverture du ticket" 202 239 203 - #: paw/templates/ticketing/ticket_detail.html:107 240 + #: paw/templates/ticketing/ticket_detail.html:132 204 241 msgid "Created by" 205 242 msgstr "Créé par" 206 243 207 - #: paw/templates/ticketing/ticket_detail.html:120 244 + #: paw/templates/ticketing/ticket_detail.html:145 208 245 msgid "Created on" 209 246 msgstr "Créé le" 210 247 211 - #: paw/templates/ticketing/ticket_detail.html:124 248 + #: paw/templates/ticketing/ticket_detail.html:149 212 249 msgid "Last updated" 213 250 msgstr "Dernière mise à jour le" 214 251 215 - #: paw/templates/ticketing/ticket_detail.html:146 216 - #: paw/templates/ticketing/tickets.html:42 ticketing/forms.py:81 217 - #: ticketing/forms.py:104 252 + #: paw/templates/ticketing/ticket_detail.html:171 253 + #: paw/templates/ticketing/tickets.html:42 254 + #: paw/templates/ticketing/tickets_history.html:42 ticketing/forms.py:81 255 + #: ticketing/forms.py:104 ticketing/models.py:167 ticketing/models.py:180 218 256 msgid "General" 219 257 msgstr "" 220 258 221 - #: paw/templates/ticketing/ticket_detail.html:152 259 + #: paw/templates/ticketing/ticket_detail.html:177 222 260 #, fuzzy 223 261 #| msgid "Assign to me" 224 262 msgid "Assign to new category" 225 263 msgstr "Me l'attribuer" 226 264 227 - #: paw/templates/ticketing/ticket_detail.html:155 228 - #: paw/templates/ticketing/ticket_detail.html:185 265 + #: paw/templates/ticketing/ticket_detail.html:180 266 + #: paw/templates/ticketing/ticket_detail.html:210 229 267 #, fuzzy 230 268 #| msgid "Assign to me" 231 269 msgid "Assign" 232 270 msgstr "Me l'attribuer" 233 271 234 - #: paw/templates/ticketing/ticket_detail.html:160 272 + #: paw/templates/ticketing/ticket_detail.html:185 235 273 #, fuzzy 236 274 #| msgid "Assign to me" 237 275 msgid "Assignees" 238 276 msgstr "Me l'attribuer" 239 277 240 - #: paw/templates/ticketing/ticket_detail.html:167 278 + #: paw/templates/ticketing/ticket_detail.html:192 241 279 msgid "Assign to me" 242 280 msgstr "Me l'attribuer" 243 281 244 - #: paw/templates/ticketing/ticket_detail.html:182 282 + #: paw/templates/ticketing/ticket_detail.html:207 245 283 #, fuzzy 246 284 #| msgid "Assign to me" 247 285 msgid "Assign to new team" ··· 254 292 msgstr "Réouverture du ticket" 255 293 256 294 #: paw/templates/ticketing/tickets.html:7 295 + #: paw/templates/ticketing/tickets_history.html:7 257 296 msgid "for" 258 297 msgstr "pour" 259 298 260 299 #: paw/templates/ticketing/tickets.html:18 300 + #: paw/templates/ticketing/tickets_history.html:18 261 301 #, fuzzy 262 302 #| msgid "Assign to me" 263 303 msgid "Assigned to" 264 304 msgstr "Me l'attribuer" 265 305 266 - #: paw/templates/ticketing/tickets.html:20 267 - msgid "Status" 268 - msgstr "Statut" 269 - 270 306 #: paw/templates/ticketing/tickets.html:27 307 + #: paw/templates/ticketing/tickets_history.html:27 271 308 msgid "No tickets found" 272 309 msgstr "Aucun ticket trouvé" 273 310 274 311 #: paw/templates/ticketing/tickets.html:49 312 + #: paw/templates/ticketing/tickets_history.html:47 275 313 msgid "View" 276 314 msgstr "Ouvrir" 277 315 316 + #: paw/templates/ticketing/tickets_history.html:20 317 + #, fuzzy 318 + #| msgid "Closed" 319 + msgid "Closed on" 320 + msgstr "Fermé" 321 + 322 + #: status/templates/status/incident_list.html:11 323 + msgid "Some services might not be fully operational" 324 + msgstr "" 325 + 326 + #: status/templates/status/incident_list.html:16 327 + msgid "All services are operational" 328 + msgstr "" 329 + 278 330 #: ticketing/forms.py:39 279 331 msgid "File size must be under 5MB." 280 332 msgstr "" ··· 299 351 msgid "No Team" 300 352 msgstr "Aucune Team" 301 353 302 - #: ticketing/models.py:28 354 + #: ticketing/models.py:31 303 355 msgid "" 304 356 "If a team is selected, new tickets will automatically assigned to this team." 305 357 msgstr "" 306 358 307 - #: ticketing/models.py:42 359 + #: ticketing/models.py:45 308 360 msgid "Low" 309 361 msgstr "" 310 362 311 - #: ticketing/models.py:43 363 + #: ticketing/models.py:46 312 364 msgid "Medium" 313 365 msgstr "" 314 366 315 - #: ticketing/models.py:44 367 + #: ticketing/models.py:47 316 368 msgid "High" 317 369 msgstr "" 318 370
+439
paw/static/css/paw.css
··· 866 866 color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity))); 867 867 } 868 868 869 + .menu li > *:not(ul, .menu-title, details, .btn):active, 870 + .menu li > *:not(ul, .menu-title, details, .btn).active, 871 + .menu li > details > summary:active { 872 + --tw-bg-opacity: 1; 873 + background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity))); 874 + --tw-text-opacity: 1; 875 + color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity))); 876 + } 877 + 869 878 .table tr.hover:hover, 870 879 .table tr.hover:nth-child(even):hover { 871 880 --tw-bg-opacity: 1; ··· 1152 1161 background-color: var(--fallback-bc,oklch(var(--bc)/0.1)); 1153 1162 } 1154 1163 1164 + .drawer { 1165 + position: relative; 1166 + display: grid; 1167 + grid-auto-columns: max-content auto; 1168 + width: 100%; 1169 + } 1170 + 1171 + .drawer-content { 1172 + grid-column-start: 2; 1173 + grid-row-start: 1; 1174 + min-width: 0px; 1175 + } 1176 + 1177 + .drawer-side { 1178 + pointer-events: none; 1179 + position: fixed; 1180 + inset-inline-start: 0px; 1181 + top: 0px; 1182 + grid-column-start: 1; 1183 + grid-row-start: 1; 1184 + display: grid; 1185 + width: 100%; 1186 + grid-template-columns: repeat(1, minmax(0, 1fr)); 1187 + grid-template-rows: repeat(1, minmax(0, 1fr)); 1188 + align-items: flex-start; 1189 + justify-items: start; 1190 + overflow-x: hidden; 1191 + overflow-y: hidden; 1192 + overscroll-behavior: contain; 1193 + height: 100vh; 1194 + height: 100dvh; 1195 + } 1196 + 1197 + .drawer-side > .drawer-overlay { 1198 + position: sticky; 1199 + top: 0px; 1200 + place-self: stretch; 1201 + cursor: pointer; 1202 + background-color: transparent; 1203 + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; 1204 + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 1205 + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); 1206 + transition-duration: 200ms; 1207 + } 1208 + 1209 + .drawer-side > * { 1210 + grid-column-start: 1; 1211 + grid-row-start: 1; 1212 + } 1213 + 1214 + .drawer-side > *:not(.drawer-overlay) { 1215 + transition-property: transform; 1216 + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 1217 + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); 1218 + transition-duration: 300ms; 1219 + will-change: transform; 1220 + transform: translateX(-100%); 1221 + } 1222 + 1223 + [dir="rtl"] .drawer-side > *:not(.drawer-overlay) { 1224 + transform: translateX(100%); 1225 + } 1226 + 1227 + .drawer-toggle { 1228 + position: fixed; 1229 + height: 0px; 1230 + width: 0px; 1231 + -webkit-appearance: none; 1232 + -moz-appearance: none; 1233 + appearance: none; 1234 + opacity: 0; 1235 + } 1236 + 1237 + .drawer-toggle:checked ~ .drawer-side { 1238 + pointer-events: auto; 1239 + visibility: visible; 1240 + overflow-y: auto; 1241 + } 1242 + 1243 + .drawer-toggle:checked ~ .drawer-side > *:not(.drawer-overlay) { 1244 + transform: translateX(0%); 1245 + } 1246 + 1247 + .drawer-end .drawer-toggle ~ .drawer-content { 1248 + grid-column-start: 1; 1249 + } 1250 + 1251 + .drawer-end .drawer-toggle ~ .drawer-side { 1252 + grid-column-start: 2; 1253 + justify-items: end; 1254 + } 1255 + 1256 + .drawer-end .drawer-toggle ~ .drawer-side > *:not(.drawer-overlay) { 1257 + transform: translateX(100%); 1258 + } 1259 + 1260 + [dir="rtl"] .drawer-end .drawer-toggle ~ .drawer-side > *:not(.drawer-overlay) { 1261 + transform: translateX(-100%); 1262 + } 1263 + 1264 + .drawer-end .drawer-toggle:checked ~ .drawer-side > *:not(.drawer-overlay) { 1265 + transform: translateX(0%); 1266 + } 1267 + 1155 1268 @media (hover: hover) { 1156 1269 .btn:hover { 1157 1270 --tw-border-opacity: 1; ··· 1197 1310 } 1198 1311 } 1199 1312 1313 + .btn-outline.btn-primary:hover { 1314 + --tw-text-opacity: 1; 1315 + color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity))); 1316 + } 1317 + 1318 + @supports (color: color-mix(in oklab, black, black)) { 1319 + .btn-outline.btn-primary:hover { 1320 + background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black); 1321 + border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black); 1322 + } 1323 + } 1324 + 1200 1325 .btn-outline.btn-accent:hover { 1201 1326 --tw-text-opacity: 1; 1202 1327 color: var(--fallback-ac,oklch(var(--ac)/var(--tw-text-opacity))); ··· 1259 1384 .btn:is(input[type="checkbox"]:checked):hover, .btn:is(input[type="radio"]:checked):hover { 1260 1385 background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black); 1261 1386 border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black); 1387 + } 1388 + } 1389 + 1390 + :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(.active, .btn):hover, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(.active, .btn):hover { 1391 + cursor: pointer; 1392 + outline: 2px solid transparent; 1393 + outline-offset: 2px; 1394 + } 1395 + 1396 + @supports (color: oklch(0 0 0)) { 1397 + :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(.active, .btn):hover, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(.active, .btn):hover { 1398 + background-color: var(--fallback-bc,oklch(var(--bc)/0.1)); 1262 1399 } 1263 1400 } 1264 1401 } ··· 1456 1593 text-decoration-line: underline; 1457 1594 } 1458 1595 1596 + .menu { 1597 + display: flex; 1598 + flex-direction: column; 1599 + flex-wrap: wrap; 1600 + font-size: 0.875rem; 1601 + line-height: 1.25rem; 1602 + padding: 0.5rem; 1603 + } 1604 + 1605 + .menu :where(li ul) { 1606 + position: relative; 1607 + white-space: nowrap; 1608 + margin-inline-start: 1rem; 1609 + padding-inline-start: 0.5rem; 1610 + } 1611 + 1612 + .menu :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), .menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) { 1613 + display: grid; 1614 + grid-auto-flow: column; 1615 + align-content: flex-start; 1616 + align-items: center; 1617 + gap: 0.5rem; 1618 + grid-auto-columns: minmax(auto, max-content) auto max-content; 1619 + -webkit-user-select: none; 1620 + -moz-user-select: none; 1621 + user-select: none; 1622 + } 1623 + 1624 + .menu li.disabled { 1625 + cursor: not-allowed; 1626 + -webkit-user-select: none; 1627 + -moz-user-select: none; 1628 + user-select: none; 1629 + color: var(--fallback-bc,oklch(var(--bc)/0.3)); 1630 + } 1631 + 1632 + .menu :where(li > .menu-dropdown:not(.menu-dropdown-show)) { 1633 + display: none; 1634 + } 1635 + 1636 + :where(.menu li) { 1637 + position: relative; 1638 + display: flex; 1639 + flex-shrink: 0; 1640 + flex-direction: column; 1641 + flex-wrap: wrap; 1642 + align-items: stretch; 1643 + } 1644 + 1459 1645 :where(.menu li) .badge { 1460 1646 justify-self: end; 1461 1647 } ··· 1832 2018 border-color: var(--btn-color, var(--fallback-b2)); 1833 2019 } 1834 2020 2021 + .btn-primary { 2022 + --btn-color: var(--fallback-p); 2023 + } 2024 + 1835 2025 .btn-accent { 1836 2026 --btn-color: var(--fallback-a); 1837 2027 } ··· 1854 2044 } 1855 2045 1856 2046 @supports (color: color-mix(in oklab, black, black)) { 2047 + .btn-outline.btn-primary.btn-active { 2048 + background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black); 2049 + border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black); 2050 + } 2051 + 1857 2052 .btn-outline.btn-accent.btn-active { 1858 2053 background-color: color-mix(in oklab, var(--fallback-a,oklch(var(--a)/1)) 90%, black); 1859 2054 border-color: color-mix(in oklab, var(--fallback-a,oklch(var(--a)/1)) 90%, black); ··· 1881 2076 outline-offset: 2px; 1882 2077 } 1883 2078 2079 + .btn-primary { 2080 + --tw-text-opacity: 1; 2081 + color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity))); 2082 + outline-color: var(--fallback-p,oklch(var(--p)/1)); 2083 + } 2084 + 1884 2085 @supports (color: oklch(0 0 0)) { 2086 + .btn-primary { 2087 + --btn-color: var(--p); 2088 + } 2089 + 1885 2090 .btn-accent { 1886 2091 --btn-color: var(--a); 1887 2092 } ··· 1959 2164 .btn-ghost.btn-active { 1960 2165 border-color: transparent; 1961 2166 background-color: var(--fallback-bc,oklch(var(--bc)/0.2)); 2167 + } 2168 + 2169 + .btn-outline.btn-primary { 2170 + --tw-text-opacity: 1; 2171 + color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity))); 2172 + } 2173 + 2174 + .btn-outline.btn-primary.btn-active { 2175 + --tw-text-opacity: 1; 2176 + color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity))); 1962 2177 } 1963 2178 1964 2179 .btn-outline.btn-accent { ··· 2165 2380 gap: 1rem; 2166 2381 } 2167 2382 2383 + .drawer-toggle:checked ~ .drawer-side > .drawer-overlay { 2384 + background-color: #0006; 2385 + } 2386 + 2387 + .drawer-toggle:focus-visible ~ .drawer-content label.drawer-button { 2388 + outline-style: solid; 2389 + outline-width: 2px; 2390 + outline-offset: 2px; 2391 + } 2392 + 2168 2393 .file-input-bordered { 2169 2394 --tw-border-opacity: 0.2; 2170 2395 } ··· 2293 2518 .link:focus-visible { 2294 2519 outline: 2px solid currentColor; 2295 2520 outline-offset: 2px; 2521 + } 2522 + 2523 + :where(.menu li:empty) { 2524 + --tw-bg-opacity: 1; 2525 + background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity))); 2526 + opacity: 0.1; 2527 + margin: 0.5rem 1rem; 2528 + height: 1px; 2529 + } 2530 + 2531 + .menu :where(li ul):before { 2532 + position: absolute; 2533 + bottom: 0.75rem; 2534 + inset-inline-start: 0px; 2535 + top: 0.75rem; 2536 + width: 1px; 2537 + --tw-bg-opacity: 1; 2538 + background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity))); 2539 + opacity: 0.1; 2540 + content: ""; 2541 + } 2542 + 2543 + .menu :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), 2544 + .menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) { 2545 + border-radius: var(--rounded-btn, 0.5rem); 2546 + padding-left: 1rem; 2547 + padding-right: 1rem; 2548 + padding-top: 0.5rem; 2549 + padding-bottom: 0.5rem; 2550 + text-align: start; 2551 + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; 2552 + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; 2553 + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; 2554 + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 2555 + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); 2556 + transition-duration: 200ms; 2557 + text-wrap: balance; 2558 + } 2559 + 2560 + :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(summary, .active, .btn).focus, :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(summary, .active, .btn):focus, :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):is(summary):not(.active, .btn):focus-visible, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(summary, .active, .btn).focus, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(summary, .active, .btn):focus, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):is(summary):not(.active, .btn):focus-visible { 2561 + cursor: pointer; 2562 + background-color: var(--fallback-bc,oklch(var(--bc)/0.1)); 2563 + --tw-text-opacity: 1; 2564 + color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity))); 2565 + outline: 2px solid transparent; 2566 + outline-offset: 2px; 2567 + } 2568 + 2569 + .menu li > *:not(ul, .menu-title, details, .btn):active, 2570 + .menu li > *:not(ul, .menu-title, details, .btn).active, 2571 + .menu li > details > summary:active { 2572 + --tw-bg-opacity: 1; 2573 + background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity))); 2574 + --tw-text-opacity: 1; 2575 + color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity))); 2576 + } 2577 + 2578 + .menu :where(li > details > summary)::-webkit-details-marker { 2579 + display: none; 2580 + } 2581 + 2582 + .menu :where(li > details > summary):after, 2583 + .menu :where(li > .menu-dropdown-toggle):after { 2584 + justify-self: end; 2585 + display: block; 2586 + margin-top: -0.5rem; 2587 + height: 0.5rem; 2588 + width: 0.5rem; 2589 + transform: rotate(45deg); 2590 + transition-property: transform, margin-top; 2591 + transition-duration: 0.3s; 2592 + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 2593 + content: ""; 2594 + transform-origin: 75% 75%; 2595 + box-shadow: 2px 2px; 2596 + pointer-events: none; 2597 + } 2598 + 2599 + .menu :where(li > details[open] > summary):after, 2600 + .menu :where(li > .menu-dropdown-toggle.menu-dropdown-show):after { 2601 + transform: rotate(225deg); 2602 + margin-top: 0; 2296 2603 } 2297 2604 2298 2605 .mockup-browser .mockup-browser-toolbar .input { ··· 2802 3109 font-size: 0.875rem; 2803 3110 } 2804 3111 3112 + .btn-lg { 3113 + height: 4rem; 3114 + min-height: 4rem; 3115 + padding-left: 1.5rem; 3116 + padding-right: 1.5rem; 3117 + font-size: 1.125rem; 3118 + } 3119 + 2805 3120 .btn-square:where(.btn-xs) { 2806 3121 height: 1.5rem; 2807 3122 width: 1.5rem; ··· 2840 3155 padding: 0px; 2841 3156 } 2842 3157 3158 + .btn-circle:where(.btn-lg) { 3159 + height: 4rem; 3160 + width: 4rem; 3161 + border-radius: 9999px; 3162 + padding: 0px; 3163 + } 3164 + 3165 + .drawer-open > .drawer-toggle { 3166 + display: none; 3167 + } 3168 + 3169 + .drawer-open > .drawer-toggle ~ .drawer-side { 3170 + pointer-events: auto; 3171 + visibility: visible; 3172 + position: sticky; 3173 + display: block; 3174 + width: auto; 3175 + overscroll-behavior: auto; 3176 + } 3177 + 3178 + .drawer-open > .drawer-toggle ~ .drawer-side > *:not(.drawer-overlay) { 3179 + transform: translateX(0%); 3180 + } 3181 + 3182 + [dir="rtl"] .drawer-open > .drawer-toggle ~ .drawer-side > *:not(.drawer-overlay) { 3183 + transform: translateX(0%); 3184 + } 3185 + 3186 + .drawer-open > .drawer-toggle:checked ~ .drawer-side { 3187 + pointer-events: auto; 3188 + visibility: visible; 3189 + } 3190 + 3191 + .drawer-open > .drawer-side { 3192 + overflow-y: auto; 3193 + } 3194 + 3195 + html:has(.drawer-toggle:checked) { 3196 + overflow-y: hidden; 3197 + scrollbar-gutter: stable; 3198 + } 3199 + 2843 3200 .join.join-vertical { 2844 3201 flex-direction: column; 2845 3202 } ··· 2942 3299 right: 7%; 2943 3300 } 2944 3301 3302 + .drawer-open > .drawer-toggle ~ .drawer-side > .drawer-overlay { 3303 + cursor: default; 3304 + background-color: transparent; 3305 + } 3306 + 2945 3307 .join.join-vertical > :where(*:not(:first-child)) { 2946 3308 margin-left: 0px; 2947 3309 margin-right: 0px; ··· 3003 3365 3004 3366 .fixed { 3005 3367 position: fixed; 3368 + } 3369 + 3370 + .left-0 { 3371 + left: 0px; 3372 + } 3373 + 3374 + .top-0 { 3375 + top: 0px; 3376 + } 3377 + 3378 + .z-10 { 3379 + z-index: 10; 3380 + } 3381 + 3382 + .z-20 { 3383 + z-index: 20; 3006 3384 } 3007 3385 3008 3386 .order-first { ··· 3139 3517 min-height: 100vh; 3140 3518 } 3141 3519 3520 + .min-h-full { 3521 + min-height: 100%; 3522 + } 3523 + 3142 3524 .w-10 { 3143 3525 width: 2.5rem; 3144 3526 } ··· 3175 3557 width: 100%; 3176 3558 } 3177 3559 3560 + .w-80 { 3561 + width: 20rem; 3562 + } 3563 + 3564 + .w-72 { 3565 + width: 18rem; 3566 + } 3567 + 3178 3568 .max-w-3xl { 3179 3569 max-width: 48rem; 3180 3570 } ··· 3369 3759 .py-2 { 3370 3760 padding-top: 0.5rem; 3371 3761 padding-bottom: 0.5rem; 3762 + } 3763 + 3764 + .px-3 { 3765 + padding-left: 0.75rem; 3766 + padding-right: 0.75rem; 3372 3767 } 3373 3768 3374 3769 .text-center { ··· 3739 4134 border-radius: 9999px; 3740 4135 padding: 0px; 3741 4136 } 4137 + 4138 + .lg\:drawer-open > .drawer-toggle { 4139 + display: none; 4140 + } 4141 + 4142 + .lg\:drawer-open > .drawer-toggle ~ .drawer-side { 4143 + pointer-events: auto; 4144 + visibility: visible; 4145 + position: sticky; 4146 + display: block; 4147 + width: auto; 4148 + overscroll-behavior: auto; 4149 + } 4150 + 4151 + .lg\:drawer-open > .drawer-toggle ~ .drawer-side > *:not(.drawer-overlay) { 4152 + transform: translateX(0%); 4153 + } 4154 + 4155 + [dir="rtl"] .lg\:drawer-open > .drawer-toggle ~ .drawer-side > *:not(.drawer-overlay) { 4156 + transform: translateX(0%); 4157 + } 4158 + 4159 + .lg\:drawer-open > .drawer-toggle:checked ~ .drawer-side { 4160 + pointer-events: auto; 4161 + visibility: visible; 4162 + } 4163 + 4164 + .lg\:drawer-open > .drawer-side { 4165 + overflow-y: auto; 4166 + } 4167 + 4168 + html:has(.lg\:drawer-open.lg\:drawer-open) { 4169 + overflow-y: auto; 4170 + scrollbar-gutter: auto; 4171 + } 4172 + 4173 + .lg\:drawer-open > .drawer-toggle ~ .drawer-side > .drawer-overlay { 4174 + cursor: default; 4175 + background-color: transparent; 4176 + } 3742 4177 } 3743 4178 3744 4179 .hover\:bg-\[\#4285F4\]\/90:hover { ··· 3766 4201 3767 4202 .lg\:flex { 3768 4203 display: flex; 4204 + } 4205 + 4206 + .lg\:hidden { 4207 + display: none; 3769 4208 } 3770 4209 3771 4210 .lg\:w-72 {
+3 -2
paw/templates/base.html
··· 9 9 <title>paw</title> 10 10 </head> 11 11 <body> 12 + {% load i18n %} 12 13 <div class="container h-full min-h-screen mx-auto flex flex-col w-full"> 13 14 <div class="navbar"> 14 15 <div class="navbar-start"> ··· 16 17 </div> 17 18 <div class="navbar-center"></div> 18 19 <div class="navbar-end"> 19 - <a class="btn mr-4" href="{% url 'all_tickets' %}">Tickets</a> 20 - <a class="btn mr-4" href="{% url 'incident-list' %}">Status</a> 20 + <a class="btn mr-4" href="{% url 'all_tickets' %}">{% trans 'Tickets' %}</a> 21 + <a class="btn mr-4" href="{% url 'incident-list' %}">{% trans 'Status' %}</a> 21 22 {% if not request.user.is_authenticated %} 22 23 <label class="swap swap-rotate"> 23 24 <input type="checkbox" id="theme-switch" />
+67 -51
paw/templates/dashboard_base.html
··· 11 11 <body> 12 12 {% block content %} 13 13 {% load i18n %} 14 - <div class="flex h-full min-h-screen"> 15 - <div class="flex-none w-20 lg:w-72 fixed h-full bg-neutral text-neutral-content p-4 overflow-y-auto"> 16 - <div class="flex flex-col h-full"> 17 - <a href="" class="mt-4 mb-10"> 18 - {% include 'partials/logo.html' with responsive=True %} 19 - </a> 20 - <a href="{% url 'create_ticket' %}" class="btn btn-ghost btn-square lg:w-full lg:p-4 lg:btn-lg lg:justify-start"> 14 + <div class="drawer lg:drawer-open"> 15 + <input id="my-drawer" type="checkbox" class="drawer-toggle" /> 16 + <div class="drawer-content flex flex-col"> 17 + <div class="flex-none lg:hidden"> 18 + <label for="my-drawer" aria-label="open sidebar" class="btn btn-square btn-ghost z-10 fixed top-0 left-0"> 19 + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="inline-block w-6 h-6 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg> 20 + </label> 21 + </div> 22 + {% block dashboard_content %} 23 + {% endblock %} 24 + </div> 25 + <div class="drawer-side z-20"> 26 + <label for="my-drawer" aria-label="close sidebar" class="drawer-overlay"></label> 27 + <ul class="menu p-4 w-72 min-h-full bg-neutral text-neutral-content"> 28 + <a href="" class="mt-4 mb-10"> 29 + {% include 'partials/logo.html' with responsive=False %} 30 + </a> 31 + <li> 32 + <a href="{% url 'create_ticket' %}" class="btn btn-ghost w-full p-4 btn-lg justify-start"> 21 33 <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" /><path d="M13.5 6.5l4 4" /></svg> 22 - <span class="hidden lg:block">{% trans 'Create Ticket' %}</span> 34 + <span class="block">{% trans 'Create Ticket' %}</span> 23 35 </a> 24 - <a href="{% url 'all_tickets' %}" class="btn btn-ghost btn-square lg:w-full lg:p-4 lg:btn-lg lg:justify-start"> 36 + </li> 37 + <li> 38 + <a href="{% url 'all_tickets' %}" class="btn btn-ghost w-full p-4 btn-lg justify-start"> 25 39 <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15 5l0 2" /><path d="M15 11l0 2" /><path d="M15 17l0 2" /><path d="M5 5h14a2 2 0 0 1 2 2v3a2 2 0 0 0 0 4v3a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-3a2 2 0 0 0 0 -4v-3a2 2 0 0 1 2 -2" /></svg> 26 - <span class="hidden lg:block">{% trans 'Tickets' %}</span> 40 + <span class="block">{% trans 'Tickets' %}</span> 27 41 </a> 28 - <a href="{% url 'tickets_history' %}" class="btn btn-ghost btn-square lg:w-full lg:p-4 lg:btn-lg lg:justify-start"> 42 + </li> 43 + <li> 44 + <a href="{% url 'tickets_history' %}" class="btn btn-ghost w-full p-4 btn-lg justify-start"> 29 45 <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 4m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z" /><path d="M5 8v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-10" /><path d="M10 12l4 0" /></svg> 30 - <span class="hidden lg:block">{% trans 'History' %}</span> 46 + <span class="block">{% trans 'History' %}</span> 31 47 </a> 32 - 33 - <div class="flex-grow"></div> 34 - <a href="{% url 'incident-list' %}" class="btn btn-ghost btn-square lg:w-full lg:p-4 lg:btn-lg lg:justify-start mt-10"> 48 + </li> 49 + <div class="flex-grow"></div> 50 + <li> 51 + <a href="{% url 'incident-list' %}" class="btn btn-ghost btn-square w-full p-4 btn-lg justify-start mt-10"> 35 52 <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 18v-12a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z" /><path d="M7 14l3 -3l2 2l3 -3l2 2" /></svg> 36 - <span class="hidden lg:block">{% trans 'Status' %}</span> 53 + <span class="block">{% trans 'Status' %}</span> 37 54 </a> 38 - <div class="flex items-center py-2 lg:p-2 justify-center lg:justify-start mt-6"> 39 - <div class="avatar placeholder"> 40 - <div class="bg-base-300 text-base-content rounded-full w-10"> 41 - {% if request.user.profile_picture %} 42 - <img src="{{ request.user.profile_picture.url }}" /> 43 - {% else %} 44 - <span class="text-xl">{{ request.user.username|slice:":2" }}</span> 45 - {% endif %} 46 - </div> 47 - </div> 48 - <div class="hidden ml-2 text-neutral-content lg:flex flex-col p-1"> 49 - {{ request.user.username }} 50 - <span class="text-xs"> 51 - {% for group in request.user.groups.all %} 52 - {{ group.name }}{%if not forloop.last%},{%endif%} 53 - {% endfor %} 54 - </span> 55 + </li> 56 + <div class="flex items-center py-2 p-2 justify-start mt-6"> 57 + <div class="avatar placeholder"> 58 + <div class="bg-base-300 text-base-content rounded-full w-10"> 59 + {% if request.user.profile_picture %} 60 + <img src="{{ request.user.profile_picture.url }}" /> 61 + {% else %} 62 + <span class="text-xl">{{ request.user.username|slice:":2" }}</span> 63 + {% endif %} 55 64 </div> 56 65 </div> 57 - {% if user.is_superuser %} 58 - <a href="/admin" class="btn btn-ghost btn-square lg:w-full lg:px-3 lg:btn-sm lg:justify-start"> 66 + <div class="ml-2 text-neutral-content flex flex-col p-1"> 67 + {{ request.user.username }} 68 + <span class="text-xs"> 69 + {% for group in request.user.groups.all %} 70 + {{ group.name }}{%if not forloop.last%},{%endif%} 71 + {% endfor %} 72 + </span> 73 + </div> 74 + </div> 75 + {% if user.is_superuser %} 76 + <li> 77 + <a href="/admin" class="btn btn-ghost btn-square w-full px-3 btn-sm justify-start"> 59 78 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 10a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /><path d="M6 4v4" /><path d="M6 12v8" /><path d="M10 16a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /><path d="M12 4v10" /><path d="M12 18v2" /><path d="M16 7a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /><path d="M18 4v1" /><path d="M18 9v11" /></svg> 60 - <span class="hidden lg:block">Admin</span> 79 + <span class="block">{% trans 'Admin' %}</span> 61 80 </a> 62 - {% endif %} 63 - <a href="{% url 'settings' %}" class="btn btn-ghost btn-square lg:w-full lg:px-3 lg:btn-sm lg:justify-start"> 64 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z" /><path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" /></svg> 65 - <span class="hidden lg:block">{% trans 'Settings' %}</span> 66 - </a> 67 - <a href="{% url 'logout' %}" class="btn btn-error btn-square lg:w-full lg:px-3 lg:btn-sm lg:justify-start"> 68 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2" /><path d="M9 12h12l-3 -3" /><path d="M18 15l3 -3" /></svg> 69 - <span class="hidden lg:block">{% trans 'Logout' %}</span> 70 - </a> 71 - </div> 72 - </div> 73 - <div class="flex-grow ml-20 lg:ml-72 overflow-y-auto"> 74 - {% block dashboard_content %} 75 - {% endblock %} 76 - </div> 81 + </li> 82 + {% endif %} 83 + <a href="{% url 'settings' %}" class="btn btn-ghost btn-square w-full px-3 btn-sm justify-start"> 84 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z" /><path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" /></svg> 85 + <span class="block">{% trans 'Settings' %}</span> 86 + </a> 87 + <a href="{% url 'logout' %}" class="btn btn-error btn-square w-full px-3 btn-sm justify-start"> 88 + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2" /><path d="M9 12h12l-3 -3" /><path d="M18 15l3 -3" /></svg> 89 + <span class="block">{% trans 'Logout' %}</span> 90 + </a> 91 + </ul> 92 + </div> 77 93 </div> 78 94 {% endblock %} 79 95 </body>