2

似乎不支持 CalDav 事件着色 - 同一个日历的所有事件都具有相同的颜色 - 日历的主颜色!

我正在寻找一种替代方法来获取“主日历”中的彩色事件,而无需在我的服务器上创建与颜色一样多的日历。

我的第一个想法:创建不同颜色的不同日历。这里有两个问题 1. 我可以通过 CalDav 设置日历的颜色吗?

  1. 是否可以在一个“主日历”中“嵌入”不同的日历,每个子日历都有一种颜色?

我想实现类似的原因是我想避免为每个子日历创建多个帐户,这反过来又会迫使用户单独注册日历(好的,我可以使用 auto -检测,但在我的案例研究中,它使同步变得更加复杂)。

有人对此有什么建议吗?

4

2 回答 2

2

没有关于如何在日历或事件上使用颜色的 RFC 标准。

iOS 和 OSX 日历客户端仅支持单一日历颜色,它们不能为单个事件着色(与 Outlook 不同,它具有额外的“颜色类别”功能)。

您可以通过 WebDAV 设置日历的 Apple 颜色。它是(当前未记录的)Apple 特定扩展,是日历集合上的一个属性。样本:

<calendar-color xmlns="http://apple.com/ns/ical/">#2952A3</calendar-color>

使用常规 PROPPATCH 在现有日历上设置颜色(或在创建集合时在 MKCOL 中):

PROPPATCH /your/calendar/url/ HTTP/1.1
...

<propertyupdate xmlns="DAV:">
  <set>
    <prop>
      <calendar-color xmlns="http://apple.com/ns/ical/">#2952A3</calendar-color>
    </prop>
  </set>
</propertyupdate>

不幸的是,无法在 CalDAV 中的其他日历中嵌入日历:“包含在日历集合中的集合不得包含任何深度的日历集合,即不允许在任何深度的其他日历集合中“嵌套”日历集合。” RFC 4791

更糟糕的是,大多数客户端甚至不允许在任意 DAV 集合层次结构中使用日历(也就是说,它们只将 calendar-home 视为一个平面列表,而不遍历非日历子集合)。

总结:没有“合理”的方式来支持每个事件的颜色,主要是因为 Apple 客户端根本没有该功能。

PS:其他 CalDAV 客户端可能具有该功能(例如 BusyCal),并通过 iCalendar X 属性或再次使用自定义 DAV 属性将颜色嵌入到事件中。

于 2015-06-16T15:03:04.323 回答
0

似乎有一个更新的 RFC 指定日历和事件级别的颜色。

https://www.rfc-editor.org/rfc/rfc7986

  1. 对日历组件的修改

本节详细介绍了 iCalendar [RFC5545] 中定义的语法的更改。新元素在后续部分中定义。

calprops =/ *( ; ; 以下是可选的, ; 但不得多次出现。 ; uid / last-mod / url / refresh / source / color ; ; 以下是可选的, ; 并且可以出现多次。 ; 名称 / 描述 / 类别 / 图片 ; )

eventprop =/ *( ; ; 以下是可选的, ; 但不得多次出现。 ; color / ; ; 以下是可选的, ; 并且可能出现多次。 ; 会议/图像 ; )

...

5.9. 颜色属性

说明:此属性指定客户端在向用户呈现相关数据时可以使用的颜色。通常,这将显示为事件或任务的“背景”颜色。该值是一个不区分大小写的颜色名称,取自 CSS3 名称集,在 [W3C.REC-css3-color-20110607] 的第 4.3 节中定义。

但是我无法使用 mac 日历和 iOS 使其在事件级别上工作,尽管我怀疑这些客户端最早提出了 RFC 扩展实现,因为作者来自 Apple。

也有点遗憾,只支持 CSS3 颜色名称;(

于 2017-03-23T07:11:34.207 回答