8

(注意:虽然我不完全确定在 SuperUser 上是否更好地询问这个问题,但我猜你可能不得不在 xpi/jar 文件中使用 css 设置来搞乱这一事实,这应该使它适合 SO。)

Mozilla Thunderbird 的 Calendar 扩展 Lightning 会为不同的日历使用不同的颜色,并且只使用一个窄竖条作为类别颜色:(浅蓝色为日历颜色,红色为类别颜色)

在此处输入图像描述

我想知道的是如何去改变/“破解”css样式——当然——必须与这个相关联,埋在插件目录的某个地方,这样在上面的例子中,事件将完全红色。

任何人都知道如何实现这一目标?

4

7 回答 7

10

category-overlay.png 图像只是为类别栏提供正确外观的渐变叠加。

这里有两个选择。一个更简单但不那么可靠,另一个更困难:

选项 A:简单

在您的 $profile/chrome/ 目录中创建一个 userChrome.css。它应包含以下内容:

.calendar-color-box[categories~="mycategory"],
.calendar-event-box-container[categories~="mycategory"] {
   背景颜色:#abc123 !重要;
}

您需要为要更改颜色的每个类别执行此操作。请注意,更改 Lightning 选项中的类别颜色不会更改您在此处设置的类别颜色。

选项 B:更完整

您需要在此处修改 Lightning.xpi 中的一些文件。此解决方案仅需要您在 Lightning 中设置类别颜色,也适用于新添加的类别。请注意,这样没有类别的事件是透明的,如果你想要更多,你必须自己做。

  1. 使用 zip 程序打开 Lightning.xpi
  2. 进入目录 chrome/
  3. 使用 zip 程序打开包含的 calendar.jar
  4. 下降到内容/日历/
  5. 打开 calendar-multiday-view.xml
    • 搜索“日历颜色框”并将其从类属性中删除
    • 上面几行有一个 <content> 标签,添加 class="category-color-box" 到它
  6. 打开 calendar-month-view.xml 和 calendar-view-core.xml 并执行相同操作
  7. 将文件保存回 calendar.jar
  8. 将 calendar.jar 保存回 Lightning.xpi
  9. 安装修改后的lightning.xpi

如果您希望看到补丁,这适用于最新的 comm-central 源:

diff --git a/calendar/base/content/calendar-month-view.xml b/calendar/base/content/calendar-month-view.xml
--- a/calendar/base/content/calendar-month-view.xml
+++ b/calendar/base/content/calendar-month-view.xml
@@ -52,21 +52,20 @@

 <bindings id="calendar-month-view-bindings"
   xmlns="http://www.mozilla.org/xbl"
   xmlns:html="http://www.w3.org/1999/xhtml"
   xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
   xmlns:xbl="http://www.mozilla.org/xbl">

   <binding id="calendar-month-day-box-item" extends="chrome://calendar/content/calendar-view-core.xml#calendar-editable-item">
-    <content mousethrough="never" tooltip="itemTooltip">
+    <content mousethrough="never" tooltip="itemTooltip" class="category-color-box">
       <xul:vbox flex="1">
         <xul:hbox>
           <xul:box anonid="event-container"
-                   class="calendar-color-box"
                    xbl:inherits="calendar-uri,calendar-id"
                    flex="1">
             <xul:box class="calendar-event-selection" orient="horizontal" flex="1">
               <xul:stack anonid="eventbox"
                          class="calendar-event-box-container"
                          xbl:inherits="readonly,flashing,alarm,allday,priority,progress,status,calendar,categories"
                          flex="1">
                 <xul:hbox class="calendar-event-details">
diff --git a/calendar/base/content/calendar-multiday-view.xml b/calendar/base/content/calendar-multiday-view.xml
--- a/calendar/base/content/calendar-multiday-view.xml
+++ b/calendar/base/content/calendar-multiday-view.xml
@@ -2119,20 +2119,19 @@
       ]]></handler>
     </handlers>
   </binding>

   <!--
      -  An individual event box, to be inserted into a column.
     -->
   <binding id="calendar-event-box" extends="chrome://calendar/content/calendar-view-core.xml#calendar-editable-item">
-    <content mousethrough="never" tooltip="itemTooltip">
+    <content mousethrough="never" tooltip="itemTooltip" class="category-color-box">
         <xul:box xbl:inherits="orient,width,height" flex="1">
           <xul:box anonid="event-container"
-                   class="calendar-color-box"
                    xbl:inherits="orient,readonly,flashing,alarm,allday,priority,progress,status,calendar,categories,calendar-uri,calendar-id"
                    flex="1">
             <xul:box class="calendar-event-selection" orient="horizontal" flex="1">
               <xul:stack anonid="eventbox"
                          align="stretch"
                          class="calendar-event-box-container"
                          flex="1"
                          xbl:inherits="context,parentorient=orient,readonly,flashing,alarm,allday,priority,progress,status,calendar,categories">
diff --git a/calendar/base/content/calendar-view-core.xml b/calendar/base/content/calendar-view-core.xml
--- a/calendar/base/content/calendar-view-core.xml
+++ b/calendar/base/content/calendar-view-core.xml
@@ -46,21 +46,21 @@
     xmlns="http://www.mozilla.org/xbl"
     xmlns:html="http://www.w3.org/1999/xhtml"
     xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     xmlns:xbl="http://www.mozilla.org/xbl">

   <binding id="calendar-editable-item">
     <content mousethrough="never"
              tooltip="itemTooltip"
-             tabindex="-1">
+             tabindex="-1"
+             class="category-color-box">
       <xul:vbox flex="1">
         <xul:hbox>
           <xul:box anonid="event-container"
-                   class="calendar-color-box"
                    xbl:inherits="calendar-uri,calendar-id"
                    flex="1">
             <xul:box class="calendar-event-selection" orient="horizontal" flex="1">
               <xul:stack anonid="eventbox"
                          class="calendar-event-box-container"
                          flex="1"
                          xbl:inherits="readonly,flashing,alarm,allday,priority,progress,status,calendar,categories">
                 <xul:hbox class="calendar-event-details">

选项 C:更改 Javascript

这将是最好的 hack,尽管它需要更改 javascript。按照选项 B 中的说明打开 calendar.jar 并查看 calendar-views.js,有两个功能:updateStyleSheetForViews()updateStyleSheetForCategory(). 我将把它留给想要自己修改它的人,但我的想法是添加一个规则来.calendar-color-box[categories~=...]覆盖默认规则,以防有类别。这样,如果没有设置类别,则使用日历颜色,否则使用所需的类别颜色。

玩得开心 :)

于 2011-03-26T14:37:41.310 回答
8

这个扩展看起来非常适合你想要的功能。

https://addons.mozilla.org/en-us/thunderbird/addon/calendar-tweaks/

要做到这一点,请取消选中所有选项,然后检查这些:

  • 将类别颜色应用于事件背景
  • 如果没有类别颜色,则使用日历颜色
于 2012-12-27T11:32:18.650 回答
2

您应该安装DOM Inspector 插件以了解事件的 XUL 结构。与userChrome.css一起,您应该能够按照您想要的方式对其进行样式设置。

于 2011-03-05T10:39:14.027 回答
1

每日日历
的图像 每周日历的图像

所有代码作者:TOUT SÉLECTIONNER
这是我从一个法语网站翻译的几个步骤的过程。我只是记下对我有用的东西。这适用于雷鸟 3.1.9。对于 Lightning-1-1.0b2-tb-macosx.xpi 插件。这些说明写于 2011 年 4 月 8 日。这些说明专门针对 Mac 用户,尽管您也可以将它们用于 Windows。


全部大写的任何内容都意味着您需要换出自己的信息。示例:YOUREMAIL@gmail.com

第1部分:

  1. 找到您的个人资料文件夹。类似于:MachintoshHD/Users/YOURUSERNAME/Library/Thunderbird/Profiles/RANDOMLETTERS.default
  2. 在此处创建一个名为“chrome”的文件夹
  3. 创建一个名为 userChrome.css 的文件并将其保存到 chrome 文件夹中。您可以使用常规文本编辑器创建 .css 文件,只要它具有 .css 扩展名。我使用了dreamweaver、一个名为JEdit 的免费程序和文本编辑——对我来说一切都很好。
  4. 在 CSS 文件中,您将粘贴以下代码。(请注意,任何被雷鸟(或任何读取 .css 的内容)包围的文本/* */都不会被识别为代码)它只是作为编码它的人的符号存在。示例/*TEXT*/

编码:

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */

.calendar-event-box-container[categories] { margin: 1px !important;} /* add margin to the category-box */
.calendar-color-box:not([categories]) { color: black !important; background-color: #A6A6A6 !important;} /* events without category will appear grey */
calendar-category-box:not([categories]) { display: block !important; } /* category-box always displayed even if event doesn't have a category */

/* 2- using the calendar uri (much better) */
.category-color-box[calendar-uri="http://my.caldav.server/path/to/file"]{ background-color: #FF0000 !important; display:block !important; float:right;}
/* display the category-box with the specified color (forced color of the calendar) */

/* for each category, assign a forced color 
each category must be spelled lowercase in the css, spaces replaced with '_'
I didn't make any test with accents... but they may work (lowercase, spaces -> _) eg: "Appel Téléphonique" -> "appel_téléphonique"
*/
.calendar-color-box[categories="CATEGORY_NAME1"] { color: black !important; background-color: #CCCCFF !important;}
.calendar-color-box[categories="CATEGORY_NAME2"] { color: black !important; background-color: #FF99FF !important;}
.calendar-color-box[categories="CATEGORY_NAME3"] { color: black !important; background-color: #FF0000 !important;}
.calendar-color-box[categories="CATEGORY_NAME4"] { color: black !important; background-color: #CC33CC !important;}
.calendar-color-box[categories="CATEGORY_NAME5"] { color: black !important; background-color: #0000FF !important;}

第 2 部分:现在是复杂的部分 - 拆开闪电插件,一次一步,将其重新组合在一起,并将其作为修改后的插件加载到 Thunderbird 中。

  1. 下载 Thunderbird 的闪电插件 (lightning-1-1.0b2-tb-macosx.xpi)。它将具有 .xpi 扩展名。
  2. .xip 文件与 zip 文件相同。右键单击该文件,单击“获取信息”并将扩展名更改为 .zip 而不是 .xpi。它应该看起来像这样的 Lightning-1-1.0b2-tb-macosx.zip。或者你可以重命名它。示例:ORIGINALPLUGIN.zip
  3. 双击文件解压文件。如果这不起作用,您可能需要下载解压缩软件(例如 mac 的 stuffit expander)。
  4. 在文件夹中,找到 calendar.jar 文件。你可以在这里找到它:ORIGINALPLUGIN FOLDER/chrome/calendar.jar
  5. 将 calendar.jar 重命名为 calendar.zip,解压该文件。
  6. 现在您需要再找到三个文件(将它们复制到新区域。)
    /content/calendar/calendar-month-view.xml
    /content/calendar/calendar-multiday-view.xml
    /content/calendar/calendar-view-核心.xml
  7. 使用 JEdit 等程序在这些文件中进行以下编辑。
    符号“<”表示删除此行
    符号“>”表示在其位置添加此行
    代码 BY:TOUT SÉLECTIONNER

-> 日历/内容/日历/日历-月-view.xml

Line 64
<                    xbl:inherits="calendar-uri,calendar-id"
>                    xbl:inherits="calendar-uri,calendar-id,categories"
Line 95
<                     <xul:calendar-category-box anonid="category-box" xbl:inherits="categories" pack="end"/>
>                     <xul:calendar-category-box anonid="category-box" xbl:inherits="categories,calendar-uri" pack="end"/>

-> 日历/内容/日历/日历-多日-view.xml

Line 2135
<                   <xul:calendar-category-box anonid="category-box" xbl:inherits="categories" pack="end" />
>                   <xul:calendar-category-box anonid="category-box" xbl:inherits="categories,calendar-uri" pack="end" />

-> 日历/内容/日历/日历视图核心.xml

Line 59
<                    xbl:inherits="calendar-uri,calendar-id"
>                    xbl:inherits="calendar-uri,calendar-id,categories"
Line 84
<                                                xbl:inherits="categories"
>                                                xbl:inherits="categories,calendar-uri"
Line 394
<                 xbl:inherits="categories">
>                 xbl:inherits="categories,calendar-uri">

第 3 部分:

  1. 进行更改后,保存每个文件。
  2. 替换解压后的日历文件夹中的原始文件
  3. 选择“皮肤”和“内容”文件夹。右键单击并选择“压缩 2 个项目”。如果您压缩文件夹而不是单个文件,这可能不起作用。
  4. 重命名此文件 calendar.jar
  5. 用您刚刚创建的新文件替换原来的 calendar.jar 文件。(参见第 2 部分,第 4 步) ORIGINALPLUGIN 文件夹/chrome/calendar.jar
  6. 选择 ORIGINALPLUGIN 文件夹的内容。

    Calendar-js
    chrome
    chrome.manifest
    组件
    默认
    install.rdf
    模块
    timezones.sqlite

  7. 右击选中的项目,选择“压缩8个项目”

  8. 将 zip 文件重命名为 ANYNAMEYOUWANT.xpi 例如,您可以将其命名为 modifiedLightningPlug.xpi
  9. 加载插件:打开thunderbird>Tools>Add-ons>Plugins>install
  10. 找到 ANYNAMEYOUWANT.xpi 文件,让它加载,然后重新启动 Thunderbird。

. . . 应该就是这样。它对我有用。我会回来看看是否有其他人对此感到幸运,如果没有,我会仔细检查我的笔记。感谢 TOUT SÉLECTIONNER 编写原始代码。

于 2011-04-08T05:53:25.107 回答
1

刚刚更新了我在这个页面上用不同的想法做事的方式......我是“法国邮报”的作者,我只需要另一种方式来反转颜色......

所以这是为了你的快乐(还有我的用户!!)

这是对闪电 xpi 所做修改的统一差异输出(更准确地说是其中的 calendar.jar 包)

您可以在原始帖子中找到所有信息: http ://www.geckozone.org/forum/viewtopic.php?f=22&t=89384&start=15#p646027

对于不会说法语的人,这里有一些翻译:大家好,

这是更改的更正确版本。与我之前的建议相比,最大的优点是我们不再需要在文件 userChrome.css 中定义类别/日历的颜色,该文件也根本没有使用!

全面的:

  • 对 XML 文件应用更改以允许在 DOM 的各种元素上使用“日历 ID”和“类别”。

  • 更新文件“calendar-views.js”以应用参数化的颜色类别和日历,但通过反转它们。

  • 最后,“calendar-views.css”中的一些 css 更改用于:

    • 始终显示边框和 1px 的边距(我认为渲染效果更好......)
    • 未分类事件的灰色 (#ACACAC")
    • 选择元素时仅更改日历的颜色(即右边框)(通过添加属性“.calendar-event-box-container”)

此外,图像 /skin/calendar/category-overlay.png 已扩展以增加边框的大小......

注意:只剩下把所有这些东西作为一个选项,但我现在没有时间看那里......但如果你们中的一个可以给我一些研究途径,我会试一试!

一切顺利 :)

文森特

于 2011-09-02T17:12:54.423 回答
0

感谢speedballs的回答,我能够找到控制类别覆盖的文件:下面有一个PNG文件:

....\extensions\{e2fda1a4-762b-4020-b5ad-a41df1933103}\chrome\calendar.jar\
    skin\calendar\category-overlay.png

这个文件的宽度是7px,扩大它的宽度会扩大日历视图中的Category Color Overlay。(我只是使用 GIMP 水平缩放它。)

因此,似乎不可能使用该类别为整个事件完全着色,因为它的颜色仅通过覆盖 png 的“硬连线”像素宽度映射。

于 2011-03-05T16:45:11.883 回答
0

我不是编程人员,所以我找到了修改代码的方法。

你可以通过创建几个单独的日历来解决这个问题(例如,你可以称之为工作、个人、生日等)。您可以选择每个日历的背景颜色。如果您使所有日历同时可见(通过选中左侧的日历框),您在每个日历中输入的内容将具有不同的背景颜色,而不仅仅是右侧的条纹。

当您创建新事件时,不要选择类别,而是将类别保留为“无”,而是在日历下拉菜单中选择一个日历并将您的事件分配给特定的日历(每个日历都有不同的背景颜色)。

唯一的缺点是,如果您想在某个时候导出日历,则需要导出所有单独的日历。但否则它会起作用。

于 2013-09-25T17:24:19.997 回答