Здравствуйте, уважаемые девелоперы!

Намедни, не найдя ни одного нормального расширения для синхронизации Lightning'а с GTD-сервисами, решил написать таковое самостоятельно.
JS, можно сказать, знаю. XUL поковырял - вроде все понятно.
Неясным осталось следующее:

1) Как добавить, например, нужную мне кнопочку на панель Lightning'а? Мой .xul нужно overlay'ить с .xul'ом тандербёрда, или самого лайтнинга? И какой путь писать?

2) область видимости JS-функций Lightning'а - могу ли я запускать их из своего плагина? И есть ли какой-нибудь туториал по компонентам и функциям лайтнинга, или же придется лезть в его внутренности и там копошиться?

3) каким образом, по мнению уважаемых гуру, лучше общаться с сервером? (общение с сервером происходит обычными HTTP-запросами - http://www.toodledo.com/info/api_doc.php?del=12213123)



Буду очень благодарен за подсказки, ибо не совсем понимаю за что вначале браться.
PS: Разрабатывать приложения профессионально не собираюсь - хочу написать для себя небольшой плагин, и всё =)

1) Как добавить, например, нужную мне кнопочку на панель Lightning'а? Мой .xul нужно overlay'ить с .xul'ом тандербёрда, или самого лайтнинга? И какой путь писать?

Как обычно для Thunderbird надо оверлеить overlay chrome://messenger/content/messenger.xul#MailToolbarPalette, но у кнопки должен быть атрибут mode со значением 'calendar'.

2) область видимости JS-функций Lightning'а - могу ли я запускать их из своего плагина?

Запускаться будут.

Anton, большое спасибо! =)
Поставить кнопку на тулбар получилось, и с вызовом lightning-функций побаловался. Но, непонятно где Lightning хранит информацию о заданиях. Имхо, выцеплять данные из DOM-объектов по getElementById неправильно - гдето внутри точно скрывается логическая структура с данными (xml?). Вопрос: где может скрываться список заданий в Lightning? И, чтобы я не задавал таких идиотских вопросов - может есть-таки документация по доработке этого чудесного плагина? :)

update:
Порывшись в .js-файлах Lightning'a, нашел observer'ы на события "onCalendarAdded", "onAddItem", что очень удобно для дальнейшей разработки моего расширения.
Цепляю листнер таким образом, но он не работает:

Выделить код

Код:

addEventListener("onCalendarAdded", function (aCalendar) {alert("test"); }, true);

Какая тут может быть загвоздка?


Премного благодарен!

Цепляю листнер таким образом, но он не работает:

observer и event handler - немного разные вещи.
observer ставится примерно так (на Lightning не проверял, проверял в Sunbird):

Выделить код

Код:

var win = window;
var observer =
{
	win: null,
	QueryInterface: function (aIID)
	{
        	if (!aIID.equals(Components.interfaces.nsISupports) &&
		    !aIID.equals(Components.interfaces.calICompositeObserver))
	        {
        	    throw Components.results.NS_ERROR_NO_INTERFACE;
	        }
        	return this;
	},
	onCalendarAdded: function (aCalendar)
	{
		this. win. alert ("added !");
	},
	onCalendarRemoved: function (aCalendar)
	{
		this. win. alert ("removed !");
	},
	onDefaultCalendarChanged: function (aNewDefaultCalendar)
	{
	},
	init: function (win)
	{
		this. win = win;
	}
};
observer. init (window);
var cicc = getCompositeCalendar();
cicc. addObserver (observer);