Documentation
Parcourir la documentation

DocumentationRéférence

Éléments et attributs

La vue d’un widget PlayerVox OverCrow se compose d’un jeu fermé d’éléments. Cette page liste chacun d’eux avec son contenu, ses attributs et les événements qu’il peut envoyer. La vue explique le balisage qui les entoure : expressions, if, for, composants.

OCMLtemplates/chart/view.ocml
<box class="panel">
  <box class="header">
    <text class="title">{t("title")}</text>
    <text class="value">{latest(state.values)}</text>
  </box>
  <chart class="plot" kind="area" min="0" max="100">
    <series class="series" values={state.values}/>
  </chart>
</box>

Deux conteneurs box, deux éléments text liés à l’état et un chart doté d’une series : PlayerVox OverCrow dessine le tout, graphique compris.

Lire la fiche d’un élément

  • Contenu : ce que l’élément peut contenir. Les éléments de bloc sont tous les éléments qui peuvent figurer seuls dans un conteneur (tous sauf span, option et series) ; en ligne désigne le contenu d’un text ; texte, du texte brut ; vide signifie que l’élément s’écrit <name …/>.
  • Parents : où l’élément peut se trouver ; tout conteneur désigne n’importe quel conteneur.
  • Focus clavier : toujours pour les contrôles ; quand un événement est écouté pour un élément qui ne prend le focus que si la vue écoute l’un de ses événements (on:activate…) ; jamais sinon.
  • Rôle : la nature de l’élément, telle qu’elle est annoncée aux technologies d’assistance.
  • Événements : les événements que la vue peut écouter avec on:<event>.

Un type tel que « texte ≤ 256 octets » donne une limite.

Attributs communs à tous les éléments

AttributTypeObligatoireSignification
classliste de classesnonClasses de style : des noms distincts, séparés par une espace.
refnom de ref statiquenonNom par lequel draw désigne ce canvas et par lequel un attribut tel que anchor d’un popover désigne cet élément. Statique, unique dans la vue, et interdit dans un for ou dans le corps d’un composant, où il nommerait plusieurs éléments.
labeltexte ≤ 256 octetsnonNom accessible ; obligatoire sur les contrôles qui ne montrent qu’une icône.
tooltiptexte ≤ 256 octetsnonTexte brut que l’hôte affiche au survol ou au focus.
onnoms d’événements triésnonÉvénements transmis à la logique ; s’écrit on:<event> dans la vue.

Éléments

box

Conteneur générique ; la mise en page flex ou grid vient du style. La racine de la vue est un box.

ContenuParentsFocus clavierRôleÉvénements
éléments de bloctout conteneurquand un événement est écoutégroupactivate, contextmenu, wheel, keydown, focus, blur

Aucun attribut propre.

scroll

Conteneur qui rogne son contenu et que l’hôte fait défiler à la molette, par glissement et au clavier.

ContenuParentsFocus clavierRôleÉvénements
éléments de bloctout conteneurjamaisscroll-viewreachend, stick, contextmenu
AttributTypeObligatoireSignification
axisvertical | horizontalnonSens du défilement ; vertical par défaut.
stick-to-endbooléennonReste à la fin tant que le contenu grandit, jusqu’à ce que l’utilisateur fasse défiler ailleurs (chat). Le remettre après l’avoir retiré fait défiler jusqu’à la fin.

list

Liste à défilement vertical dont les enfants ne sont mis en page et peints que lorsqu’ils sont visibles.

ContenuParentsFocus clavierRôleÉvénements
éléments de bloctout conteneurjamaislistreachend, stick, contextmenu
AttributTypeObligatoireSignification
stick-to-endbooléennonComme pour scroll.
item-heightentier de 1 à 4096nonHauteur estimée d’un enfant, utilisée tant qu’il n’a pas été mesuré.

text

Bloc de texte avec retour à la ligne ; ses enfants en ligne suivent le texte (une ligne de chat avec des emotes).

ContenuParentsFocus clavierRôleÉvénements
en ligne : span, icon, imagetout conteneurquand un événement est écoutélabelactivate, contextmenu, wheel, keydown, focus, blur
AttributTypeObligatoireSignification
selectablebooléennonL’utilisateur peut sélectionner le texte et le copier par l’hôte ; aucune permission du widget n’intervient.

span

Portion de texte stylée à l’intérieur d’un text.

ContenuParentsFocus clavierRôleÉvénements
textetextjamaislabelaucun
AttributTypeObligatoireSignification
color#rrggbb opaquenonCouleur issue des données, comme celle de l’auteur d’un message de chat ; elle remplace la couleur du style, et l’hôte en relève le contraste à 4,5:1 au moins par rapport au panneau.

icon

Icône Lucide teintée par color, dimensionnée par font-size sauf si width et height sont définis.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutéimageactivate, contextmenu, wheel, keydown, focus, blur
AttributTypeObligatoireSignification
namenom d’icône LucideouiNom de l’icône, par exemple circle-check.

image

Image matricielle du paquet, ou image remise par un service (identifiant asset:) ; object-fit s’applique.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutéimageactivate, contextmenu, wheel, keydown, focus, blur
AttributTypeObligatoireSignification
srcsource d’imageouiSource de l’image.

avatar

Image ronde, avec un texte de remplacement tant que l’image manque ou n’a pas pu être chargée.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutéimageactivate, contextmenu, wheel, keydown, focus, blur
AttributTypeObligatoireSignification
srcsource d’imagenonSource de l’image.
initialstexte ≤ 16 octetsnonTexte de remplacement.

badge

Courte pastille de texte.

ContenuParentsFocus clavierRôleÉvénements
textetout conteneurquand un événement est écoutélabelactivate, contextmenu, wheel

Aucun attribut propre.

button

Contrôle activable ; ses enfants (icône, texte) forment son contenu.

ContenuParentsFocus clavierRôleÉvénements
éléments de bloctout conteneurtoujoursbuttonactivate, contextmenu, wheel, keydown, focus, blur
AttributTypeObligatoireSignification
disabledbooléennonRefuse les entrées ; correspond à :disabled.
submitbooléennonValide le form qui le contient.

toggle

Bascule activé/désactivé.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurtoujoursswitchchange, focus, blur, contextmenu
AttributTypeObligatoireSignification
checkedbooléennonÉtat ; correspond à :checked.
disabledbooléennonRefuse les entrées ; correspond à :disabled.
nameidentifiant ≤ 64 octetsnonNom du champ dans un form.

checkbox

Case à cocher (listes de tâches).

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurtoujourscheck-boxchange, focus, blur, contextmenu
AttributTypeObligatoireSignification
checkedbooléennonÉtat ; correspond à :checked.
disabledbooléennonRefuse les entrées ; correspond à :disabled.
nameidentifiant ≤ 64 octetsnonNom du champ dans un form.

slider

Curseur sur un intervalle numérique ; le glissement est géré par l’hôte.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurtoujourssliderinput, change, focus, blur, contextmenu
AttributTypeObligatoireSignification
minnombre de -1000000000 à 1000000000ouiBorne inférieure.
maxnombre de -1000000000 à 1000000000ouiBorne supérieure, plus grande que min.
stepnombre de -1000000000 à 1000000000nonPas, positif ; 1 par défaut.
valuenombre de -1000000000 à 1000000000nonValeur courante, ramenée dans l’intervalle ; refusée sur un curseur lié à un intent d’écriture.
disabledbooléennonRefuse les entrées ; correspond à :disabled.
nameidentifiant ≤ 64 octetsnonNom du champ dans un form.

select

Liste déroulante ; la liste ouverte est dessinée par l’hôte.

ContenuParentsFocus clavierRôleÉvénements
optiontout conteneurtoujourscombo-boxchange, focus, blur, contextmenu
AttributTypeObligatoireSignification
valuetexte ≤ 1 KiononValeur de l’option sélectionnée.
disabledbooléennonRefuse les entrées ; correspond à :disabled.
nameidentifiant ≤ 64 octetsnonNom du champ dans un form.

option

Choix d’un select ; son texte est le libellé affiché.

ContenuParentsFocus clavierRôleÉvénements
texteselectjamaislist-box-optionaucun
AttributTypeObligatoireSignification
valuetexte ≤ 1 KioouiValeur transmise par change.
disabledbooléennonRefuse les entrées ; correspond à :disabled.

field

Champ de texte d’une ligne, édité par l’hôte, méthodes de saisie (IME) comprises.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurtoujourstext-inputinput, change, submit, keydown, focus, blur, contextmenu
AttributTypeObligatoireSignification
valuetexte ≤ 16 KiononRemplace le contenu ; refusée sur un champ lié à un intent d’écriture.
placeholdertexte ≤ 256 octetsnonIndication affichée tant que le champ est vide.
max-lengthentier de 1 à 16384nonLimite du contenu, en octets ; un intent d’écriture peut en imposer une plus basse.
disabledbooléennonRefuse les entrées ; correspond à :disabled.
nameidentifiant ≤ 64 octetsnonNom du champ dans un form.
autofocusbooléennonPrend le focus clavier quand l’élément apparaît pendant que la logique traite une action de l’utilisateur (un éditeur ouvert par un clic), en mode interactif, dans le widget qui a reçu l’action ; le premier de ces éléments dans la vue quand plusieurs apparaissent ensemble. Jamais au démarrage du widget, depuis un minuteur ou la réponse d’un service, en mode passif, ni quand il est posé sur un élément déjà affiché.

textarea

Champ de texte de plusieurs lignes, édité par l’hôte, méthodes de saisie (IME) comprises.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurtoujoursmultiline-text-inputinput, change, submit, keydown, focus, blur, contextmenu
AttributTypeObligatoireSignification
valuetexte ≤ 16 KiononComme pour field.
placeholdertexte ≤ 256 octetsnonIndication affichée tant que le champ est vide.
max-lengthentier de 1 à 16384nonComme pour field.
rowsentier de 1 à 40nonLignes visibles avant le défilement ; 3 par défaut.
disabledbooléennonRefuse les entrées ; correspond à :disabled.
nameidentifiant ≤ 64 octetsnonNom du champ dans un form.
autofocusbooléennonPrend le focus clavier quand l’élément apparaît pendant que la logique traite une action de l’utilisateur (un éditeur ouvert par un clic), en mode interactif, dans le widget qui a reçu l’action ; le premier de ces éléments dans la vue quand plusieurs apparaissent ensemble. Jamais au démarrage du widget, depuis un minuteur ou la réponse d’un service, en mode passif, ni quand il est posé sur un élément déjà affiché.

form

Regroupe des contrôles nommés. Avec intent, la validation envoie leurs valeurs à un service d’écriture directement depuis l’hôte ; la logique du widget ne fournit jamais ce contenu.

ContenuParentsFocus clavierRôleÉvénements
éléments de bloctout conteneurjamaisformsubmit
AttributTypeObligatoireSignification
intentnotes.save | playervox.rating.publish | twitch.chat.sendnonIntent d’écriture lié.
targettexte ≤ 1 KiononID opaque de l’objet modifié (une note, le message auquel on répond), vérifié par le service.

elapsed

Durée affichée que l’hôte fait avancer à partir d’un repère donné par un service : un chronomètre qui tourne ne demande aucun travail à la logique. Stylé comme text ; repeint seulement quand le texte affiché change, au plus à 60 Hz, et jamais quand le widget est masqué.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutétimeractivate, contextmenu, wheel
AttributTypeObligatoireSignification
baseentier de 0 à 9007199254740991ouiMillisecondes écoulées à l’instant at.
atentier de 0 à 9007199254740991ouiInstant de l’horloge monotone de l’hôte, en millisecondes, donné par le résultat du service.
runningbooléennonAvance depuis at ; false par défaut.
formathh:mm:ss | hh:mm:ss.cc | mm:ssouiLes heures continuent au-delà de 99 ; cc sont les centièmes, tronqués.

progress

Barre de progression horizontale.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutéprogress-indicatoractivate, contextmenu, wheel
AttributTypeObligatoireSignification
valuenombre de -1000000000 à 1000000000ouiValeur courante.
maxnombre de -1000000000 à 1000000000nonBorne supérieure, positive ; 1 par défaut.

gauge

Jauge en anneau ou en arc.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutémeteractivate, contextmenu, wheel
AttributTypeObligatoireSignification
valuenombre de -1000000000 à 1000000000ouiValeur courante.
maxnombre de -1000000000 à 1000000000nonBorne supérieure, positive ; 1 par défaut.
shapering | arcnonring par défaut.

chart

Graphique en ligne, en aire, en barres ou sparkline, dessiné par l’hôte.

ContenuParentsFocus clavierRôleÉvénements
seriestout conteneurquand un événement est écoutéfigureactivate, contextmenu, wheel
AttributTypeObligatoireSignification
kindline | area | bar | sparklineouiType de graphique.
minnombre de -1000000000 à 1000000000nonBorne inférieure fixe de l’axe des valeurs.
maxnombre de -1000000000 à 1000000000nonBorne supérieure fixe de l’axe des valeurs.

series

Une série de données d’un chart, colorée par color.

ContenuParentsFocus clavierRôleÉvénements
videchartjamaisfigureaucun
AttributTypeObligatoireSignification
valuesliste de nombres ≤ 1024ouiValeurs, dans l’ordre.

separator

Filet de séparation entre deux groupes.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurjamaissplitteraucun
AttributTypeObligatoireSignification
axisvertical | horizontalnonhorizontal par défaut.

canvas

Surface que l’hôte peint à partir de la dernière liste de commandes passée à draw.

ContenuParentsFocus clavierRôleÉvénements
videtout conteneurquand un événement est écoutéimageactivate, contextmenu, wheel, keydown, focus, blur

Aucun attribut propre.

popover

Panneau flottant ancré à un élément, dessiné au-dessus du contenu et rogné au cadre du widget (listes déroulantes, menus contextuels).

ContenuParentsFocus clavierRôleÉvénements
éléments de bloctout conteneurjamaismenudismiss
AttributTypeObligatoireSignification
anchornom de refouiref de l’élément contre lequel le panneau est placé.
openbooléennonVisibilité ; l’hôte le ferme et envoie dismiss.
placementbelow | above | start | end | pointernonCôté préféré, ou dernière position du pointeur ; below par défaut.

Événements

ÉvénementAction de l’utilisateurDétailSignification
activateouix, yClic principal, ou Entrée ou Espace sur l’élément qui a le focus.
contextmenuouix, yClic secondaire, touche Menu ou Maj+F10.
wheelnondx, dyDéfilement à la molette ou au pavé tactile au-dessus d’un élément qui n’est pas un conteneur à défilement.
keydownouikey, ctrl, alt, shift, meta, repeatTouche enfoncée pendant que l’élément a le focus, en mode interactif. Les touches que l’hôte se réserve (Tab pour parcourir les contrôles, raccourcis d’OverCrow, composition d’une méthode de saisie) ne sont jamais transmises.
inputouivalueValeur en cours de modification (texte, glissement d’un curseur). Copie en lecture seule ; c’est l’hôte qui conserve le contenu.
changeouivalueValeur validée : perte du focus ou Entrée pour un texte, relâchement pour un curseur, tout changement pour une bascule, une case à cocher ou une liste déroulante.
submitouioutcome, errorFormulaire validé par Entrée dans un champ, par Ctrl+Entrée dans un field ou un textarea, ou par un bouton submit ; un intent d’écriture peut réserver la touche Entrée seule au passage d’un champ à l’autre. Avec un intent, porte le résultat de l’écriture.
focusnonaucunL’élément a reçu le focus clavier.
blurnonaucunL’élément a perdu le focus clavier.
reachendnonaucunLe défilement est arrivé à moins d’une hauteur visible de la fin (charger la suite, l’historique).
sticknonstuckL’utilisateur a fait défiler un conteneur loin de sa fin, ou y est revenu (compteur de messages non lus, retour au plus récent). Un contenu qui grandit ne l’envoie jamais.
dismissnonaucunL’hôte a fermé un popover (Échap, clic à l’extérieur, ancre retirée).

Un événement marqué comme action de l’utilisateur autorise un appel de service protégé pendant que la logique le traite. Le détail est ce que reçoit un gestionnaire ; dans un gestionnaire écrit sous forme d’appel, il s’appelle event :

OCMLwidgets/twitch-chat/view.ocml
    <list class="history" stick-to-end={state.following} item-height="20" label={heading(state)} on:stick={stuck(event.stuck)}>

Les touches nommées de keydown sont :

Enter, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown.

Toute autre key est un unique caractère imprimable.

Tailles par défaut

Les éléments que PlayerVox OverCrow dessine prennent ces tailles, en pixels logiques à 100 %, sauf si le style définit width ou height. Tout autre élément tire sa taille de son contenu et du style : un canvas n’a pas de taille tant que le style ne lui en donne pas.

ÉlémentQuandLargeurHauteur
icontoujoursfont-sizefont-size
imagetoujoursimage décodée, sinon 0image décodée, sinon 0
avatartoujoursimage décodée, sinon 28image décodée, sinon 28
toggletoujours3218
checkboxtoujours1616
slidertoujours12018
progresstoujours1206
gaugeshape="arc"4832
gaugetoujours4848
charttoujours16048
fieldtoujours160max(--control-height, hauteur de ligne)
textareatoujours160rows hauteurs de ligne
separatoraxis="vertical"10
separatortoujours01
selecttoujoursson texteson texte
elapsedtoujoursson texteson texte
OCSSdocs/content/examples/countdown/style.ocss
.dots {
  height: 12px;
}