Как выполнить 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 выполнялся после загрузки содержимого календаря.



