2

Weekここに示すように、Thunderbird Lightning 拡張機能はとビューの左側に時間をDay表示します...

スクリーンショット

ここに示すように、2 つの異なるタイム ゾーン (現地時間と太平洋時間など) を表示したいのですが...

修正済み

これを行うための構成パラメーターはありますか? これを微調整できる別の拡張機能はありますか? そうでない場合、Thunderbird 拡張機能をハックしてこれを行うにはどうすればよいですか?

参考までに、Outlook にはこの機能があります。また、この回答は、Lightning 拡張機能をハックする方法を示しています。

4

2 に答える 2

1

一般的なケースの問題は解決しませんでした。時刻を現在のタイム ゾーンで表示し、前の時間を表示するようにしました。私の場合、現在のタイム ゾーンは米国山岳時間で、前の 1 時間は最終的に米国太平洋時間になります。

スクリーンショット

以下の jar ファイル内のファイルcalendar-multiday-view.xmlは、Thunderbird が実行されていないときに編集する必要があります。

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);
于 2016-10-02T21:38:16.340 に答える
0

これを行う既存のアドオンについては知りませんが、それがどのように行われるかを説明できます. 最初に、典型的なスケルトン Thunderbird 拡張機能を作成します。Firefox の世界では、ドキュメントを検索する場合に備えて、これは「レガシー」拡張機能と呼ばれます。これには、install.rdf と chrome.manifest が含まれている必要があります。view-zoneschrome.manifest の識別子として選択すると仮定しています。

calendar-time-bar次に、バインディングをオーバーライドできるようにする CSS ファイルを作成する必要があります。このメソッドでは、バインディングをオーバーライドする拡張機能は 1 つだけであることに注意してください。内容は次のようになります。

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

これにより、bindings.xmlファイルで作成するバインディングでタイム バーが上書きされます。組み込みのタイム バーを拡張しますが、再レイアウトの後にいくつかのコードを追加して、これらの余分なラベルを追加します。styleCSS ファイルは、ディレクティブを使用して chrome.manifest ファイルで参照する必要があり、chrome://calendar/skin/calendar-views.css. 次に、次の xml ファイルを作成する必要がありますchrome://view-zones/content/bindings.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 に追加することに興味があるでしょうか? 素敵な追加になると思います。これについては未解決のバグがあったと確信していますが、現時点では見つけることができません。興味がある場合は、バグを報告してください。セットアップ方法に関する詳細情報を提供できます。その場合、バインディングを変更して複数のラベルを表示し、タイムゾーンを選択できるようにユーザーに表示される設定を追加するだけです。

于 2016-09-11T08:09:00.963 に答える