@lystech/sections 0.4.6 → 0.5.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 +36 -0
- package/dist/SectionsProvider.d.ts +19 -0
- package/dist/SignatureLystech.d.ts +9 -2
- package/dist/constantes.d.ts +14 -0
- package/dist/editeur/TexteEnPlace.d.ts +6 -1
- package/dist/editeur.js +453 -446
- package/dist/index.d.ts +1 -0
- package/dist/index.js +179 -158
- package/dist/jeton.d.ts +14 -0
- package/dist/morceaux/constantes-BPZxUYge.js +19 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -93,6 +93,42 @@ si la personne est administratrice : un lien qui fuite ne peut pas ouvrir la
|
|
|
93
93
|
console. Le droit est relu dans les rôles à chaque requête, donc retirer un
|
|
94
94
|
accès ferme les jetons déjà émis sur-le-champ.
|
|
95
95
|
|
|
96
|
+
### Des gestes propres au site : `appelEdition`
|
|
97
|
+
|
|
98
|
+
Un site peut offrir, à la personne connectée, des gestes que l'éditeur
|
|
99
|
+
générique ne connaît pas — retirer un résultat, masquer un évènement. Le
|
|
100
|
+
contexte fournit un appel qui porte le jeton, sans jamais en livrer la valeur :
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
const ctx = useSectionsContext();
|
|
104
|
+
if (ctx?.modeEdition) {
|
|
105
|
+
const r = await ctx.appelEdition("/results/site/droits");
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Seuls les chemins de l'API sont acceptés. Un `401` fait sortir du mode édition
|
|
110
|
+
(jeton expiré) ; un `403` revient tel quel. C'est la ROUTE qui décide de ce que
|
|
111
|
+
le jeton ouvre : plafonné à l'éditeur partout, il n'obtient plus qu'en de rares
|
|
112
|
+
routes qui le disent explicitement (ex. `/results/site`, admins seulement).
|
|
113
|
+
|
|
114
|
+
### Des boutons qui restent des boutons
|
|
115
|
+
|
|
116
|
+
En mode « modifier », cliquer un texte le corrige au lieu de l'actionner — mais
|
|
117
|
+
seulement un texte qui a un bloc déclaré où s'enregistrer. Pour qu'une zone
|
|
118
|
+
reste actionnable quoi qu'il arrive (une suppression et sa confirmation), posez
|
|
119
|
+
`CLASSE_HORS_EDITION` dessus — et sur `rootClassName` des fenêtres surgissantes,
|
|
120
|
+
qui se rendent hors de l'arbre :
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
<section className={CLASSE_HORS_EDITION}>…</section>
|
|
124
|
+
<Popconfirm rootClassName={CLASSE_HORS_EDITION} …>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Un site qui signe déjà
|
|
128
|
+
|
|
129
|
+
`<SignatureLystech mention={null} />` ne garde que le bouton « Connexion » —
|
|
130
|
+
pour un pied de page qui porte déjà sa propre mention de Lystech.
|
|
131
|
+
|
|
96
132
|
## Sites prérendus
|
|
97
133
|
|
|
98
134
|
Un site généré au build affiche les replis du code dans son HTML, puis bascule
|
|
@@ -35,6 +35,25 @@ type Contexte = {
|
|
|
35
35
|
* marchait.
|
|
36
36
|
*/
|
|
37
37
|
declarerRepli: (blockType: string, defaut: unknown) => void;
|
|
38
|
+
/**
|
|
39
|
+
* APPELER L'API LYSTECH AU NOM DE LA PERSONNE CONNECTÉE.
|
|
40
|
+
*
|
|
41
|
+
* Pour les gestes propres à un site — retirer un résultat, masquer un
|
|
42
|
+
* évènement — que l'éditeur générique ne connaît pas. Le site ne reçoit
|
|
43
|
+
* jamais la valeur du jeton : il obtient un appel qui le porte, et c'est
|
|
44
|
+
* le paquet qui décide où il part. Seuls les chemins de l'API sont
|
|
45
|
+
* acceptés (« /results/site/droits ») : collé à `apiBaseUrl`, un chemin ne
|
|
46
|
+
* peut pas changer de serveur.
|
|
47
|
+
*
|
|
48
|
+
* Le serveur reste seul juge de ce que le jeton autorise : ce que l'appel
|
|
49
|
+
* ouvre, c'est ce que la route accepte pour cette personne, pas plus.
|
|
50
|
+
*
|
|
51
|
+
* Un 401 veut dire que le jeton ne vaut plus rien : on sort du mode
|
|
52
|
+
* édition, comme l'éditeur le fait pour ses propres appels. Un 403, lui,
|
|
53
|
+
* est une réponse normale (« pas pour vous ») et revient telle quelle.
|
|
54
|
+
* Hors mode édition, l'appel échoue sans rien envoyer.
|
|
55
|
+
*/
|
|
56
|
+
appelEdition: (chemin: string, init?: RequestInit) => Promise<Response>;
|
|
38
57
|
};
|
|
39
58
|
export declare function SectionsProvider({ site, page, langue, apiBaseUrl, sectionsInitiales, sourceTexte, pagesPartagees, children, }: {
|
|
40
59
|
/** Sous-domaine de l'organisation (ex. « armoise »). */
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
export declare function SignatureLystech({ site, apiBaseUrl, className, mention, connexion, methodes, }: {
|
|
2
3
|
/** Sous-domaine de l'organisation. Pris du fournisseur si omis. */
|
|
3
4
|
site?: string | undefined;
|
|
4
5
|
apiBaseUrl?: string | undefined;
|
|
5
6
|
className?: string | undefined;
|
|
6
|
-
/**
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Les mots de la mention, si le site en préfère d'autres.
|
|
9
|
+
*
|
|
10
|
+
* `null` la retire : pour un site qui signe déjà à sa façon (un logo, une
|
|
11
|
+
* phrase à lui), il ne reste que « Connexion » — deux liens vers Lystech
|
|
12
|
+
* côte à côte, c'est un de trop.
|
|
13
|
+
*/
|
|
14
|
+
mention?: ReactNode | undefined;
|
|
8
15
|
connexion?: string | undefined;
|
|
9
16
|
/**
|
|
10
17
|
* Les facons de se connecter proposees a la personne qui edite.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LA ZONE QUE L'ÉDITION EN PLACE NE TOUCHE PAS.
|
|
3
|
+
*
|
|
4
|
+
* En mode « modifier », un clic sur un texte du site le corrige au lieu de
|
|
5
|
+
* l'actionner. C'est voulu pour un titre ou un lien de menu ; c'est une panne
|
|
6
|
+
* pour un bouton qui doit AGIR même en mode édition — une suppression, sa
|
|
7
|
+
* confirmation. Un élément portant cette classe (ou dans un parent qui la
|
|
8
|
+
* porte) n'est jamais repéré : ses clics passent.
|
|
9
|
+
*
|
|
10
|
+
* Une classe plutôt qu'un attribut : les fenêtres surgissantes des
|
|
11
|
+
* bibliothèques (antd, etc.) se rendent hors de l'arbre, et n'acceptent en
|
|
12
|
+
* général qu'un nom de classe (`rootClassName`).
|
|
13
|
+
*/
|
|
14
|
+
export declare const CLASSE_HORS_EDITION = "lystech-hors-edition";
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { SourceTexte } from '../sourceTexte';
|
|
2
|
-
export declare function TexteEnPlace({ source, actif, surModification, }: {
|
|
2
|
+
export declare function TexteEnPlace({ source, actif, modifiable, surModification, }: {
|
|
3
3
|
source: SourceTexte;
|
|
4
4
|
/** Faux pendant qu'un panneau est ouvert : on ne veut pas deux modes. */
|
|
5
5
|
actif: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Ce texte a-t-il un bloc où s'enregistrer ? Change quand le catalogue
|
|
8
|
+
* arrive : avant lui, rien n'est repéré — c'est le bon défaut.
|
|
9
|
+
*/
|
|
10
|
+
modifiable: (ns: string, chemin: string) => boolean;
|
|
6
11
|
surModification: (ns: string, chemin: string, langue: string, valeur: string) => void | Promise<void>;
|
|
7
12
|
}): import("react").JSX.Element | null;
|