Так, новый заход.
Редактор понимает ссылки вида
chrome://custombuttons/content/editor.xul?window=Firefox&id=custombuttons-button1
, но потом делает проверку
get canClose () { if (!window. opener && !window. arguments) return false; return true; },
, которую без дополнительных корректировок (от которых глюки в Firefox 3.6) может пройти только окно.
В Firefox 3.6 при этом надо обязательно включить настройку «Сохранять размеры и позицию окон редактора отдельно для каждой кнопки».
Но зато глюков нет: editCustomButtonInTab-test.js
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
и кстати раздвинуть можно проще - добавив пробел между закрывающей скобкой и новым тэгом img.
Подозреваю что нет, то есть превьюшка будет нормальная, а вот созданный png-файл будет обрезан
по собственному алгоритму и часть иконок пропадёт.
Это я так, в качестве тренировки познания кодинга...
Отсутствует
таки есть - табы не закрываются;(
Они только кнопками редактора не закрываются.
кстати а может проще сделать две кнопки? для 3.6 и для 4+ ? )
С одной удобнее, не надо изменения синхронизировать.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife, ну конечно ты прав !!!
Объясню истоки своего идиотизма:
Скрипты-то выключены, все эти кнопки для меня бесполезны,
глаз скользит мимо них и не замечает.
Потом вдруг дошло, но поздно - глупость сморожена
Новый вариант кнопки посмотрю, чуть погодя...
Отсутствует
у меня с этим вариантом на 3.6 не закрываются вообще никакие табы ни кнопками отмена\ок ни крестиком на табе ни контекстным меню закрыть другие вкладки...
У меня закрывается, но только извне (например, кликом СКМ по вкладке), разве что стандартное предупреждение для beforeunload выдается каждый раз.
для 3.6 сделать рабочую стабильную версию
Ну и как же ее сделать, если в механизме закрытия вкладок что-то ломается после добавления в объект window свойства arguments, без которого редактор (зачем-то) блокирует закрытие?
Добавлено 09-08-2012 19:50:34
Еще можно отключить злополучный canClose:
custombuttons-0.0.5.6pre3-20111120.xpi\chrome\custombuttons.jar\content\custombuttons\editor2.js
get canClose () { //if (!window. opener && !window. arguments) // return false; return true; },
Отредактировано Infocatcher (09-08-2012 19:50:34)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife, поверхностный взгляд на свежую Make icons line :
В сформированном в буфере тексте поста встречается:
{spoiler}{code}data:image/data:image/x-icon;base64,AAABAAEAE....
то есть "data:image/" идёт дважды.
Предлагаю:
Отсутствует
okkamas_knife, всегда пожалуйста , пока отдыхаю, но
Вот вытащил из старых разработок кнопку.
Что делает ? Да ничего особенного, мне всего лишь слегка
облегчает процесс вытаскивания свежедобавленной CB-кнопки.
Итак, по клику:
Открывает окошко "Настройка панелей инструментов"
Делает его меньше и помещает куда-то в центр
Скрывает почти всё лишшнее, оставляет последний элемент
( до перезапуска браузера это как раз и будет добавленная кнопка )
Всё, бери и тащи.
Хотел сделать дополнительный автоматический режим,
но жестоко обломался,
похоже что когда появляется commonDialog "Кнопка была успешно создана. Вы можете... "
все CB-скрипты останавливаются как загипнотизированные
и сделать уже ничего нельзя
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%0A%20%20%3Cname%3ELapka%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////////////////wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////////////////////////////////wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////////////////////AAAA/wAAAAAAAAAAAAAA/////////////////////////////////////////////////////////////////wAAAP8AAAAAAAAA/////////////////wAAAP////////////////////////////////////////////////8AAAD/AAAAAAAAAP///////////wAAAP8AAAD//////////////////////////////////////////////////////wAAAP8AAAAAAAAA/wAAAP8AAAAAAAAA//////////////////////////////////////8AAAD///////////8AAAD/AAAAAAAAAAAAAAAAAAAA////////////AAAA////////////AAAA////////////AAAA////////////AAAA/wAAAAAAAAAAAAAAAAAAAP///////////wAAAP///////////wAAAP///////////wAAAP8AAAD//////wAAAP8AAAAAAAAAAAAAAP///////////wAAAP8AAAD///////////8AAAD///////////8AAAD/AAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD///////////8AAAD/AAAA////////////AAAA////////////AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAP///////////wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AesQfgHrEHwB6xB4AOsQcADrEHAAaxBgAGsQQABrEEAAKxBkACsQeAArEHgAKxBwAWsQcAHrEHkD6xB/n+sQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%20%20var%20oSvc%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0A%20%20var%20observerCustomizeToolbarWindow%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0A%20%20observe%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0A%20%20handleEvent%3A%20function%28e%29%20%7B%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%0A%20%20if%20%28doc.location.href%20%21%3D%20%22chrome%3A//global/content/customizeToolbar.xul%22%29%20return%3B%0A%0A//-----------------------------------------------------------------------------------%0A%0A%20%20doc.lastChild.persist%20%3D%20%22%22%3B%20%20%20win.resizeTo%28256%2C230%29%3B%0A%0A%20%20function%20minimize%28%29%20%7B%20var%20palettes%20%3D%20doc.getElementsByClassName%28%22paletteRow%22%29%3B%0A%0A%20%20%20if%20%28palettes.length%29%20%7B%0A%20%20%20%0A%20%20%20%20%20for%20%20%28var%20i%20%3D%200%3B%20i%20%3C%20palettes.length%20-%201%3B%20i++%29%20palettes%5Bi%5D.hidden%20%3D%20true%3B%0A%20%20%20%20%20var%20%20lastPalette%20%3D%20palettes%5Bpalettes.length-1%5D%3B%0A%20%20%20%20%20var%20%20lastPaletteChildren%20%3D%20lastPalette.children%3B%0A%20%20%20%20%20var%20%20theLast%20%3D%20lastPaletteChildren%5BlastPaletteChildren.length-1%5D%3B%0A%20%20%20%20%20if%20%20%20%28theLast.nodeName%20%3D%3D%20%22spacer%22%29%20lastPalette.removeChild%28theLast%29%3B%0A%20%20%20%20%20for%20%20%28var%20i%20%3D%200%3B%20i%20%3C%20lastPaletteChildren.length%20-%201%20%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastPaletteChildren%5Bi%5D.hidden%20%3D%20true%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20var%20description%20%3D%20doc.getElementById%28%22instructions%22%29%3B%0A%20%20%20%20%20%20%20%20%20description.style.textAlign%20%3D%20%22center%22%3B%0A%20%20%20%20%20%20%20%20%20description.firstChild.nodeValue%20%3D%20%22%u0412%u044B%20%u0437%u043D%u0430%u0435%u0442%u0435%2C%20%u0447%u0442%u043E%20%u0434%u0435%u043B%u0430%u0442%u044C%22%3B%0A%20%20%20%20%20doc.getElementsByTagName%28%22box%22%29%5B0%5D.hidden%3D%20true%3B%0A%20%20%20%20%20%0A%20%20%20%20%20var%20iH%20%3D%20content.innerHeight%3B%20%20%20var%20oH%20%3D%20content.outerHeight%3B%0A%20%20%20%20%20var%20ih%20%3D%20win.innerHeight%3B%20%20%20%20%20%20%20var%20oh%20%3D%20win.outerHeight%3B%0A%20%20%20%20%20%0A%20%20%20%20%20win.screenX%20%3D%20%28window.outerWidth%20-%20win.outerWidth%29/2%3B%0A%20%20%20%20%20win.screenY%20%3D%20%28oH%20-%20iH%29%20+%200.5*%28%20iH%20-%20ih%29%20-%202*%28oh%20-%20ih%29%3B%0A%20%20%20%20%20%0A%20%20return%3B%20%7D%0A%20%20%20%20%20%0A%20%20win.setTimeout%28minimize%2C%20500%29%3B%20%7D%0A%20%20%0A%20%20minimize%28%29%3B%20%0A%20%20%0A%20%20oSvc.removeObserver%28observerCustomizeToolbarWindow%2C%20%22domwindowopened%22%2C%20false%29%3B%20%7D%7D%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0A%20%20oSvc.addObserver%28observerCustomizeToolbarWindow%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%0A%20%20BrowserCustomizeToolbar%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано SendAbuse (10-08-2012 02:37:17)
Отсутствует
okkamas_knife, ух-ты ! весёлая кнопка, спасибо тебе и Автору.
Жаль, что она не подавляет эти два навязчивых окошка,
зато пробежал глазами 77 свойств объекта cbs, мало что понял,
но всё равно было очень интересно, и сам код наверняка ещё пригодится.
Отсутствует
Нечто вроде:
Custom Buttons Editor: Toggle on Top
Только я особо не тестировал.
Если работает нормально, то оно же пример синглетона для обработки открытия чужих окон.
зато пробежал глазами 77 свойств объекта cbs, мало что понял
Да там вообще большое поле для рефакторинга.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Undo Close Tabs List 0.3.0pre10 (2012-08-10)
x Исправлено удаление стилей при удалении кнопки
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
в лисе где-нибудь хранится информация о том, откуда установлено дополнение?
И ещё: урл откуда устанавливалось дополнение может не совпадать с урлом, по которому проверяются новые версии дополнения?
Хочется кнопку/скрипт, которая бы добавляла бы в менеджере дополнений к каждому дополнению ссылку на страницу дополнения на АМО (или откуда оно было установлено), а то часто там прошит урл homepage ведущий куда-то на личный сайт автора.
Отредактировано iDev.Pi (10-08-2012 14:28:30)
mzfx
Отсутствует
iDev.Pi
Есть какое-то Add-ons Manager Context Menu
%profile%/extensions.sqlite
Таблица addon, поле sourceURI
Но там много всякого: у меня и file:// есть, и https://adblockplus.org/devbuilds/adblockplus/adblockplus-2.1.3a.3534.xpi?update для тестового ABP.
Хотя в основном штуки вида http://releases.mozilla.org/pub/mozilla.org/addons/%циферки%/%имя%-%версия%-sm+fx.xpi
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
editCustomButtonInTab-test.js
Добавлено удаление пункта меню при удалении расширения.
Cookies Permissions 0.2.0pre4 (2012-08-10) (осторожно, это тестовая версия!)
[x] Исправлено применение стилей кнопки (в SeaMonkey стили применялись к кнопкам с тем же id в окнах почты).
[*] Рефакторинг кода.
[*] Убрано использование deprecated E4X.
[*] Удаление незащищенных cookies по таймеру теперь использует один глобальный таймер для всех окон.
[x] Исправлено удаление observer'а изменения разрешений.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
SendAbuseуже есть кнопка которая при добавлении новой помещает её справа от себяможешь погонять...кому сказать спасибо за код думаю сам догадаешься моя только иконка(и идея), зы её надо включить чтоб работала..
Отредактировано okkamas_knife (Сегодня 01:02:38)
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043D%u043E%u0432%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u043B%u0435%u0434%u0443%u044E%u0449%u0435%u0439%20%u0437%u0430%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%7C%u0414%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0434%u043B%u044F%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u044B%u0445%20%u043F%u0443%u043D%u043A%u0442%u043E%u0432%20%u043C%u0435%u043D%u044E%20%u0421ustom%20Buttons%3A%22%u041D%u0430%u0441%u0442%u0440%u043E%u0438%u0442%u044C%22%2C%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043D%u043E%u0432%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443...%22%7C%u0412%u044B%u0440%u0435%u0437%u0430%u0442%u044C%u21C4%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/48ANv+1ABX//wA2/6QANv9WnL+N/1eWUf8AAAAAAAAAAAAV/1IANv8IAAAAAAAAAAAAAAAAAAAAAAA2/60iN///CSr//woh//8ANv+DAAAAAJPwh/8quSb/Kaop/wAAAAAKIf9SCSr/UiI3/1IAAAAAAAAAAJy/jf9pnGL/V6hT/1OqTv9ioVv/bplm/2CjWP8ywS//D98P/wfSB/8imyH/ADb/LgA6/1IAPv9SFDX/UgA2/xxs6Hj/MfIm/yX9FP8o+B7/J/Mo/yL2J/8h9iX/IfYk/wTnBP8A3gD/ALUA/yyDK/8ANv9SAFr/UgBQ/1IEQv9SnL+N/2mcYv8ptkn/LrhC/z60Q/9JsUb/QLk5/yXLIP8S3RD/Dc4M/yCcIP8AAAAAADD/UgBo/1IAa/9SAGb/UgB4//8Ad///AHH//wAn//8ANv9nAAAAAAAAAAB922z/Krwi/y6oLP8AAAAAAAAAAAAn/1IAcf9SAHf/UgB4/1IAhv//AIb//wB+//8AQv//RFn//wA2/2cAAAAAnL+N/12aSv8AAAAAAAAAAERZ/1IAQv9SAH7/UgCG/1IAhv9SAJb//wCW//8Akv//AIL//wBM//9CVv//ADb/ZwAAAAAAAAAAAAAAAEJW/1IATP9SAIL/UgCS/1IAlv9SAJb/UgCo//8Aqv//ALX//wC3//8Arv//AFv//zxb//8ANv9WAAAAADxb/1IAW/9SAK7/UgC3/1IAtf9SAKr/UgCo/1IAt///ALP//wCA//8Adv//AHn//wB0//8AL///Q1b//0NW/1IAL/9SAHT/UgB5/1IAdv9SAID/UgCz/1IAt/9SALv//wCE//8iT///TYb//1Np//9geP//ADb/jwA2/1YAAAAAAAAAAGB4/1JTaf9STYb/UiJP/1IAhP9SALv/UgC5//8EQ///ADb/vAA2/1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANv8PBEP/UgC5/1IAn///M1n//wA2/2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNZ/1IAn/9SAV3//wA2/7UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANv8IAV3/UhZN//8ANv92AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZN/1Jggv//ADb/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABggv9SwGesQYIjrEEAAKxBAACsQQAQrEEGMKxBAmCsQQHArEEAgKxBAACsQQDArEEP+KxBH/ysQT/8rEE//qxBP/6sQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.openEditor%20%3D%20function%28%29%20%7B%0A%20%20try%20%7B%0A%20%20%20%20return%20Services.prefs.getBoolPref%28%22custombuttons.addNewButtonNext.openEditor%22%29%3B%0A%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%7D%0A%0Athis.createNextButton%20%3D%20function%28aButton%29%20%7B%0A%20%20custombuttons.cloneButton%28aButton%2C%20true%29%3B%0A%20%20if%20%28this.openEditor%28%29%29%20%7B%0A%20%20%20%20window.setTimeout%28function%28%29%7B%0A%20%20%20%20%20%20if%28%21aButton.nextSibling.hasAttribute%28%27initialized%27%29%29%20%7B%0A%20%20%20%20%20%20%20%20custombuttons.editButton%28aButton.nextSibling%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%29%0A%20%20%7D%0A%7D%0A%0Afunction%20%24%28aId%29%20%7B%0A%20%20return%20document.getElementById%28aId%29%3B%0A%7D%0A%0Avar%20newIDs%20%3D%20%5B%22custombuttons-contextpopup-addNextButton%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22custombuttons-contextpopup-addNextButton-sub%22%5D%3B%0A%0Avar%20beforeIDs%20%3D%20%5B%22custombuttons-contextpopup-addnewbutton%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22custombuttons-contextpopup-addnewbutton-sub%22%5D%3B%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20newIDs.length%3B%20i++%29%20%7B%0A%20%20if%20%28%24%28newIDs%5Bi%5D%29%29%20%7B%0A%20%20%20%20%24%28newIDs%5Bi%5D%29.parentNode.removeChild%28%24%28newIDs%5Bi%5D%29%29%3B%0A%20%20%7D%0A%0A%20let%20item%20%3D%0A%20%20%20%20%20%20cbu.makeXML%28%3Cmenuitem%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%7BnewIDs%5Bi%5D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043D%u043E%u0432%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u043B%u0435%u0434%u0443%u044E%u0449%u0435%u0439%20%u0437%u0430%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20image%3D%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/48ANv+1ABX//wA2/6QANv9WnL+N/1eWUf8AAAAAAAAAAAAV/1IANv8IAAAAAAAAAAAAAAAAAAAAAAA2/60iN///CSr//woh//8ANv+DAAAAAJPwh/8quSb/Kaop/wAAAAAKIf9SCSr/UiI3/1IAAAAAAAAAAJy/jf9pnGL/V6hT/1OqTv9ioVv/bplm/2CjWP8ywS//D98P/wfSB/8imyH/ADb/LgA6/1IAPv9SFDX/UgA2/xxs6Hj/MfIm/yX9FP8o+B7/J/Mo/yL2J/8h9iX/IfYk/wTnBP8A3gD/ALUA/yyDK/8ANv9SAFr/UgBQ/1IEQv9SnL+N/2mcYv8ptkn/LrhC/z60Q/9JsUb/QLk5/yXLIP8S3RD/Dc4M/yCcIP8AAAAAADD/UgBo/1IAa/9SAGb/UgB4//8Ad///AHH//wAn//8ANv9nAAAAAAAAAAB922z/Krwi/y6oLP8AAAAAAAAAAAAn/1IAcf9SAHf/UgB4/1IAhv//AIb//wB+//8AQv//RFn//wA2/2cAAAAAnL+N/12aSv8AAAAAAAAAAERZ/1IAQv9SAH7/UgCG/1IAhv9SAJb//wCW//8Akv//AIL//wBM//9CVv//ADb/ZwAAAAAAAAAAAAAAAEJW/1IATP9SAIL/UgCS/1IAlv9SAJb/UgCo//8Aqv//ALX//wC3//8Arv//AFv//zxb//8ANv9WAAAAADxb/1IAW/9SAK7/UgC3/1IAtf9SAKr/UgCo/1IAt///ALP//wCA//8Adv//AHn//wB0//8AL///Q1b//0NW/1IAL/9SAHT/UgB5/1IAdv9SAID/UgCz/1IAt/9SALv//wCE//8iT///TYb//1Np//9geP//ADb/jwA2/1YAAAAAAAAAAGB4/1JTaf9STYb/UiJP/1IAhP9SALv/UgC5//8EQ///ADb/vAA2/1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANv8PBEP/UgC5/1IAn///M1n//wA2/2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNZ/1IAn/9SAV3//wA2/7UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANv8IAV3/UhZN//8ANv92AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZN/1Jggv//ADb/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABggv9SwGesQYIjrEEAAKxBAACsQQAQrEEGMKxBAmCsQQHArEEAgKxBAACsQQDArEEP+KxBH/ysQT/8rEE//qxBP/6sQQ%3D%3D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20oncommand%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.createNextButton%28document.popupNode%29%3B%22%7D/%3E%29%3B%0A%0A%20if%20%28i%20%3D%3D%200%29%20item.setAttribute%28%22observes%22%2C%20%22custombuttons-contextbroadcaster-primary%22%29%3B%0A%0A%20%20let%20sibling%20%3D%20%24%28beforeIDs%5Bi%5D%29%3B%0A%20%20sibling.parentNode.insertBefore%28item%2C%20sibling.nextSibling%29%3B%0A%0A%7D%0A%0A//this.setAttribute%28%22popup%22%2C%20%22custombuttons-contextpopup%22%29%3B%0A%0A//%u0414%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0434%u043B%u044F%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u044B%u0445%20%u043F%u0443%u043D%u043A%u0442%u043E%u0432%20%u043C%u0435%u043D%u044E%20%u0421ustom%20Buttons%3A%0A//%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043D%u043E%u0432%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443...%22%0Avar%20CBCPANB%20%3D%20document.getElementById%28%22custombuttons-contextpopup-addnewbutton%22%29%3B%0ACBCPANB.setAttribute%28%22image%22%20%2C%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0Avar%20CBCPANBS%20%3D%20document.getElementById%28%22custombuttons-contextpopup-addnewbutton-sub%22%29%3B%0ACBCPANBS.setAttribute%28%22image%22%20%2C%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A//%22%u041D%u0430%u0441%u0442%u0440%u043E%u0438%u0442%u044C%22%0Avar%20CBCPC%20%3D%20document.getElementById%28%22custombuttons-contextpopup-customize%22%29%3B%0ACBCPC.setAttribute%28%22image%22%20%2C%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABv0lEQVR42qWTTWsTURSGn8k4H0mIk6katIhtQtNgraEiVRQiBvGPKC7c+U90IXXl/xCsCEJ10w+QtqKmjSnNNE5mJonTSdKWJE5GdFGTCvHd3M05zznve+8VHj03FoDHjKYXgg/o3ZmN8W7dPbHyd83xMwCMOD2Q8ODpdi9/7dxIzW/Xqr8AL58kRwI8fFb8G9DpdDAME13XWPqwysXxBFpcIxoNo8dPnwzoN7uux8raOqqioKgy303LNyqSOKuTnc2gKPJwQKlUprC9gxaLkEonqTdcmq0DqpaDY9dQZZm7uXl/m8hgwF7FZPPTVy5fyVAxKlhWjaOjDrEx3Yd5qKEu9/K3EEVxMOD14hL6GQ01olIuGeRyN7CtOhufCwhymIZTY35uhuTk+GDA8spHynsmqalJLNNmLjtD44eLXavj+Bu0XJfc7etBwAMBxW+7bH7ZClKXJYnm/j76WJy431As7tJuHXI/f3O4BdupU9jaoVypokSihMMqIaGL0Ovi+bdz4XyC6amJ4SH21W4f8OrNe2RRoOEdIvvBERJJpy6RvZr590Pqy/OawZrLqxtk0hNIvh1JOvVn8nHAf33nn+7w6k8543ejAAAAAElFTkSuQmCC%22%29%3B%0Avar%20CBCPCS%20%3D%20document.getElementById%28%22custombuttons-contextpopup-customize-sub%22%29%3B%0ACBCPCS.setAttribute%28%22image%22%20%2C%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABv0lEQVR42qWTTWsTURSGn8k4H0mIk6katIhtQtNgraEiVRQiBvGPKC7c+U90IXXl/xCsCEJ10w+QtqKmjSnNNE5mJonTSdKWJE5GdFGTCvHd3M05zznve+8VHj03FoDHjKYXgg/o3ZmN8W7dPbHyd83xMwCMOD2Q8ODpdi9/7dxIzW/Xqr8AL58kRwI8fFb8G9DpdDAME13XWPqwysXxBFpcIxoNo8dPnwzoN7uux8raOqqioKgy303LNyqSOKuTnc2gKPJwQKlUprC9gxaLkEonqTdcmq0DqpaDY9dQZZm7uXl/m8hgwF7FZPPTVy5fyVAxKlhWjaOjDrEx3Yd5qKEu9/K3EEVxMOD14hL6GQ01olIuGeRyN7CtOhufCwhymIZTY35uhuTk+GDA8spHynsmqalJLNNmLjtD44eLXavj+Bu0XJfc7etBwAMBxW+7bH7ZClKXJYnm/j76WJy431As7tJuHXI/f3O4BdupU9jaoVypokSihMMqIaGL0Ovi+bdz4XyC6amJ4SH21W4f8OrNe2RRoOEdIvvBERJJpy6RvZr590Pqy/OawZrLqxtk0hNIvh1JOvVn8nHAf33nn+7w6k8543ejAAAAAElFTkSuQmCC%22%29%3B%0A%0A%0A//Cut%20%26%20Paste%20Button%0Aconst%20CB%20%3D%20custombuttons%3B%0Aconst%20CBS%20%3D%20CB.cbService%3B%0Aconst%20sCBCtxtMenu%20%3D%20CB2const.sCBCtxtMenu%3B%0A%0Avar%20cbCtxtMenu%20%3D%20%24%28sCBCtxtMenu%29%3B%0A%0Athis.clipboard%20%3D%20%22%22%3B%0A%0Avar%20items%20%3D%20%5B%0A%20%20%7B%20id%3A%20sCBCtxtMenu+%20%22-cut%22%20%2C%0A%20%20%20%20label%3A%20%22%u0412%u044B%u0440%u0435%u0437%u0430%u0442%u044C%22%2C%0A%20%20%20%20command%3A%20%22c%22%2C%0A%20%20%20%20icon%3A%20%22data%3Aimage/png%3Bbase64%2C%5C%0AiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI%5C%0AWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QocFh0xaEFkXgAAArRJREFUOMuFk11Ik1EYx59z3nev%5C%0Ar9vUfaXbbPgVaHjRVRB0YZRJV0XeZCIRaGmWWKhpgZAElaV9gYgQlBjoEPRKkCS6DAK1MG0zNvJj%5C%0A7zZ1m+51X+92zttNzmFa5+78/w8//s/znIMg5TzrfXIOAN7zPO9tunm7dI/Xz7LspTvNrbpUHade%5C%0AGIYZu9XYrI1Go8t9/a87Uz0Fq7hw5nS55sWrnk8HAggh/E+HHdfV1lcQQo7t6E97HpeZc82m7ZCI%5C%0AKKUnDgRgjENLS7+AT0tDsVisdCcFy7JThYWF4HF7KKXU8a8EFTabDVZdK6iutr44kUic6nnePVBS%5C%0AUqJAgMHhdAAAWA8E3G299xljvLy4aAc+jUeSJB3X6/TXZAqwvrFGAWCiraXj4YEAAABKaeXCjwV5%5C%0Abc0DjTeaVPFEHIliEObm5iQA6Npb/xegraVjGmM8ZF+00WBwC2s0GhDcgizL8ru2lo7p/wL+pJia%5C%0AnZnGTqcD0jkeMt8ORhBCb/arRXuFMaOxl1B6Pb65qSblZTIz+REVGHNAIHQLITRQ6fG07wsYM5k6%5C%0A437/g6MmEyQoRd6tTdkX3h5mZVRVkJ3D8BxHJVkG5/o6KLKyrla63UPJFsbN5hrJ5+sqNhrpwsrK%5C%0AVDASlgJBEdfEaU2UIzqWwTQQEhOO1dUPR/R6EvP5BsfN5t2XOmowCPNFRWSEYe4DAMxYLCGrUpnY%5C%0A8UcYhnzJNQcBAIYxbv+Wn09GDQZhd4ixmF6SJFJFyKMJleqlgmV5hLE9OWmOm1Hz6arJjIy+y5R2%5C%0AgyxTIMSwC+A4Qa1UMl/z8mImna5pXhC8iszMK8mPpNU2fHe5Ng4fOtQwa7HECKUYMA4AADAAANVa%5C%0Arc/l95/0SxIbAJA5tfrsRUFI7twqiu7q7GyPNxDI8YfDGl8k4lOoVOetouj+DaDzOgfcNME8AAAA%5C%0AAElFTkSuQmCC%22%20%7D%2C%0A%20%20%7B%20id%3A%20sCBCtxtMenu%20+%20%22-paste%22%2C%0A%20%20%20%20label%3A%20%22%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%22%2C%0A%20%20%20%20command%3A%20%22p%22%2C%0A%20%20%20%20icon%3A%20%22chrome%3A//custombuttons/skin/paste1.png%22%20%7D%0A%5D%3B%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%24%28items%5Bi%5D.id%29%20%26%26%20cbCtxtMenu.removeChild%28%24%28items%5Bi%5D.id%29%29%3B%0A%20%20let%20m%20%3D%20menuitem%28items%5Bi%5D.id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20items%5Bi%5D.label%20+%20%22%20%u043A%u043D%u043E%u043F%u043A%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20items%5Bi%5D.command%20%3D%3D%20%22c%22%20%3F%20%22cut%28%29%3B%22%20%3A%20%22paste%28%29%3B%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20items%5Bi%5D.icon%29%3B%0A%20%20switch%20%28items%5Bi%5D.command%29%20%7B%0A%20%20%20%20case%20%22c%22%3A%20%20%20m.cut%20%3D%20%20%20cut.bind%28%29%3B%20break%3B%0A%20%20%20%20case%20%22p%22%3A%20m.paste%20%3D%20paste.bind%28%29%3B%0A%20%20%7D%0A%7D%0A%0AcbCtxtMenu.addEventListener%28%22popupshowing%22%2C%20popupShowing%2C%20false%29%3B%0AcbCtxtMenu.removeEventListener%28%22popuphiding%22%2C%20popupShowing%2C%20false%29%3B%0A%0Afunction%20%24%28aId%29%20%7B%0A%20%20return%20document.getElementById%28aId%29%3B%0A%7D%0A%0Afunction%20menuitem%28aId%2C%20aLabel%2C%20aCommand%2C%20aIcon%29%20%7B%0A%20%20var%20x%20%3D%20%3Cmenuitem%20xmlns%3D%7Bxulns%7D%20id%3D%7BaId%7D%20label%3D%7BaLabel%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%20image%3D%7BaIcon%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20oncommand%3D%7BaCommand%7D/%3E%3B%0A%20%20var%20s%20%3D%20%24%28sCBCtxtMenu%20+%20CB2const.sCBCtxtMenuSep2%29%3B%0A%20%20return%20cbCtxtMenu.insertBefore%28cbu.makeXML%28x%29%2C%20s%29%3B%0A%7D%0A%0Afunction%20popupShowing%28aEvent%29%20%7B%0A%20%20//LOG%28aEvent.target.id%29%3B%0A%20%20var%20button%20%3D%20%22triggerNode%22%20in%20aEvent.target%20%3F%20aEvent.target.triggerNode%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20document.popupNode%3B%0A%20%20var%20copied%20%3D%20/%5Ecustombutton%3A%5C/%5C//.test%28self.clipboard%29%3B%0A%20%20%24%28items%5B0%5D.id%29.hidden%20%3D%20copied%20%7C%7C%20button%20%3D%3D%20self%3B%0A%20%20%24%28items%5B1%5D.id%29.hidden%20%3D%20%21copied%3B%0A%7D%0A%0Afunction%20convertURItoDOM%28aURL%29%20%7B%0A%20%20var%20string%20%3D%20unescape%28aURL.replace%28/%5Ecustombutton%5C%3A%5C/%5C//%2C%20%22%22%29.toString%28%29%29%3B%0A%20%20var%20dom%20%3D%20%28new%20DOMParser%28%29%29.parseFromString%28string%2C%20%22text/xml%22%29%3B%0A%20%20if%20%28dom.documentElement.nodeName%20%3D%3D%20%22parsererror%22%29%20%7B%0A%20%20%20%20return%20null%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20return%20dom.documentElement%3B%0A%20%20%7D%0A%7D%0A%0Afunction%20getParamValue%28aDocument%2C%20aNodeName%29%20%7B%0A%20%20var%20result%20%3D%20%22%22%3B%0A%20%20%20%20var%20node%20%3D%20aDocument.getElementsByTagName%28aNodeName%29%5B0%5D%3B%0A%20%20%20%20if%20%28%21node%29%20return%20result%3B%0A%20%20%20%20if%20%28%21node.firstChild%20%7C%7C%20%28node.firstChild%20%26%26%0A%20%20%20%20%20%20%20%20%28node.firstChild.nodeType%20%3D%3D%20node.TEXT_NODE%29%29%29%20%7B%0A%20%20%20%20%20%20result%20%3D%20node.%20textContent%3B%0A%20%20%20%20%7D%20else%20%7B%20%20//%20CDATA%0A%20%20%20%20%20%20result%20%3D%20node.firstChild.textContent%3B%0A%20%20%20%20%7D%0A%20%20return%20result%3B%0A%7D%0A%0Afunction%20getButtonParameters%28aButtonLink%2C%20aURL%29%20%7B%0A%20%20var%20dom%20%3D%20convertURItoDOM%28aURL%29%3B%0A%20%20var%20params%20%3D%20CBS.getButtonParameters%28aButtonLink%29.wrappedJSObject%3B%0A%20%20params.name%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22name%22%29%0A%20%20params.image%20%20%20%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22image%22%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20getParamValue%28dom%2C%20%22stdicon%22%29%3B%0A%20%20params.code%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22code%22%29%0A%20%20params.initCode%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22initcode%22%29%0A%20%20params.help%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22help%22%29%0A%20%20params.accelkey%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22accelkey%22%29%0A%20%20params.mode%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20getParamValue%28dom%2C%20%22mode%22%29%0A%20%20params.wrappedJSObject%20%20%3D%20params%3B%0A%20%20return%20params%3B%0A%7D%0A%0Afunction%20cut%28aButton%29%20%7B%0A%20%20if%20%28%21aButton%29%20%7B%0A%20%20%20%20aButton%20%3D%20%22triggerNode%22%20in%20cbCtxtMenu%20%3F%20cbCtxtMenu.triggerNode%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20document.popupNode%3B%0A%20%20%7D%0A%20%20self.clipboard%20%3D%20aButton.URI%3B%0A%20%20var%20toolbarID%20%3D%20aButton.parentNode.id%3B%0A%20%20var%20buttonID%20%3D%20aButton.id%3B%0A%20%20var%20buttonsToRemove%20%3D%20document.getElementsByAttribute%28%22id%22%2C%20buttonID%29%3B%0A%20%20var%20removeFromOverlay%20%3D%20buttonsToRemove.length%20%3D%3D%201%3B%0A%20%20CBS.removeButton%28aButton%2C%20removeFromOverlay%29%3B%0A%20%20CB.persistCurrentSets%28toolbarID%2C%20buttonID%2C%20null%29%3B%0A%7D%0A%0Afunction%20paste%28aButton%29%20%7B%0A%20%20if%20%28%21aButton%29%20%7B%0A%20%20%20%20aButton%20%3D%20%22triggerNode%22%20in%20cbCtxtMenu%20%3F%20cbCtxtMenu.triggerNode%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20document.popupNode%3B%0A%20%20%7D%0A%20%20CB.cloneButton%28aButton%2C%20true%29%3B%0A%20%20var%20newButton%20%3D%20CB.makeButtonLink%28%22update%22%2C%20aButton.nextSibling.id%29%3B%0A%20%20var%20url%20%3D%20self.clipboard%3B%0A%20%20var%20params%20%3D%20getButtonParameters%28newButton%2C%20url%29%3B%0A%20%20//inspectObject%28params%29%3B%0A%20%20CBS.installButton%28params%29%3B%0A%20%20self.clipboard%20%3D%20%22%22%3B%0A%7D%0A%0Athis.onDestroy%20%3D%20function%28aReason%29%20%7B%0A%20%20cbCtxtMenu.removeEventListener%28%22popupshowing%22%2C%20popupShowing%2C%20false%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%24%28items%5Bi%5D.id%29%20%26%26%20cbCtxtMenu.removeChild%28%24%28items%5Bi%5D.id%29%29%3B%0A%20%20%7D%0A%7D%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0Avar%20em%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%0Avar%20winName%20%3D%20%22CB_addNewButtonNext%22%3B%0A%0Avar%20index%20%3D%201%3B%0Awhile%20%28em.hasMoreElements%28%29%29%20%7B%0A%20%20let%20win%20%3D%20em.getNext%28%29%3B%0A%20%20if%28win.name%20%3D%3D%20winName%29%20%7B%0A%20%20%20%20win.focus%28%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20index++%0A%7D%0A%0Avar%20xul%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%3Bbase64%2C%22%20+%0A%20%20%20%20%20%20%20%20%20%20encodeURIComponent%28btoa%28this.Help%29%29%3B%0A%0AopenDialog%28xul%2C%20winName%2C%20%22chrome%2C%20dialog%2C%20centerscreen%2C%20close%22%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3C%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%3E%0A%0A%3Cprefwindow%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20id%3D%22custombuttonsEditor%22%0A%20%20title%3D%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043D%u043E%u0432%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0441%u043B%u0435%u0434%u0443%u044E%u0449%u0435%u0439%20%u0437%u0430%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%22%3E%0A%0A%20%20%3Cprefpane%0A%20%20%20%20id%3D%22prefpane-menu%22%0A%20%20%20%20label%3D%22Prefpane%20menu%22%0A%20%20%20%20accesskey%3D%22P%22%3E%0A%0A%20%20%20%20%3Cpreferences%3E%0A%20%20%20%20%20%20%3Cpreference%0A%20%20%20%20%20%20%20%20id%3D%22custombuttons.addNewButtonNext.openEditor%22%0A%20%20%20%20%20%20%20%20name%3D%22custombuttons.addNewButtonNext.openEditor%22%0A%20%20%20%20%20%20%20%20type%3D%22bool%22%20/%3E%0A%20%20%20%20%3C/preferences%3E%0A%0A%20%20%20%20%3Cgroupbox%3E%0A%20%20%20%20%20%20%3Ccaption%20label%3D%22Options%22/%3E%0A%20%20%20%20%20%20%3Ccheckbox%0A%20%20%20%20%20%20%20%20id%3D%22custombuttons.addNewButtonNext.openEditor-checkbox%22%0A%20%20%20%20%20%20%20%20label%3D%22%u0410%u0432%u0442%u043E%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u0440%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u044F%20%u043D%u043E%u0432%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%22%0A%20%20%20%20%20%20%20%20accesskey%3D%22A%22%0A%20%20%20%20%20%20%20%20preference%3D%22custombuttons.addNewButtonNext.openEditor%22%20/%3E%0A%20%20%20%20%3C/groupbox%3E%0A%0A%20%20%3C/prefpane%3E%0A%0A%3C/prefwindow%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
можно либо её поместить так чтоб она было полностью на сером фоне а не висела между фоном и окошком ввода?
Да что-то мелковато тогда выходит.
http://www.iconfinder.com/icondetails/4 … small_icon – слишком маленькая.
http://www.iconfinder.com/icondetails/4 … n_red_icon – слишком вытянутая.
либо справа от строки ввода урл кнопки
Не знаю, кнопка же не имеет никакого отношения к URL'у.
либо вообще поместить справа от кнопки Применить.
Нелогично как-то. Вот в расположении рядом с кнопками управления окном есть логика...
Или вот можно сделать обычную кнопку: cbEditorToggleOnTop-test.js
Добавлено 10-08-2012 20:22:52
+ Хоткей Ctrl+T для переключения
Отредактировано Infocatcher (10-08-2012 20:22:52)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
lokiju
это к чему?
Возможны варианты. Мне больше нравится вариант от Loucypherа, как имеющий больший функционал.(Вы спойлер в моем предыдущем сообщении открывали , кнопку смотрели? Я из вашего сообщения кнопку смотрел)
автор кода вобщемто Infocatcher http://forum.mozilla-russia.org/viewtop … 54#p569854
приведенного вами. А разве я где то это отрицал или спрашивал об этом?(На этот вопрос отвечать необязательно.)
Отредактировано lokiju (10-08-2012 22:03:05)
Отсутствует
okkamas_knife, вот никак не могу прийти в себя от созерцания красот и глубин
кода Infocatcher'а. Осознал лишь самую малую часть. Потенциал кода безграничен.
Попробовал на его основе, только в качестве эксперимента, сделать что-то ещё.
Подопытная тема - сокрытие в окне CB-редактора поля "URL кнопки"
( имхо, только зря занимает драгоценное место )
Кнопка, конечно, не для практического использования, но лишь повод для размышления.
Надо-ли скрывать... Само место - там, внизу, ведь теоретически туда можно множно
много разных плюшек запихать, вплоть до кнопки cbEditorToggleOnTop.
Только вот пока никак не соображу как сослаться на spacer правильно,
а не просто как на второго children'а
( но с этим у меня всегда не все DOM'a )
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%0A%20%20%3Cname%3EShow/hide%20URL%20field%20in%20CBEditor%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEADBAAAAEAIABoAwAAFgAAACgAAAAMAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgA3/AIAK/wCAB/8AgAf/AIAH/wCAB/8AgAr/AIANAAAAAAAAAAAAAAAA/wCAFf8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCAFQAAAAAAAAAA/wCAFf8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCAFQAAAAAAAAAAAAAAAP8AgA7/AIAL/wCAH/8AgB//AIAf/wCAH/8AgAv/AIAOAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAh/wCA//8AgP//AID//wCA//8AgCEAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBD/AID//wCA//8AgPT/AID0/wCA//8AgP//AIAQAAAAAAAAAAAAAAAAAAAAAP8AgBH/AID//wCA9v8AgBz/AIAc/wCA9v8AgP//AIARAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA//8AgPj/AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA+P8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgBH/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIARAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAN/wCA//8AgP//AIASAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEAAAAAAAAAAA/wCAEP8AgBAAAAAAAAAAAAAAAADAMKxBgBCsQYAQrEHAMKxB4HCsQcAwrEHAMKxBwDCsQcAwrEHAMKxBwDCsQcAwrEHAMKxBwDCsQcAwrEHmcKxB%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20The%20CORE%3A%20http%3A//infocatcher.ucoz.net/js/cb/cbEditorToggleOnTop.js%0A//%20test-attempt-mod%20by%20any%20stupid%20user.%20%0A%0Aconst%20watcherId%20%3D%20%22customButtonsToggleOnTop_%22%20+%20this.id%3B%0Avar%20watcher%20%3D%20Application.storage.get%28watcherId%2C%20null%29%3B%0Aif%28%21watcher%29%20%7B%0A%09watcher%20%3D%20%7B%0A%09%09btnId%3A%20%22cbUrlFieldHiderButton%22%2C%0A%09%09btnIcon%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEADBAAAAEAIABoAwAAFgAAACgAAAAMAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgA3/AIAK/wCAB/8AgAf/AIAH/wCAB/8AgAr/AIANAAAAAAAAAAAAAAAA/wCAFf8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCAFQAAAAAAAAAA/wCAFf8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCAFQAAAAAAAAAAAAAAAP8AgA7/AIAL/wCAH/8AgB//AIAf/wCAH/8AgAv/AIAOAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAh/wCA//8AgP//AID//wCA//8AgCEAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBD/AID//wCA//8AgPT/AID0/wCA//8AgP//AIAQAAAAAAAAAAAAAAAAAAAAAP8AgBH/AID//wCA9v8AgBz/AIAc/wCA9v8AgP//AIARAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA//8AgPj/AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA+P8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgA//AID//wCA//8AgAf/AIAH/wCA+P8AgP//AIAPAAAAAAAAAAAAAAAAAAAAAP8AgBH/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIARAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAN/wCA//8AgP//AIASAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEAAAAAAAAAAA/wCAEP8AgBAAAAAAAAAAAAAAAADAMKxBgBCsQYAQrEHAMKxB4HCsQcAwrEHAMKxBwDCsQcAwrEHAMKxBwDCsQcAwrEHAMKxBwDCsQcAwrEHmcKxB%22%2C%0A%09%09%09%09get%20btnTip%28%29%20%7B%0A%09%09%09var%20locale%20%3D%20%28cbu.getPrefs%28%22general.useragent.locale%22%29%20%7C%7C%20%22en%22%29.match%28/%5E%5Cw*/%29%5B0%5D%3B%0A%09%09%09if%28locale%20%3D%3D%20%22ru%22%29%0A%09%09%09%09return%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u043E%u043B%u0435%20%22URL%20%u043A%u043D%u043E%u043F%u043A%u0438%22%27%3B%0A%09%09%09return%20%27Show/hide%20URL%20field%27%3B%0A%09%09%7D%2C%0A%0A%09%09REASON_STARTUP%3A%201%2C%0A%09%09REASON_SHUTDOWN%3A%202%2C%0A%09%09REASON_WINDOW_LOADED%3A%203%2C%0A%09%09REASON_WINDOW_CLOSED%3A%204%2C%0A%0A%09%09get%20obs%28%29%20%7B%0A%09%09%09delete%20this.obs%3B%0A%09%09%09return%20this.obs%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIObserverService%29%3B%0A%09%09%7D%2C%0A%09%09get%20ww%28%29%20%7B%0A%09%09%09delete%20this.ww%3B%0A%09%09%09return%20this.ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%09%09%7D%2C%0A%09%09get%20wm%28%29%20%7B%0A%09%09%09delete%20this.wm%3B%0A%09%09%09return%20this.wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%09%09%7D%2C%0A%09%09init%3A%20function%28reason%29%20%7B%0A%09%09%09this.obs.addObserver%28this%2C%20%22quit-application-granted%22%2C%20false%29%3B%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%0A%09%09%09%09this.initWindow%28ws.getNext%28%29%2C%20reason%29%3B%0A%09%09%09this.ww.registerNotification%28this%29%3B%0A%09%09%7D%2C%0A%09%09destroy%3A%20function%28reason%29%20%7B%0A%09%09%09this.obs.removeObserver%28this%2C%20%22quit-application-granted%22%29%3B%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%0A%09%09%09%09this.destroyWindow%28ws.getNext%28%29%2C%20reason%29%3B%0A%09%09%09this.ww.unregisterNotification%28this%29%3B%0A%09%09%7D%2C%0A%09%09initWindow%3A%20function%28window%2C%20reason%29%20%7B%0A%09%09%09if%28%21this.isTargetWindow%28window%29%29%0A%09%09%09%09return%3B%0A%09%09%09var%20document%20%3D%20window.document%3B%0A%0A%09%09%09var%20btn%20%3D%20document.createElement%28%22toolbarbutton%22%29%3B%0A%09%09%09btn.id%20%3D%20this.btnId%3B%0A%09%09%09btn.tooltipText%20%3D%20this.btnTip%3B%0A%09%09%09btn.addEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09s%20%3D%20btn.style%3B%0A%09%09%09s.margin%20%3D%20%220%201px%22%3B%0A%09%09%09s.padding%20%3D%20%220%201px%22%3B%0A%09%09%09s.listStyleImage%20%3D%20%27url%28%22%27%20+%20this.btnIcon%20+%20%27%22%29%27%3B%0A%09%09%09%0A%09%09%09var%20dialog%20%3D%20document.getElementById%28%22custombuttonsEditor%22%29%3B%0A%09%09%09var%20hbox%20%3D%20document.getAnonymousElementByAttribute%28dialog%2C%20%22class%22%2C%20%22dialog-button-box%22%29%3B%0A%09%09%09var%20sps%20%3D%20hbox.children%5B1%5D%3B%0A%09%09%09hbox.insertBefore%28btn%2C%20sps%29%3B%0A%09%09%09%0A%09%09%09this.toggleHideUrlField%28btn%29%3B%0A%09%09%09%0A%09%09%7D%2C%0A%09%09destroyWindow%3A%20function%28window%2C%20reason%29%20%7B%0A%09%09%09if%28reason%20%3D%3D%20this.REASON_WINDOW_CLOSED%29%0A%09%09%09%09window.removeEventListener%28%22DOMContentLoaded%22%2C%20this%2C%20false%29%3B%20//%20Window%20can%20be%20closed%20before%20DOMContentLoaded%0A%09%09%09if%28%21this.isTargetWindow%28window%29%29%0A%09%09%09%09return%3B%0A%09%09%09var%20document%20%3D%20window.document%3B%0A%09%09%09var%20btn%20%3D%20document.getElementById%28this.btnId%29%3B%0A%09%09%09btn.removeEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09if%28reason%20%3D%3D%20this.REASON_SHUTDOWN%29%20%7B%0A%09%09%09%09let%20box%20%3D%20btn.parentNode%3B%0A%09%09%09%09box.parentNode.removeChild%28box%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09isTargetWindow%3A%20function%28window%29%20%7B%0A%09%09%09return%20window.location.href.substr%280%2C%2041%29%20%3D%3D%20%22chrome%3A//custombuttons/content/editor.xul%22%3B%0A%09%09%7D%2C%0A%09%09observe%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%09%09%09if%28topic%20%3D%3D%20%22quit-application-granted%22%29%0A%09%09%09%09this.destroy%28%29%3B%0A%09%09%09else%20if%28topic%20%3D%3D%20%22domwindowopened%22%29%0A%09%09%09%09subject.addEventListener%28%22DOMContentLoaded%22%2C%20this%2C%20false%29%3B%0A%09%09%09else%20if%28topic%20%3D%3D%20%22domwindowclosed%22%29%0A%09%09%09%09this.destroyWindow%28subject%2C%20this.REASON_WINDOW_CLOSED%29%3B%0A%09%09%7D%2C%0A%09%09handleEvent%3A%20function%28e%29%20%7B%0A%09%09%09if%28e.type%20%3D%3D%20%22DOMContentLoaded%22%29%20%7B%0A%09%09%09%09let%20window%20%3D%20e.originalTarget.defaultView%3B%0A%09%09%09%09window.removeEventListener%28%22DOMContentLoaded%22%2C%20this%2C%20false%29%3B%0A%09%09%09%09this.initWindow%28window%2C%20this.REASON_WINDOW_LOADED%29%3B%0A%09%09%09%7D%0A%09%09%09else%20if%28e.type%20%3D%3D%20%22command%22%29%20%7B%0A%09%09%09%09let%20btn%20%3D%20e.target.ownerDocument.getElementById%28this.btnId%29%3B%0A%09%09%09%09this.toggleHideUrlField%28btn%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09toggleHideUrlField%3A%20function%28btn%29%20%7B%0A%09%09%09var%20document%20%3D%20btn.ownerDocument%3B%0A%09%09%09var%20urlField%20%3D%20document.getElementById%28%22urlfield%22%29%3B%0A%09%09%09urlField.hidden%20%3D%20%21urlField.hidden%3B%0A%09%09%7D%0A%09%7D%3B%0A%0A%09Application.storage.set%28watcherId%2C%20watcher%29%3B%0A%09watcher.init%28watcher.REASON_STARTUP%29%3B%0A%7D%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%09if%28reason%20%3D%3D%20%22update%22%20%7C%7C%20reason%20%3D%3D%20%22delete%22%29%20%7B%0A%09%09watcher.destroy%28watcher.REASON_SHUTDOWN%29%3B%0A%09%09Application.storage.set%28watcherId%2C%20null%29%3B%0A%09%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
okkamas_knife, а зачем изменил мой дефолтный Указатель курсора ?
Чем тебе показался плох символ "`", тот, что на клавише Ё
Нет, вот сейчас, пока писал, придумал вариант:
что-бы оставить эту клавишу для монопольного хоткея какой-нибудь кнопки
Угадал ?
Отредактировано SendAbuse (11-08-2012 13:39:49)
Отсутствует
вот сам поковырял вроде ничего вышло
Надо бы найти пару одинакового вида иконок.
И через отступы от края лучше только к краю и приделывать.
Только вот пока никак не соображу как сослаться на spacer правильно,
а не просто как на второго children'а
А никак. Можно только кнопки диалога получить – у chrome://global/content/bindings/dialog.xml#dialog есть метод getButton().
Но есть тонкость: порядок этих кнопок разный, как минимум, в Windows и Linux.
firefox-17.0a1.en-US.win32.zip\firefox\omni.ja\chrome\toolkit\content\global\bindings\dialog.xml
<xul:hbox class="dialog-button-box" anonid="buttons" xbl:inherits="pack=buttonpack,align=buttonalign,dir=buttondir,orient=buttonorient" pack="end"> <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/> <xul:spacer anonid="spacer" flex="1" hidden="true"/> <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/> <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/> <xul:button dlgtype="cancel" class="dialog-button"/> <xul:button dlgtype="help" class="dialog-button" hidden="true"/> <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/> </xul:hbox>
firefox-17.0a1.en-US.linux-i686.tar\firefox\omni.ja\chrome\toolkit\content\global\bindings\dialog.xml
<xul:hbox class="dialog-button-box" anonid="buttons" xbl:inherits="pack=buttonpack,align=buttonalign,dir=buttondir,orient=buttonorient" > <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/> <xul:button dlgtype="help" class="dialog-button" hidden="true"/> <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/> <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/> <xul:spacer anonid="spacer" flex="1"/> <xul:button dlgtype="cancel" class="dialog-button"/> <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/> </xul:hbox>
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher, вот оно что, жаль ...
Может быть попробую их все перебрать - не spacer ли?
okkamas_knife, ну в коде-то вряд ли, разве что в комментариях,
но тоже маловероятно, вот ты - встречал хоть раз ?
Малозаметен - это да, зато ставить удобно, а если нужен заметный, то например ▼
( ALT down + 3 + 1 + ALT up )
Но это всё я просто так говорю, ты - автор темы, ты - проделал большую работу.
Безоговорочно соглашаюсь с любым твоим выбором.
Отсутствует
главное работает и в лисах и в симанке.
Это пока тему оформления не сменишь. Или масштаб всех окон в системе не изменишь.
И ширина кнопки меняется, что тоже не особо.
А еще там не учитывается запоминание состояния кнопки.
В общем, пока как-то так:
Custom Buttons Editor: Toggle on Top 0.1.2 (2012-08-11)
Можно настраивать в самом начале:
btnPos: 0, // 0 - at top right window corner, 1 - at end of tabs btnStyle: "button", // "button" or "toolbarbutton" btnChecked: true, // use "checked" style: true or false
Ну, и иконки можно настраивать тоже:
Кстати, засовывание чего бы то ни было вовнутрь <tabs> ломает переключение вкладок по Ctrl+Tab.
Добавлено 11-08-2012 16:26:44
Может быть попробую их все перебрать - не spacer ли?
Смотря куда добавить хочется.
Но можно и перебрать:
var btnBox = document.documentElement.getButton("accept").parentNode; for(var node = btnBox.firstChild; node; node = node.nextSibling) { if(node.localName == "spacer") { // ... break; } }
Отредактировано Infocatcher (11-08-2012 16:26:44)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher, Ого! Круть какая! Да уж, это совсем не тоже самое, что мне в голову взбрело
( обычный перебор до children.length ) Ну а добавить хочется, конечно, перед spacer'ом.
[Кстати, засовывание чего бы то ни было вовнутрь <tabs> ломает переключение вкладок по Ctrl+Tab.]
Ага, сечас посмотрел, жму - просто ничего не происходит, вздохнул с облегчением.
Вот когда я пытался поставить кнопку перед табами, - вот это был кошмар
Отсутствует
Infocatcher, я всё пытаюсь себе пристроить Toggle on Top, ну ты помнишь куда...
Дело не в этом, у меня проблема с самим кодом (самая первая версия)
Итак:
Firefox 3.6.28, если окно CB-редактора полностью развёрнуто и
нажимаю Toggle on Top, то консоль ругается -
Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXULWindow.zLevel]
ну и, соответственно, все вытекающие последствия.
Намекни, это лечится, или лучше если редактор развёрнут,
то просто скрывать кнопку ?
Отсутствует