TOGGLEATTRIBUTE

Le composant TOGGLEATTRIBUTE permet d’ajouter/supprimer ou changer la valeur d’un attribut. Il fonctionne comme un « d’interrupteur » : si l’attribut est absent, il l’ajoute, s’il est présent, il change sa valeur ou le supprime.

Syntaxe

Comme tout déclencheur JS de SipaUI il est préfixé par data-su. À ce déclencheur on doit ajouter au moins deux paramètres (attr et val, cf. ci-dessous) afin de donner l’(les) attribut(s) à positionner / supprimer. Attention, la syntaxe impose l’imbrication de guillemets : 2 pour encadrer la valeur du data-sutoggleattribute et d’autres pour encadrer les paramètres et leur valeur. Ces derniers doivent par ailleurs respecter la syntaxe JSON {"parametre":"valeur"}. Par conséquent, il faut choisir des '' pour encadrer le contenu de toggleattribute. Ce qui donne : data-sutoggleattribute='{"paramètre":"valeur"}'.

Paramètres

  • sel : permet de choisir la cible du toggle (par défaut c’est l’élément lui-même)
  • parent : parent du DOM à cibler (à la place de sel)
  • attr : nom de l’attribut (paramètre obligatoire)
  • val : valeur à attribuer à l’attribut (paramètre obligatoire)
  • force : force permet de choisir entre toujours mettre l’attribut (force:1) ou toujours l’enlever (force:0)

Classe supplémentaire

Classe CSS à mettre au même endroit que sur l’élément possédant l’attribut data-sutoggleattribute

  • su-on-focus : permet de mettre l’attribut quand l’élément gagne le focus, ou de l’enlever quand il le perd

Exemples

Démo 0 : cas basique (sur l’élément cliqué)

Basiquement, le sutoggleattribute se produira sur l’élément possédant l’attribut. Dans ce cas il nécessite uniquement les paramètres minimums : attr et val. Ce déclencheur ajoute l’attribut data-demo="1" au bouton, puis le vide de sa valeur. Si vous voulez supprimer complètement l’attribut, cf. deleteempty plus bas.

Du CSS affiche la valeur de cet attribut à la fin du bouton pour l’illustration, mais ce qu’il faut observer est dans l’inspecteur…

<style type="text/css">
    [data-demo]::after {
        content: attr(data-demo);
    }
</style>
<div class="demo0">
    <button class="su-button su-primary" data-sutoggleattribute='{"attr":"data-demo","val":"1"}'>Cliquez</button>
</div>

Démo 1 : cas parent (parent de l’élément cliqué)

Avec la propriété parent, il est possible de cibler un élément parent en l’appelant par une classe ou un ID.

Du CSS affiche la valeur de cet attribut dans le parent, derrière le bouton, pour l’illustration. Ce qu’il faut observer est dans l’inspecteur…

<style type="text/css">
    [data-demo]::after {
        content: attr(data-demo);
    }
</style>
<div class="demo1">
    <button class="su-button su-primary su-margin-bottom-s" data-sutoggleattribute='{"parent":".sipaui","attr":"data-demo","val":"1"}'>Cliquez</button>
</div>

Démo 2 : cas sélecteur (différent de l’élément cliqué ou de ses parents)

Avec la propriété sel, il est possible de paramétrer l’élément cible du sutoggleattribute partout dans le DOM. La valeur de cette propriété peut être une classe, un ID, ou toute suite de sélecteurs comme pour un ciblage en CSS.

Du CSS affiche la valeur de cet attribut à la fin du paragraphe en dessous pour l’illustration. Ce qu’il faut observer est dans l’inspecteur…

<style type="text/css">
    [data-demo]::after {
        content: attr(data-demo);
    }
</style>
<div class="demo2">
    <button class="su-button su-primary su-margin-bottom-s" data-sutoggleattribute='{"sel":".demo-target2 p","attr":"data-demo","val":"1"}'>Cliquez</button>
    <div class="demo-target2">
        <p>Le chiffre «&nbsp;1&nbsp;» s’affichera à droite de ce texte.&nbsp;</p>
    </div>
</div>

Démo 3 : cas deleteempty (suppression de l’attribut si celui-ci est vide)

Avec la propriété deleteempty, il est possible d’utiliser le plein potentiel du sutoggleattribute et supprimer l’attribut concerné de l’élément cible si cet attribut est vide. Cette propriété n’accepte qu’une valeur valable : 1 (0 n’ayant aucun intérêt).

Du CSS agit à la fin du paragraphe en dessous pour l’illustration. Ce qu’il faut observer est dans l’inspecteur…

<style type="text/css">
    .no-data-demo::after {
        content: 'Pas de data-demo';
    }
    [data-demo]::after,
    .no-data-demo[data-demo]::after {
        content: attr(data-demo);
    }
</style>
<div class="demo3">
    <button class="su-button su-primary su-margin-bottom-s" data-sutoggleattribute='{"sel":".demo-target3 p","attr":"data-demo","val":"1","deleteempty":1}'>Cliquez</button>
    <div class="demo-target3">
        <p class="no-data-demo">Le chiffre «&nbsp;1&nbsp;» s’affichera à droite de ce texte si l’attribut existe, sinon un autre texte s’affichera.&nbsp;</p>
    </div>
</div>

Démo 4 : cas force

Le paramètre force permet de supprimer le principe « d’interrupteur » du TOGGLEATTRIBUTE : l’action sera ainsi toujours la même, soit elle force l’ajout de l’attribut ("force":1), soit elle force la suppression ("force":0).

Du CSS agit à la fin du paragraphe en dessous pour l’illustration. Ce qu’il faut observer est dans l’inspecteur…

<style type="text/css">
    [data-demo]::after {
        content: attr(data-demo);
    }
</style>
<div class="demo4">
    <button class="su-button su-primary su-margin-right-m su-margin-bottom-s" data-sutoggleattribute='{"sel":".demo-target4 p","attr":"data-demo","val":"1","force":1}'>Cliquez pour afficher «&nbsp;1&nbsp;»</button>
    <button class="su-button su-secondary" data-sutoggleattribute='{"sel":".demo-target4 p","attr":"data-demo","val":"1","force":0}'>Cliquez pour masquer «&nbsp;1&nbsp;»</button>
    <div class="demo-target4">
        <p>Le chiffre «&nbsp;1&nbsp;» s’affichera à droite de ce texte si l’attribut existe, sinon il n’y aura rien.&nbsp;</p>
    </div>
</div>

Démo 5 : cas deux valeurs (l’une remplace l’autre)

Avec la propriété val2, il est possible d’intervertir la valeur de l’attribut à chaque clic, ce qui est très utile pour un attribut qui attend une valeur booléenne.

Du CSS affiche la valeur à la fin du paragraphe en dessous pour l’illustration. Ce qu’il faut observer est dans l’inspecteur…

<style type="text/css">
    [data-demo]::after {
        content: attr(data-demo);
    }
</style>
<div class="demo5">
    <button class="su-button su-primary su-margin-bottom-s" data-sutoggleattribute='{"sel":".demo-target5 p","attr":"data-demo","val":"true","val2":"false"}'>Cliquez</button>
    <div class="demo-target5">
        <p>La valeur «&nbsp;true&nbsp;» s’affichera à droite de ce texte si l’attribut existe, sinon, ce sera «&nbsp;false&nbsp;».&nbsp;</p>
    </div>
</div>

Démo 6 : cas su-on-focus

Avec cette classe, il est possible d’utiliser SUTOGGLEATTRIBUTE lorsqu’un élément prend le focus, notamment grâce au clic sur un label lié à un input.

<div class="demo6">
    <label for="demo6">Label&nbsp;: cliquez sur ce libellé pour activer le TOGGLEATTRIBUTE</label>
    <input id="demo6" class="su-on-focus" name="input1" type="text" data-sutoggleattribute='{"attr":"data-demo","val":"1"}'>
</div>

Le code a bien été copié !