Есть кнопка:

Выделить код

Код:

<toolbarpalette id="BrowserToolbarPalette">
		<toolbarbutton id="TransBar-Button" type="menu-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
			       tooltiptext="&transbar.button.tooltip;" oncommand="TranslatePage();" label="&transbar.button.text;"/>
</toolbarpalette>

Для кнопки определен стиль:

Выделить код

Код:

#TransBar-Button {
  list-style-image: url("chrome://translatebar/skin/button.gif");
}

toolbar[iconsize="small"] #TransBar-Button {
  list-style-image: url("chrome://translatebar/skin/button_small.gif");
}

А как теперь из скрипта поменять изображение на кнопке? При этом нужно поменять изображение и для маленького и для большого варианта.

Ну, например добавить в *.css что-то вроде

Выделить код

Код:

#TransBar-Button[transbarstate="1"] {
  list-style-image: url("chrome://translatebar/skin/state_1_button.gif");
}

toolbar[iconsize="small"] #TransBar-Button[transbarstate="1"] {
  list-style-image: url("chrome://translatebar/skin/state_1_button_small.gif");
}

А при необходимости сменить изображение устанавливать/удалять кнопке атрибут transbarstate:

Выделить код

Код:

...
if (...)
{
    ...
    document. getElementById ("BrowserToolbarPalette"). setAttribute ("transbarstate", "1");
    ...
}
...
...
if (...)
{
    ...
    document. getElementById ("BrowserToolbarPalette"). removeAttribute ("transbarstate");
    ...
}
...

Спасибо!

Еще один вопрос (уже, правда, по другой теме :))
Добавляю контекстное меню:

Выделить код

Код:

<popup id="contentAreaContextMenu">
		<menuseparator/>
		<menuitem label="123456" oncommand="TranslateSelection();" id="TransBar-PM-Item"/>
	</popup>

Пункт появляется в меню. А вот как сделать, чтобы он появлялся только в том, случае, когда в окне выделен фрагмент текста?

Sky

А вот как сделать, чтобы он появлялся только в том, случае, когда в окне выделен фрагмент текста?

В Autocopy можно посмотреть как сделано.
Только как это будет выглядеть, если стоят оба расширения...

В Autocopy можно посмотреть как сделано.

У меня есть расширение, которое добавляет пункт в контекстное меню, смотрел его исходники, но что-то тольку ноль. :dumb:

vladmir
Вообще функция Autocopy кажется встроена в fx :) Так что подозреваю, что autocopy меняет всего лишь одну настройку :)

Sky
Нет невтуды я с Autocopy - оно же своё контекстное выбрасывает автоматом, а нужно чтоб в обычное контекстное добавлялось.
Так Quick Note делает.

но что-то тольку ноль.

От меня, тогда - ваще минус.)))
Lynxx

Вообще функция Autocopy кажется встроена в fx

Что-то сомневаюсь...

Выделить код

Код:

document. getElementById ("contentAreaContextMenu"). addEventListener ("popupshowing", setMenuitemsVisible, true);
function setMenuitemsVisible ()
{
    document. getElementById ("needed_menuitem_id"). hidden = (window. getSelection () == "");
}

Разумеется, "needed_menuitem_id" должен быть в оверлее contentAreaContextMenu.

Спасибо.

2 vladmir
QuickNote помог. :)

Сделал так:

Выделить код

Код:

document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", OnContextMenuShowing, false);
function OnContextMenuShowing()
{
  var SelItem = document.getElementById("TransBar-PM-Item");
  var IsSelection = false;

  if(gContextMenu)
    IsSelection = gContextMenu.isTextSelected;
  if(SelItem)
    SelItem.hidden = !IsSelection;
}

у меня странный эффект проявляется, при вставке в код фрагмента

Выделить код

Код:

document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", OnContextMenuShowing, false);

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

cesspit пишет

у меня странный эффект проявляется, при вставке в код фрагмента

Выделить код

Код:

document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", OnContextMenuShowing, false);

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

разобрался, точнее подсмотрел в transbar &), тока я вот подумал что скрывать элемент в меню это не очень красиво выглядит, гораздо симпатичнее было бы дизаблить его, но как удалось установить, установка(масло маслянное блин :) ) disabled=true для xul-элемента(пункта меню) не означает замены цвета шрифта на серый. То есть если я хочу добится вида задизабленного пункта меню как, например "Назад", "Вперёд" на пустой странице мне нужно руками менять цвет пункта меню?

скрывать элемент в меню это не очень красиво выглядит

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

Выделить код

Код:

var SelItem = document.getElementById("TransBar-Context-SelectionItem");
SelItem="true";

ничего не происходит.
А при изменении аттрибута

Выделить код

Код:

SelItem.setAttribute("disabled", "true");

или установке этого аттрибута статически, в .xul пункт меню пропадает.
Видимо единственный выход менять вручную его цвет.

Выделить код

Код:

SelItem.setAttribute("style", "color: red");