如何“破解”Thunderbird Lightning扩展以完全着色类别

时间:2011-03-04 22:18:50

标签: css thunderbird thunderbird-addon thunderbird-lightning

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

Mozilla Thunderbird的日历扩展名Lightning将为不同的日历使用不同的颜色,并使用一个窄的垂直条作为类别颜色:(浅蓝色作为日历颜色,红色作为类别颜色)

enter image description here

我想知道的是我如何改变/“黑客”css样式 - 当然 - 必须与此相关联,埋在插件目录中的某个地方,以便在上面的示例中,事件将完全涂成红色。

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

7 个答案:

答案 0 :(得分:9)

category-overlay.png图像只是一个渐变叠加层,可以使类别栏看起来正确。

这里有两个选择。一个更容易但不可靠,另一个更难:

选项A:轻松

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

.calendar-color-box[categories~="mycategory"],
.calendar-event-box-container[categories~="mycategory"] { 
   background-color: #abc123 !important;
}

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

选项B:更完整

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

  1. 使用zip程序打开lightning.xpi
  2. 输入目录chrome /
  3. 使用zip程序打开包含calendar.jar
  4. 下降到内容/日历/
  5. 打开calendar-multiday-view.xml
    • 搜索“calendar-color-box”并将其从类属性中删除
    • 上面几行有一个< 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
  10. 如果您更愿意看到补丁,这适用于最新的通讯中心来源:

    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

    这将是最好的工作黑客,虽然它需要javascript更改。按选项B中所述打开calendar.jar并查看calendar-views.js,有两个功能:updateStyleSheetForViews()updateStyleSheetForCategory()。我会把这个留给想要自己修补它的人,但想法是为.calendar-color-box[categories~=...]添加一个规则,以便在有类别的情况下覆盖默认规则。这样,如果没有设置类别,则使用日历颜色,否则使用所需的类别颜色。

    玩得开心:)

答案 1 :(得分:8)

此扩展程序看起来非常适合您想要的功能。

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

要获得此选项,请取消选中所有选项,然后选中以下选项:

  • 将类别颜色应用于事件backgruonds
  • 如果没有类别颜色,则使用日历颜色

答案 2 :(得分:2)

您应该安装DOM Inspector addon以了解事件的XUL结构。与userChrome.css一起,你应该能够按照你想要的方式设计它。

答案 3 :(得分:1)

Image of daily calendar
Image of weekly calendar

所有代码:TOUTESÉLECTIONNER
这是我从法国网站翻译过的几个步骤。我只是简单地记下了对我有用的东西。这是针对thunderbird 3.1.9。对于lightning-1-1.0b2-tb-macosx.xpi插件。这些指示是在2011年4月8日写的。这些指示专门针对Mac用户,尽管您也可以将它们用于Windows。


ALL CAPS中的任何内容,意味着您需要更换自己的信息。示例: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文件中,您将粘贴以下代码。 (注意/* */包围的任何文本都不会被thunderbird(或任何读取.css的内容)识别为代码。它只是作为编码它的人的符号。示例/*TEXT*/ < / LI>

    守则:

    @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. 下载雷鸟的闪电插件(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-core.xml
    7. 使用JEdit等程序在这些文件中进行以下编辑。
      符号“&lt;”意味着删除此行
      符号“&gt;”意味着在它的位置添加这一行
      代码:TOUTÉLECTIONNER
    8. - &GT;日历/内容/日历/日历个月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"/>
      

      - &GT;日历/内容/日历/日历的多日-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" />
      

      - &GT;日历/内容/日历/日历 - 视图 - core.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 FOLDER / chrome / calendar.jar
      6. 选择ORIGINALPLUGIN文件夹的内容。

          

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

      7. 右键单击所选项目,然后选择“压缩8项”

      8. 将zip文件重命名为ANYNAMEYOUWANT.xpi例如,您可以将其命名为modifiedLightningPlug.xpi
      9. 加载插件:打开thunderbird&gt;工具&gt;附加组件&gt;插件&gt;安装
      10. 找到ANYNAMEYOUWANT.xpi文件,让它加载,然后重新启动Thunderbird。
      11. 。 。 。这应该是它。它对我有用。我会回来查看是否有其他人对此有好运,如果没有,我会仔细查看我的笔记。感谢TOUTESÉLECTIONNER撰写的oringial代码。

答案 4 :(得分:1)

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

所以这是为了你的乐趣(以及我的用户!!)

这是对闪电xpi(更确切地说是其中的calendar.jar包)进行修改的统一差异

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

对于非法语人士,这里有一些翻译: 各位大家好,

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

总体:

  • 将更改应用于XML文件,以允许在DOM的各个元素上使用“calendar-id”和“categories”。

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

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

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

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

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

一切顺利:)

文森特

答案 5 :(得分:0)

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

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

此文件的宽度为7px,放大宽度将放大日历视图中的“类别颜色叠加”。 (我只是用GIMP水平缩放它。)

所以看起来不可能使用该类别来为整个事件着色,因为它的颜色仅通过“硬连线”的像素宽度进行映射。 overlay png。

答案 6 :(得分:0)

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

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

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

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