Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№102607-08-2009 13:20:46

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

Najlus
Вот так попробуй:


Выделить код

Код:

function startProcess (path, args)
{
    ....
}
var dir = custombuttonsUtils. getPrefs ("browser.download.downloadDir");
if (!dir)
	dir = custombuttonsUtils. getPrefs ("browser.download.dir");
if (!dir)
	dir = custombuttonsUtils. getPrefs ("browser.download.lastDir");
if (!dir)
	dir = custombuttonsUtils. getPrefs ("browser.download.defaultFolder");
if (!dir)
    dir = Components. classes ["@mozilla.org/file/directory_service;1"].
          getService (Components. interfaces. nsIProperties).
          get ("DfltDwnld", Components. interfaces. nsILocalFile).
          path;
startProcess (dir, "");

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№102707-08-2009 14:22:22

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1986
UA: Firefox 3.5

Re: Custom Buttons

Уже лучше, но всёравно =( он вместо имени папки какойто набор непонятных символов вставляет


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№102807-08-2009 14:40:36

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

Najlus пишет

вместо имени папки какойто набор непонятных символов вставляет

А вот так если:

?

Выделить код

Код:

function startProcess (path, args)
{
    ....
}
var dir = custombuttonsUtils. getPrefs ("browser.download.downloadDir");
if (!dir)
    dir = custombuttonsUtils. getPrefs ("browser.download.dir");
if (!dir)
    dir = custombuttonsUtils. getPrefs ("browser.download.lastDir");
if (!dir)
    dir = custombuttonsUtils. getPrefs ("browser.download.defaultFolder");
if (!dir)
    dir = Components. classes ["@mozilla.org/file/directory_service;1"].
          getService (Components. interfaces. nsIProperties).
          get ("DfltDwnld", Components. interfaces. nsILocalFile).
          path;
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
	  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
dir = suc. ConvertToUnicode (dir);
startProcess (dir, "");

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№102907-08-2009 15:09:47

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.5

Re: Custom Buttons

ссылка на пост с кнопкой

Anton пишет

Что она должна делать ?

Кнопка "поглощает" любой тулбар (кроме панелей навигации и закладок) и отображает расположенные на нём кнопки во всплывающей панели.

Т.е. сначала следует создать тулбар, накидать на него какие-либо кнопки, затем нажать на кнопку Popup Toolbar (которая должна располагаться на панели, отличной от созданной) и в появившемся меню указать тулбар для "поглощения". Так вот, если расположить на "поглощаемой" панели эту кнопку, то она отказывается работать.

Добавлено 07-08-2009 15:15:30

Anton пишет

Najlus написал:
вместо имени папки какойто набор непонятных символов вставляет

А вот так если: .... ?

Работает. Продублирую кнопку целиком:


Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-3%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bfunction%20startProcess%20%28path%2C%20args%29%0A%7B%0A%20%20%20%20var%20file%20%3D%20Components.%20classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.%20classes%20%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIProcess%29%3B%0A%20%20%20%20file.%20initWithPath%20%28path%29%3B%0A%20%20%20%20if%20%28args%20%3D%3D%20%22%22%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20process.%20init%20%28file%29%3B%0A%20%20%20%20if%20%28%21this.%20pid%29%0A%20%20%20%20%20%20%20%20this.%20pid%20%3D%20%5B%5D%3B%0A%20%20%20%20this.%20pid.%20push%20%28process.%20run%20%28false%2C%20%5Bargs%5D%2C%201%29%29%3B%20%0A%7D%0Avar%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.downloadDir%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.dir%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.lastDir%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.defaultFolder%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20Components.%20classes%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIProperties%29.%0A%20%20%20%20%20%20%20%20%20%20get%20%28%22DfltDwnld%22%2C%20Components.%20interfaces.%20nsILocalFile%29.%0A%20%20%20%20%20%20%20%20%20%20path%3B%0Avar%20suc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%0A%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIScriptableUnicodeConverter%29%3B%0Asuc.%20charset%20%3D%20%22UTF-8%22%3B%0Adir%20%3D%20suc.%20ConvertToUnicode%20%28dir%29%3B%0AstartProcess%20%28dir%2C%20%22%22%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Отсутствует

 

№103007-08-2009 15:23:30

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1986
UA: Firefox 3.5

Re: Custom Buttons

Anton пишет

Najlus Вот так попробуй

ТАДАМ!!! РАБОТАЕТ!!!!
СПА-СИ-БО


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№103107-08-2009 15:58:17

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

3Jlou

Так вот, если расположить на "поглощаемой" панели эту кнопку, то она отказывается работать.

Ну, стало быть, gQuote.mHandler CB и CB2 не полностью совместимы.
Что если заменить в конце кода "Popup Toolbar"

на


?

Najlus

ТАДАМ!!! РАБОТАЕТ!!!!

Кажется, вот так:

будет надежнее.

Выделить код

Код:

//this.setAttribute('onclick', 'if (event.target == event.currentTarget) gQuot(event, this);');
//изменить задержку для отдельной кнопки
this. gQuot = {};
this. gQuot. __proto__ = custombuttons. gQuot;
this. gQuot. dcDelay = 0;
this. setAttribute ('onclick', 'this.gQuot.mHandler(event, this)');

Отредактировано Anton (07-08-2009 15:58:55)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№103207-08-2009 16:26:22

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.5

Re: Custom Buttons

Anton пишет

Ну, стало быть, gQuote.mHandler CB и CB2 не полностью совместимы.
Что если заменить в конце кода "Popup Toolbar"...

Попробовал - не работает эта кнопка, хотя недавно я как то ей пользовался без проблем, да вот уже не помню, может действительно CB2 ставил.

Отсутствует

 

№103307-08-2009 16:35:47

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

3Jlou пишет

Попробовал - не работает эта кнопка

У меня эта кнопка работает.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№103407-08-2009 16:48:06

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.5

Re: Custom Buttons

Anton, всё, понял - работает, но не со всеми кнопками - в частности отказывают ранее упомянутые:
кнопка для открытия url'a

кнопка для открытия папки загрузок:


Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3Eya.ru%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-4%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20urlToOpen%20%3D%20%27http%3A//ya.ru/%27%3B%0Afunction%20openURI%28url%29%0A%7B%0A%20%20%20%20var%20tabs%20%3D%20gBrowser.tabContainer.childNodes%3B%0A%20%20%20%20for%20%28i%3D0%3B%20i%3Ctabs.length%3B%20i++%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.%20getBrowserForTab%28tabs%5Bi%5D%29%3B%0A%20%20%20%20%20%20%20%20var%20location%20%3D%20tab.contentDocument.location.href%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20%28location%20%3D%3D%20url%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20tabs%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%3B%0A%20%20%20%20return%20true%3B%0A%7D%0AopenURI%28urlToOpen%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Отредактировано 3Jlou (09-08-2009 02:24:17)

Отсутствует

 

№103507-08-2009 17:00:31

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

3Jlou
Нет, там другая какая-то причина.
Если принять изменения, которые я указал в сообщении № 1032, то проблемы с контекстным меню не будет, а указанные кнопки будут работать.
Другое дело, что и в CB2 эта кнопка бывает что перестает работать.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№103607-08-2009 17:32:57

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1986
UA: Firefox 3.5

Re: Custom Buttons

Кажется, вот так будет надежнее.

Да вам надо памятник из метеоритной платины ставить =)


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№103707-08-2009 21:13:23

razoo
Участник
 
Группа: Members
Зарегистрирован: 23-07-2009
Сообщений: 22
UA: Foxware 0.0

Re: Custom Buttons

Anton,
ты не мог бы подсказать, как правильно добавить в твой код onmouseover и onmousedown?
Я пытался приткнуть:

после этого кнопка на любой странице создает меню с того таба, который был открыт до этого.
На предыдущем варианте твоего кода (который без субдоменов) - то же самое.
Это только когда стал заменять визуальный стиль проявилось, т. ч. мой косяк, скорее всего.

Кстати, в последнем варианте кнопки, если в табе открыт какой-нибудь chrome://speeddial/content/speeddial.xul то меню не формирует соответствующие пути, а показывает меню последнего открытого таба. Вот этого в предыдущем варианте кода нет.
Может быть, избавиться от фичи с topLevelImg?
Как бы, эксперимент дал положительный результат и это можно будет в чем-нибудь более полезном прикольно использовать (особенно, когда гифчик соответствующий поставил - очень эффектно смотрелось), но в данной кнопке, пожалуй, это излишество :).
Да и от disabledImg тоже может избавиться для простоты и функциональности?

Выделить код

Код:

this.onmouseover = function() { this.image = "file:///W:/GoUp2.png"; };
this.onmouseout = function() { this.image = "file:///W:/GoUp.png"; };
this.onmousedown = function() { this.image = "file:///W:/GoUp3.png"; };
this.onmouseup = function() { this.image = "file:///W:/GoUp2.png"; };

Отредактировано razoo (07-08-2009 21:19:48)

Отсутствует

 

№103807-08-2009 21:39:47

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4316
UA: Firefox 3.5

Re: Custom Buttons

razoo пишет

как правильно добавить в твой код onmouseover и onmousedown?

Или найти, где в коде добавляются такие же обработчики, и подправить там, или примерно вот так (добавлять в самый низ):


Выделить код

Код:

var _this = this;
this.addHandler = function _ah(onEvt, func) {
	_ah[onEvt] = this[onEvt];
	_ah[onEvt + "+"] = func;
	this[onEvt] = function(e) {
		var et = "on" + e.type;
		var h = _ah[et];
		h && h.call(_this, e);
		_ah[et + "+"].call(_this, e);
	};
};
this.addHandler("onmouseover", function() { this.style.opacity = "0.8"; });
this.addHandler("onmouseout", function() { this.style.opacity = "1"; });
this.addHandler("onmousedown", function() { this.style.opacity = "0.4"; });
this.addHandler("onmouseup", function() { this.style.opacity = "1"; });

Отредактировано Infocatcher (07-08-2009 21:40:31)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№103908-08-2009 10:43:20

razoo
Участник
 
Группа: Members
Зарегистрирован: 23-07-2009
Сообщений: 22
UA: Foxware 0.0

Re: Custom Buttons

Infocatcher пишет

Или найти, где в коде добавляются такие же обработчики, и подправить там, или примерно вот так (добавлять в самый низ)

Я и обработчики менял и внизу добавлял, просто, наверно, мой кодец был кривой :)
С твоим кодом - глюк исчез. Спасибо.

Anton, можно еще сделать так, чтобы по нажатию на саму кнопку - поднимал только на один уровень вверх, а на сtrl-клик открывал целевой url в новом табе (из меню тоже)?

И микроглючик: если запустить Customize, когда открыт таб с каким-нибудь chrome://speeddial/content/speeddial.xul или chrome://browser/content/places/places.xul, кнопка становится полупрозрачной (но рабочей), а вот вернуть нормальный вид помогает только «Edit Button... > Applay». Может, это связано с

последнем варианте кнопки, если в табе открыт какой-нибудь chrome://speeddial/content/speeddial.xul то меню не формирует соответствующие пути, а показывает меню последнего открытого таба.

Твой предыдущий код, хавает адреса с chrome:// как обычные.
:)

Отсутствует

 

№104008-08-2009 22:22:52

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

3Jlou пишет

Anton, всё, понял - работает, но не со всеми кнопками - в частности отказывают ранее упомянутые:

Попробовал соорудить аналог:

Вроде работает

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname/%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAIAEBAAAAAAAABoAwAAJgAAACAgAAAAAAAAqAwAAI4DAAAoAAAAEAAAACAAAAABABgAAAAAAEADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8gzP//pRD//3Wg//8Z4P9/AAz/fwBs/38AC/9/ABL/fwAA/38n0P9/AAb/f//++A8AAf//AAH//yFw//8AACgAAAAgAAAAQAAAAAEAGAAAAAAAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8////AAP//wAD//////////////////////////////////////w%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20onPopupShowing%20%3D%20function%20%28event%2C%20menupopup%29%0A%7B%0A%09if%20%28event.%20target%20%21%3D%20menupopup%29%0A%09%09return%3B%0A%09menupopup.%20parentNode.%20buildMenu%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20buildMenu%20%3D%20function%20%28menupopup%29%0A%7B%0A%09this.%20setCheckboxState%20%28menupopup%29%3B%0A%09this.%20createToolbarsList%20%28menupopup%29%3B%0A%09this.%20appendToolbar%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20setCheckboxState%20%3D%20function%20%28menupopup%29%0A%7B%0A%09var%20scwt%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%29%3B%0A%09var%20checkbox%20%3D%20menupopup.%20getElementsByTagName%20%28%22menuitem%22%29%20%5B0%5D%3B%0A%09checkbox.%20setAttribute%20%28%22checked%22%2C%20scwt%29%3B%0A%09checkbox.%20setAttribute%20%28%22hidden%22%2C%20this.%20cbMainMenu%29%3B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20toolbar%20%3D%20document.%20getElementById%20%28toolbarId%29%3B%0A%09var%20isToolbar%20%3D%20toolbar%3F%20true%3A%20false%3B%0A%09var%20menuseparator%20%3D%20menupopup.%20getElementsByTagName%20%28%22menuseparator%22%29%20%5B0%5D%3B%0A%09menuseparator.%20setAttribute%20%28%22hidden%22%2C%20%28this.%20cbMainMenu%20%26%26%20%21%28isToolbar%20%26%26%20scwt%29%29%29%3B%0A%7D%3B%0A%0Athis.%20createToolbarsList%20%3D%20function%20%28menupopup%29%0A%7B%0A%09var%20scwt%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%29%3B%0A%09if%20%28%21scwt%20%26%26%20this.%20cbMainMenu%29%0A%09%09return%3B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20ctid%20%3D%20this.%20parentNode.%20getAttribute%20%28%22id%22%29%3B%0A%09var%20navbox%20%3D%20document.%20getElementById%20%28%22navigator-toolbox%22%29%3B%0A%09var%20toolbars%20%3D%20navbox.%20getElementsByTagName%20%28%22toolbar%22%29%3B%0A%09var%20groupname%20%3D%20this.%20id%20+%20%22-radiogroup%22%3B%0A%09var%20tid%3B%0A%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%20toolbars.%20length%3B%20i++%29%0A%09%7B%0A%09%09if%20%28%21toolbars%20%5Bi%5D.%20hasAttribute%20%28%22customindex%22%29%29%0A%09%09%09continue%3B%0A%09%09tid%20%3D%20toolbars%20%5Bi%5D.%20getAttribute%20%28%22id%22%29%3B%0A%09%09mi%20%3D%20document.%20createElement%20%28%22menuitem%22%29%3B%0A%09%09mi.%20setAttribute%20%28%22label%22%2C%20toolbars%20%5Bi%5D.%20getAttribute%20%28%22toolbarname%22%29%29%3B%0A%09%09mi.%20setAttribute%20%28%22type%22%2C%20%22radio%22%29%3B%0A%09%09mi.%20setAttribute%20%28%22name%22%2C%20groupname%29%3B%0A%09%09mi.%20setAttribute%20%28%22disabled%22%2C%20ctid%20%3D%3D%20tid%29%3B%0A%09%09mi.%20setAttribute%20%28%22checked%22%2C%20toolbarId%20%3D%3D%20tid%29%3B%0A%09%09mi.%20setAttribute%20%28%22value%22%2C%20tid%29%3B%0A%09%09mi.%20setAttribute%20%28%22oncommand%22%2C%20%22document.popupNode.setToolbar%28this.value%29%22%29%3B%0A%09%09menupopup.%20appendChild%20%28mi%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20appendToolbar%20%3D%20function%20%28menupopup%29%0A%7B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20toolbar%20%3D%20document.%20getElementById%20%28toolbarId%29%3B%0A%09if%20%28toolbar%29%0A%09%7B%0A%09%09toolbar.%20collapsed%20%3D%20%21this.%20cbMainMenu%3B%0A%09%09menupopup.%20insertBefore%20%28toolbar%2C%20menupopup.%20firstChild%29%3B%0A%09%09toolbar.%20currentSet%20%3D%20toolbar.%20getAttribute%20%28%22currentset%22%29%3B%0A%09%09document.%20persist%20%28toolbar.%20id%2C%20%22currentset%22%29%3B%0A%09%09this.%20label%20%3D%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%3B%0A%09%09this.%20setAttribute%20%28%22tooltiptext%22%2C%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%29%3B%0A%09%09if%20%28toolbar.%20firstChild%20%26%26%20toolbar.%20firstChild.%20image%29%0A%09%09%09this.%20image%20%3D%20toolbar.%20firstChild.%20image%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20setToolbar%20%3D%20function%20%28toolbarId%29%0A%7B%0A%09this.%20restoreToolbar%20%28true%29%3B%0A%09custombuttons.%20setPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%2C%20toolbarId%29%3B%0A%09var%20menupopup%20%3D%20this.%20firstChild%3B%0A%09this.%20appendToolbar%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20restoreToolbar%20%3D%20function%20%28showToolbar%29%0A%7B%0A%09var%20mp%20%3D%20this.%20firstChild%3B%0A%09var%20ct%20%3D%20mp.%20firstChild%3B%0A%09if%20%28ct.%20nodeName%20%3D%3D%20%22toolbar%22%29%0A%09%7B%0A%09%09var%20navbox%20%3D%20document.%20getElementById%20%28%22navigator-toolbox%22%29%3B%0A%09%09var%20next%20%3D%20navbox.%20firstChild%3B%0A%09%09while%20%28next%20%26%26%20%28next.%20nodeName%20%21%3D%20%22toolbarset%22%29%29%0A%09%09%7B%0A%09%09%09if%20%28Number%20%28next.%20getAttribute%20%28%22customindex%22%29%29%20%3E%20Number%20%28ct.%20getAttribute%20%28%22customindex%22%29%29%29%0A%09%09%09%09break%3B%0A%09%09%09next%20%3D%20next.%20nextSibling%3B%0A%09%09%7D%0A%09%09ct.%20collapsed%20%3D%20%21showToolbar%3B%0A%09%09navbox.%20insertBefore%20%28ct%2C%20next%29%3B%0A%09%09ct.%20firstPermanentChild%20%3D%20null%3B%0A%09%09ct.%20lastPermanentChild%20%3D%20null%3B%0A%09%09ct.%20currentSet%20%3D%20ct.%20getAttribute%20%28%22currentset%22%29%3B%0A%09%09document.%20persist%20%28toolbar.%20id%2C%20%22currentset%22%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20onPopupHidden%20%3D%20function%20%28event%2C%20menupopup%29%0A%7B%0A%09if%20%28event.%20target%20%21%3D%20menupopup%29%0A%09%09return%3B%0A%09menupopup.%20parentNode.%20destroyMenu%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20destroyMenu%20%3D%20function%20%28menupopup%29%0A%7B%0A%09this.%20restoreToolbar%20%28false%29%3B%0A%09var%20mi%20%3D%20menupopup.%20lastChild%3B%0A%09while%20%28menupopup.%20lastChild.%20nodeName%20%3D%3D%20%22menuitem%22%29%0A%09%09menupopup.%20removeChild%20%28menupopup.%20lastChild%29%3B%0A%7D%3B%0A%0Athis.%20setSCWTState%20%3D%20function%20%28checkbox%29%0A%7B%0A%09custombuttons.%20setPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%2C%20checkbox.%20getAttribute%20%28%22checked%22%29%20%3D%3D%20%22true%22%29%3B%0A%7D%3B%0A%0Athis.%20showMenu%20%3D%20function%20%28%29%0A%7B%0A%09this.%20cbMainMenu%20%3D%20true%3B%0A%09document.%20popupNode%20%3D%20this%3B%0A%09var%20mp%20%3D%20this.%20firstChild%3B%0A%09mp.%20openPopup%20%28this%2C%20%22after_start%22%2C%200%2C%200%2C%20false%2C%20false%29%3B%0A%7D%3B%0A%0Athis.%20showContextMenu%20%3D%20function%20%28contextId%29%0A%7B%0A%09this.%20cbMainMenu%20%3D%20false%3B%0A%09this.%20setAttribute%20%28%22context%22%2C%20contextId%29%3B%0A%7D%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%0A%09var%20mp%20%3D%20this.%20firstChild%3B%0A%09if%20%28event.%20originalTarget%20%21%3D%20this%29%0A%09%7B%0A%09%09if%20%28event.%20target%20%21%3D%20this%29%0A%09%09%09mp.%20hidePopup%20%28%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28event.%20button%20%3D%3D%200%29%0A%09%09this.%20showMenu%20%28%29%3B%0A%09else%20if%20%28event.%20button%20%3D%3D%202%29%0A%09%09this.%20showContextMenu%20%28event.%20shiftKey%3F%20%22custombuttons-contextpopup%22%3A%20%22_child%22%29%3B%0A%7D%3B%0A%0Athis.%20hideSelectedToolbar%20%3D%20function%20%28%29%0A%7B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20toolbar%20%3D%20document.%20getElementById%20%28toolbarId%29%3B%0A%09if%20%28toolbar%29%0A%09%7B%0A%09%09toolbar.%20setAttribute%20%28%22collapsed%22%2C%20true%29%3B%0A%09%09this.%20label%20%3D%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%3B%0A%09%09this.%20setAttribute%20%28%22tooltiptext%22%2C%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%29%3B%0A%09%7D%0A%7D%3B%0A%0Avar%20scwt%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%29%3B%0Aif%20%28scwt%20%3D%3D%20null%29%0A%09custombuttons.%20setPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%2C%20true%29%3B%0Avar%20popup%20%3D%0A%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%20%20%20oncommand%3D%22this.hidePopup%28%29%22%20onclick%3D%22event.stopPropagation%28%29%22%20style%3D%22border%3A%20none%20%21important%3Boverflow%3Avisible%20%21important%3B%22%20flex%3D%221%22%0A%09%20%20%20onpopupshowing%3D%22this.parentNode.onPopupShowing%28event%2Cthis%29%22%20onpopuphidden%3D%22this.parentNode.onPopupHidden%28event%2Cthis%29%22%3E%0A%09%3Cmenuitem%20type%3D%22checkbox%22%20label%3D%22Show%20Context%20Menu%20With%20Toolbar%22%20oncommand%3D%22document.popupNode.setSCWTState%28this%29%22/%3E%0A%09%3Cmenuseparator/%3E%0A%3C/menupopup%3E%3B%0Apopup%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28popup.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Athis.%20appendChild%20%28popup%29%3B%0Athis.%20hideSelectedToolbar%20%28%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№104109-08-2009 17:07:11

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1986
UA: Firefox 3.5

Re: Custom Buttons

Ещё одна просьба по поводу кнопки QickBookmarks. Вот код:

Можете сделать так, чтобы закладка при открытии сразу перематывала страницу к тому месту, где она была перед её занесением в кнопку.

Выделить код

Код:

/*Initialization Code*/
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("ProfD", Components.interfaces.nsILocalFile)
    .path;
var path = profileDir + "\\tabbookmarks.xml";
var loadInBackground = true;

this. handleDragOver = function (event)
{
    var dt = event. dataTransfer;
    var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
    if (!tab)
        return;
    event. preventDefault ();
    event. stopPropagation ();
    return dt. effectAllowed = dt. dropEffect = "link";
}

this. handleDrop = function (event)
{
    var dt = event. dataTransfer;
    var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
    var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
    var label = tab. label;
    var image = tab. image;
    var br = getBrowser ();
    //if (br. tabContainer. childNodes. length > 1)
        br. removeTab (tab);
    this. addMenuitem (label, url, image);
};

this. addMenuitem = function (label, url, image)
{
    var menu = this. menu;
    var mi = document. createElement ("menuitem");
    mi. setAttribute ("label", label);
    mi. setAttribute ("url", url);
    mi. setAttribute ("tooltiptext", url);
    mi. className = "menuitem-iconic bookmark-item";
    image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
    menu. appendChild (mi);
    this. type = "menu";
    this. flushMenu (menu);
};

this. deleteMenuitem = function (menuitem)
{
    var menu = this. menu;
    menu. removeChild (menuitem);
    this. checkEmpty (menu);
    this. flushMenu (menu);
};

this. checkEmpty = function (menu)
{
    if (menu. getElementsByTagName ("menuitem"). length > 0)
        return;
    menu. hidePopup ();
    this. type = "";
};

this. flushMenu = function (menu)
{
    menu = menu || this. menu;
    var xs = new XMLSerializer ();
    var xmenu = xs. serializeToString (menu);
    var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
              createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
    xmenu = suc. ConvertFromUnicode (xmenu);
    custombuttons. writeFile (path, xmenu);
};

this. getMenu = function (event)
{
    var menu = this. menu;
    if (menu)
        this. removeChild (menu);
    menu = "";
    try
    {
        file = Components. classes ["@mozilla.org/file/local;1"].
               createInstance (Components. interfaces. nsILocalFile);
        file. initWithPath (path);
        var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
                  createInstance (Components. interfaces. nsIFileInputStream);
        fis.init (file, 0x01, 00004, null);
        var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
                  createInstance (Components. interfaces. nsIScriptableInputStream);
        sis. init (fis);
        menu = sis. read (sis. available ());
        sis. close ();
        var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
                  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
        suc. charset = "UTF-8";
        menu = suc. ConvertToUnicode (menu);
        menu = new XML (menu) || "";
    }
    catch (e)
    {
        menu = "";
    }
    if (!menu)
    {
        menu =
        <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
               onclick="this. parentNode. openTab (event);"/>
    }
    menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
    this. appendChild (menu);
    if (menu. getElementsByTagName ("menuitem"). length > 0)
        this. type = "menu";
    this. orient = "horizontal";
    return menu;
};

this. __defineGetter__
(
    "menu",
    function ()
    {
        return this. getElementsByTagName("menupopup") [0];
    }
);

this. openTab = function (event)
{
    var mi = event. target;
    var menu = mi. parentNode;
    var url = mi. getAttribute ("url");
    if (event. button < 2)
    {
        if (event. button == 0)
            getBrowser (). loadURI (url, null, null);
        else
            getBrowser (). loadOneTab(url, null, null, null, loadInBackground, false);
        menu. hidePopup ();
    }
    else
        event. stopPropagation ();
    this. deleteMenuitem (mi);
    this. flushMenu (menu);
};

this. onclick = function (event)
{
    if (event. button != 1 || event. target != this)
        return;
    var menu = this. menu;
    var mis = menu. getElementsByTagName ("menuitem");
    var mi;
    while (mis. length)
    {
        mi = mis[0];
        getBrowser (). loadOneTab(mi. getAttribute ("url"), null, null, null, true /*load in background*/, false);
        menu. removeChild (mi);
    }
    this. checkEmpty (menu);
    this. flushMenu (menu);
};

this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();

Отредактировано Najlus (09-08-2009 17:08:11)


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№104209-08-2009 19:21:25

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.0

Re: Custom Buttons

Господа разработчики расширения, вопрос "косметического" характера: почему бы не сделать в диалоге редактирования кнопки 2 поля: "Картинка" и "Картинка маленькая" - которые будут выбираться в зависимости от настройки панели инструментов?
Изначально активно поле "Картинка", после заполнения этого поля активируется поле "Картинка маленькая", которое можно не заполнять, тогда для обоих вариантов настройки панели инструментов используется иконка из 1-го поля.

Отредактировано 3Jlou (09-08-2009 19:22:12)

Отсутствует

 

№104309-08-2009 20:07:08

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1986
UA: Firefox 3.5

Re: Custom Buttons

Сомневаюсь что такое возможно. Во всяком случае надо обращаться к разработчику =(


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№104409-08-2009 21:54:04

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.0

Re: Custom Buttons

Najlus, дык я к ним и обращаюсь :)


Набросал кнопку для перехода в режим приватного просмотра:

в принципе там только одна строчка:

gPrivateBrowsingUI.toggleMode();

Как должен выглядеть код, чтобы кнопка имела вид нажатой во время сёрфинга в режиме приватного просмотра?

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u0412%u043E%u0439%u0442%u0438%20%u0432%20%u0440%u0435%u0436%u0438%u043C%20%u043F%u0440%u0438%u0432%u0430%u0442%u043D%u043E%u0433%u043E%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACzklEQVR4nL2TTUhUURTHz33v3vdmdHRmdHRs1HRm/Ao/UjOECRMkK5FWMYsooUAaoU0tyq3iLiqKVhIEbfpQKVtIHxIMBJZSpBZpWn7k55g6TjNvxnnv3Xd7CoK7XEQHDvd/FueeP4ffAfhX4fV28bvrNm+XsJc+bkc4RTFvR7d6u8wxMGZc9fZlbNVXvF0pu5uunXteuKNR69neUlnm1zFPXcCxsKooPzHGpRxoqxpDJSql/YSQPKTgZYqVTIJFTZXlVdAESQVJ5o8XWy/EOVdIt1LOMTiIsFiEGV9LEZtGHGniePSZMVbGY+bRGASAQhNDEK71DLqra7h7qNNX/Bjz9typoPe7DA6qT07UjZkYoH7901QKzKQ7XUQAJo6FsNu5Uu+pITHX4UbPxvrGCiZoJcdhXat2266XRWihpDLzWCCcm8hAayBEnnM4EovtTrclsyDbLIqmVAMVeCaYQTClwvLIxx9YUTVxapmfMRtiGfmOcZs1Sag55PwKxiQLWLOrAJX5AGgconMD0NfrDwZDmxvnm5udVInCxMS4H6saW0tJ0tIWgzbP8FDklM2sNFTsD1fnuwhKScqByXfdse5nr3r6h+bfp9ssr9t9dU8QEZ0Lk6PhX1ryQ6wo3ADPqceKHOEHBVnGpxyIdyWVOg36YgDxMD3y9pbbEOotaczeV1JefD/LnVnJGAejI8MDq6vyGLp9Jt1utdLBjBSSk2ZJgEQDhrG5ANRWHACTvQxmp+chLT1dX34CMKKnYIGZSLL0YUE40tLSMsK//CJJdUX2TzxBlQqV7EvrITAQkY6vuTpwZKFKpKoQjcgQleKwqedSiKmjAUPHxUuXe7ZA2sb3xejGbH3tiUc0LlNEjBFmcN453f7mxsmj1ePROK2MSbLxt4LlRZoa/LaZ07YQjN30+/1sm8S/sd7Z2Uk0TcvU6UT6G/D5fNG93Mj/iz9oYC5kMgYmNwAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BgPrivateBrowsingUI.toggleMode%28%29%3B%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Отредактировано 3Jlou (09-08-2009 21:54:21)

Отсутствует

 

№104509-08-2009 23:02:16

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4316
UA: Firefox 3.5

Re: Custom Buttons

3Jlou пишет

"Картинка" и "Картинка маленькая" - которые будут выбираться в зависимости от настройки панели инструментов?

Пока что можно, например, так:

(в инициализацию)

Добавлено 09-08-2009 23:08:51
Вообще, можно и отдельное поле для ввода CSS-стиля сделать (в редакторе). Другое дело – насколько часто это бывает нужно.

Выделить код

Код:

var sId = "__custombuttonsStyle__" + this.id; // Unique style "id"
var cssStr = 'toolbar %button% { list-style-image: url("http://forum.mozilla-russia.org/img/smilies/smile.png") !important; }\n'
	+ 'toolbar[iconsize="small"] %button% { list-style-image: url("http://forum.mozilla-russia.org/img/smilies/neutral.png") !important; }';
cssStr = cssStr.replace(/%button%/g, "#" + this.id);
function sheet(cssStr, removeFlag) {
	var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
		.getService(Components.interfaces.nsIStyleSheetService);
	var ios = Components.classes["@mozilla.org/network/io-service;1"]
		.getService(Components.interfaces.nsIIOService);
	var data = "data:text/css," + encodeURIComponent(cssStr);
	var uri = ios.newURI(data, null, null);
	if(sss.sheetRegistered(uri, sss.USER_SHEET))
		sss.unregisterSheet(uri, sss.USER_SHEET);
	if(removeFlag)
		return;
	sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
	window[sId] = cssStr;
}
if(!(sId in window))
	sheet(cssStr);
else if(window[sId] != cssStr) {
	sheet(window[sId], true);
	sheet(cssStr);
}

Отредактировано Infocatcher (09-08-2009 23:04:41)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№104609-08-2009 23:31:16

Dreyk
Участник
 
Группа: Members
Зарегистрирован: 02-08-2009
Сообщений: 9
UA: Firefox 3.5

Re: Custom Buttons

3Jlou пишет

Как должен выглядеть код, чтобы кнопка имела вид нажатой во время сёрфинга в режиме приватного просмотра?


Единственное, у меня кнопка выделяется как буд-то она очень большая по вертикали, на весь тулбар. Я еще подумаю как бы ее сделать получше

Выделить код

Код:

gPrivateBrowsingUI.toggleMode();
this.checked = !this.checked;

Отредактировано Dreyk (10-08-2009 12:22:58)

Отсутствует

 

№104709-08-2009 23:39:34

Jarichek
Member I
 
Группа: Members
Откуда: Минск
Зарегистрирован: 09-04-2009
Сообщений: 306
UA: Firefox 3.5

Re: Custom Buttons

А можно и я парочку заказов оставлю.
1. Нужна кнопка "Поиск выделенного в гугле/яндексе по этому сайту". Т.е. на странице http://forum.mozilla-russia.org/viewtopic.php?pid=362834 выделены слова "Custom Buttons". Тогда в гугл идет запрос в виде http://www.google.com/search?as_q=Custom%20Buttons&as_sitesearch=forum.mozilla-russia.org, а на Яндекс - http://yandex.ru/yandsearch?rpt=rad&text=Custom%20Buttons&serverurl=forum.mozilla-russia.org. Если есть возможность, то лучше зделать так: если выделения на странице нет, то работает только ПКМ - Настройки кнопки. Если выделение есть, то ЛКМ - поиск в гугле, ПКМ - в яндексе.
2. Нашел вот такую кнопку "Вставить и перейти":

как бы ее изменить, чтобы по ЛКМ ссылка из буфера вставлялась в новой фоновой вкладке (т.е. текущая вкладка продолжала быть активной), а по средней - вставить и открыть адрес в текущей вкладке?

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EPaste%20and%20Go%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAB+g5B4AAUOhwAAAAAAAAAAAPvyeYJ9cIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////AMabF/L17eoN2wFgAO8DPABgWkoA8fHwANXW2ADa3+4AEf3EACX/oAALExbzO2bqEv////wAAAAAAAAAAAH///8Au4gB/wk9vwC6w94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARj0gAPfDQwBGeQAZAAAA7P////wAAAATBAAAAAAAAAAAMzI3ABgVwwDx8fcA+vr8AAEBAQAAAAAA/wAAAAAAAAApKlIAy8MAAAAAAAgAAAABAAAAAAAAAE4EAAAAAAAAAAAJCQkAIyIRANrb+wCKrjsADgkGAPL16gDw9OUA9/jxAAAAiwAICIgAYoIb3/7/DQABAQEG////nwQAAAAAAAAAAAAAAAAA/f0AAwAAAAQDBABPQAUAlburAO4c3gAID/0A9/37AOXt/AAd9yoAAvI6ABMTEyIBAQHeBAAAAAAAAAAAAAAAAAD8+wD++fsA7/XZAHyuqgAoQ/4ACQkGAAETBAD9BwAAEfb1AO3k0wDcpeIABTAFOCrnKuUEAAAAAAAAAAAAAAAAAPb5AOvu9QDV7q0APlgCAP0WBAD3yBsAAvsCANYSyQAAD/0ADhUGABRW6ADhpPlkNSs11gIAAAAAAAAAAAAAAAAA+/sA5u/3AAMd4gASIw0A6P3zACsaKwChX6EAYxBwAAveFwDYzuoA/hMBAPsl9ij/Cf8vAgAAAAAAAAAAAAAAAAD6/QD4+wUAGRgMAPkJ/QD4+fsAAP8AAAgFCABrP2sAnkyiAE4HVADm5PIADBUFERUOFSICAAAAAAAAAAAAAAAAAP37AAUFCAD6APoA8fj2APPz9wAA/QAAAAAAAAAAAAACAQIAAQABAPr8/QD5//0BEQ8RDAQAAAAAAAAAAAAAAAAA/P0ADwkDAOne+AAX9PQA9vf5AAD/AAD4+/gAn8afAJ/WnQDU/tMACSsDAPnaAfQJHAnuBAAAAAAAAAAAAPTYAAEniwApDuAAF8bWAOri2AAJBwMA1dzVAF+eXwDDAr0A9w/3AAkXAwD27PkALvY06SwcLNcB////AMeWE/D08u4PAAAAAAIGEADBCI4Aw+yjAO801gDzAvcA/AUAAP0HAAD6/fsA9Oz5ACfFNQBYM1GRIQUhiAH///8AAAAAAAEBARsAAAAFDw8PA2VwmdwNGfcAxuqvANIJyQD+C/UA+v/8AAPyDAAz+joAOxdRAAPt5kbExMTCAf///wAAAAAAAQEBAwAAAAIAAAAAJycnCEBAQCI7SjtK8f/xMgsGCx8AAAAA9fr14Q8BD869rr26sbGx7PDw8OaiWEPH7uRLhgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pasteURL%20%3D%20function%28aEvent%2C%20go%29%20%7B%0A%20%20var%20paste%20%3D%20readFromClipboard%28%29%3B%0A%20%20if%28%21paste%29%20return%3B%0A%20%20if%28%21go%29%20%7B%0A%20%20%20%20gURLBar.value%20%3D%20paste%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20openUILink%28paste%2C%20aEvent%2C%20false%2C%20true%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.copyURLBar%20%3D%20function%28%29%20%7B%0A%20%20var%20clipb%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIClipboardHelper%29%3B%0A%20%20clipb.copyString%28gURLBar.value%29%3B%0A%7D%0A%0Athis.clearURLBar%20%3D%20function%28%29%20%7B%0A%20%20gURLBar.value%20%3D%20%22%22%3B%0A%20%20gURLBar.focus%28%29%3B%0A%7D%0A%0Athis.resetURLBar%20%3D%20function%28%29%20%7B%0A%20%20gURLBar.value%20%3D%20gBrowser.currentURI.spec%3B%0A%7D%0A%0Athis.checkForMiddleClick%20%3D%20function%28aNode%2C%20aEvent%29%20%7B%0A%20%20if%20%28aEvent.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20var%20fn%20%3D%20new%20Function%28%22event%22%2C%20aNode.getAttribute%28%22cb-oncommand%22%29%29%3B%0A%20%20%20%20fn.call%28aNode%2C%20aEvent%29%3B%0A%20%20%20%20closeMenus%28aEvent.target%29%3B%0A%20%20%7D%0A%7D%0Afunction%20cloneCBMenuitem%20%28id%29%0A%7B%0A%09var%20cbMenuitemId%20%3D%20%22custombuttons-contextpopup-%22%20+%20id%3B%0A%09var%20menuitem%20%3D%20document.%20getElementById%20%28cbMenuitemId%29%3B%0A%09var%20menuitem2%20%3D%20menuitem.%20cloneNode%20%28true%29%3B%0A%09menuitem2.%20setAttribute%20%28%22id%22%2C%20menuitem.%20id%20+%20this.%20id%29%3B%0A%09return%20menuitem2%3B%0A%7D%0Afunction%20createMenuitem%20%28label%2C%20command%29%0A%7B%0A%09var%20menuitem%20%3D%20document.%20createElement%20%28%22menuitem%22%29%3B%0A%09menuitem.%20setAttribute%20%28%22label%22%2C%20label%29%3B%0A%09menuitem.%20setAttribute%20%28%22oncommand%22%2C%20%22document.popupNode.%22%20+%20command%29%3B%0A%09return%20menuitem%3B%0A%7D%0A%0Avar%20submenu%20%3D%20document.%20createElement%20%28%22menupopup%22%29%3B%0Avar%20ids%20%3D%20%5B%22edit%22%2C%20%22remove%22%2C%20%22clone%22%2C%20%22copyURI%22%2C%20%22separator2%22%2C%20%22updateButton%22%2C%0A%09%09%20%20%20%22bookmarkButton%22%2C%20%22buttonHelp%22%2C%20%22separator3%22%2C%20%22customize%22%5D%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20ids.%20length%3B%20i++%29%0A%7B%0A%09try%0A%09%7B%0A%09%09submenu.%20appendChild%20%28cloneCBMenuitem%20%28ids%20%5Bi%5D%29%29%3B%0A%09%7D%0A%09catch%20%28e%29%20%7B%7D%0A%7D%0Avar%20menu%20%3D%20document.%20createElement%20%28%22menupopup%22%29%3B%0Amenu.%20setAttribute%20%28%22id%22%2C%20%22cbContext-pgnButton%22%29%3B%0Amenu.%20setAttribute%20%28%22oncommand%22%2C%20%22event.%20stopPropagation%20%28%29%3B%22%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Paste%22%2C%20%22pasteURL%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Copy%22%2C%20%22copyURLBar%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Cut%22%2C%20%22copyURLBar%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Clear%22%2C%20%22clearURLBar%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Reset%22%2C%20%22resetURLBar%28%29%22%29%29%3B%0Avar%20menunode%20%3D%20document.%20createElement%20%28%22menu%22%29%3B%0Amenunode.%20setAttribute%20%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0Amenunode.%20appendChild%20%28submenu%29%3B%0Amenu.%20appendChild%20%28menunode%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20setAttribute%20%28%22context%22%2C%20menu.%20id%29%3B%0A%0Athis.setAttribute%28%22onclick%22%2C%20%22this.checkForMiddleClick%28this%2C%20event%29%22%29%3B%0Athis.setAttribute%28%22onmouseover%22%2C%20%22this.tooltipText%20%3D%20readFromClipboard%28%29%20%3F%20readFromClipboard%28%29%20%3A%20this.label%3B%22%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%20---------------------------------------------------------------------------%0A%20%20%20%20%20Paste%20and%20Go%20button%0A%20%20%20%20%20by%20Anton%0A%20%20%20%20%20Original%20code%20is%20LouCypher%20%28aka%20Zoolcar9%29%20%22Paste%20and%20Go%22%0A%20%20%20%20%20%28http%3A//loucypher.wordpress.com/projects/extensions/%23paste-and-go-button%29%0A%0A%20%20%20%20%20Lets%20you%20paste%20an%20URL%20from%20the%20clipboard%20and%20directly%20load%20it%0A%20%20%20---------------------------------------------------------------------------%20*/%0Atry%20%7B%0A%20%20this.pasteURL%28event%2C%20true%29%3B%0A%7D%20catch%28ex%29%20%7B%0A%20%20this.pasteURL%28null%2C%20true%29%3B%0A%7D%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Отсутствует

 

№104810-08-2009 20:32:27

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

razoo

Кстати, в последнем варианте кнопки, если в табе открыт какой-нибудь chrome://speeddial/content/speeddial.xul то меню не формирует соответствующие пути, а показывает меню последнего открытого таба. Вот этого в предыдущем варианте кода нет.
Может быть, избавиться от фичи с topLevelImg?
Как бы, эксперимент дал положительный результат и это можно будет в чем-нибудь более полезном прикольно использовать (особенно, когда гифчик соответствующий поставил - очень эффектно смотрелось), но в данной кнопке, пожалуй, это излишество :).
Да и от disabledImg тоже может избавиться для простоты и функциональности?

В "Код" по-прежнему

В "Инициализацию":


Выделить код

Код:

this. loadURL ();

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№104910-08-2009 21:24:47

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4316
UA: Firefox 3.5

Re: Custom Buttons

Najlus пишет

Можете сделать так, чтобы закладка при открытии сразу перематывала страницу к тому месту, где она была перед её занесением в кнопку.

Пока есть идея воспользоваться
nsISessionStore + getTabState() + результат в JSON и так строку возвращает.
Обратно – setTabState().
Но есть сомнения в разумности такого подхода. Впрочем, вроде, это самое простое.

Добавлено 10-08-2009 21:52:44
Во, кажется, работает:

Добавлено 10-08-2009 21:53:11
P.S. Firefox 3.0+.

Выделить код

Код:

var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
	.getService(Components.interfaces.nsIProperties)
	.get("ProfD", Components.interfaces.nsILocalFile)
	.path;
var path = profileDir + "\\tabbookmarks.xml";
this. loadInBackground = true;

this. handleDragOver = function (event)
{
	var dt = event. dataTransfer;
	var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
	if (!tab)
		return;
	event. preventDefault ();
	event. stopPropagation ();
	return dt. effectAllowed = dt. dropEffect = "link";
}

this. handleDrop = function (event)
{
	var dt = event. dataTransfer;
	var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
	var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
	this. addMenuitem (tab, url);
};

this. __defineGetter__
(
	"ss",
	function ()
	{
		delete this.ss;
		return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
			.getService(Components.interfaces.nsISessionStore);
	}
);

this. addMenuitem = function (tab, url)
{
	var label = tab. label;
	var image = tab. image;

	var menu = this. menu;
	var mi = document. createElement ("menuitem");
	mi. setAttribute ("label", label);
	mi. setAttribute ("tab_data", this.ss.getTabState(tab));
	mi. setAttribute ("tooltiptext", url);
	mi. className = "menuitem-iconic bookmark-item";
	image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
	menu. appendChild (mi);
	this. type = "menu";
	this. flushMenu (menu);

	var br = gBrowser;
	//if (br. tabContainer. childNodes. length > 1)
		br. removeTab (tab);
};

this. deleteMenuitem = function (menuitem, dontFlush)
{
	var menu = this. menu;
	menu. removeChild (menuitem);
	this. checkEmpty (menu);
	!dontFlush && this. flushMenu (menu);
};

this. checkEmpty = function (menu)
{
	if (menu. getElementsByTagName ("menuitem"). length > 0)
		return;
	menu. hidePopup ();
	this. type = "";
};

this. flushMenu = function (menu)
{
	menu = menu || this. menu;
	var xs = new XMLSerializer ();
	var xmenu = xs. serializeToString (menu);
	var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
			  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
	suc. charset = "UTF-8";
	xmenu = suc. ConvertFromUnicode (xmenu);
	custombuttons. writeFile (path, xmenu);
};

this. getMenu = function (event)
{
	var menu = this. menu;
	if (menu)
		this. removeChild (menu);
	menu = "";
	try
	{
		file = Components. classes ["@mozilla.org/file/local;1"].
			   createInstance (Components. interfaces. nsILocalFile);
		file. initWithPath (path);
		var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
				  createInstance (Components. interfaces. nsIFileInputStream);
		fis.init (file, 0x01, 00004, null);
		var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
				  createInstance (Components. interfaces. nsIScriptableInputStream);
		sis. init (fis);
		menu = sis. read (sis. available ());
		sis. close ();
		var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
				  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
		suc. charset = "UTF-8";
		menu = suc. ConvertToUnicode (menu);
		menu = new XML (menu) || "";
	}
	catch (e)
	{
		menu = "";
	}
	if (!menu)
	{
		menu =
		<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
			   onclick="this. parentNode. openTab (event);"/>
	}
	menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
	this. appendChild (menu);
	if (menu. getElementsByTagName ("menuitem"). length > 0)
		this. type = "menu";
	this. orient = "horizontal";
	return menu;
};

this. __defineGetter__
(
	"menu",
	function ()
	{
		return this. getElementsByTagName("menupopup") [0] || null;
	}
);

this. openTab = function (event, mi)
{
	mi = mi || event. target;
	var bg = event ? this. loadInBackground : true;
	var menu = mi. parentNode;
	if (!event || event. button < 2)
	{
		var tab;
		if (event && event. button == 0)
			tab = gBrowser. mCurrentTab;
		else
			tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false);
		menu. hidePopup ();
		var tabData = mi. getAttribute ("tab_data");
		this.ss.setTabState(tab, tabData);
	}
	else
		event. stopPropagation ();
	this. deleteMenuitem (mi, !event);
};

this. onclick = function (event)
{
	if (event. button != 1 || event. target != this)
		return;
	var menu = this. menu;
	var mis = menu. getElementsByTagName ("menuitem");
	while (mis. length)
		this. openTab (null, mis[0]);
	this. flushMenu (menu);
};

this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();

Отредактировано Infocatcher (11-08-2009 16:39:32)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№105010-08-2009 22:59:58

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

3Jlou пишет

Господа разработчики расширения, вопрос "косметического" характера: почему бы не сделать в диалоге редактирования кнопки 2 поля: "Картинка" и "Картинка маленькая" - которые будут выбираться в зависимости от настройки панели инструментов?
Изначально активно поле "Картинка", после заполнения этого поля активируется поле "Картинка маленькая", которое можно не заполнять, тогда для обоих вариантов настройки панели инструментов используется иконка из 1-го поля.

Ок, буду иметь в виду. Но без обещаний.

Добавлено 10-08-2009 23:08:20

Dreyk пишет
3Jlou пишет

Как должен выглядеть код, чтобы кнопка имела вид нажатой во время сёрфинга в режиме приватного просмотра?


...

Можно добавить в раздел "Инициализация"

тогда состояние кнопки будет изменяться даже если переключение будет производиться не кнопкой, а из меню.
Правда, деструкторы кнопок пока не реализованы, поэтому observer сниматься не будет. (но это мало кто заметит)

Выделить код

Код:

gPrivateBrowsingUI.toggleMode();
this.checked = !this.checked;

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]