Will try to repro this.
如何在日历页面加载后执行 JavaScript?
编辑:我解释一下我的情况。
有人要求我实现多色事件,例如:
我不想创建该插件的分支,因此我通过以下代码实现了某种效果。
这些颜色与事件标签相关,并替换了默认的类别颜色。
我通过以下方式将标签列表添加到事件 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 仅在页面切换时执行,无法对日历动态加载的之前/之后月份的事件应用条纹颜色。
例如,如果我在十月并点击“下一月”两次跳转到十二月,显示效果如下:
因此,我希望我的 JavaScript 能在日历内容加载完成后执行。
我尝试了另一种方法,通过编辑 /assets/javascripts/discourse/lib/date-utilities.js.es6 中的 eventsForDay 函数实现了条纹效果:
我将这一行:
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});`;
}
效果非常好,而且这种方式更简洁。不过,我不知道如何在不 fork 该插件的情况下覆盖此函数或文件……
插件似乎与最新版本的 Discourse 不兼容。
来自重建日志文件:
1: 来自 /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!':未初始化的常量 #Class:0x0000562a2a10fa90::SCOPES
您是指?Sprockets (NameError)
** 不兼容的插件 **
由于插件中的错误,您无法构建 Discourse,路径为:
/var/www/discourse/plugins/discourse-events
请尝试移除该插件并重新构建!
看来问题出在 Discourse 本身,而不是插件上。至少在 Discourse 的最新测试版中,插件已经恢复正常工作。
我可以确认,目前无法使用当前的 events 插件重新构建 Discourse 的最新稳定版本。![]()
很遗憾,我们无法切换到 tests-passed——我们选择稳定分支正是为了避免此类问题。有人正在调查此事吗?
我尝试过使用 v2.5.2 版本进行重新构建(该版本之前可以正常工作),但同样报错了相同的错误,因此我不确定问题出在哪里。是否有某个特定的提交(来自插件或稳定版 Discourse)我可以指向容器?
我们的支持政策是确保与最新的 tests-passed 版本的 Discourse 兼容(因为这是 discourse_docker 中的默认设置)。不过,我们希望能了解有多少 Pavilion 系列插件的用户使用的是 Discourse 的 stable 分支。
此外,我们计划在不久的将来弃用 events 插件,转而支持 Discourse 团队开发的 events 插件。
我理解开发者必须着眼未来以保持与 Discourse 未来的兼容性——这很有道理。但如果插件没有某种稳定分支,那么对于那些寻求稳定配置的用户来说,一旦他们的环境因未使用的测试版版本而崩溃,就会陷入困境。
关于是哪个提交破坏了兼容性,有什么建议吗?我可以尝试基于那个版本进行修复,但我对具体是哪个变更导致的问题感到困惑。
编辑补充:任何遇到此问题并需要临时解决方案的用户,这个提交 似乎是罪魁祸首。
webcal API 密钥曾出现问题,现已解决。
感谢 @md-misko 的报告。
插件似乎再次与最新的 Discourse 版本 2.6.0.beta5(2bb7676ba4)不兼容。
这次访问站点时只会显示空白页面。但不同于上次,使用 admin/upgrade 时并未出现错误。
禁用该插件并重新构建容器后,Discourse 已恢复正常运行。
你好,这个 Events 插件会在帖子顶部生成“添加到日历”的链接吗?就像这个页面一样:
https://community.namati.org/t/asia-pacific-justice-for-all-webinar-series/78084
另外,在 2021 年,大家对使用这个 Pavilion Events 插件与官方 Calendar 插件的看法如何?
我主要想找到一种方法,轻松地在日历上聚合话题的查看情况,同时也希望我们的用户能够将单个事件添加到自己的 Google 日历或 .ics 日历中。
祝好。
你好,
正如主题帖(OP)中提到的:
请花点时间考虑一下,由 Discourse 团队开发的 Discourse Calendar 插件中的事件功能 是否适合您。如果它们能满足您的需求,我们建议您使用该插件。只有在您已经首先考虑过 Discourse Calendar 插件后,才应使用本插件。
如果您可以使用,我们建议您使用 Discourse Calendar 插件。我们仅针对该插件无法满足的特定用例提供支持。令人高兴的是,Calendar 插件具备您提到的两项功能。
是的,这正是本插件的功能。但正如前面提到的,听起来您非常适合使用 Discourse Calendar,因此建议您采用该插件。
在我们的内部,我们实际上使用的是 Discourse Calendar 插件来为会员组织活动,而不是本插件。我们为少数客户支持特定的用例,如果任何人有特定的用例需求,我们也乐意提供支持,但仅限于此。
谢谢 Angus。我读了所有那些建议,之所以专门问你,是因为看起来你参与了相关“法律赋能网络”社区的搭建,而且我很欣赏它的运作方式。不过,很高兴听到你推荐官方的日历插件,我会去研究一下。
我理解得对吗?官方 Discourse 日历插件在主题列表中似乎没有类似“议程”的筛选功能?按主题中的事件日期对主题列表进行排序是我主要关注的用例之一。这更多是用于项目管理(将主题视为任务并相应安排计划),而非活动安排。
我还在考虑添加类似的功能。你们有没有想出什么解决方案?
我的想法是:每个事件都应被视为一种回复,类似于置顶话题。添加事件按钮将变为下拉菜单,列出该话题中的所有事件。
我会检查一下,然后给您回复。
我们不再为该插件开发新功能。我们已弃用此插件,转而推荐使用 discourse-calendar 插件中的官方活动(Official Events)功能。
我觉得官方插件中还没有议程风格的议题列表。
有人知道原来包含 Pavilion 内容的链接是否已失效吗?
当此插件在受限类别中运行时,我们会看到:
……但 文档 链接已损坏并返回 404 错误。我在相关网站和这里都找过,但不确定是否有其他位置存放了这份用户指南。
我们不知为何将该话题移到了一个已关闭的分类中。需要将其重新公开。我们将进行讨论并尽快回复。
附:
该页面现在应该已经恢复了。




