feat(changelog): premières annonces (priorités des tâches, page Sécurité) — version 0.3.0Unverified
97f0da3 parent: b0ed1ae modified
Cargo.lock +1 -1 | @@ -837,7 +837,7 @@ dependencies = [ | ||
| 837 | 837 | |
| 838 | 838 | [[package]] |
| 839 | 839 | name = "exego" |
| 840 | -version = "0.1.0" | |
| 840 | +version = "0.3.0" | |
| 841 | 841 | dependencies = [ |
| 842 | 842 | "anyhow", |
| 843 | 843 | "argon2", |
| @@ -837,7 +837,7 @@ dependencies = [ | |||
| 837 | 837 | ||
| 838 | [[package]] | 838 | [[package]] |
| 839 | name = "exego" | 839 | name = "exego" |
| 840 | -version = "0.1.0" | 840 | +version = "0.3.0" |
| 841 | dependencies = [ | 841 | dependencies = [ |
| 842 | "anyhow", | 842 | "anyhow", |
| 843 | "argon2", | 843 | "argon2", |
modified
Cargo.toml +1 -1 | @@ -1,6 +1,6 @@ | ||
| 1 | 1 | [package] |
| 2 | 2 | name = "exego" |
| 3 | -version = "0.1.0" | |
| 3 | +version = "0.3.0" | |
| 4 | 4 | edition = "2024" |
| 5 | 5 | license = "Unlicense" |
| 6 | 6 | |
| @@ -1,6 +1,6 @@ | |||
| 1 | [package] | 1 | [package] |
| 2 | name = "exego" | 2 | name = "exego" |
| 3 | -version = "0.1.0" | 3 | +version = "0.3.0" |
| 4 | edition = "2024" | 4 | edition = "2024" |
| 5 | license = "Unlicense" | 5 | license = "Unlicense" |
| 6 | 6 | ||
modified
assets/style.css +13 -3 | @@ -91,7 +91,8 @@ | ||
| 91 | 91 | --shadow-md: 0 0 0 1px rgba(255, 255, 255, .34); |
| 92 | 92 | --shadow-lg: 0 0 0 1px rgba(255, 255, 255, .42); |
| 93 | 93 | |
| 94 | - /* Pas de rouge en HC : liseré épais neutre, le symbole ‼ porte l'info. */ | |
| 94 | + /* Pas de rouge en HC : liseré épais neutre, la pilule « prio » porte | |
| 95 | + l'info (blanc, texte noir). */ | |
| 95 | 96 | --color-prio: #ffffff; |
| 96 | 97 | } |
| 97 | 98 | /* Le toast s'inverse : son fond neutral-900 devient noir en HC. */ |
| @@ -728,12 +729,21 @@ h4.add_step_title { margin-top: var(--space-3); margin-bottom: var(--space-3); d | ||
| 728 | 729 | .todo-card.other { background: var(--color-neutral-200); } |
| 729 | 730 | .todo-card.forme { box-shadow: inset 0 0 0 1.5px var(--color-accent-2); } |
| 730 | 731 | /* Priorité haute : liseré + ombre teintée (après .forme : il prime si les |
| 731 | - deux s'appliquent). Le symbole ‼ (aria-label) double la couleur. */ | |
| 732 | + deux s'appliquent). La pilule « prio » double la couleur en texte. */ | |
| 732 | 733 | .todo-card.prio-haute { |
| 733 | 734 | box-shadow: inset 0 0 0 2px var(--color-prio), |
| 734 | 735 | 0 3px 10px color-mix(in srgb, var(--color-prio) 30%, transparent); |
| 735 | 736 | } |
| 736 | -.prio-flag { color: var(--color-prio); font-weight: 700; } | |
| 737 | +/* Pilule « prio » en haut à droite de la carte, avant le crayon. Texte crème | |
| 738 | + sur le rouge brique : 5.6:1 ; en HC la pilule s'inverse (blanc sur noir) | |
| 739 | + puisque --color-prio y vaut blanc et --color-bg noir. */ | |
| 740 | +.prio-pill { | |
| 741 | + flex: none; align-self: flex-start; | |
| 742 | + background: var(--color-prio); color: var(--color-bg); | |
| 743 | + font-size: 11px; font-weight: 700; line-height: 1; | |
| 744 | + letter-spacing: .05em; text-transform: uppercase; | |
| 745 | + padding: 5px 10px; border-radius: 999px; | |
| 746 | +} | |
| 737 | 747 | .todo-main { display: flex; align-items: center; gap: var(--space-3); } |
| 738 | 748 | .todo-name { font-size: 16px; } |
| 739 | 749 | .todo-meta { font-size: 13px; opacity: .7; } |
| @@ -91,7 +91,8 @@ | |||
| 91 | --shadow-md: 0 0 0 1px rgba(255, 255, 255, .34); | 91 | --shadow-md: 0 0 0 1px rgba(255, 255, 255, .34); |
| 92 | --shadow-lg: 0 0 0 1px rgba(255, 255, 255, .42); | 92 | --shadow-lg: 0 0 0 1px rgba(255, 255, 255, .42); |
| 93 | 93 | ||
| 94 | - /* Pas de rouge en HC : liseré épais neutre, le symbole ‼ porte l'info. */ | 94 | + /* Pas de rouge en HC : liseré épais neutre, la pilule « prio » porte |
| 95 | + l'info (blanc, texte noir). */ | ||
| 95 | --color-prio: #ffffff; | 96 | --color-prio: #ffffff; |
| 96 | } | 97 | } |
| 97 | /* Le toast s'inverse : son fond neutral-900 devient noir en HC. */ | 98 | /* Le toast s'inverse : son fond neutral-900 devient noir en HC. */ |
| @@ -728,12 +729,21 @@ h4.add_step_title { margin-top: var(--space-3); margin-bottom: var(--space-3); d | |||
| 728 | .todo-card.other { background: var(--color-neutral-200); } | 729 | .todo-card.other { background: var(--color-neutral-200); } |
| 729 | .todo-card.forme { box-shadow: inset 0 0 0 1.5px var(--color-accent-2); } | 730 | .todo-card.forme { box-shadow: inset 0 0 0 1.5px var(--color-accent-2); } |
| 730 | /* Priorité haute : liseré + ombre teintée (après .forme : il prime si les | 731 | /* Priorité haute : liseré + ombre teintée (après .forme : il prime si les |
| 731 | - deux s'appliquent). Le symbole ‼ (aria-label) double la couleur. */ | 732 | + deux s'appliquent). La pilule « prio » double la couleur en texte. */ |
| 732 | .todo-card.prio-haute { | 733 | .todo-card.prio-haute { |
| 733 | box-shadow: inset 0 0 0 2px var(--color-prio), | 734 | box-shadow: inset 0 0 0 2px var(--color-prio), |
| 734 | 0 3px 10px color-mix(in srgb, var(--color-prio) 30%, transparent); | 735 | 0 3px 10px color-mix(in srgb, var(--color-prio) 30%, transparent); |
| 735 | } | 736 | } |
| 736 | -.prio-flag { color: var(--color-prio); font-weight: 700; } | 737 | +/* Pilule « prio » en haut à droite de la carte, avant le crayon. Texte crème |
| 738 | + sur le rouge brique : 5.6:1 ; en HC la pilule s'inverse (blanc sur noir) | ||
| 739 | + puisque --color-prio y vaut blanc et --color-bg noir. */ | ||
| 740 | +.prio-pill { | ||
| 741 | + flex: none; align-self: flex-start; | ||
| 742 | + background: var(--color-prio); color: var(--color-bg); | ||
| 743 | + font-size: 11px; font-weight: 700; line-height: 1; | ||
| 744 | + letter-spacing: .05em; text-transform: uppercase; | ||
| 745 | + padding: 5px 10px; border-radius: 999px; | ||
| 746 | +} | ||
| 737 | .todo-main { display: flex; align-items: center; gap: var(--space-3); } | 747 | .todo-main { display: flex; align-items: center; gap: var(--space-3); } |
| 738 | .todo-name { font-size: 16px; } | 748 | .todo-name { font-size: 16px; } |
| 739 | .todo-meta { font-size: 13px; opacity: .7; } | 749 | .todo-meta { font-size: 13px; opacity: .7; } |
added
migrations/0017_changelog_priorites_securite.sql +30 -0 | new file mode 100644 | ||
| @@ -0,0 +1,30 @@ | ||
| 1 | +-- Deux premières annonces de changelog (cf. 0016 pour le mécanisme). | |
| 2 | +-- | |
| 3 | +-- Les ids sont des UUIDv7 générés à la main au moment de l'écriture ; les | |
| 4 | +-- dates sont éditoriales : « priorités » est antidatée à la veille de la | |
| 5 | +-- mise en place du changelog, « Sécurité » porte le jour du déploiement. | |
| 6 | +-- La version est du texte libre affiché dans le titre (« Nouveautés de la | |
| 7 | +-- v0.2.0 ») — retouchable en psql si le numéro ne convient pas. | |
| 8 | +-- | |
| 9 | +-- Rappel : une ligne de texte = un paragraphe à l'affichage, et chaque | |
| 10 | +-- annonce n'est visible que des comptes créés strictement avant sa date. | |
| 11 | + | |
| 12 | +INSERT INTO changelog_announcements (id, date, version, text_fr, text_en, text_de, text_ptbr) VALUES | |
| 13 | +( | |
| 14 | + '01a03ec5-b676-7e83-b4a6-801ee0a1ad9d', | |
| 15 | + DATE '2026-08-25', | |
| 16 | + 'v0.2.0', | |
| 17 | + E'Les tâches ont maintenant une priorité : basse, normale ou haute. Les hautes passent en tête de liste avec un marqueur rouge, les basses ferment la liste.\nTu la règles en créant ou en modifiant la tâche ; par défaut, elle est normale.', | |
| 18 | + E'Tasks now have a priority: low, normal or high. High tasks move to the top of the list with a red marker; low ones close the list.\nYou set it when creating or editing a task; it defaults to normal.', | |
| 19 | + E'Aufgaben haben jetzt eine Priorität: niedrig, normal oder hoch. Hohe Aufgaben rücken mit roter Markierung an die Spitze der Liste, niedrige ans Ende.\nDu legst sie beim Anlegen oder Bearbeiten der Aufgabe fest; Standard ist Normal.', | |
| 20 | + E'As tarefas agora têm prioridade: baixa, normal ou alta. As altas sobem para o topo da lista com um marcador vermelho, as baixas fecham a lista.\nVocê define a prioridade ao criar ou editar a tarefa; o padrão é normal.' | |
| 21 | +), | |
| 22 | +( | |
| 23 | + '01a03ec5-b677-77f1-96bd-95035fb9c316', | |
| 24 | + DATE '2026-08-26', | |
| 25 | + 'v0.3.0', | |
| 26 | + E'Le changement de mot de passe a déménagé sur la nouvelle page Sécurité, accessible depuis les Réglages.\nTu peux aussi y enregistrer des clés d''accès (passkeys) et te connecter par empreinte, visage ou code de l''appareil. Le mot de passe fonctionnera toujours.', | |
| 27 | + E'Changing your password has moved to the new Security page, reachable from Settings.\nYou can also register passkeys there and sign in with your fingerprint, face or device code. Your password will still work.', | |
| 28 | + E'Die Passwortänderung ist auf die neue Seite Sicherheit umgezogen, erreichbar über die Optionen.\nDort kannst du auch Passkeys hinterlegen und dich per Fingerabdruck, Gesicht oder Gerätecode anmelden. Das Passwort verschwindet nicht.', | |
| 29 | + E'A troca de senha mudou para a nova página Segurança, acessível pelos Ajustes.\nVocê também pode registrar chaves de acesso (passkeys) por lá e entrar com impressão digital, rosto ou código do aparelho. A senha não vai embora.' | |
| 30 | +); | |
| new file mode 100644 | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | +-- Deux premières annonces de changelog (cf. 0016 pour le mécanisme). | ||
| 2 | +-- | ||
| 3 | +-- Les ids sont des UUIDv7 générés à la main au moment de l'écriture ; les | ||
| 4 | +-- dates sont éditoriales : « priorités » est antidatée à la veille de la | ||
| 5 | +-- mise en place du changelog, « Sécurité » porte le jour du déploiement. | ||
| 6 | +-- La version est du texte libre affiché dans le titre (« Nouveautés de la | ||
| 7 | +-- v0.2.0 ») — retouchable en psql si le numéro ne convient pas. | ||
| 8 | +-- | ||
| 9 | +-- Rappel : une ligne de texte = un paragraphe à l'affichage, et chaque | ||
| 10 | +-- annonce n'est visible que des comptes créés strictement avant sa date. | ||
| 11 | + | ||
| 12 | +INSERT INTO changelog_announcements (id, date, version, text_fr, text_en, text_de, text_ptbr) VALUES | ||
| 13 | +( | ||
| 14 | + '01a03ec5-b676-7e83-b4a6-801ee0a1ad9d', | ||
| 15 | + DATE '2026-08-25', | ||
| 16 | + 'v0.2.0', | ||
| 17 | + E'Les tâches ont maintenant une priorité : basse, normale ou haute. Les hautes passent en tête de liste avec un marqueur rouge, les basses ferment la liste.\nTu la règles en créant ou en modifiant la tâche ; par défaut, elle est normale.', | ||
| 18 | + E'Tasks now have a priority: low, normal or high. High tasks move to the top of the list with a red marker; low ones close the list.\nYou set it when creating or editing a task; it defaults to normal.', | ||
| 19 | + E'Aufgaben haben jetzt eine Priorität: niedrig, normal oder hoch. Hohe Aufgaben rücken mit roter Markierung an die Spitze der Liste, niedrige ans Ende.\nDu legst sie beim Anlegen oder Bearbeiten der Aufgabe fest; Standard ist Normal.', | ||
| 20 | + E'As tarefas agora têm prioridade: baixa, normal ou alta. As altas sobem para o topo da lista com um marcador vermelho, as baixas fecham a lista.\nVocê define a prioridade ao criar ou editar a tarefa; o padrão é normal.' | ||
| 21 | +), | ||
| 22 | +( | ||
| 23 | + '01a03ec5-b677-77f1-96bd-95035fb9c316', | ||
| 24 | + DATE '2026-08-26', | ||
| 25 | + 'v0.3.0', | ||
| 26 | + E'Le changement de mot de passe a déménagé sur la nouvelle page Sécurité, accessible depuis les Réglages.\nTu peux aussi y enregistrer des clés d''accès (passkeys) et te connecter par empreinte, visage ou code de l''appareil. Le mot de passe fonctionnera toujours.', | ||
| 27 | + E'Changing your password has moved to the new Security page, reachable from Settings.\nYou can also register passkeys there and sign in with your fingerprint, face or device code. Your password will still work.', | ||
| 28 | + E'Die Passwortänderung ist auf die neue Seite Sicherheit umgezogen, erreichbar über die Optionen.\nDort kannst du auch Passkeys hinterlegen und dich per Fingerabdruck, Gesicht oder Gerätecode anmelden. Das Passwort verschwindet nicht.', | ||
| 29 | + E'A troca de senha mudou para a nova página Segurança, acessível pelos Ajustes.\nVocê também pode registrar chaves de acesso (passkeys) por lá e entrar com impressão digital, rosto ou código do aparelho. A senha não vai embora.' | ||
| 30 | +); | ||
modified
src/i18n.rs +5 -0 | @@ -360,6 +360,7 @@ pub struct Tr { | ||
| 360 | 360 | pub prio_normal: &'static str, |
| 361 | 361 | pub prio_high: &'static str, |
| 362 | 362 | pub prio_high_aria: &'static str, |
| 363 | + pub prio_pill: &'static str, | |
| 363 | 364 | // ─── sécurité (page mot de passe + clés d'accès WebAuthn) ─── |
| 364 | 365 | pub title_security: &'static str, |
| 365 | 366 | /// Carte d'entrée depuis Réglages (gabarit « Mes saisies »). |
| @@ -698,6 +699,7 @@ pub static FR: Tr = Tr { | ||
| 698 | 699 | prio_normal: "Normale", |
| 699 | 700 | prio_high: "Haute", |
| 700 | 701 | prio_high_aria: "Priorité haute", |
| 702 | + prio_pill: "prio", | |
| 701 | 703 | title_security: "Sécurité", |
| 702 | 704 | security_card_desc: "Mot de passe et clés d'accès", |
| 703 | 705 | security_hint: "Ton mot de passe reste toujours valable — les clés d'accès s'y ajoutent, elles ne le remplacent pas.", |
| @@ -1001,6 +1003,7 @@ pub static EN: Tr = Tr { | ||
| 1001 | 1003 | prio_normal: "Normal", |
| 1002 | 1004 | prio_high: "High", |
| 1003 | 1005 | prio_high_aria: "High priority", |
| 1006 | + prio_pill: "prio", | |
| 1004 | 1007 | title_security: "Security", |
| 1005 | 1008 | security_card_desc: "Password and passkeys", |
| 1006 | 1009 | security_hint: "Your password always keeps working — passkeys come on top of it, they don't replace it.", |
| @@ -1304,6 +1307,7 @@ pub static DE: Tr = Tr { | ||
| 1304 | 1307 | prio_normal: "Normal", |
| 1305 | 1308 | prio_high: "Hoch", |
| 1306 | 1309 | prio_high_aria: "Hohe Priorität", |
| 1310 | + prio_pill: "prio", | |
| 1307 | 1311 | title_security: "Sicherheit", |
| 1308 | 1312 | security_card_desc: "Passwort und Passkeys", |
| 1309 | 1313 | security_hint: "Dein Passwort gilt weiterhin — Passkeys kommen dazu, sie ersetzen es nicht.", |
| @@ -1607,6 +1611,7 @@ pub static PT_BR: Tr = Tr { | ||
| 1607 | 1611 | prio_normal: "Normal", |
| 1608 | 1612 | prio_high: "Alta", |
| 1609 | 1613 | prio_high_aria: "Prioridade alta", |
| 1614 | + prio_pill: "prio", | |
| 1610 | 1615 | title_security: "Segurança", |
| 1611 | 1616 | security_card_desc: "Senha e chaves de acesso", |
| 1612 | 1617 | security_hint: "Sua senha continua valendo — as chaves de acesso se somam a ela, não a substituem.", |
| @@ -360,6 +360,7 @@ pub struct Tr { | |||
| 360 | pub prio_normal: &'static str, | 360 | pub prio_normal: &'static str, |
| 361 | pub prio_high: &'static str, | 361 | pub prio_high: &'static str, |
| 362 | pub prio_high_aria: &'static str, | 362 | pub prio_high_aria: &'static str, |
| 363 | + pub prio_pill: &'static str, | ||
| 363 | // ─── sécurité (page mot de passe + clés d'accès WebAuthn) ─── | 364 | // ─── sécurité (page mot de passe + clés d'accès WebAuthn) ─── |
| 364 | pub title_security: &'static str, | 365 | pub title_security: &'static str, |
| 365 | /// Carte d'entrée depuis Réglages (gabarit « Mes saisies »). | 366 | /// Carte d'entrée depuis Réglages (gabarit « Mes saisies »). |
| @@ -698,6 +699,7 @@ pub static FR: Tr = Tr { | |||
| 698 | prio_normal: "Normale", | 699 | prio_normal: "Normale", |
| 699 | prio_high: "Haute", | 700 | prio_high: "Haute", |
| 700 | prio_high_aria: "Priorité haute", | 701 | prio_high_aria: "Priorité haute", |
| 702 | + prio_pill: "prio", | ||
| 701 | title_security: "Sécurité", | 703 | title_security: "Sécurité", |
| 702 | security_card_desc: "Mot de passe et clés d'accès", | 704 | security_card_desc: "Mot de passe et clés d'accès", |
| 703 | security_hint: "Ton mot de passe reste toujours valable — les clés d'accès s'y ajoutent, elles ne le remplacent pas.", | 705 | security_hint: "Ton mot de passe reste toujours valable — les clés d'accès s'y ajoutent, elles ne le remplacent pas.", |
| @@ -1001,6 +1003,7 @@ pub static EN: Tr = Tr { | |||
| 1001 | prio_normal: "Normal", | 1003 | prio_normal: "Normal", |
| 1002 | prio_high: "High", | 1004 | prio_high: "High", |
| 1003 | prio_high_aria: "High priority", | 1005 | prio_high_aria: "High priority", |
| 1006 | + prio_pill: "prio", | ||
| 1004 | title_security: "Security", | 1007 | title_security: "Security", |
| 1005 | security_card_desc: "Password and passkeys", | 1008 | security_card_desc: "Password and passkeys", |
| 1006 | security_hint: "Your password always keeps working — passkeys come on top of it, they don't replace it.", | 1009 | security_hint: "Your password always keeps working — passkeys come on top of it, they don't replace it.", |
| @@ -1304,6 +1307,7 @@ pub static DE: Tr = Tr { | |||
| 1304 | prio_normal: "Normal", | 1307 | prio_normal: "Normal", |
| 1305 | prio_high: "Hoch", | 1308 | prio_high: "Hoch", |
| 1306 | prio_high_aria: "Hohe Priorität", | 1309 | prio_high_aria: "Hohe Priorität", |
| 1310 | + prio_pill: "prio", | ||
| 1307 | title_security: "Sicherheit", | 1311 | title_security: "Sicherheit", |
| 1308 | security_card_desc: "Passwort und Passkeys", | 1312 | security_card_desc: "Passwort und Passkeys", |
| 1309 | security_hint: "Dein Passwort gilt weiterhin — Passkeys kommen dazu, sie ersetzen es nicht.", | 1313 | security_hint: "Dein Passwort gilt weiterhin — Passkeys kommen dazu, sie ersetzen es nicht.", |
| @@ -1607,6 +1611,7 @@ pub static PT_BR: Tr = Tr { | |||
| 1607 | prio_normal: "Normal", | 1611 | prio_normal: "Normal", |
| 1608 | prio_high: "Alta", | 1612 | prio_high: "Alta", |
| 1609 | prio_high_aria: "Prioridade alta", | 1613 | prio_high_aria: "Prioridade alta", |
| 1614 | + prio_pill: "prio", | ||
| 1610 | title_security: "Segurança", | 1615 | title_security: "Segurança", |
| 1611 | security_card_desc: "Senha e chaves de acesso", | 1616 | security_card_desc: "Senha e chaves de acesso", |
| 1612 | security_hint: "Sua senha continua valendo — as chaves de acesso se somam a ela, não a substituem.", | 1617 | security_hint: "Sua senha continua valendo — as chaves de acesso se somam a ela, não a substituem.", |
modified
templates/todos.html +8 -2 | @@ -28,7 +28,7 @@ | ||
| 28 | 28 | <div class="todo-main"> |
| 29 | 29 | <span class="team-dot" style="background:{{ t.color }}"></span> |
| 30 | 30 | <div style="flex:1;min-width:0"> |
| 31 | - <div class="todo-name">{{ t.name }}{% if t.high %} <span class="prio-flag" role="img" aria-label="{{ shell.tr.prio_high_aria }}">‼︎</span>{% endif %}</div> | |
| 31 | + <div class="todo-name">{{ t.name }}</div> | |
| 32 | 32 | <div class="todo-meta">{{ t.meta }}</div> |
| 33 | 33 | {% if !t.assignees.is_empty() %} |
| 34 | 34 | <div class="asg-chips"> |
| @@ -36,6 +36,9 @@ | ||
| 36 | 36 | </div> |
| 37 | 37 | {% endif %} |
| 38 | 38 | </div> |
| 39 | + {% if t.high %} | |
| 40 | + <span class="prio-pill"><span aria-hidden="true">{{ shell.tr.prio_pill }}</span><span class="visually-hidden">{{ shell.tr.prio_high_aria }}</span></span> | |
| 41 | + {% endif %} | |
| 39 | 42 | {% if t.mine %} |
| 40 | 43 | <a class="btn btn-secondary btn-icon" style="flex:none" href="/taches/{{ t.id }}/modifier" aria-label="{{ t.edit_aria }}"> |
| 41 | 44 | <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg> |
| @@ -74,7 +77,7 @@ | ||
| 74 | 77 | <div class="todo-main"> |
| 75 | 78 | <span class="team-dot" style="background:{{ t.color }}"></span> |
| 76 | 79 | <div style="flex:1;min-width:0"> |
| 77 | - <div class="todo-name">{{ t.name }}{% if t.high %} <span class="prio-flag" role="img" aria-label="{{ shell.tr.prio_high_aria }}">‼︎</span>{% endif %}</div> | |
| 80 | + <div class="todo-name">{{ t.name }}</div> | |
| 78 | 81 | <div class="todo-meta{% if t.late %} late{% endif %}">{{ t.meta }}</div> |
| 79 | 82 | {% if !t.assignees.is_empty() %} |
| 80 | 83 | <div class="asg-chips"> |
| @@ -82,6 +85,9 @@ | ||
| 82 | 85 | </div> |
| 83 | 86 | {% endif %} |
| 84 | 87 | </div> |
| 88 | + {% if t.high %} | |
| 89 | + <span class="prio-pill"><span aria-hidden="true">{{ shell.tr.prio_pill }}</span><span class="visually-hidden">{{ shell.tr.prio_high_aria }}</span></span> | |
| 90 | + {% endif %} | |
| 85 | 91 | <a class="btn btn-secondary btn-icon" style="flex:none" href="/taches/{{ t.id }}/modifier" aria-label="{{ t.edit_aria }}"> |
| 86 | 92 | <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg> |
| 87 | 93 | </a> |
| @@ -28,7 +28,7 @@ | |||
| 28 | <div class="todo-main"> | 28 | <div class="todo-main"> |
| 29 | <span class="team-dot" style="background:{{ t.color }}"></span> | 29 | <span class="team-dot" style="background:{{ t.color }}"></span> |
| 30 | <div style="flex:1;min-width:0"> | 30 | <div style="flex:1;min-width:0"> |
| 31 | - <div class="todo-name">{{ t.name }}{% if t.high %} <span class="prio-flag" role="img" aria-label="{{ shell.tr.prio_high_aria }}">‼︎</span>{% endif %}</div> | 31 | + <div class="todo-name">{{ t.name }}</div> |
| 32 | <div class="todo-meta">{{ t.meta }}</div> | 32 | <div class="todo-meta">{{ t.meta }}</div> |
| 33 | {% if !t.assignees.is_empty() %} | 33 | {% if !t.assignees.is_empty() %} |
| 34 | <div class="asg-chips"> | 34 | <div class="asg-chips"> |
| @@ -36,6 +36,9 @@ | |||
| 36 | </div> | 36 | </div> |
| 37 | {% endif %} | 37 | {% endif %} |
| 38 | </div> | 38 | </div> |
| 39 | + {% if t.high %} | ||
| 40 | + <span class="prio-pill"><span aria-hidden="true">{{ shell.tr.prio_pill }}</span><span class="visually-hidden">{{ shell.tr.prio_high_aria }}</span></span> | ||
| 41 | + {% endif %} | ||
| 39 | {% if t.mine %} | 42 | {% if t.mine %} |
| 40 | <a class="btn btn-secondary btn-icon" style="flex:none" href="/taches/{{ t.id }}/modifier" aria-label="{{ t.edit_aria }}"> | 43 | <a class="btn btn-secondary btn-icon" style="flex:none" href="/taches/{{ t.id }}/modifier" aria-label="{{ t.edit_aria }}"> |
| 41 | <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg> | 44 | <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg> |
| @@ -74,7 +77,7 @@ | |||
| 74 | <div class="todo-main"> | 77 | <div class="todo-main"> |
| 75 | <span class="team-dot" style="background:{{ t.color }}"></span> | 78 | <span class="team-dot" style="background:{{ t.color }}"></span> |
| 76 | <div style="flex:1;min-width:0"> | 79 | <div style="flex:1;min-width:0"> |
| 77 | - <div class="todo-name">{{ t.name }}{% if t.high %} <span class="prio-flag" role="img" aria-label="{{ shell.tr.prio_high_aria }}">‼︎</span>{% endif %}</div> | 80 | + <div class="todo-name">{{ t.name }}</div> |
| 78 | <div class="todo-meta{% if t.late %} late{% endif %}">{{ t.meta }}</div> | 81 | <div class="todo-meta{% if t.late %} late{% endif %}">{{ t.meta }}</div> |
| 79 | {% if !t.assignees.is_empty() %} | 82 | {% if !t.assignees.is_empty() %} |
| 80 | <div class="asg-chips"> | 83 | <div class="asg-chips"> |
| @@ -82,6 +85,9 @@ | |||
| 82 | </div> | 85 | </div> |
| 83 | {% endif %} | 86 | {% endif %} |
| 84 | </div> | 87 | </div> |
| 88 | + {% if t.high %} | ||
| 89 | + <span class="prio-pill"><span aria-hidden="true">{{ shell.tr.prio_pill }}</span><span class="visually-hidden">{{ shell.tr.prio_high_aria }}</span></span> | ||
| 90 | + {% endif %} | ||
| 85 | <a class="btn btn-secondary btn-icon" style="flex:none" href="/taches/{{ t.id }}/modifier" aria-label="{{ t.edit_aria }}"> | 91 | <a class="btn btn-secondary btn-icon" style="flex:none" href="/taches/{{ t.id }}/modifier" aria-label="{{ t.edit_aria }}"> |
| 86 | <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg> | 92 | <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg> |
| 87 | </a> | 93 | </a> |