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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№100105-08-2009 10:23:08

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

Re: Custom Buttons

razoo, не удобней ли использовать Locationbar² для перехода по уровням? И кнопки нет, и можно одним кликом на любой уровень перейти


Есть кнопка "Добавить страницу в закладки | Управление закладками" (ЛКМ - добавить в закладки, СКМ - открыть вкладку "Собранное", ПКМ - открыть окно "Собранное") в 2-х вариантах:
1:

Выделить код

Код:

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%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%7C%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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.leftclick%20%20%20%3D%20function%28evt%29%7B%0A%09%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%0A%7D%0A%0Athis.midclick%20%20%3D%20function%28evt%29%7B%0A%20%20%20%20%20%20%20%20getBrowser%20%28%29.%20addTab%20%28%22chrome%3A//browser/content/places/places.xul%22%29%3B%0A%7D%0A%0Athis.rightclick%20%20%20%3D%20function%28evt%29%7B%0A%09PlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%0A%7D%0A%0A//%20%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20gQuot%20%u0434%u0435%u043B%u0430%u0435%u0442%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0432%20%7E350%20%u043C%u0441.%0A//%20%u042D%u0442%u043E%20%u043E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u0432%u043E%u043E%u0431%u0449%u0435%20%u0432%u0441%u0435%u0445%20%u043A%u043D%u043E%u043F%u043E%u043A%2C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u044E%u0449%u0438%u0445%20gQuot%3A%0A//%20custombuttons.%20gQuot.%20dcDelay%20%3D%200%3B%0A//%20this.setAttribute%28%27onclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0A%0A//%20%u0415%u0441%u043B%u0438%20%u0436%u0435%20%u043D%u0430%u0434%u043E%20%u0438%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u043E%u0442%u0434%u0435%u043B%u044C%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u043C%u043E%u0436%u043D%u043E%20%u043D%u0430%u043F%u0438%u0441%u0430%u0442%u044C%0Athis.%20gQuot%20%3D%20%7B%7D%3B%0Athis.%20gQuot.%20__proto__%20%3D%20custombuttons.%20gQuot%3B%0Athis.%20gQuot.%20dcDelay%20%3D%200%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0A%0A//%20this.style.opacity%20%3D%20%27.65%27%3B%0A//%20this.setAttribute%28%27onmouseover%27%2C%20%27custombuttons.ButtonBrt%28event%29%3B%27%20%29%3B%0A//%20this.setAttribute%28%27onmouseout%27%2C%20%27custombuttons.ButtonDim%28event%29%3B%27%20%29%3B%0A%0A//this.tooltipText%20+%3D%20%27%5Cn%20%u041B%u041A%u041C%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%5Cn%20%u0421%u041A%u041C%3A%20%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u0431%u043E%u043A%u043E%u0432%u043E%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%20%5Cn%20%u041F%u041A%u041C%3A%20%u041C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%27%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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

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%3E%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%7C%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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.url2xul%3D%20%27chrome%3A//browser/content/places/places.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20%0A%09%09%09PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%0A%09%09%09break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%09case%202%3A%20%0A%09%09%09PlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%0A%09%09%09break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%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

1-й - исправно работают клики всеми 3-мя кнопками мыши, но не нравится что по среднему клику вкладка открывается в фоне и при повторном среднем клике не закрывается (как во 2-м варианте), а открывается ещё одна вкладка.
2-й - вроде бы всё работает как надо, но правый клик кроме окна выкидывает и сворачивает меню кнопки, причем с шифтом происходит то же самое. Активировать меню кнопки возможно лишь при повторном правом клике с шифтом.

нельзя ли подправить код какого-либо из вариантов?

Отредактировано 3Jlou (05-08-2009 11:02:07)

Отсутствует

 

№100205-08-2009 12:18:23

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

Re: Custom Buttons

3Jlou пишет

не удобней ли использовать Locationbar² для перехода по уровням?

:)
Да, я сразу подумал, что кто-нибудь мне обязательно посоветует. Ты выиграл. :)
Если серьезно, я его тоже использую (на кусочке скрина сверху даже видно уголок адресной строки, она у меня под табами).
Но Locationbar не дает «дополнительной плоскости навигации» в пределах таба, а кнопка с дропмаркером - дает.
К тому же, удобство - это иногда еще и слабость к собственным привычкам.
А я привык жамкать по кнопке.

В любом случае, спасибо

Отсутствует

 

№100305-08-2009 16:00:37

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 3.5

Re: Custom Buttons

Есть расширение https://lastpass.com/
Создал кнопку

Выделить код

Код:

toggleSidebar('viewSidebar');

Открывает сайты в LastPass в сайдбаре , но проблема в том что все treeitem-ы этого сайдбара имеют аттрибут "true" *(то есть открытые , растянутые ) а нужно "false", как сделать ?

1249473573d3fda515254816b59bce0aac3da6d446.jpg

Нужно так :
1249473676f470a6fd8e16aa92627854bfab39ceb5.jpg

Отредактировано vurdalak (05-08-2009 16:02:33)

Отсутствует

 

№100405-08-2009 16:17:14

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

Re: Custom Buttons

Подскажите как сделать часы другого цвета?

Отсутствует

 

№100505-08-2009 18:20:16

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

Re: Custom Buttons

razoo

Только тут скорее мой косяк: кнопка обрабатывает правильно и если нажать на саму кнопку то GoUp будет, но поскольку вариант для «вверх» у него только один – он не указывает его в меню дропмаркера. А я клацал по меню - видел, что оно пусто - и переходил на другой таб. Причем, маленький пустой квадратик, который бывает когда нет пунктов в меню - малозаметен, но пока он не закроется – я не могу перескочить на другой таб – при «скоростном кликаньи бывалого серфера» возникает «ложный эффект легкого подвисания».

Чтобы не отображалось пустое меню, в разделе "Инициализация" существующей кнопки надо заменить функцию getPaths:

Выделить код

Код:

this. getPaths = function (event)
{
    var url = getBrowser (). contentDocument. location. href;
    url = url. match (/^([a-zA-Z]+:\/\/\/?)?([^\/]+)\/([^?]*)?(.*)$/);
    var domain = "";
    var levels = "";
    if (url)
    {
        domain = url [1] + url [2] + "/";
        var path = url [3] && url [3]. split ("/") || "";
        var levels = [];
        var curpath = "";
        for (var i = 0; i < path. length; i++)
        {
            if (path [i])
            {
                curpath = curpath + path [i] + "/";
                levels. push (domain + curpath);
            }
        }
        levels. pop ();
    }
    if (!levels)
    {
    	THIS. disabled = true;
    	if (disabledImg)
    	    THIS. image = disabledImg;
    }
    else
    {
    	THIS. disabled = false;
    	if (enabledImg)
    	    THIS. image = enabledImg;
    }
    if (levels. length != 0)
        THIS. type = "menu-button";
    else
        THIS. type = "";
    return levels || [];
};

в Uppity есть еще така фича:

Попробовал сделать
"Код":

Выделить код

Код:

this. loadURL ();

"Инициализация":

Выделить код

Код:

var enabledImg = "";
var disabledImg = "";

var THIS = this;
var id = this. id;

this. clickHandler = function (event)
{
	if (event. button == 2)
		return;
	if (event. originalTarget. nodeName == "toolbarbutton")
		return;
	else if (event. originalTarget. nodeName == "menuitem")
		this. uriToLoad = event. originalTarget. getAttribute ("label");
};

this. getPaths = function (event)
{
	var url = getBrowser (). contentDocument. location. href;
	var hurl = getBrowser (). mCurrentTab [id] || "";
	if ((hurl. indexOf (url) == 0) && (url. length < hurl. length))
		url = hurl;
	getBrowser (). mCurrentTab [id] = url;
	url = makeURI (url);
	if (url. schemeIs ("about"))
		return [];
	var host = url. prePath + "/";
	var curpath = host;
	var path = url. path. split ("/");
	var paths = [];
	for (var i = 0; i < path. length; i++)
	{
		if (path [i])
		{
			curpath += path [i] + "/";
			paths. push (curpath);
		}
	}
	if (!url. host && (paths. length != 0))
		host = paths. shift ();
	paths. unshift (host);
	THIS. host = host;
	if (paths. length == 0)
	{
		THIS. disabled = true;
		if (disabledImg)
		    THIS. image = disabledImg;
	}
	else
	{
		THIS. disabled = false;
		if (enabledImg)
		    THIS. image = enabledImg;
	}
	if (paths. length != 0)
		THIS. type = "menu-button";
	else
		THIS. type = "";
	return paths;
};

this. createMenu = function (event)
{
	if (event && (event. originalTarget. nodeName != "toolbarbutton"))
		return;
	var paths = this. getPaths (event);
	var menu = this. getElementsByTagName ("menupopup") [0];
	if (menu)
		this. removeChild (menu);
	menu = "";
	menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
	var menuitem;
	for (var i = 0; i < paths. length; i++)
	{
		menuitem = <menuitem label={paths [i]} tooltiptext={paths [i]}/>
		if ((paths [i] == getBrowser (). contentDocument. location. href) ||
		    (paths [i] == getBrowser (). contentDocument. location. href + "/"))
		{
			menuitem.@checked = "true";
			menuitem.@type = "checkbox";
		}
		menu.menuitem[i] = menuitem;
	}
	menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
	this. appendChild (menu);
};

this. loadURL = function ()
{
	loadURI (this. uriToLoad || this. host);
	this. uriToLoad = "";
};

this. onUnload = function (event)
{
	window. removeEventListener ("focus", THIS. getPaths, true);
	window. removeEventListener ("unload", THIS. onUnload, false);
};

this. destroy = function ()
{
	this. onUnload (null);
};

window. addEventListener ("focus", this. getPaths, true);
window. addEventListener ("unload", this. getPaths, false);

this. createMenu (null);

this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
this. orient = "horizontal";

В разделе "Инициализация" в первых двух строках можно указать url для разрешенного/запрещенного состояний кнопки.

Добавлено 05-08-2009 18:21:52
3Jlou
Кнопка № 2, раздел "Инициализация" (целиком):

Выделить код

Код:

this.url2xul= 'chrome://browser/content/places/places.xul';
this.onClick= function(e)
{
	switch (e.button)
	{
		case 0: 
			PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
			break;
		case 1: 
		{
			var t= gBrowser.mTabs;
			var current= content.document.location.href;
			var i= t.length;
			if (current==this.url2xul) gBrowser.removeCurrentTab(); 
			else while (true)
			{
				if (--i<0) 
				{
					if (current=='about:blank') // replace blank tab
						loadURI(this.url2xul);
					else // add new tab 
						gBrowser.selectedTab= gBrowser.addTab(this.url2xul); 
					break;
				};
				if (t[i].linkedBrowser.currentURI.spec==this.url2xul) // popup loaded
				{
					gBrowser.selectedTab= gBrowser.tabContainer.childNodes[i]; 
					break;
				};
			};
		}; break;
		case 2:
			if (e. shiftKey) return;
			e. preventDefault ();
			PlacesCommandHook.showPlacesOrganizer('AllBookmarks');
			break;
	};
};
this.setAttribute('onclick','this.onClick(event);');

Добавлено 05-08-2009 18:26:22
vurdalak

Открывает сайты в LastPass в сайдбаре , но проблема в том что все treeitem-ы этого сайдбара имеют аттрибут "true" *(то есть открытые , растянутые ) а нужно "false", как сделать ?

И рад бы помочь, но не могу.

Atilla7777

Подскажите как сделать часы другого цвета?

Цвет тех часов изменить невозможно в принципе - они используют xbm-картинки, а они двухцветные.
ps. Вот здесь: http://custombuttons.mozdev.org/drupal/content/help-with-buttons-please#comment-48 под ссылкой "Digital Clock" есть часы, цвет которых можно менять. В разделе "Инициализация" в строки

Выделить код

Код:

displayColor: "black",
	displayBackground: "white",
	canvasBackground: "white",
	displayBorderColor: "black",

надо прописать нужные цвета, например

Выделить код

Код:

displayColor: "red",
	displayBackground: "rgb(153,153,255)",

Отредактировано Anton (05-08-2009 18:48:45)


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

Отсутствует

 

№100605-08-2009 19:13:13

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 3.5

Re: Custom Buttons

И рад бы помочь, но не могу.

Где хоть копать ?

Отсутствует

 

№100705-08-2009 19:20:43

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

Re: Custom Buttons

vurdalak
Если и штатными средствами сайдбар открывается с развёрнутыми элементами дерева, то лучше, я думаю, совсем не "копать".

А так - не знаю, у меня сайдбар этот вообще не открывается. Открывается и тут же сам закрывается.


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

Отсутствует

 

№100805-08-2009 19:40:07

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 3.5

Re: Custom Buttons

Если и штатными средствами сайдбар открывается с развёрнутыми элементами дерева, то лучше, я думаю, совсем не "копать".

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

А так - не знаю, у меня сайдбар этот вообще не открывается. Открывается и тут же сам закрывается.

124948652261f57d6b17eee745ef6f7aab7d7a93dd.jpg
Нужно в настройках включить "Показать сайты на боковой панели"

Я думаю, можна как нибудь сделать java "коллапс " итемов сайдбара или назначение нового свойства элемента (ну не знаю, любое решение хотелось бы попробовать) после выполнения команды "toggleSidebar('viewSidebar');"

Отсутствует

 

№100905-08-2009 20:23:44

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

Re: Custom Buttons

vurdalak пишет

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

А если речь идет о сайдбаре lastpass ?


Как-то так:

Выделить код

Код:

toggleSidebar('viewSidebar');
var sb = document. getElementById ("sidebar");
var doc = sb. contentDocument;
setTimeout
(
	function ()
	{
		var sb = document. getElementById ("sidebar");
		var doc = sb. contentDocument;
		var tree = doc. getElementById ("lastpass-tree");
		if (!tree)
			return;
		var ti = tree. getElementsByTagName ("treeitem");
		for (var i = 0; i < ti. length; i++)
			ti [i]. removeAttribute ("open");
	},
	500
);

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

Отсутствует

 

№101005-08-2009 21:04:01

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

Re: Custom Buttons

Anton пишет

3Jlou
Кнопка № 2, раздел "Инициализация" (целиком):

Очередное спасибо с + :beer:

Отсутствует

 

№101105-08-2009 21:41:04

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 3.5

Re: Custom Buttons

Как-то так:

Ну вот и супер :lol::beer:

Отсутствует

 

№101205-08-2009 21:46:59

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

Re: Custom Buttons

vurdalak пишет

Ну вот и супер :lol::beer:

Кровопийца : )


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

Отсутствует

 

№101305-08-2009 21:52:10

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 174
UA: Firefox 3.5

Re: Custom Buttons

Кровопийца : )

Да ладно , если серьезно то большое спасибо, очень помогаешь и плюсики зарабатываешь :)

P.S. Как вообще расширение то ?

Отсутствует

 

№101405-08-2009 21:59:47

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

Re: Custom Buttons

vurdalak пишет

Да ладно , если серьезно

В шутку я, в шутку.

P.S. Как вообще расширение то ?

Last Pass ? Не могу сказать ничего определённого, потому как постигнуть не в состоянии.


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

Отсутствует

 

№101505-08-2009 22:04:49

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

Re: Custom Buttons

vurdalak, я давно обратил на Lastpass внимание - удобно... но сливать свои пароли на сервак как то не решился, поэтому приходится обходиться без удобств :)

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

Отсутствует

 

№101606-08-2009 10:15:12

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

Re: Custom Buttons

Anton, существенный недочет. Кнопка не обрабатывает субдомены.
Т.е ., например, если я нахожусь в галерее каконить художника по имени blablablart на Девианте, которая имеет адрес типа:
http://blablablart.DEVIANTART.com/gallery/#_featured--5 ,
то кнопка поднимет до уровня
http://blablablart.DEVIANTART.com/ ,
но не до http://DEVIANTART.com/

И было бы все-таки неплохо, чтобы дойдя до верхнего уровня картинка кнопки менялась.
Не нужно, чтобы кнопка деактивировалась, пускай пытается «карабкаться» дальше (все равно за пределами www жизни нет :)), главное, чтобы достижение верхнего уровня визуально обозначалось, и уход с него тоже.

А так отличная кнопка получилась – полная замена экстеншена.
Это же здорово, когда кнопкой можно заменить целое расширение.

Вот еще какой вопрос возник.
Что нужно добавить в код кнопки, открывающей определенный url, чтобы в случае, если такой таб уже открыт, она не открывала его повторно, а просто переходила к открытому?
(И к кнопкам, которые открывают в табах менеджеры закладок и скрапбука это тоже было бы логично применить.)

Отредактировано razoo (06-08-2009 12:51:46)

Отсутствует

 

№101706-08-2009 15:28:04

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

Re: Custom Buttons

razoo пишет

Вот еще какой вопрос возник.Что нужно добавить в код кнопки, открывающей определенный url, чтобы в случае, если такой таб уже открыт, она не открывала его повторно, а просто переходила к открытому?(И к кнопкам, которые открывают в табах менеджеры закладок и скрапбука это тоже было бы логично применить.)

Выделить код

Код:

var urlToOpen = 'INSERT_YOUR_URL_HERE';
function openURI(url)
{
	var tabs = gBrowser.tabContainer.childNodes;
	for (i=0; i<tabs.length; i++)
	{
		var tab = gBrowser. getBrowserForTab(tabs[i]);
		var location = tab.contentDocument.location.href;
		
		if (location == url)
		{
			gBrowser.selectedTab = tabs[i];
			return false;
		}
	}
	gBrowser.selectedTab = gBrowser.addTab(url);
	return true;
}
openURI(urlToOpen);

ЗЫ: я тут только начал разбираться, так что буду рад, если гуру сего дела укажут на возможные ошибки/неточности =)

Отредактировано Dreyk (06-08-2009 15:35:31)

Отсутствует

 

№101806-08-2009 16:18:45

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

Re: Custom Buttons

Dreyk, кнопка полезная, спасибо. Тут же возникла мысль использовать кнопки открытия url'ов на всплывающих барах с помощью спец. кнопки, но в совокупности они не работают - вместо открытия (или перехода на открытую вкладу) выпадает меню кнопки.
Вот эта кнопка Popup Toolbar:

Выделить код

Код:

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%3EPopup%20Toolbar%3C/name%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%5B/*Initialization%20code*/%0A%0Avar%20popupToolbarName%20%3D%20%22%22%3B%0Avar%20popupToolbarId%20%3D%20%22%22%3B%0Avar%20popupId%20%3D%20%22%22%3B%0Avar%20contextPopupId%20%3D%20%22popuptoolbar-contextpopup%22%3B%0A%0Athis.type%20%3D%20%22menu%22%3B%0Athis._init%20%3D%20function%28%29%20%7B%0A%20%20popupToolbarName%20%3D%20this.label%3B%0A%20%20popupToolbarId%20%3D%20%22__customToolbar_%22%20+%20popupToolbarName.replace%28%22%20%22%2C%20%22_%22%29%3B%0A%20%20popupId%20%3D%20popupToolbarName.replace%28%22%20%22%2C%20%22%22%29.toLowerCase%28%29%20+%20%22-%22%20+%20this.type%20+%20%22popup%22%3B%0A%0A%20%20var%20popupToolbar%20%3D%20document.getElementById%28popupToolbarId%29%3B%0A%20%20if%20%28popupToolbar%29%20%7B%0A%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22true%22%29%3B%0A%20%20%20%20document.persist%28popupToolbarId%2C%20%22collapsed%22%29%3B%0A%20%20%7D%0A%0A%20%20var%20popup%20%3D%20document.getElementById%28popupId%29%3B%0A%20%20if%20%28popup%29%20%7B%0A%20%20%20%20popup.hidePopup%28%29%3B%0A%20%20%20%20popup.parentNode.removeChild%28popup%29%3B%0A%20%20%7D%0A%0A%20%20popup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20popup.setAttribute%28%22id%22%2C%20popupId%29%3B%0A%20%20popup.setAttribute%28%22position%22%2C%20%22after_start%22%29%3B%0A%0A%20%20if%20%28this.type%20%3D%3D%20%22menu%22%29%20%7B%0A%20%20%20%20while%20%28this.firstChild%20%26%26%20this.firstChild.localName%20%3D%3D%20%22menupopup%22%29%20%7B%0A%20%20%20%20%20%20this.firstChild.hidePopup%28%29%3B%0A%20%20%20%20%20%20this.removeChild%28this.firstChild%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.appendChild%28popup%29%3B%0A%20%20%20%20popup.setAttribute%28%22onpopupshowing%22%2C%20%27this.parentNode.setPopup%28event%29%3B%27%29%3B%0A%20%20%7D%0A%20%20else%20%7B%0A%20%20%20%20popup.setAttribute%28%22onpopupshowing%22%2C%20%27document.popupNode.setPopup%28event%29%3B%27%29%3B%0A%20%20%7D%0A%0A%20%20popup.setAttribute%28%22onpopupshown%22%2C%20%27%7B%5C%0A%20%20%20%20window.addEventListener%28%22popuphidden%22%2C%20function%28e%29%20%7B%5C%0A%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28popupId%29%3B%5C%0A%20%20%20%20%20%20if%20%28e.target%20%3D%3D%20popup%29%20%7B%5C%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popuphidden%22%2C%20arguments.callee%2C%20false%29%3B%5C%0A%20%20%20%20%20%20%20%20return%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20var%20popupNode%20%3D%20document.popupNode%3B%5C%0A%20%20%20%20%20%20while%20%28popupNode%20%26%26%20popupNode%20%21%3D%20popup%29%20popupNode%20%3D%20popupNode.parentNode%3B%5C%0A%20%20%20%20%20%20if%20%28popupNode%20%3D%3D%20popup%29%20popup.hidePopup%28%29%3B%5C%0A%20%20%20%20%7D%2C%20false%29%3B%5C%0A%20%20%7D%27.replace%28%22popupId%22%2C%20%27%22%27%20+%20popupId%20+%20%27%22%27%29%29%3B%0A%0A%20%20popup.setAttribute%28%22onpopuphidden%22%2C%20%27%7B%5C%0A%20%20%20%20var%20popup%20%3D%20event.target%3B%5C%0A%20%20%20%20if%20%28popup.firstChild%20%26%26%20popup.firstChild.localName%20%3D%3D%20%22toolbar%22%29%20%7B%5C%0A%20%20%20%20%20%20var%20popupToolbar%20%3D%20popup.firstChild%3B%5C%0A%20%20%20%20%20%20popupToolbar.removeAttribute%28%22style%22%29%3B%5C%0A%20%20%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22true%22%29%3B%5C%0A%20%20%20%20%20%20document.persist%28popupToolbar.id%2C%20%22collapsed%22%29%3B%5C%0A%20%20%20%20%20%20var%20navbox%20%3D%20document.getElementById%28%22navigator-toolbox%22%29%3B%5C%0A%20%20%20%20%20%20var%20nextElement%20%3D%20navbox.firstChild%3B%5C%0A%20%20%20%20%20%20while%20%28nextElement%20%26%26%20nextElement.localName%20%21%3D%20%22toolbarset%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20if%20%28Number%28nextElement.getAttribute%28%22customindex%22%29%29%20%3E%20Number%28popupToolbar.getAttribute%28%22customindex%22%29%29%29%5C%0A%20%20%20%20%20%20%20%20%20%20break%3B%5C%0A%20%20%20%20%20%20%20%20nextElement%20%3D%20nextElement.nextSibling%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20navbox.insertBefore%28popupToolbar%2C%20nextElement%29%3B%5C%0A%20%20%20%20%20%20popupToolbar.firstPermanentChild%20%3D%20null%3B%5C%0A%20%20%20%20%20%20popupToolbar.lastPermanentChild%20%3D%20null%3B%5C%0A%20%20%20%20%20%20popupToolbar.currentSet%20%3D%20popupToolbar.getAttribute%28%22currentset%22%29%3B%5C%0A%20%20%20%20%7D%5C%0A%20%20%20%20while%20%28popup.lastChild%20%26%26%20popup.lastChild.localName%20%3D%3D%20%22menuitem%22%29%5C%0A%20%20%20%20%20%20popup.removeChild%28popup.lastChild%29%3B%5C%0A%20%20%7D%27%29%3B%0A%0A%20%20var%20contextPopup%20%3D%20document.getElementById%28contextPopupId%29%3B%0A%20%20if%20%28contextPopup%29%20%7B%0A%20%20%20%20contextPopup.hidePopup%28%29%3B%0A%20%20%20%20contextPopup.parentNode.removeChild%28contextPopup%29%3B%0A%20%20%7D%0A%0A%20%20contextPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20contextPopup.setAttribute%28%22id%22%2C%20contextPopupId%29%3B%0A%20%20contextPopup.setAttribute%28%22position%22%2C%20%22at_pointer%22%29%3B%0A%20%20contextPopup.setAttribute%28%22onpopupshowing%22%2C%20%27document.popupNode.setContextPopup%28event%29%3B%27%29%3B%0A%0A%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20menuitem.setAttribute%28%22label%22%2C%20%22Show%20Context%20Menu%20With%20Toolbar%22%29%3B%0A%20%20menuitem.setAttribute%28%22type%22%2C%20%22checkbox%22%29%3B%0A%20%20menuitem.setAttribute%28%22checked%22%2C%20this.getBoolPref%28%27showContextWithToolbar%27%29%29%3B%0A%20%20menuitem.setAttribute%28%22oncommand%22%2C%20%22document.popupNode.setBoolPref%28%27showContextWithToolbar%27%2C%20this.getAttribute%28%27checked%27%29%20%3D%3D%20%27true%27%29%3B%22%29%3B%0A%20%20contextPopup.appendChild%28menuitem%29%3B%0A%20%20contextPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%0A%20%20this.tooltipText%20%3D%20this.label%3B%0A%7D%0A%0Athis.setBoolPref%20%3D%20function%28name%2C%20value%29%20%7B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20prefs.setBoolPref%28%22custombuttons.popuptoolbar.%22%20+%20name%2C%20value%29%3B%0A%7D%0A%0Athis.getBoolPref%20%3D%20function%28name%29%20%7B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20return%20prefs.getPrefType%28%22custombuttons.popuptoolbar.%22%20+%20name%29%0A%20%20%20%20%20%20%20%20%26%26%20prefs.getBoolPref%28%22custombuttons.popuptoolbar.%22%20+%20name%29%3B%0A%7D%0A%0Athis.setPopup%20%3D%20function%28event%29%20%7B%0A%20%20if%20%28this.getBoolPref%28%27showContextWithToolbar%27%29%29%20%7B%0A%20%20%20%20document.popupNode%20%3D%20this%3B%0A%20%20%20%20this.setContextPopup%28event%29%3B%0A%20%20%7D%0A%0A%20%20var%20popup%20%3D%20event.target%3B%0A%20%20var%20popupToolbar%20%3D%20document.getElementById%28popupToolbarId%29%3B%0A%20%20if%20%28popupToolbar%20%26%26%20popupToolbar.parentNode%20%21%3D%20popup%20%26%26%20this.parentNode%20%21%3D%20popupToolbar%29%20%7B%0A%20%20%20%20popup.insertBefore%28popupToolbar%2C%20popup.firstChild%29%3B%0A%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22false%22%29%3B%0A%20%20%20%20if%20%28%21this.getBoolPref%28%27showContextWithToolbar%27%29%29%0A%20%20%20%20%20%20popupToolbar.setAttribute%28%22style%22%2C%20%22border%3A%20none%20%21important%3B%22%29%3B%0A%20%20%7D%0A%0A%20%20if%20%28%21popup.firstChild%29%20%7B%0A%20%20%20%20document.popupNode%20%3D%20this%3B%0A%20%20%20%20this.setContextPopup%28event%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.setContextPopup%20%3D%20function%28event%29%20%7B%0A%20%20var%20contextPopup%20%3D%20event.target%3B%0A%20%20while%20%28contextPopup.lastChild%20%26%26%20contextPopup.lastChild.localName%20%3D%3D%20%22menuitem%22%29%0A%20%20%20%20contextPopup.removeChild%28contextPopup.lastChild%29%3B%0A%0A%20%20var%20toolbars%20%3D%20document.getElementById%28%22navigator-toolbox%22%29.getElementsByTagName%28%22toolbar%22%29%3B%0A%20%20for%20%28var%20i%3D0%3B%20i%3Ctoolbars.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20toolbarname%20%3D%20toolbars%5Bi%5D.getAttribute%28%22toolbarname%22%29%3B%0A%20%20%20%20var%20toolbarid%20%3D%20toolbars%5Bi%5D.getAttribute%28%22id%22%29%3B%0A%20%20%20%20var%20menuitem%20%3D%20contextPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20toolbarname%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22type%22%2C%20%22radio%22%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22name%22%2C%20%22toolbars-radio%22%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22checked%22%2C%20%28this.label%20%3D%3D%20toolbarname%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22disabled%22%2C%20%28%22__customToolbar_%22%20+%20toolbarname.replace%28%22%20%22%2C%20%22_%22%29%20%21%3D%20toolbarid%29%20%7C%7C%20%28this.parentNode%20%3D%3D%20toolbars%5Bi%5D%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20%22document.popupNode.setToolbar%28this.label.toString%28%29%29%3B%22%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.setToolbar%20%3D%20function%28toolbarname%29%20%7B%0A%20%20var%20toolbar%20%3D%20document.getElementById%28%22__customToolbar_%22%20+%20toolbarname.replace%28%22%20%22%2C%20%22_%22%29%29%3B%0A%20%20if%20%28toolbar%20%26%26%20toolbar%20%21%3D%20this.parentNode%29%20%7B%0A%20%20%20%20this.label%20%3D%20toolbarname%3B%0A%20%20%20%20if%20%28toolbar.firstChild%20%26%26%20toolbar.firstChild.image%29%0A%20%20%20%20%20%20this.image%20%3D%20toolbar.firstChild.image%3B%0A%0A%20%20%20%20this._init%28%29%3B%0A%20%20%7D%0A%7D%0A%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.showPopup%20%3D%20function%28event%29%20%7B%0A%20%20document.popupNode%20%3D%20this%3B%0A%20%20document.getElementById%28popupId%29.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%7D%0A%0Athis.showContextPopup%20%3D%20function%28event%29%20%7B%0A%20%20document.popupNode%20%3D%20this%3B%0A%20%20document.getElementById%28contextPopupId%29.showPopup%28this%2C%20event.screenX%2C%20event.screenY%2C%20%22context%22%2C%20%22none%22%2C%20%22none%22%29%3B%0A%7D%0A%0Athis.leftclick%20%3D%20this.showPopup%3B%0Athis.rightclick%20%3D%20this.showContextPopup%3B%0A%0Aif%20%28this.type%20%3D%3D%20%22menu%22%29%20%7B%0A%20%20this.leftclick%20%3D%20this.hideDropMarker%3B%0A%20%20this.hideDropMarker%28%29%3B%0A%7D%0A%0Athis._init%28%29%3B%0A%0A//this.setAttribute%28%27onclick%27%2C%20%27if%20%28event.target%20%3D%3D%20event.currentTarget%29%20gQuot%28event%2C%20this%29%3B%27%29%3B%0A//%u0438%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u043E%u0442%u0434%u0435%u043B%u044C%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%0Athis.%20gQuot%20%3D%20%7B%7D%3B%0Athis.%20gQuot.%20__proto__%20%3D%20custombuttons.%20gQuot%3B%0Athis.%20gQuot.%20dcDelay%20%3D%200%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0A%0A%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

Отредактировано 3Jlou (06-08-2009 16:20:51)

Отсутствует

 

№101906-08-2009 17:58:40

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

Re: Custom Buttons

Dreyk пишет

только начал разбираться, так что буду рад, если гуру сего дела укажут на возможные ошибки/неточности =)

Не знаю как старожилы оценят, но у меня твой код работает так как хотелось.
Первое Спасибо, запакованное в плюс :)

PS Да, слышал, что они не любят, когда их "гурами" называют :D

Отсутствует

 

№102006-08-2009 18:05:14

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

Re: Custom Buttons

razoo

Anton, существенный недочет. Кнопка не обрабатывает субдомены.

Насчёт "существенности" не уверен, но допустим.

И было бы все-таки неплохо, чтобы дойдя до верхнего уровня картинка кнопки менялась.

Не знаю, не знаю.  Очень сложно, по моему, скажем, при переходе на http://deviantart.com загружается http://www.deviantart.com и как определить, что выше уже не подняться ?

В общем, попробовал, в раздел "Инициализация" существующей кнопки:

Выделить код

Код:

var enabledImg = "";
var disabledImg = "";
var topLevelImg = "";

var THIS = this;
var id = this. id;

this. clickHandler = function (event)
{
	if (event. button == 2)
		return;
	if (event. originalTarget. nodeName == "toolbarbutton")
		return;
	else if (event. originalTarget. nodeName == "menuitem")
		this. uriToLoad = event. originalTarget. getAttribute ("label");
};

this. decodeURL = function (url)
{
	try
	{
		url = losslessDecodeURI (makeURI (url));
	}
	catch (e) {}
	return url;
};

this. getDomain = function (url, level)
{
	var uri = makeURI (url);
	var tlds = Components. classes ["@mozilla.org/network/effective-tld-service;1"].
		   getService (Components. interfaces. nsIEffectiveTLDService);
	var domain;
	try
	{
		domain = tlds. getBaseDomain (uri, level);
	}
	catch (e)
	{
		domain = uri. asciiHost;
	}
	return domain;
};

this. getCBObject = function ()
{
	var cbobj = getBrowser (). mCurrentTab [id];
	if (typeof (cbobj) != "object")
		getBrowser (). mCurrentTab [id] = {};
	return getBrowser (). mCurrentTab [id];
};

this. getPaths = function (event)
{
	var url = getBrowser (). contentDocument. location. href;
	var cbobj = getBrowser (). mCurrentTab [id];
	cbobj = THIS. getCBObject ();
	var hurl = cbobj. url || url;
	if ((THIS. getDomain (url, 0) == THIS. getDomain (hurl, 0)) && (url. length < hurl. length))
		url = hurl;
	cbobj. url = url;
	url = makeURI (url);
	if (url. schemeIs ("about"))
		return [];
	var host = url. prePath + "/";
	var curpath = host;
	var path = url. path. split ("/");
	var paths = [];
	for (var i = 0; i < path. length; i++)
	{
		if (path [i])
		{
			curpath += path [i] + "/";
			paths. push (THIS. decodeURL (curpath));
		}
	}
	if (!url. host && (paths. length != 0))
		host = paths. shift ();
	var dLevel = 0;
	var domains = [];
	var tld = "";
	while (tld != THIS. getDomain (host, dLevel))
	{
		tld = THIS. getDomain (host, dLevel++);
		domains. push (url. scheme + "://" + tld +"/");
	}
	paths = domains. concat (paths);
	url = THIS. decodeURL (getBrowser (). contentDocument. location. href);
	if ((paths. indexOf (url) == -1) && (paths. indexOf (url + "/") == -1))
	{
		for (var i = 0; i < paths. length; i++)
		{
			if (url. length < paths [i]. length)
			{
				paths. splice (i, 0, url);
				break;
			}
		}
	}
	THIS. host = paths [0] || host;
	if (paths. length == 0)
	{
		if (disabledImg)
		    THIS. image = disabledImg;
	}
	else
	{
		if (cbobj. toplevel)
		{
			if (topLevelImg)
			    THIS. image = topLevelImg;
		}
		else
		{
			if (enabledImg)
			    THIS. image = enabledImg;
		}
	}
	if (paths. length != 0)
		THIS. type = "menu-button";
	else
		THIS. type = "";
	return paths;
};

this. createMenu = function (event)
{
	if (event && (event. originalTarget. nodeName != "toolbarbutton"))
		return;
	var paths = this. getPaths (event);
	var menu = this. getElementsByTagName ("menupopup") [0];
	if (menu)
		this. removeChild (menu);
	menu = "";
	menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
	var menuitem;
	for (var i = 0; i < paths. length; i++)
	{
		menuitem = <menuitem label={paths [i]} tooltiptext={paths [i]}/>
		if ((paths [i] == this. decodeURL (getBrowser (). contentDocument. location. href)) ||
		    (paths [i] == this. decodeURL (getBrowser (). contentDocument. location. href) + "/"))
		{
			menuitem.@checked = "true";
			menuitem.@type = "checkbox";
		}
		menu.menuitem[i] = menuitem;
	}
	menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
	this. appendChild (menu);
};

this. loadURL = function ()
{
	var url = this. uriToLoad || this. host;
	if (url == this. host)
		this. getCBObject (). toplevel = true;
	else
		this. getCBObject (). toplevel = false;
	loadURI (this. uriToLoad || this. host);
	this. uriToLoad = "";
};

this. onUnload = function (event)
{
	window. removeEventListener ("focus", THIS. getPaths, true);
	window. removeEventListener ("unload", THIS. onUnload, false);
};

this. destroy = function ()
{
	this. onUnload (null);
};

window. addEventListener ("focus", this. getPaths, true);
window. addEventListener ("unload", this. getPaths, false);

this. createMenu (null);

this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
this. orient = "horizontal";

+ расшифровка всяких "%D0..." в URL


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

Отсутствует

 

№102106-08-2009 19:16:42

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

Re: Custom Buttons

3Jlou пишет

Dreyk, кнопка полезная, спасибо. Тут же возникла мысль использовать кнопки открытия url'ов на всплывающих барах с помощью спец. кнопки, но в совокупности они не работают - вместо открытия (или перехода на открытую вкладу) выпадает меню кнопки.
Вот эта кнопка Popup Toolbar:

Выделить код

Код:

custombutton://...

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


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

Отсутствует

 

№102206-08-2009 19:43:19

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

Re: Custom Buttons

По поводу кнопки открытия папки: можно ли сделать так, чтобы адрес она брала из того места, куда Firefox сохраняет файлы?
Вот код:

function startProcess (path, args)
{
    var file = Components. classes["@mozilla.org/file/local;1"].
               createInstance (Components.interfaces.nsILocalFile);
    var process = Components. classes ["@mozilla.org/process/util;1"].
                  createInstance (Components. interfaces. nsIProcess);
    file. initWithPath (path);
    if (args == "")
    {
        file. launch ();
        return;
    }
    process. init (file);
    if (!this. pid)
        this. pid = [];
    this. pid. push (process. run (false, [args], 1));
}
startProcess ("Путь сохранения", "");


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

Отсутствует

 

№102306-08-2009 19:51:20

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

Re: Custom Buttons

Anton пишет

Насчёт "существенности" не уверен, но допустим.

:) Поправка:  для меня - "существенный".
Вобщем, новый код отличный, аддон в архив, кнопку - на замену.
Antonу снова - Спасибо.

Отсутствует

 

№102406-08-2009 22:35:13

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

Re: Custom Buttons

Najlus
Примерно так:

Выделить код

Код:

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

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

Отсутствует

 

№102507-08-2009 11:35:40

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

Re: Custom Buttons

Anton пишет

NajlusПримерно так:

Не работает =(
Пишет Windows не удалось найти E:\Document ans Settings\*набор странных символов*\*набор странных символов
Притом что папка сохранения находится на диске D, а не на E =(


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

Отсутствует

 

Board footer

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