Показать 2 раза из разных часовых поясов в недельном и дневном обзоре в Thunderbird Lightning Extension

Расширение Thunderbird Lightning показывает время на левой стороне Week а также Day виды, как показано здесь...

Скриншот

Я хотел бы, чтобы время показывало 2 разных часовых пояса (например, местное время и тихоокеанское время), как показано здесь...

модифицированный

Есть ли параметр конфигурации для этого? Есть другое расширение, которое может настроить это? Если нет, то как мне взломать расширение Thunderbird, чтобы сделать это?

Для справки, Outlook имеет эту функцию. Также этот ответ показывает, как взломать расширение Lightning.

2 ответа

Решение

Я не решил проблему для общего случая. Я просто вызвал отображение времени в текущем часовом поясе и отображение предыдущего часа. В моем случае текущим часовым поясом является время США в горах, а предыдущий час заканчивается по тихоокеанскому времени США.

Скриншот

Файл calendar-multiday-view.xml в следующем файле jar необходимо редактировать, когда 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);

Я не знаю ни о каких существующих надстройках, которые делают это, но я могу рассказать вам, как это делается. Прежде всего, создайте типичное расширение 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 файл. Это расширяет встроенную временную шкалу, но добавляет некоторый код после ретрансляции, чтобы добавить эти дополнительные метки. На файл CSS нужно ссылаться в файле chrome.manifest с style директива и может продлить 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 вместо этого? Я думаю, что это было бы хорошим дополнением. Я почти уверен, что у нас есть открытая ошибка для этого, но я не могу найти ее в данный момент, поэтому, если вы заинтересованы, возможно, вы могли бы подать ошибку, и я могу дать вам больше информации о том, как ее настроить. В этом случае необходимо изменить привязку, чтобы она отображала более одной метки, и добавить видимые для пользователя предпочтения, чтобы можно было выбирать часовой пояс.

Другие вопросы по тегам