[英]Show 2 Times from Different Time Zones in Week and Day View in Thunderbird Lightning Extension
我不知道有任何現有的附加組件可以做到這一點,但我可以告訴你它是如何完成的。 首先創建一個典型的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.