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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№452609-08-2012 15:12:26

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

Re: Custom Buttons

Так, новый заход. :)
Редактор понимает ссылки вида
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


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

Отсутствует

 

№452709-08-2012 16:49:17

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife пишет

и кстати раздвинуть можно проще - добавив пробел между закрывающей скобкой и  новым тэгом img.

Подозреваю что нет, то есть превьюшка будет нормальная, а вот созданный png-файл будет обрезан
по собственному алгоритму и часть иконок пропадёт.

Это я так, в качестве тренировки познания кодинга...  :)

Отсутствует

 

№452809-08-2012 17:25:46

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

Re: Custom Buttons

okkamas_knife пишет

таки есть - табы не закрываются;(

Они только кнопками редактора не закрываются.

okkamas_knife пишет

кстати а может проще сделать две кнопки? для 3.6 и для 4+ ?  )

С одной удобнее, не надо изменения синхронизировать.


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

Отсутствует

 

№452909-08-2012 17:57:35

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife:D ну конечно ты прав !!! :beer:
Объясню истоки своего идиотизма:
Скрипты-то выключены, все эти кнопки для меня бесполезны,
глаз скользит мимо них и не замечает.
Потом вдруг дошло, но поздно - глупость сморожена :dumb: :D

Новый вариант кнопки посмотрю, чуть погодя...

Отсутствует

 

№453009-08-2012 19:48:08

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

Re: Custom Buttons

okkamas_knife пишет

у меня с этим вариантом на 3.6 не закрываются вообще никакие табы ни кнопками отмена\ок ни крестиком на табе ни контекстным меню закрыть другие вкладки...

У меня закрывается, но только извне (например, кликом СКМ по вкладке), разве что стандартное предупреждение для beforeunload выдается каждый раз.

okkamas_knife пишет

для 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)


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

Отсутствует

 

№453109-08-2012 22:07:38

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  поверхностный взгляд на свежую Make icons line :

В сформированном в буфере тексте поста встречается:

{spoiler}{code}data:image/data:image/x-icon;base64,AAABAAEAE....

то есть "data:image/" идёт дважды.
Предлагаю:

Выделить код

Код:

var alliconsok = "";
...
alliconsok += chkpoint + arrayOfStrings[i];

Отсутствует

 

№453210-08-2012 02:20:39

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

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)

Отсутствует

 

№453310-08-2012 09:40:57

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  ух-ты ! весёлая кнопка, спасибо тебе и Автору.

Жаль, что она не подавляет эти два навязчивых окошка,
зато пробежал глазами 77 свойств объекта cbs, мало что понял,
но всё равно было очень интересно, и сам код наверняка ещё пригодится.

Отсутствует

 

№453410-08-2012 10:49:30

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

Re: Custom Buttons

Нечто вроде:
Custom Buttons Editor: Toggle on Top

Только я особо не тестировал. :P
Если работает нормально, то оно же пример синглетона для обработки открытия чужих окон.


SendAbuse пишет

зато пробежал глазами 77 свойств объекта cbs, мало что понял

Да там вообще большое поле для рефакторинга. :)


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

Отсутствует

 

№453510-08-2012 11:17:58

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher,            ф а н т а с т и к а    !!!

Отсутствует

 

№453610-08-2012 11:39:37

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

Re: Custom Buttons

Undo Close Tabs List 0.3.0pre10 (2012-08-10)
x Исправлено удаление стилей при удалении кнопки


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

Отсутствует

 

№453710-08-2012 14:27:04

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 14.0

Re: Custom Buttons

в лисе где-нибудь хранится информация о том, откуда установлено дополнение?
И ещё: урл откуда устанавливалось дополнение может не совпадать с урлом, по которому проверяются новые версии дополнения?
Хочется кнопку/скрипт, которая бы добавляла бы в менеджере дополнений к каждому дополнению ссылку на страницу дополнения на АМО (или откуда оно было установлено), а то часто там прошит урл homepage ведущий куда-то на личный сайт автора.

Отредактировано iDev.Pi (10-08-2012 14:28:30)


mzfx

Отсутствует

 

№453810-08-2012 14:56:35

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

Re: Custom Buttons

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


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

Отсутствует

 

№453910-08-2012 15:31:01

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

Re: Custom Buttons

editCustomButtonInTab-test.js
Добавлено удаление пункта меню при удалении расширения.


Cookies Permissions 0.2.0pre4 (2012-08-10) (осторожно, это тестовая версия!)
[x] Исправлено применение стилей кнопки (в SeaMonkey стили применялись к кнопкам с тем же id в окнах почты).
[*] Рефакторинг кода.
[*] Убрано использование deprecated E4X.
[*] Удаление незащищенных cookies по таймеру теперь использует один глобальный таймер для всех окон.
[x] Исправлено удаление observer'а изменения разрешений.


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

Отсутствует

 

№454010-08-2012 17:24:06

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

SendAbuseуже есть кнопка которая при добавлении новой помещает её справа от себяможешь погонять...кому сказать спасибо за код думаю сам догадаешься моя только иконка(и идея), зы её надо включить чтоб работала..
                    Отредактировано okkamas_knife (Сегодня 01:02:38)

autor:loucypher "Добавить новую кнопку следующей за выбранной кнопкой|Добавление иконок для контекстных пунктов меню Сustom Buttons:"Настроить","Добавить новую кнопку..."|Вырезать⇄Вставить кнопку"

Выделить код

Код:

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

Отсутствует

 

№454110-08-2012 20:22:25

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

Re: Custom Buttons

okkamas_knife пишет

можно либо её поместить так чтоб она было полностью на сером фоне а не висела между фоном и окошком ввода?

Да что-то мелковато тогда выходит.
http://www.iconfinder.com/icondetails/4 … small_icon – слишком маленькая.
http://www.iconfinder.com/icondetails/4 … n_red_icon – слишком вытянутая.

okkamas_knife пишет

либо справа от строки ввода урл кнопки

Не знаю, кнопка же не имеет никакого отношения к URL'у.

okkamas_knife пишет

либо вообще поместить справа от кнопки Применить.

Нелогично как-то. Вот в расположении рядом с кнопками управления окном есть логика...

Или вот можно сделать обычную кнопку: cbEditorToggleOnTop-test.js

Добавлено 10-08-2012 20:22:52
+ Хоткей Ctrl+T для переключения :)

Отредактировано Infocatcher (10-08-2012 20:22:52)


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

Отсутствует

 

№454210-08-2012 21:56:45

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

lokiju
это к чему?

Возможны варианты. Мне больше нравится вариант от Loucypherа, как имеющий больший функционал.(Вы спойлер в моем  предыдущем сообщении открывали , кнопку смотрели? Я из вашего сообщения кнопку смотрел)

okkamas_knife пишет

автор кода вобщемто Infocatcher http://forum.mozilla-russia.org/viewtop … 54#p569854

приведенного вами. А разве я где то это отрицал или спрашивал об этом?(На этот вопрос отвечать необязательно.)

Отредактировано lokiju (10-08-2012 22:03:05)

Отсутствует

 

№454311-08-2012 05:55:54

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

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

Отсутствует

 

№454411-08-2012 12:56:20

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,     поздравляю    :beer:

Отсутствует

 

№454511-08-2012 13:35:46

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  а зачем изменил мой дефолтный Указатель курсора ? :O
Чем тебе показался плох символ "`", тот, что на клавише Ё :whistle:

Нет, вот сейчас, пока писал, придумал вариант:
что-бы оставить эту клавишу для монопольного хоткея какой-нибудь кнопки :)
Угадал ?

Отредактировано SendAbuse (11-08-2012 13:39:49)

Отсутствует

 

№454611-08-2012 14:47:08

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

Re: Custom Buttons

okkamas_knife пишет

вот сам поковырял вроде ничего вышло

Надо бы найти пару одинакового вида иконок. :sick:
И через отступы от края лучше только к краю и приделывать.

SendAbuse пишет

Только вот пока никак не соображу как сослаться на 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>

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

Отсутствует

 

№454711-08-2012 16:03:53

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher,  вот оно что, жаль ...
Может быть попробую их все перебрать - не spacer ли?

okkamas_knife,  ну в коде-то вряд ли, разве что в комментариях,
но тоже маловероятно, вот ты - встречал хоть раз ?
Малозаметен - это да, зато ставить удобно, а если нужен заметный, то например ▼
( ALT down + 3 + 1 + ALT up )

Но это всё я просто так говорю, ты - автор темы, ты - проделал большую работу.
Безоговорочно соглашаюсь с любым твоим выбором.

Отсутствует

 

№454811-08-2012 16:19:27

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

Re: Custom Buttons

okkamas_knife пишет

главное работает и в лисах и в симанке.

Это пока тему оформления не сменишь. Или масштаб всех окон в системе не изменишь.
И ширина кнопки меняется, что тоже не особо.

А еще там не учитывается запоминание состояния кнопки.

В общем, пока как-то так:
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

Ну, и иконки можно настраивать тоже:

Выделить код

Код:

icon: "data:image/png;base64,...",
        iconPinned: "data:image/png;base64,...",

Кстати, засовывание чего бы то ни было вовнутрь <tabs> ломает переключение вкладок по Ctrl+Tab.

Добавлено 11-08-2012 16:26:44

SendAbuse пишет

Может быть попробую их все перебрать - не 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)


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

Отсутствует

 

№454911-08-2012 17:56:29

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher,  Ого! Круть какая!  Да уж, это совсем не тоже самое, что мне в голову взбрело
( обычный перебор до children.length )  Ну а добавить хочется, конечно, перед spacer'ом.

[Кстати, засовывание чего бы то ни было вовнутрь <tabs> ломает переключение вкладок по Ctrl+Tab.]
Ага, сечас посмотрел, жму - просто ничего не происходит, вздохнул с облегчением.
Вот когда я пытался поставить кнопку перед табами, - вот это был кошмар :lol:

Отсутствует

 

№455012-08-2012 11:38:09

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher,  я всё пытаюсь себе пристроить Toggle on Top, ну ты помнишь куда...
Дело не в этом, у меня проблема с самим кодом (самая первая версия)
Итак:

Firefox 3.6.28, если окно CB-редактора полностью развёрнуто и
нажимаю Toggle on Top, то консоль ругается -
Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXULWindow.zLevel]
ну и, соответственно, все вытекающие последствия.

Намекни, это лечится, или лучше если редактор развёрнут,
то просто скрывать кнопку ?

Отсутствует

 

Board footer

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