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

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№115-06-2011 18:16:07

KML
Участник
 
Группа: Extensions
Откуда: Днепропетровск
Зарегистрирован: 01-06-2005
Сообщений: 422
UA: Firefox 4.0

Выводить надпись на иконке

Нужно на кнопке показать иконку и номер. Простейшее что приходит в голову намалевать кучу иконок с номерами или задействовать label кнопки.
Но как всегда хочется чего-то эдакого, возможно ли иметь всего одну иконку и средствами расширения добавлять поверх иконки номер?


:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0

Отсутствует

 

№215-06-2011 20:30:40

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

Re: Выводить надпись на иконке

Можно внутрь кнопки поместить <stack> c <image> и <label>. Или генерировать изображение для кнопки "на лету" с помощью <canvas>.


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

Отсутствует

 

№316-06-2011 06:27:28

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 5.0

Re: Выводить надпись на иконке

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

Выделить код

Код:

var btn=document.getElementById("debug-button");
var anonNodes=document.getAnonymousNodes(btn);
Services.console.logStringMessage(anonNodes.length); // 1
Services.console.logStringMessage(anonNodes[0].nodeName); // xul:hbox
Services.console.logStringMessage(anonNodes[0].childNodes.length); // 0

- лэйбл и изображение как бы отсутствуют в childNodes фактически содержащего их объекта. Есть подозрение, что так происходит потому, что у кнопки в XBL-связке button-icon и button-text не просто помещены внутрь hbox, но еще и помещены внутрь тэга children:

Выделить код

Код:

<xul:hbox class="box-inherit button-box" xbl:inherits="align,dir,pack,orient"
          align="center" pack="center" flex="1" anonid="button-box">
  <children>
    <xul:image class="button-icon" xbl:inherits="src=image"/>
    <xul:label class="button-text" xbl:inherits="value=label,accesskey,crop"/>
  </children>
</xul:hbox>

(chrome://global/content/bindings/button.xml#button)
Но при всем при этом тот же DOM inspector прекрасно видит весь анонимный контент связки. В свое время я так и не выяснил, как всё же можно добраться до этого контента, и вопрос остался открытым.

Отсутствует

 

№416-06-2011 12:02:41

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

Re: Выводить надпись на иконке

hydrolizer пишет

как всё же можно добраться до этого контента

Вот такое работает из Custom Buttons:

Выделить код

Код:

alert(this.ownerDocument.getAnonymousElementByAttribute(this, "class", "toolbarbutton-text"));

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

Отсутствует

 

№516-06-2011 13:06:41

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 5.0

Re: Выводить надпись на иконке

Infocatcher
Сейчас проверил на обычной кнопке - возвращает null (собственно, я это пробовал и раньше, сейчас попробовал просто на всякий случай).

Отсутствует

 

№617-06-2011 12:36:50

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 5.0

Re: Выводить надпись на иконке

В общем, я влез-таки в код DOM inspector, и разобрался с его способом извлечения анонимного контента. Вот пример для обычной кнопки, относительно которой стандартные методы получения анонимного контента ничего не возвращают, и не видят:

Выделить код

Код:

var btn=document.getElementById("debug-button");
var walker=Cc["@mozilla.org/inspector/deep-tree-walker;1"].createInstance(Ci.inIDeepTreeWalker);
walker.showAnonymousContent = true;
walker.showSubDocuments = false;
walker.init(btn, Ci.nsIDOMNodeFilter.SHOW_ELEMENT);
var currentNode = walker.currentNode;
while (currentNode)
{
  currentNode = walker.nextNode();
  if (!currentNode) break;
  Services.console.logStringMessage(currentNode.nodeName+" "+currentNode.className);
}

Компонент inIDeepTreeWalker доступен и без установленного DOM inspector (проверял на чистом профиле), интерфейс у него примерно такой же, как у обычного TreeWalker'а.

Отредактировано hydrolizer (17-06-2011 12:38:16)

Отсутствует

 

№717-06-2011 13:53:50

KML
Участник
 
Группа: Extensions
Откуда: Днепропетровск
Зарегистрирован: 01-06-2005
Сообщений: 422
UA: IE 8.0

Re: Выводить надпись на иконке

Anton пишет

Можно внутрь кнопки поместить <stack> c <image> и <label>.

Спасибо, отличное решение :)

Отредактировано KML (17-06-2011 13:54:09)


:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0

Отсутствует

 

Board footer

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