humalis 1.0.4 → 1.2.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/dist/analyse/accessibilite.js +13 -5
- package/dist/analyse/analyse.js +43 -3
- package/dist/analyse/langues.js +30 -10
- package/dist/analyse/medias.js +4 -1
- package/dist/analyse/navigation.js +35 -0
- package/dist/analyse/niveaux.js +67 -0
- package/dist/analyse/noms.js +1 -1
- package/dist/analyse/site.js +30 -8
- package/dist/cibles/commun/colorerCode.js +59 -0
- package/dist/cibles/commun/mouvement.js +110 -4
- package/dist/cibles/mobile/projet.js +10 -2
- package/dist/cibles/mobile/rendu.js +6 -3
- package/dist/cibles/statique/page.js +99 -6
- package/dist/cibles/statique/projet.js +46 -0
- package/dist/cibles/statique/valeurs.js +5 -1
- package/dist/cibles/web/css-ecran.js +31 -1
- package/dist/cibles/web/ecran.js +161 -16
- package/dist/cibles/web/interactions.js +64 -3
- package/dist/cibles/web/projet.js +31 -2
- package/dist/cibles/web/theme.js +11 -2
- package/dist/cibles/web/valeurs.js +17 -0
- package/dist/i18n/messages.js +2 -0
- package/dist/lexer/lexer.js +106 -3
- package/dist/navigateur.js +5289 -0
- package/dist/parser/interactions.js +6 -2
- package/dist/parser/langues.js +1 -1
- package/dist/parser/medias.js +6 -1
- package/dist/parser/parser.js +91 -3
- package/dist/parser/theme.js +10 -1
- package/dist/ri/construire.js +27 -1
- package/dist/vocabulaire/table-interactions.js +16 -1
- package/dist/vocabulaire/table.js +4 -4
- package/docs/guide.en.md +183 -2
- package/docs/guide.md +183 -1
- package/llms.txt +14 -1
- package/package.json +4 -2
package/docs/guide.md
CHANGED
|
@@ -93,6 +93,14 @@ Un texte qui s'affiche s'écrit entre guillemets : `titre "Bienvenue"`. Sans
|
|
|
93
93
|
guillemets, c'est un nom de variable : `texte prenom` affiche ce que contient
|
|
94
94
|
la variable `prenom`.
|
|
95
95
|
|
|
96
|
+
Pour mettre un guillemet dans un texte, écris `\"` :
|
|
97
|
+
|
|
98
|
+
```humalis
|
|
99
|
+
page "citation" :
|
|
100
|
+
titre "Une citation"
|
|
101
|
+
texte "Elle a dit \"bonjour\" en entrant."
|
|
102
|
+
```
|
|
103
|
+
|
|
96
104
|
### Les accents sont permis, jamais obligatoires
|
|
97
105
|
|
|
98
106
|
`si age est supérieur ou égal à 18` et `si age est superieur ou egal a 18` se
|
|
@@ -167,6 +175,96 @@ page "carte" :
|
|
|
167
175
|
l'ordre des niveaux, sans en sauter : les lecteurs d'écran s'en servent pour
|
|
168
176
|
parcourir la page.
|
|
169
177
|
|
|
178
|
+
Dans un bloc placé sous un sous-titre, un `soustitre` descend d'un niveau tout
|
|
179
|
+
seul : la carte d'une section devient un niveau 3. Dans une `section`, le premier
|
|
180
|
+
sous-titre est le titre de la section, même rangé dans son propre bloc ; tous les
|
|
181
|
+
autres sous-titres de la section descendent d'un niveau. `avec niveau` reste
|
|
182
|
+
possible pour choisir soi-même.
|
|
183
|
+
|
|
184
|
+
```humalis
|
|
185
|
+
page "accueil" :
|
|
186
|
+
titre "Accueil"
|
|
187
|
+
section :
|
|
188
|
+
soustitre "Nos pages"
|
|
189
|
+
grille :
|
|
190
|
+
bloc :
|
|
191
|
+
soustitre "Exemples"
|
|
192
|
+
texte "Six applications à essayer."
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Dans un `titre`, un `soustitre` ou un `texte`, `{accent "…"}` met quelques mots
|
|
196
|
+
en valeur avec la couleur de marque. Le texte reste lisible normalement par les
|
|
197
|
+
lecteurs d'écran et dans le titre de l'onglet.
|
|
198
|
+
|
|
199
|
+
```humalis
|
|
200
|
+
page "offre" :
|
|
201
|
+
titre "Une offre {accent "simple"}"
|
|
202
|
+
texte "Prix : {accent "gratuit"} pour toujours"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Listes
|
|
206
|
+
|
|
207
|
+
`liste :` crée des puces ; `liste numerotee :` numérote chaque élément. Chaque instruction du bloc devient une entrée.
|
|
208
|
+
|
|
209
|
+
```humalis
|
|
210
|
+
page "guide" :
|
|
211
|
+
liste :
|
|
212
|
+
texte "Installer Node.js"
|
|
213
|
+
texte "Créer le projet"
|
|
214
|
+
liste numerotee :
|
|
215
|
+
texte "Écrire le fichier"
|
|
216
|
+
texte "Compiler"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Code dans une phrase
|
|
220
|
+
|
|
221
|
+
Dans un texte, `{code "…"}` affiche un court morceau de code à chasse fixe.
|
|
222
|
+
|
|
223
|
+
```humalis
|
|
224
|
+
page "guide" :
|
|
225
|
+
texte "Écris {code "titre"} pour donner un titre."
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Bloc de code
|
|
229
|
+
|
|
230
|
+
`code langage :` recopie les lignes indentées sans les interpréter ; le langage est facultatif.
|
|
231
|
+
|
|
232
|
+
```humalis
|
|
233
|
+
page "guide" :
|
|
234
|
+
code humalis :
|
|
235
|
+
page "accueil" :
|
|
236
|
+
titre "Bienvenue"
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
`avec animation frappe` écrit le code lettre par lettre, avec un curseur ;
|
|
240
|
+
`avec animation frappe au defilement` attend que le bloc arrive à l'écran. Le
|
|
241
|
+
vrai code reste en place pendant la frappe (lecteurs d'écran, bouton Copier), et
|
|
242
|
+
il s'affiche tout de suite si la personne a demandé de réduire les animations.
|
|
243
|
+
Sur le téléphone, le code s'affiche entier.
|
|
244
|
+
|
|
245
|
+
```humalis
|
|
246
|
+
page "accueil" :
|
|
247
|
+
code humalis avec animation frappe :
|
|
248
|
+
page "boutique" :
|
|
249
|
+
titre "Nos produits"
|
|
250
|
+
bouton "Commander"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Tableau
|
|
254
|
+
|
|
255
|
+
Un tableau a une légende, des colonnes et des rangées de même largeur. Une traduction peut suivre chaque cellule.
|
|
256
|
+
|
|
257
|
+
```humalis
|
|
258
|
+
langues :
|
|
259
|
+
francais
|
|
260
|
+
anglais
|
|
261
|
+
|
|
262
|
+
page "guide" :
|
|
263
|
+
tableau "Les commandes" en anglais "Commands" :
|
|
264
|
+
colonnes "Commande", "Rôle" en anglais "Role"
|
|
265
|
+
rangee "humalis compile", "produit le projet" en anglais "builds the project"
|
|
266
|
+
```
|
|
267
|
+
|
|
170
268
|
### Image
|
|
171
269
|
|
|
172
270
|
```humalis
|
|
@@ -363,10 +461,35 @@ page "accueil" :
|
|
|
363
461
|
Humalis vérifie le contraste : une couleur de texte trop pâle sur le fond est
|
|
364
462
|
signalée à la compilation.
|
|
365
463
|
|
|
464
|
+
Une police peut être livrée avec le site, sans dépendre d'un service extérieur :
|
|
465
|
+
`police titres "Space Grotesk" depuis "./polices/space-grotesk.woff2"` (fichiers
|
|
466
|
+
`.woff2`, `.woff`, `.ttf` ou `.otf`).
|
|
467
|
+
|
|
468
|
+
Le visiteur peut aussi passer d'un thème à l'autre. `basculer theme` passe au
|
|
469
|
+
thème inverse de celui qu'on voit, et `si theme est sombre :` (ou `clair`)
|
|
470
|
+
réagit au thème affiché :
|
|
471
|
+
|
|
472
|
+
```humalis
|
|
473
|
+
theme :
|
|
474
|
+
mode automatique
|
|
475
|
+
|
|
476
|
+
page "accueil" :
|
|
477
|
+
titre "Accueil"
|
|
478
|
+
bouton "Changer de thème"
|
|
479
|
+
quand l'utilisateur clique sur "Changer de thème" :
|
|
480
|
+
basculer theme
|
|
481
|
+
si theme est sombre :
|
|
482
|
+
texte "Bonne soirée"
|
|
483
|
+
sinon :
|
|
484
|
+
texte "Bonne journée"
|
|
485
|
+
```
|
|
486
|
+
|
|
366
487
|
### L'en-tête et le pied communs
|
|
367
488
|
|
|
368
489
|
`entete :` et `pied :` s'affichent sur toutes les pages. Une page peut s'en
|
|
369
|
-
passer avec `sans entete` ou `sans pied`.
|
|
490
|
+
passer avec `sans entete` ou `sans pied`. Avec un en-tête, Humalis ajoute seul
|
|
491
|
+
un lien « Aller au contenu », caché tant que le clavier ne l'atteint pas : il
|
|
492
|
+
permet de sauter l'en-tête.
|
|
370
493
|
|
|
371
494
|
```humalis
|
|
372
495
|
entete avec colle :
|
|
@@ -452,6 +575,32 @@ page "carte" :
|
|
|
452
575
|
```
|
|
453
576
|
|
|
454
577
|
Dans un `menu`, le lien de la page où l'on est est marqué comme actif.
|
|
578
|
+
Les liens d'un menu passent à la ligne quand la place manque. Un `menu
|
|
579
|
+
vertical :` range ses liens en colonne, sans jamais ouvrir une deuxième colonne :
|
|
580
|
+
un sommaire de hauteur limitée défile. Il se combine avec `repliable`
|
|
581
|
+
(`menu vertical repliable :`).
|
|
582
|
+
|
|
583
|
+
```humalis
|
|
584
|
+
page "guide" :
|
|
585
|
+
titre "Le guide"
|
|
586
|
+
menu vertical :
|
|
587
|
+
lien "Installer" vers "guide"
|
|
588
|
+
lien "Les pages" vers "guide"
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
Un `menu repliable :` se range derrière un bouton burger (nommé « Menu » pour les
|
|
592
|
+
lecteurs d'écran) sur un petit écran (téléphone) ; l'icône devient une croix
|
|
593
|
+
quand le menu est ouvert. Un lien choisi, un toucher à côté ou la touche Échap
|
|
594
|
+
referment le menu. Sur grand écran, il reste ouvert :
|
|
595
|
+
|
|
596
|
+
```humalis
|
|
597
|
+
page "accueil" :
|
|
598
|
+
menu repliable :
|
|
599
|
+
lien "Accueil" vers "accueil"
|
|
600
|
+
lien "La carte" vers "accueil"
|
|
601
|
+
lien "Réserver" vers "accueil"
|
|
602
|
+
titre "Accueil"
|
|
603
|
+
```
|
|
455
604
|
|
|
456
605
|
---
|
|
457
606
|
|
|
@@ -497,6 +646,17 @@ Les animations : `apparition`, `montee`, `agrandissement`. Les effets au
|
|
|
497
646
|
survol : `agrandi`, `leve`. Humalis respecte le réglage « réduire les
|
|
498
647
|
animations » de la personne.
|
|
499
648
|
|
|
649
|
+
Sur un bloc, `et en cascade` fait apparaître ses enfants l'un après l'autre :
|
|
650
|
+
|
|
651
|
+
```humalis
|
|
652
|
+
page "accueil" :
|
|
653
|
+
titre "Nos plats"
|
|
654
|
+
grille avec animation montee au defilement et en cascade :
|
|
655
|
+
texte "Soupe du jour"
|
|
656
|
+
texte "Risotto"
|
|
657
|
+
texte "Tarte aux pommes"
|
|
658
|
+
```
|
|
659
|
+
|
|
500
660
|
---
|
|
501
661
|
|
|
502
662
|
## 9. Les variables et les calculs
|
|
@@ -893,8 +1053,10 @@ Les actions s'écrivent dans un événement.
|
|
|
893
1053
|
| `afficher erreur "…"` | un message d'erreur |
|
|
894
1054
|
| `montrer "nom"`, `cacher "nom"` | fait apparaître ou disparaître un élément |
|
|
895
1055
|
| `changer x par …` | change une variable |
|
|
1056
|
+
| `changer x par champ "Libellé"` | prend la valeur actuelle d'un champ |
|
|
896
1057
|
| `changer texte de "nom" par "…"` | change le texte d'un élément |
|
|
897
1058
|
| `ajouter … à liste`, `retirer … de liste` | modifie une liste |
|
|
1059
|
+
| `ajouter champ "Libellé" à liste` | ajoute la valeur actuelle d'un champ |
|
|
898
1060
|
| `rediriger vers "page"` | va à une page |
|
|
899
1061
|
| `revenir vers "page"` | revient en arrière, ou va à cette page |
|
|
900
1062
|
| `envoyer requete vers "…"` | appelle un serveur (voir [le serveur](#22-relier-les-pages-au-serveur)) |
|
|
@@ -915,6 +1077,22 @@ page "merci" :
|
|
|
915
1077
|
titre "Merci !"
|
|
916
1078
|
```
|
|
917
1079
|
|
|
1080
|
+
Dans une action, `champ "Libellé"` lit ce que la personne a saisi au moment du clic. Un champ nombre donne un nombre, une case à cocher donne vrai ou faux, et les autres champs donnent du texte. Le libellé est celui de la langue de base, même si le champ a une traduction.
|
|
1081
|
+
|
|
1082
|
+
```humalis
|
|
1083
|
+
page "taches" :
|
|
1084
|
+
variable taches = ["Acheter du pain"]
|
|
1085
|
+
variable dernier = ""
|
|
1086
|
+
champ "Nouvelle tâche"
|
|
1087
|
+
bouton "Ajouter"
|
|
1088
|
+
quand l'utilisateur clique sur "Ajouter" :
|
|
1089
|
+
ajouter champ "Nouvelle tâche" à taches
|
|
1090
|
+
changer dernier par champ "Nouvelle tâche"
|
|
1091
|
+
texte "Dernière ajoutée : {dernier}"
|
|
1092
|
+
pour chaque t dans taches :
|
|
1093
|
+
texte t
|
|
1094
|
+
```
|
|
1095
|
+
|
|
918
1096
|
---
|
|
919
1097
|
|
|
920
1098
|
## 16. Les messages, les fenêtres et les questions
|
|
@@ -1534,9 +1712,13 @@ page "catalogue" :
|
|
|
1534
1712
|
```
|
|
1535
1713
|
|
|
1536
1714
|
- `en anglais "…"` donne la version d'un texte.
|
|
1715
|
+
- `sans traduction` garde le même texte dans toutes les langues, pour un nom
|
|
1716
|
+
propre : `lien "GitHub" sans traduction vers "https://github.com"`.
|
|
1537
1717
|
- `traductions anglais :` traduit une seule fois un texte répété.
|
|
1538
1718
|
- `selecteur de langue` affiche le choix de la langue ; `changer langue par
|
|
1539
1719
|
anglais` et `si langue est anglais :` s'utilisent dans les événements.
|
|
1720
|
+
- Le message de `copier` se traduit comme les autres textes :
|
|
1721
|
+
`copier code avec message "Copié" en anglais "Copied"`.
|
|
1540
1722
|
- Humalis signale à la compilation tout texte qui n'a pas sa traduction. Les
|
|
1541
1723
|
messages de Humalis (champ obligatoire, chargement…) suivent la langue.
|
|
1542
1724
|
|
package/llms.txt
CHANGED
|
@@ -5,7 +5,7 @@ Humalis est un langage en français. Un fichier .humalis décrit des pages, des
|
|
|
5
5
|
## Grammaire en une page
|
|
6
6
|
|
|
7
7
|
- Une page commence par `page "nom" :`. Son contenu est indenté de 4 espaces ; chaque bloc ajoute 4 espaces.
|
|
8
|
-
- Les éléments d’écran pris en charge : titre, texte, image, bouton, lien, champ, formulaire, section, bloc, ligne, colonne, grille, sous-titre, fenêtre, menu, icône, badge, avatar, progression, chargement, étoiles, compteur, code QR, onglets, onglet, déroulant, accordéon, carrousel, fil d’Ariane, audio, fichier, carte, marqueur, graphique, série, sélecteur. Leur texte s’écrit entre guillemets.
|
|
8
|
+
- Les éléments d’écran pris en charge : titre, texte, image, bouton, lien, champ, formulaire, section, bloc, ligne, colonne, grille, sous-titre, liste, tableau, fenêtre, menu, icône, badge, avatar, progression, chargement, étoiles, compteur, code QR, onglets, onglet, déroulant, accordéon, carrousel, fil d’Ariane, audio, fichier, carte, marqueur, graphique, série, sélecteur. Leur texte s’écrit entre guillemets.
|
|
9
9
|
- Déclare une valeur avec `variable nom = valeur` ; une condition commence par `si ... :`.
|
|
10
10
|
- Les événements pris en charge : quand, utilisateur, clique, sur, survole, charge, soumis, ecrit, arrête d’écrire, appuie, arrive en bas de, l’ordre de … change. Écris l’événement sous l’élément visé, puis l’action dans son bloc.
|
|
11
11
|
- Les actions prises en charge : afficher, erreur, montrer, cacher, changer, rediriger, ajouter, retirer, envoyer, requête, connecter, déconnecter, revenir, réussite, avertissement, pendant, disparaître, action, après, toutes, copier, partager, confirmer.
|
|
@@ -27,6 +27,15 @@ page "accueil" :
|
|
|
27
27
|
|
|
28
28
|
## Messages d’erreur
|
|
29
29
|
|
|
30
|
+
- Code dans une phrase sans guillemets : code attend un texte entre guillemets
|
|
31
|
+
- Une ligne inconnue dans un tableau : un tableau contient « colonnes » et « rangee »
|
|
32
|
+
- Deux-points après un tableau : deux-points après la légende du tableau
|
|
33
|
+
- Bloc de code dans un événement : un bloc de code se place dans une page
|
|
34
|
+
- Tableau sans légende : un tableau attend une légende
|
|
35
|
+
- Tableau sans colonnes : un tableau attend une ligne « colonnes »
|
|
36
|
+
- Rangée de mauvaise largeur : la rangée a 1 cellules
|
|
37
|
+
- Texte accentué sans guillemets : accent attend un texte entre guillemets
|
|
38
|
+
- Accent hors d’un texte de page : accent s’emploie seulement
|
|
30
39
|
- Un élément sans texte : n'a pas de texte
|
|
31
40
|
- Un libellé sans lettre : ne contient aucune lettre
|
|
32
41
|
- Deux champs de même nom : deux champs du même formulaire
|
|
@@ -224,6 +233,8 @@ page "accueil" :
|
|
|
224
233
|
- Un nom d’ancre qui n’est pas valable : n'est pas valable
|
|
225
234
|
- Deux ancres de même nom : est déjà utilisée dans la page
|
|
226
235
|
- Un lien vers une ancre qui n’existe pas : n'existe pas dans la page « carte »
|
|
236
|
+
- Un lien de l’en-tête ou du pied vers une ancre qui n’existe nulle part : n'existe dans aucune page
|
|
237
|
+
- Une page et un composant qui auraient le même nom : auraient le même nom dans le code produit
|
|
227
238
|
- Une adresse qui peut exécuter du code : est refusée
|
|
228
239
|
- Des paramètres de page sur une adresse externe : n'a pas de paramètres de page
|
|
229
240
|
- « nouvel onglet » sur autre chose qu’un lien : s'applique à un lien
|
|
@@ -257,6 +268,8 @@ page "accueil" :
|
|
|
257
268
|
- Une animation sans nom : il manque le nom de l’animation
|
|
258
269
|
- « duree » ou « delai » sans animation : donne l’attente d’une animation
|
|
259
270
|
- « au defilement » sans animation : « au defilement » suit le nom d’une animation
|
|
271
|
+
- « en cascade » sur un simple élément : il s’écrit sur un bloc
|
|
272
|
+
- Un texte traduit et « sans traduction » : gardez l’un ou l’autre
|
|
260
273
|
- Une animation sur un champ : pas d’animation sur un champ
|
|
261
274
|
- Trop d’éléments animés au défilement : trop de mouvement
|
|
262
275
|
- Une image sans description : décrivez l’image pour les personnes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humalis",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Un seul langage, en français, pour créer une application complète : web, mobile, desktop et serveur",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"node": ">=24"
|
|
23
23
|
},
|
|
24
24
|
"scripts": {
|
|
25
|
-
"build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc",
|
|
25
|
+
"build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc && rolldown dist/navigateur.js --format esm --minify --file dist/navigateur.js",
|
|
26
26
|
"test": "vitest run",
|
|
27
27
|
"typecheck": "tsc --noEmit",
|
|
28
28
|
"essai:web": "node scripts/essai-web.mjs",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"essai:desktop": "node scripts/essai-desktop.mjs",
|
|
41
41
|
"essai:formulaire": "node scripts/essai-formulaire.mjs",
|
|
42
42
|
"essai:vitrine": "node scripts/essai-vitrine.mjs",
|
|
43
|
+
"site:doc": "node scripts/doc-site.mjs",
|
|
43
44
|
"llms": "node --disable-warning=ExperimentalWarning --experimental-loader ./scripts/charger-typescript.mjs scripts/generer-llms.mjs",
|
|
44
45
|
"essai:medias": "node scripts/essai-medias.mjs",
|
|
45
46
|
"essai:interactions": "node scripts/essai-interactions.mjs",
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
},
|
|
75
76
|
"devDependencies": {
|
|
76
77
|
"@types/node": "^26.2.0",
|
|
78
|
+
"rolldown": "1.2.4",
|
|
77
79
|
"typescript": "^7.0.2",
|
|
78
80
|
"vitest": "^4.1.10"
|
|
79
81
|
}
|