Events Plugin 📅

Попробую воспроизвести это.

3 лайка

Как выполнить JavaScript после загрузки страницы календаря?


edit: Объясню свой случай.
Мне поручили реализовать многоцветные события, например:

Я не хотел делать форк плагина, поэтому добился нужного результата с помощью следующего кода.
Цвета привязаны к тегам событий и заменяют цвет категории по умолчанию.

Я добавил список тегов в HTML события следующим образом: 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>

Я генерирую узор из полос:

<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
    // Цвета тегов
    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>

Также я добавил немного CSS.

Результат:
Событие с 2 тегами:

Событие с 3 тегами:

Проблема, с которой я столкнулся, заключается в том, что мой JavaScript выполняется при смене страницы, и не применяется к событиям предыдущих/следующих месяцев, так как календарь динамически подгружает свой контент.

Если я нахожусь в октябре и нажимаю «вперед» дважды, переходя в декабрь, это выглядит так:

Именно поэтому я хочу, чтобы мой JS выполнялся после загрузки содержимого календаря.

3 лайка

Я попробовал другой способ и добился эффекта полосок, отредактировав функцию eventsForDay в файле /assets/javascripts/discourse/lib/date-utilities.js.es6:

Я заменил эту строку:

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

на:

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

И добавил следующее:

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

Это работает отлично и является более чистым способом достижения желаемого результата. Однако я не знаю, как переопределить эту функцию или файл, не создавая форк плагина…

2 лайка

Плагин, похоже, несовместим с последней версией Discourse.
Из файла журнала пересборки:

1: from /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!': uninitialized constant #Class:0x0000562a2a10fa90::SCOPES
Возможно, вы имели в виду: Sprockets (NameError)

** НЕСОВМЕСТИМЫЙ ПЛАГИН **

Сборка Discourse не удалась из-за ошибок в плагине по адресу
/var/www/discourse/plugins/discourse-events

Пожалуйста, попробуйте удалить этот плагин и выполнить сборку заново!

4 лайка

Похоже, проблема была в Discourse, а не в плагине.
В последней бета-версии Discourse плагины, по крайней мере, снова работают.

2 лайка

Я могу подтвердить, что в настоящее время невозможно пересобрать последнюю стабильную версию Discourse с текущим плагином events. :worried:

К сожалению, мы не можем переключиться на ветку tests-passed — мы выбираем стабильную ветку именно для того, чтобы избегать подобных проблем. Кто-нибудь занимается этим вопросом?

Я пробовал пересобрать с версией v2.5.2 (которая раньше работала), но это также завершается той же ошибкой, поэтому я не уверен, в чём проблема. Есть ли конкретный коммит (плагина или стабильной версии Discourse), на который я могу указать контейнеру?

2 лайка

Наша политика поддержки заключается в обеспечении совместимости с последней версией Discourse, для которой тесты пройдены (поскольку это настройка по умолчанию в discourse_docker). Однако мы хотели бы понять, сколько пользователей семейства плагинов Pavilion находятся на стабильной ветке Discourse.

Кроме того, мы планируем в ближайшем будущем отказаться от плагина events в пользу плагина events команды Discourse.

3 лайка

Я понимаю, что разработчикам приходится смотреть вперёд, чтобы обеспечить совместимость с будущим Discourse — это логично. Но если нет какой-либо стабильной ветки для плагина, то пользователи, ищущие стабильную настройку, оказываются в ситуации, когда их окружение ломается из-за бета-версии, которую они даже не используют.

[strike]Есть ли какие-то подсказки, какой именно коммит нарушил совместимость? Я мог бы попробовать работать с ним, но я не понимаю, какое именно изменение стало причиной проблемы.[/strike]

Добавлено: для тех, у кого возникли проблемы с этим и кто нуждается во временном обходном пути, этот коммит, похоже, является виновником.

3 лайка

Возникла проблема с ключами API webcal, которая была устранена.

Спасибо за отчет @md-misko

4 лайка

Опять кажется, что плагин несовместим с последней версией Discourse 2.6.0.beta5 (2bb7676ba4).
На этот раз при доступе к сайту отображается только пустая страница. Однако, в отличие от прошлого раза, при использовании admin/upgrade ошибки не возникало.
После отключения плагина и пересборки контейнера Discourse снова работает корректно.

4 лайка

Привет! Плаги Events создаёт ссылки «Добавить в календарь» в верхней части постов, как на этой странице:

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

Также, в 2021 году, каково мнение людей о использовании плагина Pavilion Events по сравнению с официальным плагином Calendar?

Меня в основном интересует поиск способов упрощения агрегации просмотров тем в календаре, а также хотелось бы иметь возможность для наших пользователей добавлять отдельные события в свои собственные календари Google или .ics.

С уважением.

1 лайк

Привет,

Как упоминалось в первом посте:

Пожалуйста, уделите минуту и подумайте, подходят ли вам новые функции событий в плагине Discourse Calendar, созданные командой Discourse. Если они удовлетворяют ваши потребности, мы рекомендуем использовать именно этот плагин. Используйте данный плагин только в том случае, если вы уже предварительно рассмотрели Discourse Calendar.

Мы рекомендуем использовать плагин Discourse Calendar, если это возможно. Мы поддерживаем этот плагин только для конкретных случаев использования, которые не покрываются указанным плагином. К счастью, плагин Calendar включает обе функции, которые вы упомянули.

Да, это именно этот плагин. Но, как уже упоминалось, похоже, что у вас есть подходящий случай для использования Discourse Calendar, поэтому мы советуем использовать его.

Внутри нашей компании мы на самом деле используем плагин Discourse Calendar для организации мероприятий для наших участников, а не этот плагин. Мы поддерживаем специфические случаи использования для нескольких клиентов и готовы рассмотреть новые случаи, если они у кого-то есть, но только в таких рамках.

3 лайка

Спасибо, Ангус. Я прочитал все эти советы и обращался именно к вам, потому что мне показалось, что вы участвовали в создании сообщества Legal Empowerment Network, которое меня заинтересовало, и мне понравилось, как оно работает. Но рад слышать, что вы рекомендуете официальный плагин календаря; я изучу его.

3 лайка

Правильно ли я понимаю, что официальный плагин Discourse Calendar не имеет фильтра «Повестка дня» в списке тем? Сортировка списка тем по датам событий, указанным в теме, — один из основных сценариев, которые меня интересуют. Это больше относится к управлению проектами (где темы рассматриваются как задачи и планируются соответствующим образом), чем к событиям.

4 лайка

Я тоже думаю добавить что-то подобное. Вы уже придумали какие-то решения?

Вот моя идея: каждое событие должно рассматриваться как ответ, аналогично закреплению темы. Кнопка «Добавить событие» превращается в выпадающее меню, в котором перечислены все события темы.

2 лайка

Я проверю и свяжусь с вами.

1 лайк

Мы больше не разрабатываем новые функции для этого плагина. Мы отказались от него в пользу официальной функции «События» в плагине discourse-calendar.

2 лайка

По-моему, в официальном плагине пока нет списка тем в формате повестки дня.

1 лайк

Не знает ли кто-нибудь, куда исчезла новая ссылка, которая ранее содержала контент по адресу Pavilion?

Когда этот плагин работает в ограниченной категории, мы видим:

… но ссылка на документацию не работает и выдаёт ошибку 404. Я поискал по указанному сайту и здесь, но не знаю, есть ли где-то ещё инструкция для пользователя.

2 лайка

Мы каким-то образом переместили эту тему в закрытую категорию. Нужно вернуть её в публичный раздел. Мы обсудим это и скоро вернёмся с ответом.

P.S.
Страница должна быть уже восстановлена.

3 лайка