Introduction

Installer Kuik

Ajouter la librairie au fichier pom.xml.

<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>fr.kosmos.web.kore</groupId>
        <artifactId>kuik</artifactId>
    </dependency>
    <!-- ... -->
    <!-- optionnellement -->
    <dependency>
        <groupId>fr.kosmos.web.kore</groupId>
        <artifactId>kuik-documentation</artifactId>
    </dependency>
    <!-- ... -->
</dependencies>

Ensuite, il faut intégrer la chaîne de build.

Utilisation

Ajouter la tld

<%@ taglib prefix="kuik" uri="kuik" %>

Ajouter un composant

<kuik:button priority="secondary">Cliquer ici</kuik:button>

Création d'une bibliothèque de composants custom

Il est possible de créer vos propres composants. Il faut créer un fichier tld :

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
            version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>projet</short-name>
    <uri>projet</uri>

    <tag-file>
        <name>rich-content</name>
        <path>/META-INF/tags/projet/rich-content/rich-content.tag</path>
        <description>Composant projet</description>
        <display-name></display-name>Organisme</display-name>
    </tag-file>
</taglib>

Et un fichier tag :

<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" dynamic-attributes="dynattrs" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="classes" value="rich-content"/>

<c:set var="attributes">
    <c:forEach items="${dynattrs}" var="a">
        <c:choose></c:choose>
            <c:when test="${a.key == 'class'}">
                <c:set value="${classes} ${a.value}" var="classes"/>
            </c:when>
            <c:otherwise>${a.key}="${a.value}"</c:otherwise>
        </c:choose>
    </c:forEach>
</c:set>

<div class="${classes}" ${attributes}>
    <jsp:doBody />
</div>

Déclaration d'un script pour un composant custom

Dans le cadre de l'éco-conception, il n'est pas nécessaire d'ajouter un script pour un composant custom s'il n'est pas présent dans la page consultée par l'utilisateur.

Étant donné que, par défaut, le script en question est absent, il est donc nécessaire de l'ajouter dès que le composant est inclus dans la page.

Pour cela, il y a 2 scénarios possibles : l'ajout systématique depuis le composant lui-même ou le repérage du composant dans la page.

Ajout systématique depuis le composant

Depuis le fichier du composant (*.tag), il est possible de faire appel à une balise dédiée à l'ajout d'un script JS :

<%@ taglib prefix="resources" uri="resources" %>

<resources:addScript src="/static/js/mon-script.js" type="module" />

L'appel à cet élément permet d'indiquer, lors de la génération de la page, que le script en question est requis.

Il sera ajouté plus tard, à la fin de la génération de la page (généralement après le footer) :

<%@ taglib prefix="resources" uri="resources" %>

<resources:getScripts />

L'avantage de cette solution est double :

Repérage automatique de composants dans la page

L'autre possibilité consiste à repérer automatiquement la présence d'un composant dans la page, côté navigateur, une fois la page générée.

Pour cela, il est nécessaire de déclarer une configuration comme dans le modèle ci-dessous :

import(/* webpackIgnore: true */ `/static/js/autoloader-handler.js?t=${Date.now()}`).then(({ defineConfigurations }) => {
    defineConfigurations({
        condition: () => !!(document.querySelector('.ckeditor-accordion')),
        scripts: [ '/static/js/legacy/ckeditor-accordion.js' ]
    });
});

La méthode defineConfigurations est une méthode qui peut prendre (théoriquement) une infinité d'arguments.

Chaque configuration est composée de deux éléments :

NOTE : Le script /static/js/autoloader-handler.js est fourni par Kuik. Il doit être importé de la même façon que l'exemple le montre (avec webpackIgnore: true et un import dynamique).