Skip to content

Options de rendu ​

Conventions des exemples de cette page

Pour ne pas répéter la même amorce partout, les exemples qui suivent supposent ce décor. Chaque bloc ne montre donc que ce qu'il démontre.

ts
import { loadReqIfPackage, ReqIfIndex } from "reqif-preview";

// Les octets de votre fichier .reqif ou .reqifz.
// Voir [Démarrage](/fr/guide/demarrage) pour les obtenir depuis un <input type="file">,
// depuis Node ou depuis une URL.
declare const bytes: Uint8Array;

const pkg = await loadReqIfPackage(bytes);
const doc = pkg.document; // le premier document du paquet

// pkg.documents, pas pkg.document : c'est ce qui résout les relations qui
// traversent la frontière entre deux .reqif d'un même .reqifz.
const index = new ReqIfIndex(pkg.documents);

const spec = doc.coreContent.specifications[0];
const obj = index.specObjects.get(spec.children[0].objectRef)!;

RenderOptions ​

Le même objet est accepté par renderPackageToHtml, renderDocumentToHtml et renderSpecification. Toutes les propriétés sont facultatives.

Présentation ​

OptionTypeDéfautEffet
includeCssbooleantrueInclut la feuille de style par défaut dans un <style> en tête de la sortie. Si false, chargez-la via reqif-preview/style.css ou l'export DEFAULT_CSS — voir Feuille de style.
layout"stacked" | "tabs""stacked"Onglets CSS entre documents et entre spécifications. Sans effet s'il n'y en a qu'un. Détails
readingModebooleanfalseVue de lecture : masque ID, créé/modifié et panneau technique ; titres en <h3>…<h6>.
chapterNumbersbooleanfalsePréfixe les titres de 1, 1.1, 1.1.1… en repartant à 1 par Specification.
chapterNumberAttributesstring[]—Ne numérote que les nœuds portant l'un de ces attributs. Sans effet sans chapterNumbers.
labelsPartial<RenderLabels>anglaisRemplace les libellés d'interface.
dateLocalestring"en-GB"Locale de formatage des dates créé/modifié.

Contenu ​

OptionTypeDéfautEffet
contentAttributesstring[]—Liste blanche stricte des attributs formant le contenu principal, dans cet ordre. Détails
titleAttributesstring[]—Attributs essayés comme titre en dernier recours, après les LONG-NAME.
showTechnicalByDefaultbooleanfalseOuvre le panneau « Détails techniques » d'entrée.
hideEmptyAttributesbooleantrueOmet du panneau technique les attributs sans aucune valeur.
preferSimplifiedXhtmlbooleanfalseAffiche la version simplifiée plutôt que l'original. Détails
showRelationsbooleantrueAffiche les liens entrants/sortants. Visible aussi en readingMode.
customAttributeRenderersCustomAttributeRenderer[]—Injecte votre propre HTML avant/après le contenu.

Placeholders « (sans titre) » / « (vide) » ​

OptionTypeEffet
suppressEmptyPlaceholdersForChaptersbooleanRaccourci pour les objets « chapitres ». Sans effet sans chapterNumberAttributes.
isTitleless(obj, specType, index) => booleanDécide, par vos critères, qu'un titre vide est normal pour cet objet.
isContentless(obj, specType, index) => booleanIdem pour un contenu vide. Indépendant du précédent.

Les trois se composent : la suppression a lieu si l'un dit oui. Voir Titre et contenu affichés.

Pièces jointes et diagnostics ​

OptionTypeDéfautEffet
attachmentsAttachmentResolvercelui du paquetRemplace le résolveur. Détails
maxInlineBytesnumber5 * 1024 * 1024Taille maximale intégrée en data: URI, par fichier.
onDegradationDegradationHandler—Observe tout ce que le rendu dégrade silencieusement. Détails

RenderLabels ​

Tous les libellés d'interface, en anglais par défaut. labels accepte un objet partiel — seuls les libellés fournis sont remplacés.

ts
interface RenderLabels {
  noContent: string;              // "(vide)"
  untitled: string;               // "(sans titre)"
  idLabel: string;
  technicalDetails: string;       // "Détails techniques"
  headerTitle: string;
  headerSourceTool: string;
  headerExportedBy: string;
  headerCreationTime: string;
  headerComment: string;
  yes: string;
  no: string;
  createdByLabel: string;
  createdOnLabel: string;
  modifiedByLabel: string;
  modifiedOnLabel: string;
  relationsLabel: string;         // "Liens"
  relationFallbackType: string;
  relationUnresolved: string;
}

FRENCH_LABELS ​

ts
const FRENCH_LABELS: RenderLabels;

Le jeu complet que la bibliothèque livrait par défaut jusqu'à la 0.2.0, pour que le rendu précédent soit à une ligne plutôt qu'à dix-huit :

ts
import { FRENCH_LABELS } from "reqif-preview";

const html = await renderPackageToHtml(pkg, {
  labels: FRENCH_LABELS,
  dateLocale: "fr-FR",
});

Toute autre langue suit la même forme — labels est partiel, ne fournissez que ce qu'il vous faut.

CustomAttributeRenderer ​

ts
interface CustomAttributeRenderer {
  attribute: string;                    // nom long (insensible casse/espaces) ou identifiant
  position?: "before" | "after";        // défaut : "before"
  render(value: AttributeValue | undefined, ctx: AttributeRenderContext): RenderOutput;
  hideFromTechnical?: boolean;          // défaut : false
}

Deux filets de sécurité : une exception dans render() est interceptée (custom-renderer-threw), et un dangerouslyRawHtml mal fermé est affiché en texte échappé (custom-renderer-unbalanced-html) plutôt que de casser la structure de tout ce qui suit. Voir Rendus personnalisés.

RenderOutput, RenderNode, RenderElement, RenderRawHtml ​

Ce qu'un rendu retourne. Le texte est échappé par défaut ; le balisage brut se demande explicitement.

ts
type RenderNode = string | RenderElement | RenderRawHtml;

interface RenderElement {
  tag: string;                      // liste blanche, sinon déballé (unwrapped-tag)
  attrs?: Record<string, string>;   // liste blanche, valeurs échappées
  children?: RenderNode[];          // une chaîne y est du texte
}

interface RenderRawHtml {
  dangerouslyRawHtml: string;       // inséré tel quel — à vous de l'échapper
}

type RenderOutput = RenderElement | RenderRawHtml | RenderNode[] | undefined;
Autorisé
Balisesspan div p a code strong b em i small br img ul ol li
Attributsclass id title lang dir, plus href / src via le filtre de schéma d'URL

style est délibérément absent — la présentation va dans votre feuille de style. Une chaîne nue n'est pas acceptée au premier niveau : sous l'API précédente elle voulait dire du HTML brut, donc l'accepter changerait silencieusement ce que produisent les rendus existants. Depuis du JavaScript sans types, elle est échappée, avec custom-renderer-raw-string.

AttributeRenderContext ​

ts
interface AttributeRenderContext {
  specObject: SpecObject;
  specType: SpecType | undefined;
  index: ReqIfIndex;
  attachments: AttachmentLookup;
  isChapter: boolean;
  getValue(attributeNameOrId: string): AttributeValue | undefined;
  getDefinition(attributeNameOrId: string): AttributeDefinition | undefined;
  formatValue(value: AttributeValue | undefined): string;
}

formatValue réutilise exactement le formatage du panneau technique : libellés d'énumération résolus, XHTML assaini, booléens selon labels.yes/labels.no. C'est le moyen le plus court d'afficher une valeur « comme la bibliothèque le ferait » sans réimplémenter la logique de type.

Publié sous licence MIT. Conforme à OMG ReqIF v1.2 (formal/2016-07-01).