Код AddEvent не работает в Discourse

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

Вот фрагмент кода:

image

А получаю вот что…

Я не профессиональный программист, поэтому, если вы сможете упростить терминологию, буду очень благодарен. :pray:

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

Вы можете использовать компонент темы, чтобы это работало. Если вы добавите что-то вроде этого в новый компонент темы — во вкладке «Заголовок» — и затем примените его к вашей активной теме, вы сможете использовать этот виджет.

<script type="text/discourse-plugin" version="0.8">
  const loadScript = require("discourse/lib/load-script").default;
  const { next } = require("@ember/runloop");

  api.decorateCookedElement(
    post => {
      const calendars = post.querySelectorAll(`[data-wrap="addEvent"]`);
      if (!calendars.length) return;

      calendars.forEach(calendar => {
        const wrapper = document.createElement("div");
        wrapper.dataset.calendar = calendar.dataset.calendar;
        wrapper.dataset.configure = false;
        wrapper.classList.add("ae-emd-cal");
        calendar.append(wrapper);
      });

      next(() =>
        loadScript("https://addevent.com/js/cal.embed.t1.init.js")
      );
    },
    { id: "AddEvent decorator", onlyStream: true }
  );
</script>

После этого вы можете добавить календарь AddEvent в сообщение, добавив что-то вроде этого в вашем сообщении.

[wrap=addEvent calendar=bJ306355][/wrap]

Вы можете изменить атрибут calendar=bJ306355, чтобы указать идентификатор конкретного календаря, который вы хотите встроить.

Последнее, что нужно сделать, — добавить скрипт AddEvent в белый список в настройках вашего сайта (это еще один уровень безопасности).

В админ-панели найдите настройку content_security_policy_script_src и добавьте туда эту ссылку:

https://addevent.com

Дайте знать, если это сработает, и я могу упаковать это как компонент темы.

Привет @Johani,

Твоё решение мне подходит. Просто хотел сообщить об этом.

Спасибо!

Итак, я только что создал новый компонент темы для отображения календаря AddEvent.

:link: GitHub - graydenshand/discourse_upcoming_addevent: Replace the DiscourseEvent "upcoming events" calendar with an AddEvent embed · GitHub

Вместо встраивания календаря в пост, что слишком узко для отображения десктопной версии встраивания, этот компонент темы перехватывает страницу «Предстоящие события» плагина DiscourseCalendar.

Обратите внимание, что для этого мне пришлось настроить скрипт AddEvent (https://addevent.com/js/cal.embed.t1.init.js), чтобы разрешить повторный рендеринг между переходами между страницами.