Choix de l'univers FT

Card form Carte de formulaire

Regrouper et restituer des éléments de formulaire.

Elles comportent un état de saisie et leur équivalent qui restitue les informations saisies.

Documentation : Figma

Langage:  HTML

<section class="carte-formulaire carte-formulaire-error" data-carte-formulaire="parent" tabindex="-1">

    <div class="carte-formulaire-restit" data-carte-formulaire="restitution">
        <div class="media media-form p-3 p-lg-4">

            <span aria-hidden="true" class="icon icon-briefcase text-gray-40 d-none d-md-block mr-3"></span>

            <div class="media-body">
                <div class="carte-formulaire-header">
                    <hgroup>
                        <h2 id="carte-formulaire-heading_957972002" class="t3 emphasis">Canal Web Paris 17
                        </h2>

                    </hgroup>

                    <span class="status status-error status-sm flex-shrink-0" id="status_12964407">
                        <span class="status-icon">
                            <span aria-hidden="true" class="icon icon-close-round-full"></span>
                        </span>
                        <span class="status-content">
                            <span class="sr-only">Statut&nbsp;:&nbsp;</span>Supprimée
                        </span>
                    </span>

                </div>

                <div class="carte-formulaire-body">

                    <div id="carte-formulaire-collapse_677213502" class="carte-formulaire-collapse">
                        <div class="fadeIn hidden">

                            <p>
                                Du 01 septembre 2009 au 31 juin 2016<br />
                                Démission - Lorem ipsum dolor sit amet
                            </p>

                        </div><button aria-controls="carte-formulaire-collapse_677213502" aria-expanded="false" class="btn btn-tertiary light btn-ratio-square is-rotating" data-pe-toggle="more" data-target="#carte-formulaire-collapse_677213502" id="button_143888629" type="button" data-ft-tooltip="Afficher le détail" data-ft-vocalize="false">
                            <span aria-hidden="true" class="icon icon-chevron-d"></span>
                            <span class="sr-only">Afficher le détail</span><span class="sr-only">&nbsp;&amp;nbsp;pour: Canal Web Paris 17</span>

                        </button>
                    </div>

                </div>
            </div>
        </div>

    </div>

</section>
  • URL Preview : /js/card-form.js
  • Chemin d'accès : public/js/card-form.js
  • Taille : 1.4 KB
  • Contenu :
    'use strict';
    
    window.addEventListener('DOMContentLoaded', function () {
    	let $boutonsAfficher = document.querySelectorAll('[data-carte-formulaire="afficher-formulaire"]');
    	let $boutonsMasquer = document.querySelectorAll('[data-carte-formulaire="masquer-formulaire"]');
    
    	$boutonsAfficher.forEach(function (boutonAfficher) {
    		boutonAfficher.addEventListener('click', afficherFormulaire);
    	});
    
    	$boutonsMasquer.forEach(function (boutonMasquer) {
    		boutonMasquer.addEventListener('click', masquerFormulaire);
    	});
    });
    
    function afficherFormulaire(event) {
    	let $parent = event.target.closest('[data-carte-formulaire="parent"]');
    	let $formulaire = $parent.querySelector('[data-carte-formulaire="modifier"]');
    	let $restitution = $parent.querySelector('[data-carte-formulaire="restitution"]');
    
    	if ($parent && $formulaire && $restitution) {
    		$restitution.setAttribute("hidden", "");
    		$formulaire.removeAttribute("hidden");
    		$parent.focus();
    	}
    };
    
    function masquerFormulaire(event) {
    	let $parent = event.target.closest('[data-carte-formulaire="parent"]');
    	let $formulaire = $parent.querySelector('[data-carte-formulaire="modifier"]');
    	let $restitution = $parent.querySelector('[data-carte-formulaire="restitution"]');
    
    	if ($parent && $formulaire && $restitution) {
    		$formulaire.setAttribute("hidden", "");
    		$restitution.removeAttribute("hidden");
    		$parent.focus();
    	}
    }
  • URL Preview : /js/pe-toggle.js
  • Chemin d'accès : public/js/pe-toggle.js
  • Taille : 3.9 KB
  • Contenu :
    // Script toggle-more
    jQuery(function ($) {
        /** Structure attendue
         * <ul id="collapsable-item"> // L'id du bloc "controllé"
         *  <li>Item 1</li>
         *  <li>Item 2</li>
         *  <li class="fadeIn hidden">Item 1</li>
         *  <li class="fadeIn hidden">Item 2</li>
         *  <li class="fadeIn hidden">Item 3</li>
         *  <li class="fadeIn hidden">Item 4</li>
        * </ul>
        * <button
        *     type="button" class="btn-reset btn-more"
        *     data-pe-toggle="more"  // Pour des soucis retro-compatibilité, data-toggle="more" est aussi accepté
        *     data-target="#collapsable-item" // On précise l'id bu bloc à controller dans le data-target
        *     data-title-collapsed="Title quand replié"
        *     data-title-visible="Title quand déplié"
        *     aria-controls="collapsable-item" // On précise l'id bu bloc à controller dans le data-target
        * >
        *   Voir plus / Voir moins
        * </button>
        *
        * Attention : Nécessite du CSS complémentaire pour controller l'affichage du bouton Voir plus / Voir moins
        * Pour gérer l'affichage, quand la liste est dépliée le bouton a la classe "displayed", et la classe "collapsed" quand elle est repliée
    
        /** Gestion des collapses */
        $('[data-pe-toggle="more"], [data-toggle="more"]').on('click', function (e) {
            let $trigger = $(this);
            wasVisible = $trigger.hasClass('displayed'), // Is the button currently in display mode ?
                $itemsToToggle = $trigger.attr('dataItemsToToggle') || $($trigger.attr('data-target')).children('.fadeIn'), // We cache the jQuery items upon first use
                $firstItemToToggle = $itemsToToggle.first(),
                $firstInputFocusable = null;
    
            // Si l'élément séléctionné est un input, on l'utilisera
            if ($firstItemToToggle.is('input')) {
                $firstInputFocusable = $firstItemToToggle;
            }
            // Si l'élément séléctionné contient un input, on utilise le premier
            else if ($firstItemToToggle.find('input').length) {
                $firstInputFocusable = $firstItemToToggle.find('input').first()
            }
    
            // Si on replie la liste
            const dataExpanded = $trigger.attr('data-expanded');
            const dataCollapsed = $trigger.attr('data-collapsed');
            if (wasVisible) {
                $trigger
                    .removeClass('displayed')
                    .addClass('collapsed')
                    .attr('title', $trigger.attr('data-title-collapsed'));
    
                // Si le bouton de collapse change de contenu ("afficher / masquer la suite"), il ne doit pas avoir de `aria-expanded`
                if (!dataExpanded && !dataCollapsed) {
                    $trigger.attr('aria-expanded', 'false')
                }
    
                $itemsToToggle.addClass('hidden').prop('hidden', true); // On utilise aussi la classe .hidden au cas ou le display:none de l'attribut hidden est surchargé par une autre classe
                if ($firstInputFocusable === null) {
                    $firstItemToToggle.removeAttr('tabindex');
                }
            }
    
            // Si on affiche la liste
            else {
                $trigger
                    .addClass('displayed')
                    .removeClass('collapsed')
                    .attr('title', $trigger.attr('data-title-visible'));
    
                // Si le bouton de collapse change de contenu ("afficher / masquer la suite"), il ne doit pas avoir de `aria-expanded`
                if (!dataExpanded && !dataCollapsed) {
                    $trigger.attr('aria-expanded', 'true')
                }
    
                $itemsToToggle.removeClass('hidden').prop('hidden', false);
    
                if ($firstInputFocusable === null) {
                    $firstItemToToggle
                        .attr('tabindex', '-1')
                        .trigger('focus');
                }
                else {
                    $firstInputFocusable.focus();
                }
            }
        });
    });