DéveloppeursDocsFournisseurs
Yeria
Documentation

ReaderView

Contenu long : paragraphes, images, listes, tableaux, code.

Description

Le composant ReaderView sert à afficher des contenus riches et structurés destinés à la lecture. Il prend en charge différents éléments de contenu : paragraphes, images, contenu Markdown, listes, liens, tableaux, blocs de code, citations et éléments personnalisés. Tout le contenu HTML est assaini afin de prévenir les attaques XSS.

Description des champs

idstringrequis
Identifiant unique de la vue de lecture
typestringrequis
Toujours "Reader"
contentReaderContentrequis
Objet de contenu de la vue de lecture
content.titlestringrequis
Titre de la vue de lecture
content.introstringoptionnel
Texte d'introduction affiché avant les éléments
content.elementsReaderElement[]requis
Tableau des éléments de contenu (au moins un élément requis)
content.elements[].typestringrequis
Type d'élément : "paragraph", "subtitle", "image", "markdown", "list", "link", "table", "code", "quote", "separator", "custom"
content.elements[].textstringrequis*
Contenu textuel (pour paragraph, subtitle)
content.elements[].urlstringrequis*
URL (pour image, link)
content.elements[].altstringoptionnel
Texte alternatif des images
content.elements[].captionstringoptionnel
Légende des images
content.elements[].pagesMarkdownPage[]requis*
Pages Markdown (pour le type markdown)
content.elements[].pages[].contentstringrequis
Contenu HTML assaini
content.elements[].pages[].rawstringrequis
Texte Markdown d'origine
content.elements[].pages[].sanitizedbooleanrequis
Indique si le contenu a été assaini
content.elements[].itemsstring[]requis*
Éléments de la liste (pour le type list)
content.elements[].orderedbooleanoptionnel
Indique si la liste est ordonnée (valeur par défaut : false)
content.elements[].descriptionstringoptionnel
Description associée aux liens
content.elements[].headersstring[]requis*
En-têtes du tableau (pour le type table)
content.elements[].rowsstring[][]requis*
Lignes du tableau (pour le type table)
content.elements[].codestringrequis*
Contenu du code (pour le type code)
content.elements[].languagestringoptionnel
Langage de programmation des blocs de code
content.elements[].authorstringoptionnel
Auteur de la citation
content.elements[].sourcestringoptionnel
Source de la citation
content.elements[].kindstringrequis*
Nature de l'élément personnalisé (pour le type custom)
content.elements[].dataRecord<string, unknown>requis*
Données de l'élément personnalisé (pour le type custom)
processIdstringoptionnel
Identifiant de processus pour les parcours en plusieurs étapes
metadataobjectoptionnel
Métadonnées de la vue (version, createdAt, author, tags)

Méthodes

setIntro(intro)this
Définit le texte d'introduction affiché avant les éléments
  • intro - Texte d'introduction
addParagraph(text)this
Ajoute un élément de type paragraphe
  • text - Texte du paragraphe
addSubTitle(text)this
Ajoute un élément de type sous-titre
  • text - Texte du sous-titre
addImage(url, alt?, caption?)this
Ajoute un élément de type image
  • url - URL de l'image
  • alt - Texte alternatif
  • caption - Légende de l'image
addMarkdown(markdownText, options?)this
Ajoute du contenu Markdown (assaini par défaut)
  • markdownText - Contenu Markdown
  • options - Options (sanitize)
addListField(items, ordered?)this
Ajoute un élément de type liste, ordonnée ou non
  • items - Tableau de chaînes
  • ordered - Indicateur de liste ordonnée
addLink(url, text, description?)this
Ajoute un élément de type lien
  • url - URL du lien
  • text - Texte du lien
  • description - Description optionnelle
addTable(headers, rows)this
Ajoute un élément de type tableau
  • headers - Tableau des en-têtes
  • rows - Tableau des lignes
addCodeBlock(code, language?)this
Ajoute un élément de type bloc de code
  • code - Contenu du code
  • language - Langage de programmation
addQuote(text, author?, source?)this
Ajoute un élément de type citation
  • text - Texte de la citation
  • author - Auteur de la citation
  • source - Source de la citation
addSeparator()this
Ajoute un élément de type séparateur
addCustomElement(type, data)this
Ajoute un élément personnalisé
  • type - Type d'élément
  • data - Objet de données de l'élément
getElementsByType(type)ReaderElement[]
Retourne tous les éléments d'un type donné
  • type - Type d'élément
removeElement(index)boolean
Supprime un élément à partir de son indice
  • index - Indice de l'élément
insertElement(index, element)boolean
Insère un élément à un indice donné
  • index - Position d'insertion
  • element - ReaderElement
serve()Record<string, unknown>
Sert la vue après validation (hérité de BaseView)
toJSON()Record<string, unknown>
Retourne la représentation JSON (hérité de BaseView)
setState(key, value)void
Définit l'état de la vue (hérité de BaseView)
  • key - Clé d'état
  • value - Valeur d'état
getState(key)unknown
Retourne l'état de la vue (hérité de BaseView)
  • key - Clé d'état
setNext(url)this
Définit la navigation vers la vue suivante (hérité de BaseView)
  • url - URL de la vue suivante
setPrev(url)this
Définit la navigation vers la vue précédente (hérité de BaseView)
  • url - URL de la vue précédente
setProcess(processId, context?)this
Définit le contexte de processus (hérité de BaseView)
  • processId - Identifiant du processus
  • context - Contexte du processus

Exemples de code JavaScript

Vue de lecture simple

javascript
1import { YeriaApp } from '@numerum-tech/yeriasdk';
2
3const yeriaApp = new YeriaApp({ appId: 'my-app' });
4
5const reader = yeriaApp
6    .createReaderView('welcome', 'Welcome to Our App')
7    .setIntro('Discover our key features')
8    .addParagraph('YeriaApp allows you to generate dynamic screens from the backend.')
9    .addSubTitle('Key Features')
10    .addListField([
11        'Dynamic forms with validation',
12        'Rich reading views',
13        'Ed25519 signatures for integrity'
14    ]);
15
16const response = yeriaApp.serve(reader);

Vue de lecture avec images

javascript
1const reader = yeriaApp
2    .createReaderView('product-info', 'Product Information')
3    .setIntro('Learn about our featured product')
4    .addImage('https://example.com/product.jpg', 'Product Image', 'Our featured product')
5    .addParagraph('This product features advanced technology and modern design.')
6    .addSubTitle('Specifications')
7    .addListField([
8        'High-performance processor',
9        'Long battery life',
10        'Modern design'
11    ], true);

Vue de lecture avec Markdown

javascript
1const reader = yeriaApp
2    .createReaderView('article', 'Article Title')
3    .setIntro('Read our latest article')
4    .addMarkdown(`
5# Introduction
6
7This is a **markdown** article with *formatting*.
8
9## Features
10
11- Feature 1
12- Feature 2
13- Feature 3
14
15[Learn more](https://example.com)
16    `, { sanitize: true });

Vue de lecture avec tableau

javascript
1const reader = yeriaApp
2    .createReaderView('pricing', 'Pricing Plans')
3    .setIntro('Choose the plan that fits your needs')
4    .addTable(
5        ['Plan', 'Price', 'Features'],
6        [
7            ['Basic', '$9/month', '5 projects'],
8            ['Pro', '$29/month', 'Unlimited projects'],
9            ['Enterprise', 'Custom', 'Custom features']
10        ]
11    );

Vue de lecture avec bloc de code

javascript
1const reader = yeriaApp
2    .createReaderView('tutorial', 'Code Tutorial')
3    .setIntro('Learn how to use our API')
4    .addCodeBlock(
5        `function greet(name) {
6    return \`Hello, \${name}!\`;
7}`,
8        'javascript'
9    )
10    .addParagraph('This function greets a user by name.');

Vue de lecture avec citation

javascript
1const reader = yeriaApp
2    .createReaderView('testimonial', 'Customer Testimonial')
3    .setIntro('What our customers say')
4    .addQuote(
5        'This product has transformed how we work.',
6        'John Doe',
7        'CEO, Company Inc.'
8    );
javascript
1const reader = yeriaApp
2    .createReaderView('resources', 'Helpful Resources')
3    .setIntro('External resources you might find useful')
4    .addLink('https://example.com/docs', 'Documentation', 'Complete API documentation')
5    .addLink('https://example.com/support', 'Support', 'Get help from our team')
6    .addSeparator()
7    .addParagraph('For more information, contact us.');

Vue de lecture avec éléments personnalisés

javascript
1const reader = yeriaApp
2    .createReaderView('custom-content', 'Custom Content')
3    .setIntro('Custom content display')
4    .addCustomElement('chart', {
5        type: 'bar',
6        data: [10, 20, 30, 40],
7        labels: ['Q1', 'Q2', 'Q3', 'Q4']
8    })
9    .addCustomElement('widget', {
10        widgetId: 'weather',
11        location: 'Paris'
12    });

Vue de lecture complexe

javascript
1const reader = yeriaApp
2    .createReaderView('guide', 'User Guide')
3    .setIntro('Welcome to our comprehensive guide')
4    .addSubTitle('Getting Started')
5    .addParagraph('Follow these steps to get started.')
6    .addListField([
7        'Create an account',
8        'Verify your email',
9        'Complete your profile'
10    ])
11    .addSeparator()
12    .addSubTitle('Advanced Features')
13    .addMarkdown(`
14### Feature 1
15
16Description of feature 1.
17
18### Feature 2
19
20Description of feature 2.
21    `)
22    .addImage('https://example.com/diagram.png', 'Architecture Diagram')
23    .addSeparator()
24    .addLink('https://example.com/contact', 'Need Help?', 'Contact our support team');

Exemple JSON complet

json
1{
2  "id": "user-guide",
3  "type": "Reader",
4  "content": {
5    "title": "User Guide",
6    "intro": "Welcome to our comprehensive guide",
7    "elements": [
8      {
9        "type": "subtitle",
10        "text": "Getting Started"
11      },
12      {
13        "type": "paragraph",
14        "text": "Follow these steps to get started with our application."
15      },
16      {
17        "type": "list",
18        "items": [
19          "Create an account",
20          "Verify your email",
21          "Complete your profile",
22          "Start using the app"
23        ],
24        "ordered": false
25      },
26      {
27        "type": "separator"
28      },
29      {
30        "type": "subtitle",
31        "text": "Advanced Features"
32      },
33      {
34        "type": "markdown",
35        "content": "### Feature 1\n\nDescription of feature 1.\n\n### Feature 2\n\nDescription of feature 2."
36      },
37      {
38        "type": "image",
39        "src": "https://example.com/diagram.png",
40        "alt": "Architecture Diagram",
41        "caption": "System Architecture"
42      },
43      {
44        "type": "table",
45        "headers": ["Feature", "Status", "Version"],
46        "rows": [
47          ["Feature A", "Active", "1.0"],
48          ["Feature B", "Beta", "0.9"],
49          ["Feature C", "Planned", "TBD"]
50        ]
51      },
52      {
53        "type": "code",
54        "language": "javascript",
55        "code": "function example() {\n  return 'Hello World';\n}"
56      },
57      {
58        "type": "quote",
59        "text": "This is an important quote",
60        "author": "John Doe"
61      },
62      {
63        "type": "link",
64        "href": "https://example.com/contact",
65        "text": "Need Help?",
66        "description": "Contact our support team"
67      }
68    ]
69  },
70  "metadata": {
71    "version": "1.0.0",
72    "createdAt": "2025-01-28T10:00:00.000Z"
73  }
74}