>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Выводить надпись на иконке http://forum.mozilla-russia.org/viewtopic.php?id=50224 |
KML > 15-06-2011 18:16:07 |
Нужно на кнопке показать иконку и номер. Простейшее что приходит в голову намалевать кучу иконок с номерами или задействовать label кнопки. |
Anton > 15-06-2011 20:30:40 |
Можно внутрь кнопки поместить <stack> c <image> и <label>. Или генерировать изображение для кнопки "на лету" с помощью <canvas>. |
hydrolizer > 16-06-2011 06:27:28 |
Я в свое время именно так и сделал - внутрь кнопки вставил стэк с лэйблом и картинкой. Правда, с тех пор остался такой вот вопрос: изначально я хотел использовать уже имеющиеся у кнопки лэйбл и изображение, но не тут-то было: Выделить код Код: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) |
Infocatcher > 16-06-2011 12:02:41 |
hydrolizer пишет
Вот такое работает из Custom Buttons: Выделить код Код:alert(this.ownerDocument.getAnonymousElementByAttribute(this, "class", "toolbarbutton-text")); |
hydrolizer > 16-06-2011 13:06:41 |
Infocatcher |
hydrolizer > 17-06-2011 12:36:50 |
В общем, я влез-таки в код 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'а. |
KML > 17-06-2011 13:53:50 |
Anton пишет
Спасибо, отличное решение |