Страницы: 1
Нужно на кнопке показать иконку и номер. Простейшее что приходит в голову намалевать кучу иконок с номерами или задействовать label кнопки.
Но как всегда хочется чего-то эдакого, возможно ли иметь всего одну иконку и средствами расширения добавлять поверх иконки номер?
:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
Отсутствует
Можно внутрь кнопки поместить <stack> c <image> и <label>. Или генерировать изображение для кнопки "на лету" с помощью <canvas>.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Я в свое время именно так и сделал - внутрь кнопки вставил стэк с лэйблом и картинкой. Правда, с тех пор остался такой вот вопрос: изначально я хотел использовать уже имеющиеся у кнопки лэйбл и изображение, но не тут-то было:
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 прекрасно видит весь анонимный контент связки. В свое время я так и не выяснил, как всё же можно добраться до этого контента, и вопрос остался открытым.
Отсутствует
как всё же можно добраться до этого контента
Вот такое работает из Custom Buttons:
alert(this.ownerDocument.getAnonymousElementByAttribute(this, "class", "toolbarbutton-text"));
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Сейчас проверил на обычной кнопке - возвращает null (собственно, я это пробовал и раньше, сейчас попробовал просто на всякий случай).
Отсутствует
В общем, я влез-таки в код 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)
Отсутствует
Можно внутрь кнопки поместить <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
Отсутствует
Страницы: 1