J’ai lu pas mal de sujet sur ce forum qui traitaient de l’intégration de fullCalendar.js et des ses fonctionnalités avancées dans simplicité.
Je ne parviens pas à intégrer la fonctionnalité timeline 4.4.2 dans notre build de simplicité (Simplicité version4.0 patch level P24Built on2020-05-29 22:47 (revision bdfa7f9050ca72643aeecb5664a6f46e2b5c3691))
Lorsque mon objet externe est chargé, les ressources JS et CSS de la fonctionnalité timeLine que j’ai ajouté le sont bien aussi. Cependant je remarque aussi que le fullCalendar chargé par simplicité est en version 3.1.0 et il me semble que ce core n’est pas compatible avec le timeline (d’après les autres sujet que j’ai pu voir).
Mais parce que je remet le pied à l’étrier en JavaScript après 5 ans et que ma manière de faire n’est pas forcément bonne, voilà comment j’appelle le fullCalendar:
Effectivement, on a prévu d’isoler ce composant via ces 2 paramètres afin de pouvoir ajouter des plugins spécifiquement à votre projet (version payante). Simplicité embarque par défaut que les vues gratuites.
On a eu un long échange avec Rosanne sur le sujet au moment de la mise en place de ces 2 paramètres pour choisir la version 3 ou 4 de fullcalendar + les libs additionnelles :
Je pense que vous y trouverez vos réponses et des exemples de code.
Merci pour le code. Je l’ai simplifié pour n’afficher qu’une timeline vide. Ça a partiellement fonctionné, depuis j’ai mis toutes mes ressources directement sur le serveur, j’ai ajouté les paramètres systèmes et ça ne fonctionne plus du tout. La principale question est donc la suivante : Comment appeler la partie javascript depuis le code Java ? J’ai testé 2 methodes :
1) return javascript("$ui.loadCalendar(function() { "+getName()+".render('"+param+"');})" );
qui me retourne SyntaxError: JSON.parse: expected property name or '}' at line 1 column 2 of the JSON data
Un appel direct de ma methode render : return javascript(getName()+".render('"+param+"')");
qui me retourne
Error: “The FullCalendar view “resourceTimelineDay” does not exist. Make sure your plugins are loaded correctly.”
Alors qu’a priori les ressources sont bien chargées:
NB: je mets des guillemets au “appelle” car ce n’est bien entendu pas le code serveur qui appelle le code JS client mais le code serveur retourne une instruction qui dit au framework client d’appeler la fonction en question
Et je ne cautionne pas du tout les ajouts manuels des libs dans le Java. Il y a un mécanisme qui gère les libs FullCalendar correctement il ne faut pas essayer de le contourner ou le réinventer.
S’il y a une anomalie dans la gestion du param système FULLCALENDAR_LIBS, ce qui n’est pas exclu, on regardera et on corrigera mais je pense que ça nous aurait été signalé par @rosanneQuily
Le chemin dans lequel il faut copier les sources est bien le suivant donc ? :
sh-4.2# pwd
/usr/local/tomcat/webapps/ROOT/scripts/fullcalendar/v4
sh-4.2# ls -haltr
total 80K
drwxrwxr-x 2 root root 4.0K May 29 20:49 timegrid
drwxrwxr-x 2 root root 4.0K May 29 20:49 rrule
drwxrwxr-x 2 root root 4.0K May 29 20:49 moment-timezone
drwxrwxr-x 2 root root 4.0K May 29 20:49 moment
drwxrwxr-x 2 root root 4.0K May 29 20:49 luxon
drwxrwxr-x 2 root root 4.0K May 29 20:49 list
drwxrwxr-x 1 root root 4.0K May 29 20:49 interaction
drwxrwxr-x 2 root root 4.0K May 29 20:49 google-calendar
drwxrwxr-x 2 root root 4.0K May 29 20:49 daygrid
drwxrwxr-x 1 root root 4.0K May 29 20:49 core
drwxrwxr-x 2 root root 4.0K May 29 20:49 bootstrap
drwxrwxr-x 1 root root 4.0K May 29 20:49 ..
drwxr-xr-x 2 root root 4.0K Jun 22 15:08 timeline
drwxr-xr-x 2 root root 4.0K Jun 22 15:08 resource-common
drwxrwxr-x 1 root root 4.0K Jun 22 15:08 .
drwxr-xr-x 2 root root 4.0K Jun 22 15:08 resource-timeline
J’ai adapté le code a mon usage mais quand j’arrive sur mon objet externe rien ne se passe. J’ai importé le module de démo et idem. Je continue à chercher ce qui empèche le script de se déclencher.
Il préférable de mettre vos libs dans un répertoire partagé du serveur comme /usr/local/share
car à chaque upgrade le répertoire /fullcalendar/v4 peut être écrasé.
ensuite le paramètre FULLCALENDAR_LIBS
essayez de charger votre plugin dans l’ordre après ceux par défaut qui fonctionnent très bien :
Faire un clear cache global pour prise en compte de ces changements
Ecrire le code adapté à votre besoin, par exemple ici un objet externe:
Java serveur:
package com.simplicite.extobjects.Application;
public class AppTestTimeline extends com.simplicite.webapp.web.ResponsiveExternalObject {
private static final long serialVersionUID = 1L;
}
Oui dans mon exemple ci-dessus c’est bien juste un ajout des plugins premium.
Par exemple si on est dans une image Docker le <tomcat root> est /usr/local/tomcat, l’ajout des plugins premium se fait en enrichissant l’image avec un Dockerfile simple genre:
FROM simplicite/platform:latest
COPY <là où ont les plugins premium sur le host>/* /usr/local/tomcat/webapps/ROOT/scripts/calendar/v4
Sur le SIM ça peut aussi s’automatiser via les hooks du SIM.
J’ai vérifié tous les chemins d’accès, les paramètres système, il s’avérait que le format des doubles quotes nétait pas bon dans le FULLCALENDAR_LIBS…
Désormais, il charge juste les modules core et interaction et ensuite il ne parvient pas à importer les JS restants (pas de problème pour les feuilles de style)
SyntaxError: import declarations may only appear at top level of a module
Le problème doit forcement venir des ressources utilisées.
Les ressources que je récupère avec npm depuis les repos officiels, en version 4.4.2, ne contiennent pas de fichier js minifié.
J’ai testé en récupérant le code minifié depuis les exemples fullCalendar sur unpkg -https://unpkg.com/@fullcalendar/resource-common@4.4.2/main.min.js ) et ça affiche l’entête du calendrier mais pas le reste. Il y a un problème au niveau du code.
De quel manière est-il préconisé de récupérer les ressources js et css pour que je sois certain d’avoir les bonne sources et qu’il n’y ait pas de conflits de version avec celles déja présentes dans simplicité ?
Dans le ZIP il y a un répertoire packages-premium => copiez tout ce qu’il y a dedans dans <webapp root>/scripts/fullcalendar/v4 comme décrit précédement)
PS: Ca n’a pas vraiment de sens d’aller récupérer des JS/CSS un par un depuis un CDN…
Tout le code est identique, les paramètres, les libs sur le host aussi maintenant; A quel autre endroit peut-il y avoir une différence ?
J’ai ajouté schedulerLicenseKey: ‘GPL-My-Project-Is-Open-Source’ mais ça ne fait que retirer le message concernant la licence.