react-cheminfo 0.70.0 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -2
- package/lib/about/core/providers.d.ts +6 -0
- package/lib/about/core/providers.d.ts.map +1 -1
- package/lib/about/core/providers.js +7 -0
- package/lib/about/core/providers.js.map +1 -1
- package/lib/about/ui/AboutProvidedBy.js +34 -0
- package/lib/about/ui/AboutProvidedBy.js.map +1 -1
- package/lib/download/core/figurePng.d.ts +14 -0
- package/lib/download/core/figurePng.d.ts.map +1 -1
- package/lib/download/core/figurePng.js +21 -6
- package/lib/download/core/figurePng.js.map +1 -1
- package/lib/download/core/svgToPng.d.ts.map +1 -1
- package/lib/download/core/svgToPng.js +4 -2
- package/lib/download/core/svgToPng.js.map +1 -1
- package/lib/format/core/relativeTime.d.ts +8 -3
- package/lib/format/core/relativeTime.d.ts.map +1 -1
- package/lib/format/core/relativeTime.js +19 -7
- package/lib/format/core/relativeTime.js.map +1 -1
- package/lib/host/core/connectHost.d.ts +25 -34
- package/lib/host/core/connectHost.d.ts.map +1 -1
- package/lib/host/core/connectHost.js +43 -89
- package/lib/host/core/connectHost.js.map +1 -1
- package/lib/host/core/hostOutputs.d.ts +58 -0
- package/lib/host/core/hostOutputs.d.ts.map +1 -0
- package/lib/host/core/hostOutputs.js +151 -0
- package/lib/host/core/hostOutputs.js.map +1 -0
- package/lib/host/core/index.d.ts +9 -3
- package/lib/host/core/index.d.ts.map +1 -1
- package/lib/host/core/index.js +4 -1
- package/lib/host/core/index.js.map +1 -1
- package/lib/host/core/irKinds.d.ts +124 -0
- package/lib/host/core/irKinds.d.ts.map +1 -0
- package/lib/host/core/irKinds.js +46 -0
- package/lib/host/core/irKinds.js.map +1 -0
- package/lib/host/core/kinds.d.ts +13 -5
- package/lib/host/core/kinds.d.ts.map +1 -1
- package/lib/host/core/kinds.js +11 -5
- package/lib/host/core/kinds.js.map +1 -1
- package/lib/host/core/protocol.d.ts +50 -7
- package/lib/host/core/protocol.d.ts.map +1 -1
- package/lib/host/core/protocol.js +10 -6
- package/lib/host/core/protocol.js.map +1 -1
- package/lib/host/core/selectInputs.d.ts +37 -0
- package/lib/host/core/selectInputs.d.ts.map +1 -0
- package/lib/host/core/selectInputs.js +110 -0
- package/lib/host/core/selectInputs.js.map +1 -0
- package/lib/host/testing/sciPeaks.d.ts +31 -0
- package/lib/host/testing/sciPeaks.d.ts.map +1 -1
- package/lib/host/testing/sciPeaks.js +73 -0
- package/lib/host/testing/sciPeaks.js.map +1 -1
- package/lib/host/testing/standInHost.d.ts +9 -1
- package/lib/host/testing/standInHost.d.ts.map +1 -1
- package/lib/host/testing/standInHost.js +19 -1
- package/lib/host/testing/standInHost.js.map +1 -1
- package/lib/host/ui/useHostConnection.d.ts +13 -5
- package/lib/host/ui/useHostConnection.d.ts.map +1 -1
- package/lib/host/ui/useHostConnection.js +4 -3
- package/lib/host/ui/useHostConnection.js.map +1 -1
- package/lib/host-testing.d.ts +2 -2
- package/lib/host-testing.d.ts.map +1 -1
- package/lib/host-testing.js +2 -2
- package/lib/host-testing.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/ir/core/handPicking.d.ts +58 -0
- package/lib/ir/core/handPicking.d.ts.map +1 -0
- package/lib/ir/core/handPicking.js +130 -0
- package/lib/ir/core/handPicking.js.map +1 -0
- package/lib/ir/core/index.d.ts +3 -0
- package/lib/ir/core/index.d.ts.map +1 -1
- package/lib/ir/core/index.js +3 -0
- package/lib/ir/core/index.js.map +1 -1
- package/lib/ir/core/irBandState.d.ts +57 -0
- package/lib/ir/core/irBandState.d.ts.map +1 -0
- package/lib/ir/core/irBandState.js +119 -0
- package/lib/ir/core/irBandState.js.map +1 -0
- package/lib/ir/core/irCommands.d.ts +11 -0
- package/lib/ir/core/irCommands.d.ts.map +1 -1
- package/lib/ir/core/irCommands.js +6 -0
- package/lib/ir/core/irCommands.js.map +1 -1
- package/lib/ir/core/irPeaks.d.ts +28 -0
- package/lib/ir/core/irPeaks.d.ts.map +1 -0
- package/lib/ir/core/irPeaks.js +66 -0
- package/lib/ir/core/irPeaks.js.map +1 -0
- package/lib/ir/core/irReducer.d.ts +8 -0
- package/lib/ir/core/irReducer.d.ts.map +1 -1
- package/lib/ir/core/irReducer.js +15 -32
- package/lib/ir/core/irReducer.js.map +1 -1
- package/lib/ir/core/irSpectrum.d.ts +15 -0
- package/lib/ir/core/irSpectrum.d.ts.map +1 -1
- package/lib/ir/core/irSpectrum.js.map +1 -1
- package/lib/ir/core/irState.d.ts +9 -6
- package/lib/ir/core/irState.d.ts.map +1 -1
- package/lib/ir/core/irState.js +10 -6
- package/lib/ir/core/irState.js.map +1 -1
- package/lib/ir/core/pickBands.d.ts +14 -0
- package/lib/ir/core/pickBands.d.ts.map +1 -1
- package/lib/ir/core/pickBands.js +39 -33
- package/lib/ir/core/pickBands.js.map +1 -1
- package/lib/ir/core/ramanBands.d.ts +9 -1
- package/lib/ir/core/ramanBands.d.ts.map +1 -1
- package/lib/ir/core/ramanBands.js +2 -2
- package/lib/ir/core/ramanBands.js.map +1 -1
- package/lib/ir/core/spectrumBands.d.ts +46 -0
- package/lib/ir/core/spectrumBands.d.ts.map +1 -0
- package/lib/ir/core/spectrumBands.js +98 -0
- package/lib/ir/core/spectrumBands.js.map +1 -0
- package/lib/ir/ui/BandRow.d.ts +5 -0
- package/lib/ir/ui/BandRow.d.ts.map +1 -1
- package/lib/ir/ui/BandRow.js +4 -3
- package/lib/ir/ui/BandRow.js.map +1 -1
- package/lib/ir/ui/BandsPanel.d.ts +5 -0
- package/lib/ir/ui/BandsPanel.d.ts.map +1 -1
- package/lib/ir/ui/BandsPanel.js +36 -16
- package/lib/ir/ui/BandsPanel.js.map +1 -1
- package/lib/ir/ui/BandsToolbar.d.ts +9 -0
- package/lib/ir/ui/BandsToolbar.d.ts.map +1 -0
- package/lib/ir/ui/BandsToolbar.js +61 -0
- package/lib/ir/ui/BandsToolbar.js.map +1 -0
- package/lib/ir/ui/IrCanvas.d.ts +2 -1
- package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
- package/lib/ir/ui/IrCanvas.js +19 -5
- package/lib/ir/ui/IrCanvas.js.map +1 -1
- package/lib/ir/ui/IrChart.d.ts.map +1 -1
- package/lib/ir/ui/IrChart.js +8 -1
- package/lib/ir/ui/IrChart.js.map +1 -1
- package/lib/ir/ui/IrDocumentationDialog.js +1 -1
- package/lib/ir/ui/IrDocumentationDialog.js.map +1 -1
- package/lib/ir/ui/IrEditor.d.ts +4 -2
- package/lib/ir/ui/IrEditor.d.ts.map +1 -1
- package/lib/ir/ui/IrEditor.js.map +1 -1
- package/lib/ir/ui/IrShell.d.ts.map +1 -1
- package/lib/ir/ui/IrShell.js +6 -0
- package/lib/ir/ui/IrShell.js.map +1 -1
- package/lib/ir/ui/IrStatusBar.d.ts.map +1 -1
- package/lib/ir/ui/IrStatusBar.js +1 -1
- package/lib/ir/ui/IrStatusBar.js.map +1 -1
- package/lib/ir/ui/IrToolbar.d.ts +4 -3
- package/lib/ir/ui/IrToolbar.d.ts.map +1 -1
- package/lib/ir/ui/IrToolbar.js +5 -4
- package/lib/ir/ui/IrToolbar.js.map +1 -1
- package/lib/ir/ui/VibrationalEditor.d.ts +2 -1
- package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -1
- package/lib/ir/ui/VibrationalEditor.js.map +1 -1
- package/lib/ir/ui/irActions.d.ts +5 -0
- package/lib/ir/ui/irActions.d.ts.map +1 -1
- package/lib/ir/ui/irActions.js +6 -0
- package/lib/ir/ui/irActions.js.map +1 -1
- package/lib/ir/ui/irChartProps.d.ts +4 -1
- package/lib/ir/ui/irChartProps.d.ts.map +1 -1
- package/lib/ir/ui/useIrEditor.d.ts +5 -11
- package/lib/ir/ui/useIrEditor.d.ts.map +1 -1
- package/lib/ir/ui/useIrEditor.js +17 -18
- package/lib/ir/ui/useIrEditor.js.map +1 -1
- package/lib/locales/de.json +63 -0
- package/lib/locales/en.json +63 -0
- package/lib/locales/es.json +63 -0
- package/lib/locales/fr.json +63 -0
- package/lib/locales/it.json +63 -0
- package/lib/slides/ui/slideSanitizeSchema.d.ts +3 -2
- package/lib/slides/ui/slideSanitizeSchema.d.ts.map +1 -1
- package/lib/slides/ui/slideSanitizeSchema.js +82 -2
- package/lib/slides/ui/slideSanitizeSchema.js.map +1 -1
- package/package.json +1 -1
- package/src/about/core/providers.ts +7 -0
- package/src/about/ui/AboutProvidedBy.tsx +49 -0
- package/src/download/core/figurePng.ts +21 -8
- package/src/download/core/svgToPng.ts +3 -4
- package/src/format/core/relativeTime.ts +29 -7
- package/src/host/core/connectHost.ts +77 -120
- package/src/host/core/hostOutputs.ts +197 -0
- package/src/host/core/index.ts +13 -7
- package/src/host/core/irKinds.ts +92 -0
- package/src/host/core/kinds.ts +16 -6
- package/src/host/core/protocol.ts +50 -8
- package/src/host/core/selectInputs.ts +145 -0
- package/src/host/testing/sciPeaks.ts +140 -0
- package/src/host/testing/standInHost.ts +30 -5
- package/src/host/ui/useHostConnection.ts +17 -8
- package/src/host-testing.ts +4 -0
- package/src/ir/core/handPicking.ts +154 -0
- package/src/ir/core/index.ts +14 -0
- package/src/ir/core/irBandState.ts +155 -0
- package/src/ir/core/irCommands.ts +7 -0
- package/src/ir/core/irPeaks.ts +79 -0
- package/src/ir/core/irReducer.ts +27 -34
- package/src/ir/core/irSpectrum.ts +16 -0
- package/src/ir/core/irState.ts +15 -8
- package/src/ir/core/pickBands.ts +46 -39
- package/src/ir/core/ramanBands.ts +2 -2
- package/src/ir/core/spectrumBands.ts +113 -0
- package/src/ir/ui/BandRow.tsx +20 -2
- package/src/ir/ui/BandsPanel.tsx +46 -88
- package/src/ir/ui/BandsToolbar.tsx +152 -0
- package/src/ir/ui/IrCanvas.tsx +22 -11
- package/src/ir/ui/IrChart.tsx +10 -1
- package/src/ir/ui/IrDocumentationDialog.tsx +7 -0
- package/src/ir/ui/IrEditor.tsx +4 -2
- package/src/ir/ui/IrShell.tsx +5 -0
- package/src/ir/ui/IrStatusBar.tsx +4 -1
- package/src/ir/ui/IrToolbar.tsx +14 -5
- package/src/ir/ui/VibrationalEditor.tsx +2 -1
- package/src/ir/ui/irActions.ts +11 -0
- package/src/ir/ui/irChartProps.ts +4 -1
- package/src/ir/ui/useIrEditor.ts +21 -21
- package/src/locales/de.json +63 -0
- package/src/locales/en.json +63 -0
- package/src/locales/es.json +63 -0
- package/src/locales/fr.json +63 -0
- package/src/locales/it.json +63 -0
- package/src/slides/ui/slideSanitizeSchema.ts +86 -2
- package/styles/chrome.css +7 -0
- package/styles/slides.css +47 -0
package/src/locales/fr.json
CHANGED
|
@@ -8,6 +8,69 @@
|
|
|
8
8
|
"account.signIn": "Se connecter",
|
|
9
9
|
"account.signOut": "Se déconnecter",
|
|
10
10
|
"account.signedInAs": "Connecté comme {name}",
|
|
11
|
+
"account.username": "Nom d'utilisateur",
|
|
12
|
+
"account.password": "Mot de passe",
|
|
13
|
+
"account.role": "Rôle",
|
|
14
|
+
"account.role.read": "Lecture",
|
|
15
|
+
"account.role.write": "Lecture et écriture",
|
|
16
|
+
"account.role.admin": "Administrateur",
|
|
17
|
+
"account.you": "vous",
|
|
18
|
+
"account.envManaged": "défini dans .env",
|
|
19
|
+
"account.envManagedTitle": "ADMIN_USERNAME et ADMIN_PASSWORD, dans le .env du serveur, définissent ce compte : il se modifie là.",
|
|
20
|
+
"account.accounts": "Comptes",
|
|
21
|
+
"account.accountsNote": "Lecture consulte les données, Lecture et écriture les modifie aussi, et Administrateur gère aussi ces comptes.",
|
|
22
|
+
"account.column.added": "Ajouté",
|
|
23
|
+
"account.column.lastSignIn": "Dernière connexion",
|
|
24
|
+
"account.column.passwordChanged": "Mot de passe changé",
|
|
25
|
+
"account.column.actions": "Modifier",
|
|
26
|
+
"account.never": "jamais",
|
|
27
|
+
"account.add": "Ajouter un compte",
|
|
28
|
+
"account.addSubmit": "Ajouter le compte",
|
|
29
|
+
"account.added": "{username} peut se connecter dès maintenant.",
|
|
30
|
+
"account.usernameHelp": "Lettres, chiffres, points, tirets et soulignés.",
|
|
31
|
+
"account.setPassword": "Définir le mot de passe",
|
|
32
|
+
"account.setPasswordTitle": "Définir le mot de passe de {username}",
|
|
33
|
+
"account.setPasswordNote": "{username} est déconnecté partout, et se connecte désormais avec ce mot de passe.",
|
|
34
|
+
"account.setPasswordSubmit": "Définir le mot de passe",
|
|
35
|
+
"account.roleOf": "Rôle de {username}",
|
|
36
|
+
"account.changePassword": "Changer votre mot de passe",
|
|
37
|
+
"account.currentPassword": "Mot de passe actuel",
|
|
38
|
+
"account.newPassword": "Nouveau mot de passe",
|
|
39
|
+
"account.repeatPassword": "Nouveau mot de passe, à nouveau",
|
|
40
|
+
"account.passwordsDiffer": "Les deux nouveaux mots de passe diffèrent.",
|
|
41
|
+
"account.passwordChanged": "Votre mot de passe est changé. Les autres navigateurs connectés avec votre compte sont déconnectés.",
|
|
42
|
+
"account.ownEnvManaged": "Le .env du serveur définit votre compte : changez ADMIN_PASSWORD là, puis redémarrez le serveur.",
|
|
43
|
+
"account.remove": "Supprimer",
|
|
44
|
+
"account.removeQuestion": "Supprimer {username} ? Ce compte ne pourra plus se connecter.",
|
|
45
|
+
"account.needsWrite": "Cette page modifie les données, et {username} peut seulement les lire.",
|
|
46
|
+
"account.needsAdmin": "Cette page est réservée aux administrateurs, et {username} n'en est pas un.",
|
|
47
|
+
"account.switchAccount": "Se connecter avec un autre compte",
|
|
48
|
+
"account.unreachable": "Le serveur est injoignable. Réessayez dans un instant.",
|
|
49
|
+
"account.refusal.wrongCredentials": "Nom d'utilisateur ou mot de passe incorrect.",
|
|
50
|
+
"account.refusal.tooManyAttempts": "Trop de tentatives de connexion depuis ici. Réessayez dans 15 minutes.",
|
|
51
|
+
"account.refusal.signInElsewhere": "La connexion se fait depuis les pages de ce site.",
|
|
52
|
+
"account.refusal.signOutElsewhere": "La déconnexion se fait depuis les pages de ce site.",
|
|
53
|
+
"account.refusal.changeElsewhere": "Les modifications se font depuis les pages de ce site.",
|
|
54
|
+
"account.refusal.signInRequired": "Ceci est réservé aux comptes de ce site : connectez-vous.",
|
|
55
|
+
"account.refusal.sessionEnded": "La session a pris fin : reconnectez-vous.",
|
|
56
|
+
"account.refusal.wrongToken": "Ce n'est pas l'ADMIN_TOKEN de ce serveur.",
|
|
57
|
+
"account.refusal.noAdminToken": "Aucun ADMIN_TOKEN n'est défini sur ce serveur : connectez-vous plutôt.",
|
|
58
|
+
"account.refusal.roleTooLow": "Votre compte ne peut pas faire ceci : demandez à un administrateur.",
|
|
59
|
+
"account.refusal.usernameLength": "Un nom d'utilisateur compte de {min} à {max} caractères.",
|
|
60
|
+
"account.refusal.usernameCharacters": "Un nom d'utilisateur contient des lettres, des chiffres, des points, des tirets et des soulignés, et commence par une lettre ou un chiffre.",
|
|
61
|
+
"account.refusal.usernameTaken": "Ce nom d'utilisateur est déjà pris.",
|
|
62
|
+
"account.refusal.passwordEmpty": "Un mot de passe ne peut pas être vide.",
|
|
63
|
+
"account.refusal.passwordTooLong": "Un mot de passe compte au plus {max} caractères.",
|
|
64
|
+
"account.refusal.noSuchAccount": "Ce compte n'existe plus.",
|
|
65
|
+
"account.refusal.nothingToChange": "Envoyez un nouveau mot de passe, un nouveau rôle, ou les deux.",
|
|
66
|
+
"account.refusal.useChangePassword": "Changez votre propre mot de passe avec POST /password, qui demande le mot de passe actuel.",
|
|
67
|
+
"account.refusal.ownRole": "Vous ne pouvez pas changer votre propre rôle.",
|
|
68
|
+
"account.refusal.removeYourself": "Vous ne pouvez pas supprimer le compte que vous utilisez.",
|
|
69
|
+
"account.refusal.lastAdmin": "Le dernier administrateur ne peut être ni supprimé ni rétrogradé.",
|
|
70
|
+
"account.refusal.envManaged": "Le .env du serveur définit ce compte : il se modifie là.",
|
|
71
|
+
"account.refusal.tokenCannotChangePassword": "Un mot de passe se change depuis le compte connecté, pas avec l'ADMIN_TOKEN.",
|
|
72
|
+
"account.refusal.wrongCurrentPassword": "Le mot de passe actuel n'est pas celui-là.",
|
|
73
|
+
"account.refusal.accountRemoved": "Le compte connecté a été supprimé.",
|
|
11
74
|
"ecosystem.tools": "Outils",
|
|
12
75
|
"ecosystem.menuHeading": "Nos outils, tous dans le navigateur",
|
|
13
76
|
"ecosystem.otherTools": "Nos autres outils",
|
package/src/locales/it.json
CHANGED
|
@@ -8,6 +8,69 @@
|
|
|
8
8
|
"account.signIn": "Accedi",
|
|
9
9
|
"account.signOut": "Esci",
|
|
10
10
|
"account.signedInAs": "Accesso effettuato come {name}",
|
|
11
|
+
"account.username": "Nome utente",
|
|
12
|
+
"account.password": "Password",
|
|
13
|
+
"account.role": "Ruolo",
|
|
14
|
+
"account.role.read": "Lettura",
|
|
15
|
+
"account.role.write": "Lettura e scrittura",
|
|
16
|
+
"account.role.admin": "Amministratore",
|
|
17
|
+
"account.you": "tu",
|
|
18
|
+
"account.envManaged": "definito in .env",
|
|
19
|
+
"account.envManagedTitle": "ADMIN_USERNAME e ADMIN_PASSWORD, nel .env del server, definiscono questo account, che si cambia lì.",
|
|
20
|
+
"account.accounts": "Account",
|
|
21
|
+
"account.accountsNote": "Lettura vede i dati, Lettura e scrittura li modifica anche, e Amministratore gestisce anche questi account.",
|
|
22
|
+
"account.column.added": "Aggiunto",
|
|
23
|
+
"account.column.lastSignIn": "Ultimo accesso",
|
|
24
|
+
"account.column.passwordChanged": "Password cambiata",
|
|
25
|
+
"account.column.actions": "Modifica",
|
|
26
|
+
"account.never": "mai",
|
|
27
|
+
"account.add": "Aggiungi un account",
|
|
28
|
+
"account.addSubmit": "Aggiungi l'account",
|
|
29
|
+
"account.added": "{username} può accedere da ora.",
|
|
30
|
+
"account.usernameHelp": "Lettere, cifre, punti, trattini e trattini bassi.",
|
|
31
|
+
"account.setPassword": "Imposta password",
|
|
32
|
+
"account.setPasswordTitle": "Imposta la password di {username}",
|
|
33
|
+
"account.setPasswordNote": "{username} viene disconnesso ovunque, e d'ora in poi accede con questa password.",
|
|
34
|
+
"account.setPasswordSubmit": "Imposta la password",
|
|
35
|
+
"account.roleOf": "Ruolo di {username}",
|
|
36
|
+
"account.changePassword": "Cambia la tua password",
|
|
37
|
+
"account.currentPassword": "Password attuale",
|
|
38
|
+
"account.newPassword": "Nuova password",
|
|
39
|
+
"account.repeatPassword": "Nuova password, di nuovo",
|
|
40
|
+
"account.passwordsDiffer": "Le due nuove password sono diverse.",
|
|
41
|
+
"account.passwordChanged": "La tua password è cambiata. Gli altri browser connessi con il tuo account sono disconnessi.",
|
|
42
|
+
"account.ownEnvManaged": "Il .env del server definisce il tuo account: cambia ADMIN_PASSWORD lì, poi riavvia il server.",
|
|
43
|
+
"account.remove": "Rimuovi",
|
|
44
|
+
"account.removeQuestion": "Rimuovere {username}? Non potrà più accedere.",
|
|
45
|
+
"account.needsWrite": "Questa pagina modifica i dati, e {username} può solo leggerli.",
|
|
46
|
+
"account.needsAdmin": "Questa pagina è per gli amministratori, e {username} non lo è.",
|
|
47
|
+
"account.switchAccount": "Accedi con un altro account",
|
|
48
|
+
"account.unreachable": "Il server non è raggiungibile. Riprova tra un momento.",
|
|
49
|
+
"account.refusal.wrongCredentials": "Nome utente o password errati.",
|
|
50
|
+
"account.refusal.tooManyAttempts": "Troppi tentativi di accesso da qui. Riprova tra 15 minuti.",
|
|
51
|
+
"account.refusal.signInElsewhere": "L'accesso avviene dalle pagine di questo sito.",
|
|
52
|
+
"account.refusal.signOutElsewhere": "L'uscita avviene dalle pagine di questo sito.",
|
|
53
|
+
"account.refusal.changeElsewhere": "Le modifiche si fanno dalle pagine di questo sito.",
|
|
54
|
+
"account.refusal.signInRequired": "Questo è per gli account di questo sito: accedi.",
|
|
55
|
+
"account.refusal.sessionEnded": "La sessione è terminata: accedi di nuovo.",
|
|
56
|
+
"account.refusal.wrongToken": "Questo non è l'ADMIN_TOKEN di questo server.",
|
|
57
|
+
"account.refusal.noAdminToken": "Su questo server non è impostato alcun ADMIN_TOKEN: accedi invece.",
|
|
58
|
+
"account.refusal.roleTooLow": "Il tuo account non può farlo: chiedi a un amministratore.",
|
|
59
|
+
"account.refusal.usernameLength": "Un nome utente ha da {min} a {max} caratteri.",
|
|
60
|
+
"account.refusal.usernameCharacters": "Un nome utente contiene lettere, cifre, punti, trattini e trattini bassi, e inizia con una lettera o una cifra.",
|
|
61
|
+
"account.refusal.usernameTaken": "Questo nome utente è già preso.",
|
|
62
|
+
"account.refusal.passwordEmpty": "Una password non può essere vuota.",
|
|
63
|
+
"account.refusal.passwordTooLong": "Una password ha al massimo {max} caratteri.",
|
|
64
|
+
"account.refusal.noSuchAccount": "Questo account non esiste più.",
|
|
65
|
+
"account.refusal.nothingToChange": "Invia una nuova password, un nuovo ruolo, o entrambi.",
|
|
66
|
+
"account.refusal.useChangePassword": "Cambia la tua password con POST /password, che chiede quella attuale.",
|
|
67
|
+
"account.refusal.ownRole": "Non puoi cambiare il tuo ruolo.",
|
|
68
|
+
"account.refusal.removeYourself": "Non puoi rimuovere l'account che stai usando.",
|
|
69
|
+
"account.refusal.lastAdmin": "L'ultimo amministratore non può essere né rimosso né declassato.",
|
|
70
|
+
"account.refusal.envManaged": "Il .env del server definisce questo account, che si cambia lì.",
|
|
71
|
+
"account.refusal.tokenCannotChangePassword": "Una password la cambia l'account connesso, non l'ADMIN_TOKEN.",
|
|
72
|
+
"account.refusal.wrongCurrentPassword": "La password attuale non è questa.",
|
|
73
|
+
"account.refusal.accountRemoved": "L'account connesso è stato rimosso.",
|
|
11
74
|
"ecosystem.tools": "Strumenti",
|
|
12
75
|
"ecosystem.menuHeading": "I nostri strumenti, tutti nel browser",
|
|
13
76
|
"ecosystem.otherTools": "I nostri altri strumenti",
|
|
@@ -1,13 +1,82 @@
|
|
|
1
1
|
import type { Options as SanitizeSchema } from 'rehype-sanitize';
|
|
2
2
|
import { defaultSchema } from 'rehype-sanitize';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* The MathML Core elements a formula is written with. `annotation-xml`, which
|
|
6
|
+
* may carry HTML, and the legacy `maction` are left out.
|
|
7
|
+
*/
|
|
8
|
+
const MATHML_ELEMENTS = [
|
|
9
|
+
'math',
|
|
10
|
+
'merror',
|
|
11
|
+
'mfrac',
|
|
12
|
+
'mi',
|
|
13
|
+
'mmultiscripts',
|
|
14
|
+
'mn',
|
|
15
|
+
'mo',
|
|
16
|
+
'mover',
|
|
17
|
+
'mpadded',
|
|
18
|
+
'mphantom',
|
|
19
|
+
'mprescripts',
|
|
20
|
+
'mroot',
|
|
21
|
+
'mrow',
|
|
22
|
+
'ms',
|
|
23
|
+
'mspace',
|
|
24
|
+
'msqrt',
|
|
25
|
+
'mstyle',
|
|
26
|
+
'msub',
|
|
27
|
+
'msubsup',
|
|
28
|
+
'msup',
|
|
29
|
+
'mtable',
|
|
30
|
+
'mtd',
|
|
31
|
+
'mtext',
|
|
32
|
+
'mtr',
|
|
33
|
+
'munder',
|
|
34
|
+
'munderover',
|
|
35
|
+
'semantics',
|
|
36
|
+
'annotation',
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* What every MathML element may carry, colours aside: a formula takes the
|
|
41
|
+
* slide's ink, as everything else on it does.
|
|
42
|
+
*/
|
|
43
|
+
const MATHML_GLOBAL = ['dir', 'displaystyle', 'mathvariant', 'scriptlevel'];
|
|
44
|
+
|
|
45
|
+
/** The attributes particular to one MathML element, by hast property name. */
|
|
46
|
+
const MATHML_ATTRIBUTES: Record<string, string[]> = {
|
|
47
|
+
math: [...MATHML_GLOBAL, 'display', 'alttext'],
|
|
48
|
+
mo: [
|
|
49
|
+
...MATHML_GLOBAL,
|
|
50
|
+
'form',
|
|
51
|
+
'fence',
|
|
52
|
+
'separator',
|
|
53
|
+
'lspace',
|
|
54
|
+
'rspace',
|
|
55
|
+
'stretchy',
|
|
56
|
+
'symmetric',
|
|
57
|
+
'maxsize',
|
|
58
|
+
'minsize',
|
|
59
|
+
'largeop',
|
|
60
|
+
'movablelimits',
|
|
61
|
+
],
|
|
62
|
+
mfrac: [...MATHML_GLOBAL, 'linethickness'],
|
|
63
|
+
mspace: [...MATHML_GLOBAL, 'width', 'height', 'depth'],
|
|
64
|
+
mpadded: [...MATHML_GLOBAL, 'width', 'height', 'depth', 'lspace', 'voffset'],
|
|
65
|
+
mover: [...MATHML_GLOBAL, 'accent'],
|
|
66
|
+
munder: [...MATHML_GLOBAL, 'accentunder'],
|
|
67
|
+
munderover: [...MATHML_GLOBAL, 'accent', 'accentunder'],
|
|
68
|
+
mtd: [...MATHML_GLOBAL, 'columnspan', 'rowSpan'],
|
|
69
|
+
annotation: ['encoding'],
|
|
70
|
+
};
|
|
71
|
+
|
|
4
72
|
/**
|
|
5
73
|
* What survives of the raw HTML a deck writes.
|
|
6
74
|
*
|
|
7
75
|
* GitHub's schema, which already strips scripts, event handlers and every URL
|
|
8
76
|
* that is not http, https or relative, plus what decks legitimately use beyond
|
|
9
|
-
* it: figures, the class a site styles a block with,
|
|
10
|
-
*
|
|
77
|
+
* it: figures, the class a site styles a block with, frames, and formulas
|
|
78
|
+
* written in MathML, which the browser draws natively. Which frame may actually
|
|
79
|
+
* be drawn is decided by `isFamilyFrameSource` when it renders.
|
|
11
80
|
*/
|
|
12
81
|
export const SLIDE_SANITIZE_SCHEMA: SanitizeSchema = {
|
|
13
82
|
...defaultSchema,
|
|
@@ -20,10 +89,25 @@ export const SLIDE_SANITIZE_SCHEMA: SanitizeSchema = {
|
|
|
20
89
|
'mark',
|
|
21
90
|
'small',
|
|
22
91
|
'u',
|
|
92
|
+
...MATHML_ELEMENTS,
|
|
23
93
|
],
|
|
24
94
|
attributes: {
|
|
25
95
|
...defaultSchema.attributes,
|
|
96
|
+
...mathmlAttributes(),
|
|
26
97
|
iframe: ['src', 'allowFullScreen'],
|
|
27
98
|
'*': [...(defaultSchema.attributes?.['*'] ?? []), 'className'],
|
|
28
99
|
},
|
|
29
100
|
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* The attributes of every MathML element, those of its own and the global
|
|
104
|
+
* ones.
|
|
105
|
+
* @returns The attribute lists, by element.
|
|
106
|
+
*/
|
|
107
|
+
function mathmlAttributes(): Record<string, string[]> {
|
|
108
|
+
const attributes: Record<string, string[]> = {};
|
|
109
|
+
for (const element of MATHML_ELEMENTS) {
|
|
110
|
+
attributes[element] = MATHML_ATTRIBUTES[element] ?? MATHML_GLOBAL;
|
|
111
|
+
}
|
|
112
|
+
return attributes;
|
|
113
|
+
}
|
package/styles/chrome.css
CHANGED
|
@@ -54,6 +54,13 @@ button {
|
|
|
54
54
|
font-family: inherit;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
/* A formula is MathML the browser draws natively, in a font made for it: the
|
|
58
|
+
one a browser falls back to neither stretches a bracket around a fraction
|
|
59
|
+
nor sizes a `∑` for display. */
|
|
60
|
+
math {
|
|
61
|
+
font-family: 'STIX Two Math', 'Cambria Math', 'Latin Modern Math', math;
|
|
62
|
+
}
|
|
63
|
+
|
|
57
64
|
/* Blueprint lets a button shrink in a flex row, below the width of its own
|
|
58
65
|
content, and the icon then spills out of its left edge. Blueprint's fill
|
|
59
66
|
rules are more specific and still stretch a button that asks to. */
|
package/styles/slides.css
CHANGED
|
@@ -251,6 +251,53 @@
|
|
|
251
251
|
margin: 0.5em auto 0;
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
+
/* What a slide singles out in a line — the digits that differ — takes the
|
|
255
|
+
deck's accent rather than the browser's yellow. */
|
|
256
|
+
.slide-content mark {
|
|
257
|
+
padding: 0 0.08em;
|
|
258
|
+
border-radius: 6px;
|
|
259
|
+
background: var(--slide-accent-soft);
|
|
260
|
+
color: var(--slide-answer);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/* A formula is MathML the browser draws natively; its font is chrome.css's. */
|
|
264
|
+
.slide-content math[display='block'] {
|
|
265
|
+
margin: 0.5em 0;
|
|
266
|
+
font-size: 1.15em;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* A table of values reads across: figures right-aligned in tabular digits,
|
|
270
|
+
one rule under each row and never a number broken over two lines. */
|
|
271
|
+
.slide-content table {
|
|
272
|
+
border-collapse: collapse;
|
|
273
|
+
margin: 0.4em 0;
|
|
274
|
+
font-size: 0.82em;
|
|
275
|
+
font-variant-numeric: tabular-nums;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.slide-content th,
|
|
279
|
+
.slide-content td {
|
|
280
|
+
padding: 0.22em 0.9em;
|
|
281
|
+
border-bottom: 2px solid var(--slide-line);
|
|
282
|
+
text-align: left;
|
|
283
|
+
white-space: nowrap;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.slide-content th {
|
|
287
|
+
color: var(--slide-muted);
|
|
288
|
+
font-weight: 600;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.slide-content th[align='right'],
|
|
292
|
+
.slide-content td[align='right'] {
|
|
293
|
+
text-align: right;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.slide-content th[align='center'],
|
|
297
|
+
.slide-content td[align='center'] {
|
|
298
|
+
text-align: center;
|
|
299
|
+
}
|
|
300
|
+
|
|
254
301
|
/* ── Content and thanks: title pinned to the top, demos sunk to the bottom ── */
|
|
255
302
|
|
|
256
303
|
.slide--content,
|