簡體   English   中英

在Thunderbird Lightning Extension的周和日視圖中顯示來自不同時區的2次

[英]Show 2 Times from Different Time Zones in Week and Day View in Thunderbird Lightning Extension

Thunderbird Lightning擴展程序顯示WeekDay視圖左側的時間,如此處所示......

截圖

我想要時間顯示2個不同的時區(例如當地時間和太平洋時間),如下所示......

改性

是否有配置參數來執行此操作? 還有其他擴展可以調整嗎? 如果沒有,我如何破解Thunderbird擴展程序呢?

作為參考,Outlook具有此功能 此外,這個答案顯示了如何破解Lightning擴展。

我不知道有任何現有的附加組件可以做到這一點,但我可以告訴你它是如何完成的。 首先創建一個典型的Thunderbird擴展框架,在Firefox世界中,如果您正在搜索文檔,這稱為“遺留”擴展。 它應該包含install.rdf和chrome.manifest。 我假設您選擇view-zones作為chrome.manifest中的標識符。

接下來,您需要創建一個CSS文件,允許您覆蓋calendar-time-bar綁定。 請注意,使用此方法時,只能有一個擴展名覆蓋綁定。 內容如下所示:

calendar-time-bar { 
    -moz-binding: url(chrome://view-zones/content/bindings.xml#calendar-time-bar) !important;
}

這將覆蓋綁定的時間欄,您將在bindings.xml文件中創建bindings.xml 它擴展了內置時間欄,但在重新布局后添加了一些代碼以添加那些額外的標簽。 需要使用style指令在chrome.manifest文件中引用CSS文件,並且可以擴展chrome://calendar/skin/calendar-views.css 然后,您將必須為chrome://view-zones/content/bindings.xml創建xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
   - License, v. 2.0. If a copy of the MPL was not distributed with this
   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->

<bindings id="calendar-multiday-view-bindings"
          xmlns="http://www.mozilla.org/xbl"
          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
          xmlns:xbl="http://www.mozilla.org/xbl">
  <binding id="calendar-time-bar" 
           extends="chrome://calendar/content/calendar-multiday-view.xml#calendar-time-bar">
    <implementation>
      <method name="relayout">
        <body><![CDATA[
          this.__proto__.__proto__.relayout.call(this);
          let XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
          let topbox = document.getAnonymousElementByAttribute(this, "anonid", "topbox");
          for (let box of topbox.childNodes) {
            let timelabel = box.appendChild(document.createElementNS(XUL_NS, "label"));
            timelabel.setAttribute("value", "10:00 PT");
          }
        ]]></body>
      </method>
    </implementation>
  </binding>
</bindings>

我暫時將標簽保留為靜態,但您可以考慮一些邏輯,它會根據實際方法中使用的其他標簽或相同算法將"10:00 PT"更改為實際時間。 您還可以添加類和樣式以使其看起來不同。

也就是說,也許您有興趣將此功能添加到核心Lightning中? 我認為這將是一個很好的補充。 我很確定我們有一個bug為此開放,但我現在找不到它,所以如果你感興趣,也許你可以提交一個bug ,我可以給你更多關於如何設置的信息。 在這種情況下,將更改綁定以顯示多個標簽並添加用戶可見的首選項以便能夠選擇時區。

我沒有解決一般情況下的問題。 我只是讓時間顯示在當前時區和前一小時顯示。 在我的情況下,當前時區是美國山區時間,前一個小時最終是美國太平洋時間。

截圖

在Thunderbird未運行時,必須編輯以下jar文件中的calendar-multiday-view.xml文件。

C:\\ Users \\ nreynold.ORADEV \\ AppData \\ Roaming \\ Thunderbird \\ Profiles \\ profile \\ extensions \\ {e2fda1a4-762b-4020-b5ad-a41df1933103} \\ chrome.jar

makeTimeBox()方法必須按注釋所示進行更改:

function makeTimeBox(timestr, time2str, size) {             // Add time2str parameter
   var box = createXULElement("box");
   box.setAttribute("orient", orient);
   box.setAttribute("align", "left");                       // Add

   if (orient == "horizontal") {
      box.setAttribute("width", size);
   } else {
      box.setAttribute("height", size);
   }

   var label = createXULElement("label");
   label.setAttribute("class", "calendar-time-bar-label");
   label.setAttribute("value", timestr);
   label.setAttribute("style", "color: #4080C0; font-weight: bold;");   // Replace "align"

   box.appendChild(label);

   var label = createXULElement("label");                   // Add
   label.setAttribute("class", "calendar-time-bar-label");  // Add
   label.setAttribute("value", time2str);                   // Add

   box.appendChild(label);                                  // Add

   return box;
}

makeTimeBox()之后添加以下方法。

function makeTime(hour) {
   var h = hour % 12;

   if (h == 0)
      h = 12;

   var s = hour >= 12 ? " pm" : " am";
   var result = h + s;

   return result;
}

刪除makeTimeBox()下面幾行出現的以下行

var formatter = Components.classes["@mozilla.org/intl/scriptabledateformat;1"].
                getService(Components.interfaces.nsIScriptableDateFormat);

更改以下行...

var timeString;

... 成為 ...

var timeString, time2String;

大約25行,更換以下行...

timeString = formatter.FormatTime("",
                                  Components.interfaces.nsIScriptableDateFormat.timeFormatNoSeconds,
                                  theHour, 0, 0);
box = makeTimeBox(timeString, durPix);

... 成為 ...

timeString = makeTime(theHour) + " MT";

ptHour  = theHour - 1;
ptHour += 23;
ptHour %= 24;
ptHour += 1;

time2String = makeTime(ptHour) + " PT";
box = makeTimeBox(timeString, time2String, durPix);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM