Je vais essayer de reproduire ce problème.
Comment puis-je exécuter du JavaScript une fois que la page du calendrier a chargé ?
edit : Je précise mon cas.
On m’a demandé d’avoir des événements multicolores, comme ceci :
Je ne souhaite pas créer de fork du plugin, j’ai donc obtenu un résultat avec le code suivant.
Les couleurs sont liées aux étiquettes des événements et remplacent la couleur de catégorie par défaut.
J’ai ajouté la liste des étiquettes dans le HTML de l’événement de cette manière : data-tags="{{event.topic.tags}}"
<script type="text/x-handlebars" data-template-name="javascripts/components/events-calendar-event">
<div class="{{event.classes}}" data-tags="{{event.topic.tags}}" {{action 'selectEvent' event.topic.url}} style="{{event.listStyle}}">
{{#unless event.allDay}}
<span style='{{event.dotStyle}}'>{{d-icon 'circle'}}</span>
{{/unless}}
{{#if event.time}}
<span class="time">{{event.time}}</span>
{{/if}}
{{#if event.title}}
<span class="title" style="{{event.titleStyle}}">{{replace-emoji event.title}}</span>
{{/if}}
</div>
{{#if showEventCard}}
{{events-calendar-card topic=event.topic selectEvent="selectEvent"}}
{{/if}}
</script>
Je génère des motifs rayés :
<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
// couleurs des étiquettes
let colors = {muni: "#91D0B5", road: "#8ABBE2", freestyle: "#CFB3D3"};
let events = document.getElementsByClassName("event");
for (var i = 0; i < events.length; i++) {
let event = events[i];
let gradient = "";
let tags = event.getAttribute("data-tags").split(",");
for (j = 1; j <= tags.length; j++) {
gradient +=
", " +
colors[tags[j - 1]] +
" " +
j * 8 +
"px, " +
colors[tags[j - 1]] +
" " +
(j * 8 + 8) +
"px";
}
event.style.background = "repeating-linear-gradient(-45deg" + gradient + ")";
}
});
</script>
Et j’ai ajouté un peu de CSS.
Le résultat :
Événement avec 2 étiquettes :
Événement avec 3 étiquettes :
Le problème que je rencontre est que mon JavaScript est exécuté lors du changement de page et n’applique pas les couleurs rayées aux événements des mois précédents/suivants, car le calendrier charge son contenu dynamiquement.
Si je suis en octobre et que je clique deux fois sur “suivant” pour aller en décembre, voici comment cela apparaît :
C’est pourquoi je souhaite que mon JS soit exécuté lorsque le contenu du calendrier a été chargé.
J’ai essayé une autre méthode et obtenu l’effet rayé en modifiant la fonction eventsForDay dans /assets/javascripts/discourse/lib/date-utilities.js.es6 :
J’ai remplacé cette ligne :
let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);background-color:#${topic.category.color};`;
Par :
let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);`;
Et j’ai ajouté ceci :
if (topic.tags.length > 0) {
let colors = {muni: "#91D0B5", road: "#8ABBE2", freestyle: "#CFB3D3"};
let gradient = "";
for (let i = 1; i <= topic.tags.length; i++) {
gradient +=
", " +
colors[topic.tags[i - 1]] +
" " +
i * 8 +
"px, " +
colors[topic.tags[i - 1]] +
" " +
(i * 8 + 8) +
"px";
}
attrs['listStyle'] += `background:repeating-linear-gradient(-45deg ${gradient});`;
}
Cela fonctionne très bien et c’est une méthode plus propre pour atteindre mon objectif. Cependant, je ne sais pas comment surcharger cette fonction ou ce fichier sans avoir à créer un fork du plugin…
Le plugin semble incompatible avec la dernière version de Discourse.
Voici ce que contient le fichier de journal de reconstruction :
1: depuis /var/www/discourse/lib/plugin/instance.rb:417:in block in notify_after_initialize' /var/www/discourse/plugins/discourse-events/plugin.rb:190:in block in activate!': constante non initialisée #Class:0x0000562a2a10fa90::SCOPES
Vouliez-vous dire ? Sprockets (NameError)
** PLUGIN INCOMPATIBLE **
Vous ne pouvez pas compiler Discourse en raison d’erreurs dans le plugin situé à
/var/www/discourse/plugins/discourse-events
Veuillez essayer de supprimer ce plugin et de reconstruire à nouveau !
Il semble que le problème provenait de Discourse et non du plugin.
Dans la dernière version bêta de Discourse, le plugin fonctionne à nouveau.
Je peux confirmer qu’il n’est actuellement pas possible de reconstruire la dernière version stable de Discourse avec le plugin events actuel. ![]()
Malheureusement, nous ne pouvons pas basculer vers tests-passed — nous choisissons la branche stable précisément pour éviter ce genre de problèmes. Quelqu’un enquête-t-il sur ce sujet ?
J’ai essayé de reconstruire avec v2.5.2 (ce qui fonctionnait auparavant) et cela échoue avec la même erreur, donc je ne suis pas sûr d’où vient le problème. Y a-t-il un commit particulier (du plugin ou de Discourse stable) vers lequel je peux orienter le conteneur ?
Notre politique de support vise à garantir la compatibilité avec la dernière version tests-passed de Discourse (car c’est le paramètre par défaut dans discourse_docker). Cependant, nous aimerions savoir combien d’utilisateurs des plugins de la famille Pavilion sont sur la branche stable de Discourse.
De plus, nous prévoyons de déprécier le plugin events en faveur du plugin events de l’équipe Discourse dans un avenir proche.
Je comprends que les développeurs doivent anticiper pour assurer la compatibilité avec l’avenir de Discourse — cela a du sens. Mais s’il n’existe pas de branche stable pour le plugin, cela laisse les utilisateurs qui cherchent une configuration stable dans une situation où leur installation se brise à cause d’une version bêta qu’ils n’utilisent pas.
~Des conseils sur quel commit a rompu la compatibilité ? Je pourrais essayer de travailler avec cela, mais je suis perdu quant au changement qui a causé cela.~
Édit : pour toute personne ayant des problèmes avec cela et ayant besoin d’une solution temporaire, ce commit semble être le coupable.
Un problème concernant les clés d’API webcal a été résolu.
Merci pour votre signalement @md-misko
Encore une fois, le plugin semble incompatible avec la dernière version de Discourse 2.6.0.beta5 ( 2bb7676ba4 ).
Cette fois, il affiche simplement une page blanche lors de l’accès au site. Mais contrairement à la dernière fois, aucune erreur n’est survenue lors de l’utilisation de admin/upgrade.
Après avoir désactivé le plugin et reconstruit le conteneur, Discourse fonctionne à nouveau correctement.
Bonjour, est-ce que ce plugin Événements génère les liens « Ajouter au calendrier » en haut des publications, comme sur cette page :
https://community.namati.org/t/asia-pacific-justice-for-all-webinar-series/78084
Aussi, en 2021, quelles sont les opinions des utilisateurs concernant l’utilisation de ce plugin Pavilion Events par rapport au plugin Calendrier officiel ?
Je suis principalement intéressé par des moyens de faciliter l’agrégation des vues des sujets dans un calendrier, et j’aimerais également que nos utilisateurs puissent ajouter des événements individuels à leurs propres calendriers Google ou .ics.
Cordialement.
Salut,
Comme mentionné dans le message d’origine :
Veuillez prendre un moment pour réfléchir à savoir si les nouvelles fonctionnalités d’événement du plugin Calendrier Discourse créées par l’équipe Discourse conviennent à vos besoins. Si elles répondent à vos besoins, nous vous recommandons d’utiliser ce plugin. Vous ne devriez utiliser ce plugin que si vous avez déjà envisagé le plugin Calendrier Discourse.
Nous vous recommandons d’utiliser le plugin Calendrier Discourse si possible. Nous ne prenons en charge ce plugin que pour des cas d’utilisation spécifiques qui ne sont pas couverts par ce dernier. Heureusement, le plugin Calendrier possède les deux fonctionnalités que vous avez mentionnées.
Oui, c’est bien ce plugin. Mais, comme mentionné, il semble que vous ayez un bon cas d’utilisation pour le plugin Calendrier Discourse, donc je vous suggère de l’utiliser.
En interne, nous utilisons en fait le plugin Calendrier Discourse pour organiser des événements pour nos membres, plutôt que ce plugin. Nous prenons en charge des cas d’utilisation spécifiques pour quelques clients, et nous sommes ouverts à d’autres cas d’utilisation spécifiques si quelqu’un en a, mais c’est tout.
Merci, Angus. J’ai lu tous ces conseils et je me suis adressé à toi spécifiquement car il semblait que tu étais impliqué dans la mise en place de la communauté du Réseau d’Empowerment Juridique en question, et j’appréciais son fonctionnement. Mais je suis ravi d’apprendre que tu recommandes le plugin officiel de calendrier ; je vais l’explorer.
Ai-je raison de dire que le plugin officiel Discourse Calendar ne propose pas de filtre du type « Agenda » dans la liste des sujets ? Le tri de la liste des sujets par dates d’événement est l’un des principaux cas d’usage qui m’intéressent. Il s’agit davantage de gestion de projet (traiter les sujets comme des tâches et les planifier en conséquence) que d’événements.
J’envisage d’ajouter quelque chose de similaire. Avez-vous trouvé des solutions ?
Voici mon idée : chaque événement devrait être considéré comme une réponse, comme épingler un sujet. Le bouton « Ajouter un événement » deviendrait un menu déroulant listant tous les événements du sujet.
Je vais vérifier et vous recontacter.
Nous ne développons plus de nouvelles fonctionnalités pour ce plugin. Nous l’avons déprécié en faveur de la fonctionnalité Événements officiels du plugin discourse-calendar.
Je ne pense pas qu’il y ait encore une liste de sujets de style ordre du jour dans le plugin officiel.
Quelqu’un sait si le lien qui contenait auparavant le contenu de Pavilion a disparu ?
Lorsque ce plugin s’exécute dans une catégorie restreinte, nous voyons :
… mais le lien vers la documentation est brisé et génère une erreur 404. J’ai cherché sur le site en question et ici aussi, mais je ne sais pas s’il existe un autre endroit où se trouvent ces instructions pour l’utilisateur.
Nous avons déplacé ce sujet vers une catégorie fermée par erreur. Il faut le ramener en public. Nous en discuterons et reviendrons vers vous sous peu.
P.S.
La page devrait être de nouveau accessible maintenant.




