Plugin de eventos 📅

Intentaré reproducir esto.

3 Me gusta

¿Cómo puedo ejecutar JavaScript después de que la página del calendario se haya cargado?


Edición: Explico mi caso.
Me pidieron tener eventos multicolores, como:

No quiero crear un fork del plugin, así que logré algo con el siguiente código.
Los colores están relacionados con las etiquetas de los eventos y reemplazan el color de categoría predeterminado.

Agregué la lista de etiquetas en el HTML del evento de esta manera: 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>

Genero patrones simplificados:

<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
    // colores de etiquetas
    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>

Y agregué un poco de CSS.

El resultado:
Evento con 2 etiquetas:

Evento con 3 etiquetas:

El problema que encuentro es que mi JavaScript se ejecuta al cambiar de página y no aplica los colores simplificados en los eventos de los meses anteriores o siguientes, ya que el calendario carga su contenido dinámicamente.

Si estoy en octubre y hago clic en “siguiente” dos veces, yendo a diciembre, esto es lo que aparece:

Por eso me gustaría que mi JS se ejecute cuando el contenido del calendario se haya cargado.

3 Me gusta

Probé otro método y logré el efecto de rayas editando la función eventsForDay en /assets/javascripts/discourse/lib/date-utilities.js.es6:

Reemplacé esta línea:

let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);background-color:#${topic.category.color};`;

Por:

let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);`;

Y añadí esto:

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});`;
}

Funciona muy bien y es una forma más limpia de lograr lo que quiero. Sin embargo, no sé cómo sobrescribir esta función o archivo sin tener que crear un fork del plugin…

2 Me gusta

El plugin parece ser incompatible con la última versión de Discourse.
Desde el archivo de registro de reconstrucción:

1: desde /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 no inicializada #Class:0x0000562a2a10fa90::SCOPES
¿Quizás querías decir? Sprockets (NameError)

** PLUGIN INCOMPATIBLE **

No puedes compilar Discourse debido a errores en el plugin en
/var/www/discourse/plugins/discourse-events

¡Por favor, intenta eliminar este plugin y volver a compilar!

4 Me gusta

Parece que el problema estaba en Discourse y no en el plugin.
En la última versión beta de Discourse, al menos, los plugins están funcionando de nuevo.

2 Me gusta

Puedo confirmar que actualmente no es posible reconstruir la última versión estable de Discourse con el plugin de eventos actual. :worried:

Lamentablemente, no podemos cambiar a tests-passed; elegimos la rama estable precisamente para evitar este tipo de problemas. ¿Alguien está investigando esto?

He intentado reconstruir con v2.5.2 (que solía funcionar) y también falla con el mismo error, así que no estoy seguro de dónde está el problema. ¿Hay algún commit específico (del plugin o de Discourse estable) al que pueda apuntar el contenedor?

2 Me gusta

Nuestra política de soporte consiste en garantizar la compatibilidad con la versión tests-passed más reciente de Discourse (debido a que es la configuración predeterminada en discourse_docker). Aunque nos gustaría conocer cuántos usuarios de los plugins de la familia Pavilion se encuentran en la rama stable de Discourse.

Además, planeamos descontinuar el plugin de eventos en favor del plugin de eventos del equipo de Discourse en un futuro cercano.

3 Me gusta

Entiendo que los desarrolladores deben mirar hacia adelante para mantener la compatibilidad con el futuro de Discourse; eso tiene sentido. Pero si no existe una rama estable para el plugin, deja a las personas que buscan una configuración estable en una situación donde su configuración falla debido a una versión beta que no están utilizando.

¿Alguna sugerencia sobre qué commit rompió la compatibilidad? Podría intentar trabajar con eso, pero estoy perdido respecto a qué cambio causó esto.

Edición: para cualquiera que tenga problemas con esto y necesite una solución temporal, este commit parece ser el culpable.

3 Me gusta

Hubo un problema con las claves de la API de webcal que ya ha sido resuelto.

Gracias por el informe @md-misko

4 Me gusta

Nuevamente, el complemento parece ser incompatible con la última versión de Discourse 2.6.0.beta5 ( 2bb7676ba4 ).
Esta vez solo genera una página en blanco al acceder al sitio. Pero, a diferencia de la última vez, no hubo ningún error al usar admin/upgrade.
Después de desactivar el complemento y reconstruir el contenedor, Discourse vuelve a funcionar correctamente.

4 Me gusta

Hola, ¿este plugin de Eventos genera los enlaces “Agregar al calendario” en la parte superior de las publicaciones, como en esta página:

https://community.namati.org/t/asia-pacific-justice-for-all-webinar-series/78084

Además, aquí en 2021, ¿cuáles son las opiniones sobre el uso de este plugin Pavilion Events frente al plugin oficial de Calendario?

Me interesa principalmente encontrar formas de facilitar la agregación de vistas de temas en un calendario, y también me encantaría que nuestros usuarios pudieran agregar eventos individuales a sus propios calendarios de Google o .ics.

Saludos.

1 me gusta

¡Hola,

Como se mencionó en el mensaje original:

Por favor, tómate un momento para considerar si las nuevas funciones de eventos en el complemento Discourse Calendar creadas por el equipo de Discourse son adecuadas para ti. Si cumplen con tus necesidades, recomendamos usar ese complemento. Solo debes usar este complemento si ya has considerado primero Discourse Calendar.

Recomendamos que uses el complemento Discourse Calendar si es posible. Solo damos soporte a este complemento para casos de uso específicos que no están cubiertos por ese complemento. Afortunadamente, el complemento Calendario incluye ambas funciones que mencionaste.

Sí, eso lo hace este complemento. Pero, como se mencionó, parece que tienes un caso de uso adecuado para Discourse Calendar, así que te sugiero que uses ese.

Internamente, de hecho, usamos el complemento Discourse Calendar para organizar eventos para nuestros miembros, en lugar de este complemento. Brindamos soporte para casos de uso específicos de algunos clientes y estamos abiertos a otros casos de uso si alguien los tiene, pero eso es todo.

3 Me gusta

Gracias, Angus. Leí todos esos consejos y te pregunté específicamente porque parecía que habías participado en la configuración de la comunidad de la Red de Empoderamiento Jurídico en cuestión, y me gustó cómo funcionaba. Pero me alegra saber que recomiendas el plugin oficial de Calendario; lo exploraré.

3 Me gusta

¿Es correcto decir que el plugin oficial de Calendario de Discourse no tiene algo como el filtro “Agenda” en la lista de temas? Ordenar la lista de temas por las fechas de los eventos en un tema es uno de los casos de uso principales que me interesan. Es más para gestión de proyectos (tratando los temas como tareas y programándolas en consecuencia) que para eventos.

4 Me gusta

Estoy pensando en añadir algo así también. ¿Has encontrado alguna solución?

Esta es mi idea: Cada evento debería considerarse una respuesta, como fijar un tema. El botón para agregar un evento se convierte en un menú desplegable que enumera todos los eventos del tema.

2 Me gusta

Lo revisaré y te contesto.

1 me gusta

No estamos desarrollando nuevas funciones para este complemento. Hemos descontinuado esto en favor de la función Eventos Oficiales del complemento discourse-calendar.

2 Me gusta

No creo que haya una lista de temas con estilo de agenda en el plugin oficial todavía.

1 me gusta

¿Alguien sabe si el contenido que antes estaba en Pavilion se ha movido a un nuevo enlace?

Cuando este plugin se ejecuta en una categoría restringida, vemos:

… pero el enlace a la documentación está roto y genera un error 404. He buscado por el sitio en cuestión y también aquí, pero no sé si hay otro lugar donde se encuentre esta instrucción para el usuario.

2 Me gusta

De alguna manera movimos ese tema a una categoría cerrada. Necesitamos devolverlo al ámbito público. Lo discutiremos y te responderemos pronto.

P.D.
La página debería estar de vuelta ahora.

3 Me gusta