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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№122-11-2009 13:29:00

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.5

Re: Готовые кнопки для Custom Buttons

Постим сюда только готовые и оформленные кнопки!
                                           
- все вопросы, замечания, обсуждения тут:
https://forum.mozilla-russia.org/viewto … 591&p=last



Как добавить кнопку(помощь для новичка)

1.1449045699.gif

1 Устанавливаем расширение Custom Buttons.
2 Выделяем всё что есть в секции Kод кнопки.
3 Копируем в адресную строку и жмём перейти.
4 Откроется окно диалога добавления кнопки.
5 Добавив кнопку жмём правой кнопкой мыши по свободному месту на панели и выбираем настроить.
6 Перетаскиваем кнопку в нужное место на панели.
этот способ устанавливает кнопку с иконкой.

второй способ:
ПКМ на любой панели и в открывшемся меню нажимаем пункт Добавить новую кнопку, откроется окно редактирования новой кнопки куда копируем коды из секций Код и Инициализация. Потом в окне редактирования кнопки нажимаем Ok, открываем настройку панелей инструментов (Customize) и вытаскиваем новую кнопку на нужную панель. иконку кнопки в этом случае придётся нарисовать самим или выбрать готовую(картинка 16х16 пикселей подойдёт к большинству тем), не забывайте конвертировать её в base64 иначе при перемещении файла иконки изображение с кнопки пропадёт.


Как удалить кнопку(помощь для новичка)

ПКМ на кнопке и нажать пункт Удалить в контекстном меню кнопки или открыть Управление дополнениями и там открыть вкладку Custom Buttons найти нужную кнопку и нажать Удалить.

Шаблон добавления готовой кнопки

Выделить код

Код:

[b][color=#FF4F00]Название кнопки[/color][/b](Firefox + версия), от какого числа кнопка.
Описание что кнопка делает, указать если для работы кнопки нужны расширения и программы.

[b]Клики на кнопке:[/b]
[color=#006600]ЛКМ[/color] => описание,
[color=#006600]СКМ[/color] => описание,
[color=#006600]ПКМ[/color] => описание.
Другие клики(если они есть)

[spoiler=Код кнопки, вкладки код и инициализации:]

[b]Код кнопки:[/b]
тут код получаемый по ПКМ - Копировать код в буфер

[b]Код:[/b]
тут код из вкладки Код(если он есть)

[b]Инициализация:[/b]
тут код из вкладки Инициализация(если он есть)

[/spoiler]
Автор кнопки(если он известен): [b]указать автора без ссылки на его профиль[/b] + ссылка на страницу кнопки если такая есть.


Важно!
Расширение Custom Buttons (bootstrap) можно взять тут 11-04-2023 12:33:42, но перед установкой нужно сделать это Как отключить проверку цифровых подписей в дополнениях Firefox.

Отредактировано bunda1 (27-12-2013 14:29:59)

Отсутствует

 

№12707-03-2014 00:39:31

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Готовые кнопки для Custom Buttons

Переключить JavaScript для сайтов( Firefox17+ ) от 12.06.2016.
Выключает или включает JavaScript для сайтов и чтобы изменения вступили в силу обновляет текущую страницу или все вкладки текущего сайта если кликнуть на всплывающей подсказке с запросом, подсказка появляется после нажатия кнопки. Список сайтов для которых JavaScript отключены хранится в вкладке 'Справка' кнопки и его можно редактировать в ручную. На страницах с отключенным JavaScript соответственно меняется иконка кнопки. По не известным причинам кнопка не работает с всеми исправленными версиями Custom Buttons 0.0.5.8.9, но можно попробовать эту Яндекс.Диск

ЛКМ => Переключить JavaScript для сайта.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

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%3E%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20JavaScript%20%u0434%u043B%u044F%20%u0441%u0430%u0439%u0442%u043E%u0432%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRfQAU0X0AhNF9AKPRfQC20X0AydF9ANrRfQDr0X0A+tF6AP/UfwD/1n0A/9uMFv/RfQDZ0X0ANP///wD///8A1oEAaOCaKP/twHv/8sqR//fZqP/34sH//OvU///05v//+/D///36///ox///7tb/46VJ/9aBAG////8A////ANuHAInorU/////////////////////////++v//+/D///Xm///z5v//qC7//+TC/+u2Z//bhwCL////AP///wDejQBX3o0A9uiTAP//pyT//5sF//+ZAP//lQD//5UA//+VAP//mQD//5UA///drf/yxHn/3o0Anv///wD///8A45AAFOOQAKv3t0///+3R//+3Uv//xGb//8p1///Shf//2o///9uU///go///9Nv/9dad/+OQALP///8A////AP///wDolwAo7ZoA////////2I///9KF///Siv//0or//9iP///Siv//0o///+TC//riuf/olwDK////AP///wD///8A7Z4AHvKdAP///PX//9aK///Uiv//1or//9KP///Wj///1o///9SP///hrf/88tT/7Z4A5P///wD///8A////APWnAAn1pwD///vw///Wj///2Ir//9iK///Uiv//2Ir//9iK///Wj///257///vw//WnAPv1pwAB////AP///wD///8A+qsA+f/25v//2pn//9aF///Shf//0Ir//9SP///Wj///1pT//9iZ///69f/6qwD/+qsAD////wD///8A////AP+yANr/68L//+Ct///Uhf//1IX//9CF///Uiv//1Ir//9aU///amf//+/X//64A//+yABL///8A////AP///wD/sgC7/92Z///rzP//0Ir//9SP///YlP//2pn//92e///co///4aj///36//+dAP//sgDx/7IARf///wD///8A/7cApP/UgP//8eD//9ue///bnv//3Kj//+Ct///nsv//5Lj//+S9//7/+v//oRT//+Ce//+3AOX///8A////AP+3AJL/z2b///v1///irf//5bL//+O9///owv//7Mf//+7M///tzP///////5UA///69f//wzj/////AP///wD/twCE/8tS////////7cz//+vR///t2///8+D///jm//z58v//+vX////////78P//2pT//7cA6v///wD///8A/7sAbf/CM/////////////////////////nr///02///78L//+Wy///gnv//02v//7sA7f+7AF3///8A////AP+7ADb/uwDG/74a//+4Bf//twD//7sA//+7APD/uwDj/7sAz/+7AMz/uwC7/7sAqP+7AEv/uwAFAAOsQQADrEEAA6xBAAOsQQADrEGAA6xBgAOsQYABrEHAAaxBwAGsQcAArEHAAKxBwACsQcAArEHAAKxBwACsQQ%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//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20scriptEnabled%20%3D%20gBrowser.docShell.allowJavascript%3B%20//%20%u0442%u0435%u043A%u0443%u0449%u0435%u0435%20%u0441%u043E%u0441%u0442%u043E%u044F%u043D%u0438%u0435%20JavaScript%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%0A%20%20%20var%20currHost%20%3D%20content.document.domain%3B%0A%20%20%20if%20%28%20%21currHost%20%29%20return%3B%0A%0A%20%20%20saveTextToHelp%28currHost%2C%20scriptEnabled%29%3B%0A%20%20%20tabsReload%28false%2C%20currHost%2C%20%21scriptEnabled%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0430%u0435%u043C%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%27%u0421%u043F%u0440%u0430%u0432%u043A%u0430%27%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0434%u043E%u043C%u0435%u043D%u0430%u043C%u0438%20..............%0Avar%20hosts%20%3D%20self.getAttribute%28%27Help%27%29.split%28%27%5Cn%27%29.filter%28%28host%29%3D%3E%20/%5CS/.test%28host%29%29.map%28%28host%29%3D%3E%20host.trim%28%29%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20JavaScript%20%u0434%u043B%u044F%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0438%u043B%u0438%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20%u0441%u0430%u0439%u0442%u0430%20%u0438%u043B%u0438%20%u0432%u0441%u0435%u0445%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u0438%u0437%20%u043C%u0430%u0441%u0441%u0438%u0432%u0430%20..............%20%0Afunction%20tabsReload%28%20reason%2C%20currHost%2C%20scriptEnabled%20%29%20%7B%0A%20%20%20if%20%28%20reason%20%3D%3D%20%27destructor%27%20%29%20return%3B%0A%20%20%20if%20%28%20reason%20%29%20scriptEnabled%20%3D%20reason%20%21%3D%20%27update%27%3B%0A%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0435%u0441%u043B%u0438%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%0A%20%20%20if%20%28%20%21reason%20%29%20%7B%0A%20%20%20%20%20%20%20%20gBrowser.docShell.allowJavascript%20%3D%20scriptEnabled%3B%20%0A%20%20%20%20%20%20%20%20BrowserReload%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20....%0A%20%20%20var%20notification%20%20%3D%20reason%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%27%u041F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u0438%u0437%20%u0441%u043F%u0438%u0441%u043A%u0430%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20%27%u041F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0430%u0439%u0442%u0430%27%3B%20%0A%20%20%20var%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20notification%2C%20true%2C%20%22%22%2C%20listener%2C%20%22%22%29%3B%0A%20%20%20%0A%20%20%20//%20%u0441%u0442%u0438%u043B%u044C%20%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0439%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%0A%20%20%20var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%20%20%20%23alertImage%20%7B%20height%3A%2035px%20%21important%3B%20width%3A%2035px%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%23alertNotification%3Ahover%20%7B%20cursor%3A%20pointer%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%23alertTextLabel%20%7B%20color%3A%20%230000FF%20%21important%3B%20text-decoration%3A%20underline%3B%20%7D%5C%0A%20%20%20%27%29%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%200%29%3B%0A%20%20%20%0A%20%20%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0441%u0442%u0438%u043B%u044C%20%u0438%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0447%u0435%u0440%u0435%u0437%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u043E%u0435%20%u0432%u0440%u0435%u043C%u044F%0A%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20sss.unregisterSheet%28uri%2C%200%29%3B%20alertsService.closeAlert%28%29%3B%20%7D%2C%204000%29%3B%20%0A%20%20%20%20%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0430%u0439%u0442%u0430%20%u0438%u043B%u0438%20%u0432%u0441%u0435%u0445%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u0438%u0437%20%u043C%u0430%u0441%u0441%u0438%u0432%u0430%20%u0435%u0441%u043B%u0438%20%u043A%u043B%u0438%u043A%u043D%u0443%u0442%u044C%20%u043D%u0430%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0435%0A%20%20%20function%20listener%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20if%20%28%20topic%20%21%3D%3D%20%27alertclickcallback%27%20%29%20return%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20currTab%20%3D%20gBrowser.mCurrentTab%3B%0A%20%20%20%20%20%20for%28%20var%20tab%20of%20gBrowser.tabs%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20uri%20%3D%20tab.linkedBrowser.currentURI%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21uri.scheme.startsWith%28%22http%22%29%20%29%20continue%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20var%20tabHost%20%3D%20tab.linkedBrowser.contentDocument.location.host%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tabHost%20%3D%3D%20%27%27%20%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20var%20tabReload%20%3D%20reason%20%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%3F%20hosts.indexOf%28tabHost%29%20%21%3D%3D%20-1%20%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%3A%20tab%20%21%3D%3D%20currTab%20%26%26%20tabHost%20%3D%3D%20currHost%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tabReload%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tab.linkedBrowser.docShell.allowJavascript%20%3D%20scriptEnabled%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.reloadTab%28tab%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%0A%7D%3B%0AaddDestructor%28tabsReload%29%3B%0A%0A%0A//%20%u0417%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%27%u0421%u043F%u0440%u0430%u0432%u043A%u0430%27%20..............%0Afunction%20saveTextToHelp%28currHost%2C%20addHost%29%20%7B%0A%20%20%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0438%u043B%u0438%20%u0434%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0441%u0430%u0439%u0442%20%u0432%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0434%u043E%u043C%u0435%u043D%u0430%u043C%u0438%0A%20%20%20addHost%0A%20%20%20%3F%20hosts.push%28currHost%29%20%20%20%20%20%0A%20%20%20%3A%20hosts%20%3D%20hosts.filter%28%28host%29%3D%3E%20%7B%20return%20%28host%20%21%3D%3D%20currHost%29%20%7D%29%20%20%20%0A%20%20%20var%20value%20%3D%20hosts.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20//%20%u0437%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u043C%u0430%u0441%u0441%u0438%u0432%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20dir.initWithPath%28dir.path%20+%20%22%5C%5Cextensions%5C%5Ccustombuttons@xsms.org%5C%5Ccomponents%5C%5CCustomButtonsService.js%22%29%3B%0A%20%20%20var%20url%20%3D%20Services.io.newFileURI%28dir%29.spec%2C%20cbs%20%3D%20%7B%7D%3B%0A%20%20%20Services.scriptloader.loadSubScript%28url%2C%20cbs%29%3B%0A%20%20%20var%20AO%20%3D%20new%20cbs.AppObject%28%29%2C%20btn%20%3D%20AO.getButton%28_id%29%3B%0A%0A%20%20%20self.setAttribute%28%22Help%22%2C%20value%29%3B%0A%20%20%20btn.setAttribute%28%22Help%22%2C%20value%29%3B%0A%20%20%20AO.overlay.saveOverlayToProfile%28%29%3B%20%20%20%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0441%u043B%u0435%u0434%u0438%u0442%20%u0437%u0430%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u043C%u0438%20%u0442%u0430%u0431%u043E%u0432%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u044E%u0442%20%u043D%u0443%u0436%u043D%u044B%u0435%20%u043A%u043E%u0434%u044B%20%u0438%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20..............%0AaddEventListener%28%22TabAttrModified%22%2C%20e%3D%3E%20%7B%0A%20%20%20var%20browser%20%3D%20e.target.linkedBrowser%3B%20%20%20%0A%0A%20%20%20//%20%u043E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20JavaScript%20%u0434%u043B%u044F%20%u0441%u0430%u0439%u0442%u0430%20%u0435%u0441%u043B%u0438%20%u0434%u043E%u043C%u0435%u043D%20%u0441%u0430%u0439%u0442%u0430%20%u0441%u043E%u0432%u043F%u0430%u0434%u0430%u0435%u0442%20%u0441%20%u043C%u0430%u0441%u0441%u0438%u0432%u043E%u043C%20%27hosts%27%0A%20%20%20var%20specifiedSite%20%3D%20hosts.indexOf%28%20browser.contentDocument.location.host%20%29%20%21%3D%3D%20-1%3B%20%0A%20%20%20browser.docShell.allowJavascript%20%3D%20%21specifiedSite%3B%0A%0A%20%20%20//%20%u0435%u0441%u043B%u0438%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u043E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%20JavaScript%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%0A%20%20%20if%20%28%20browser%20%3D%3D%20gBrowser.selectedBrowser%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20self.style.filter%20%3D%20specifiedSite%20%7C%7C%20%21cbu.getPrefs%28%22javascript.enabled%22%29%20%3F%20grayscale%20%3A%20%27%27%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%7D%2C%20true%2C%20gBrowser.tabContainer%29%3B%0Avar%20grayscale%20%3D%20parseInt%28Services.appinfo.version%29%20%3C%2036%20%3F%20%27url%28%22chrome%3A//mozapps/skin/extensions/extensions.svg%23greyscale%22%29%27%20%3A%20%27grayscale%281%29%27%3B%0A%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%5Bru.wikipedia.org%0Awww.pinterest.com%0Awebcache.googleusercontent.com%0Aweb.archive.org%0Adeveloper.mozilla.org%0Agithub.com%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..............
this._handleClick =()=> {
   var scriptEnabled = gBrowser.docShell.allowJavascript; // текущее состояние JavaScript на странице
    
   var currHost = content.document.domain;
   if ( !currHost ) return;

   saveTextToHelp(currHost, scriptEnabled);
   tabsReload(false, currHost, !scriptEnabled);
};


// Получаем из вкладки 'Справка' массив с доменами ..............
var hosts = self.getAttribute('Help').split('\n').filter((host)=> /\S/.test(host)).map((host)=> host.trim());


// Перегрузить и переключить JavaScript для текущей вкладки или вкладок сайта или всех сайтов из массива .............. 
function tabsReload( reason, currHost, scriptEnabled ) {
   if ( reason == 'destructor' ) return;
   if ( reason ) scriptEnabled = reason != 'update';

   // переключить текущую вкладку если левый клик на кнопке
   if ( !reason ) {
        gBrowser.docShell.allowJavascript = scriptEnabled; 
        BrowserReload();
        };

   // Сплывающая подсказка ....
   var notification  = reason 
                       ? 'Перегрузить все вкладки сайтов из списка'
                       : 'Перегрузить все вкладки сайта'; 
   var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   alertsService.showAlertNotification(self.image, self.label, notification, true, "", listener, "");
   
   // стиль сплывающей подсказки
   var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #alertImage { height: 35px !important; width: 35px !important; }\
      #alertNotification:hover { cursor: pointer !important; }\
      #alertTextLabel { color: #0000FF !important; text-decoration: underline; }\
   '));
   sss.loadAndRegisterSheet(uri, 0);
   
   // удалить стиль и подсказку через указанное время
   setTimeout(()=> { sss.unregisterSheet(uri, 0); alertsService.closeAlert(); }, 4000); 
    
   // переключить вкладки сайта или всех сайтов из массива если кликнуть на подсказке
   function listener(subject, topic, data) {
      if ( topic !== 'alertclickcallback' ) return;
      
      var currTab = gBrowser.mCurrentTab;
      for( var tab of gBrowser.tabs ) {
           var uri = tab.linkedBrowser.currentURI;
           if ( !uri.scheme.startsWith("http") ) continue;   
           
           var tabHost = tab.linkedBrowser.contentDocument.location.host;
           if ( tabHost == '' ) return;

           var tabReload = reason 
                           ? hosts.indexOf(tabHost) !== -1 
                           : tab !== currTab && tabHost == currHost;             
           if ( tabReload ) {
                tab.linkedBrowser.docShell.allowJavascript = scriptEnabled;
                gBrowser.reloadTab(tab);
                }
           }
   }
};
addDestructor(tabsReload);


// Записать текст в вкладку 'Справка' ..............
function saveTextToHelp(currHost, addHost) {
   // удалить или добавить текущий сайт в массив с доменами
   addHost
   ? hosts.push(currHost)     
   : hosts = hosts.filter((host)=> { return (host !== currHost) })   
   var value = hosts.join("\n");

   // записать массив
   var dir = Services.dirsvc.get("ProfD", Ci.nsIFile);
   dir.initWithPath(dir.path + "\\extensions\\custombuttons@xsms.org\\components\\CustomButtonsService.js");
   var url = Services.io.newFileURI(dir).spec, cbs = {};
   Services.scriptloader.loadSubScript(url, cbs);
   var AO = new cbs.AppObject(), btn = AO.getButton(_id);

   self.setAttribute("Help", value);
   btn.setAttribute("Help", value);
   AO.overlay.saveOverlayToProfile();   
};


// Обработчик следит за изменениями табов и запускают нужные коды и функции ..............
addEventListener("TabAttrModified", e=> {
   var browser = e.target.linkedBrowser;   

   // отключить JavaScript для сайта если домен сайта совпадает с массивом 'hosts'
   var specifiedSite = hosts.indexOf( browser.contentDocument.location.host ) !== -1; 
   browser.docShell.allowJavascript = !specifiedSite;

   // если на странице отключен JavaScript меняем иконку
   if ( browser == gBrowser.selectedBrowser ) { 
        self.style.filter = specifiedSite || !cbu.getPrefs("javascript.enabled") ? grayscale : '';        
        }
}, true, gBrowser.tabContainer);
var grayscale = parseInt(Services.appinfo.version) < 36 ? 'url("chrome://mozapps/skin/extensions/extensions.svg#greyscale")' : 'grayscale(1)';


Большое спасибо Dumby за помощь с кнопкой.

Отредактировано bunda1 (08-03-2014 13:51:22)

Отсутствует

 

№12803-04-2014 02:17:04

lex0kz
Сделал модель для генерации сборки
 
Группа: Members
Зарегистрирован: 01-07-2011
Сообщений: 18
UA: Palemoon 24.0

Re: Готовые кнопки для Custom Buttons

Xdebug  ( Firefox ) rev 1
Переключатель отладки в Xdebug.
Для смены идентификатора, нужно нажать СКМ по иконке.

скрытый текст
Код кнопки:

Выделить код

Код:

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%3ExDebug%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjA4RjhBNDRCOEYyMTFFM0EyQkZGMUI5QTM4MUNEQTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjA4RjhBNDVCOEYyMTFFM0EyQkZGMUI5QTM4MUNEQTgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDhGOEE0MkI4RjIxMUUzQTJCRkYxQjlBMzgxQ0RBOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMDhGOEE0M0I4RjIxMUUzQTJCRkYxQjlBMzgxQ0RBOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PifrerwAAANsSURBVHjadFNdSBtZFD4z+anRoFGpjMEtbv1trTHRTgpu7cYtzUOQtQ0IBUntSxFkfVhsZBdctkofWmwfLII+LGUtFtmAPqQuW5ZsVazB1ZjWEhWMWP8inXSC5j8zyWR6Z1pd2O6ey5mBe+855/u+cy7wPA//5YlEAjObzQ9KSkpmJyYmzv/fPfETjUZhY2PjeJNlWbBarZaqqipGq9Xy9fX1zrm5ueyj80gkAuvr6/8k6OnpuWE0Gh8IBz6fT9bS0tJXWVkZq6ur4wXXaDS8Tqd7NTw8XCPct9ls1eXl5eNerzcbB2QUReWtrq5e393dheXlZZ3L5fopKytLAZ9MJpMJlLSTk5N3BbQOh+MCKmY4ODhIiwmam5vdGIad9Pv9eU6nExcC/m0KhQJ8u77sra0tCIVCF8hacr3mbE1ETIC4vlapVPtDQ0MPTSaTmyCIIY7jDtPpNLBxFpg4w8RiMY+h2fADgl05Pzffpj6nfkLJKMBEIZD19vZeHhkZ+V2tVi8g5Qf0en0iV5VbUFBacCfJJ52j9tHRtdk1HRtgv1NkKRYv3r94NfNUJnecQLDW1tZ+t9t9OyMjAxiG2bvSeCV66f6lcipIQaGvEJt6PAXTL6bDGqvmy9JvSwOpaAqkFovlMYqtlkgksL+//4XAFcdFZkV8modAOACL/kXIU+UB+TMJmsuaEwt/L9gdHQ4WNTUqRQicSEAKCceg/2kUaDlChAH2PpqKnoykIsCGWXgWegaElpDrz+jra1/W0lMzU78eU0DQJZ2dnf3hcPh7uVwOSDQwGox7udbcomnfNCgkH7vK8Rwk0CIJEsyE+Z6IFbWuqK2tzZVKpa7l5OTMJpPJYxChZAhohoYAEwB/wg87sR3Il+dDWbAs5tnxvJYuLS1Jurq6HiHe2ODgoFYo0t7e/jwYDH6FAy4VE7C0OLEqmQo6yjpCBEX8NXZ7zLBSuuLFaZouQxPViMb3R5Ikg8gjAwMDVysqKn6Jx+NhP+MHKkGBiTDBU/LpnwjB190r3Wbve++OPCi/IUUVpejxzDc1Na0d4W5oaKDtdvut7bfb39hw2x+N1Y0bSomy76br5m8e2gNQAFBcVDzJhTkOQ9Vhc3PzBHocjFKp/GyEx33j594cvtmbCcwc4hguisljPGS+y5SiNsIHAQYAli7a8dHB0UkAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20trim%20%3D%20function%28text%29%7B%0A%09if%20%28typeof%20text%20%21%3D%20%27string%27%29%20%7B%0A%09%09return%20text%3B%0A%09%7D%0A%09return%20text.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%20%27%27%29%3B%0A%7D%3B%0A%0Avar%20xdebug%20%3D%20%7B%0A%09init%3A%20function%28button%29%20%7B%0A%09%09xdebug.button%20%20%20%3D%20button%3B%0A%09%09xdebug.start%20%20%20%20%3D%20xdebug.button.image%3B%0A%09%09xdebug.stop%20%20%20%20%20%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjcyQ0RFRDBCOEYyMTFFMzg0Nzk4OTc2QUI3RkQ1MEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjcyQ0RFRDFCOEYyMTFFMzg0Nzk4OTc2QUI3RkQ1MEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNzJDREVDRUI4RjIxMUUzODQ3OTg5NzZBQjdGRDUwRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNzJDREVDRkI4RjIxMUUzODQ3OTg5NzZBQjdGRDUwRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqR9GwoAAALrSURBVHjajFNfSFNRGP/u3d10bagsBFlKzJFORNtSEVdCEfgggiVsCroGQfgQPplgtB4Me9IeFsJ8kMjwRSMfhlEP+lDLkTlXE7IxZRuKi9lgjs25e/Xe23dWOimDfvBt95zznd/3+/4cEEURTrNMJkN1dHSMarVa1+zsbP2//LI/e3t7sLGxcbzJcRwMDAxYqqurWb1eLxqNRvfi4mLB0XkqlYJAIJAjsNlst1paWkbJwfb2ttRkMj3S6XTpuro6kVhtba1oMBg+j4+PXyT+MzMzNRUVFa/W19cLaEBEo1HV2tpa19bWFvh8PoPH43moUCjk8BtSqZSkpJ+bmxsmaufn5xsx2NV4PC5kCdrb270URRXv7Oyo3G43TS78CblcDpubmwXhcBiSyWQjKgpUVVWlsgSY65eioqKIw+F40tra6i0pKXHwPB8/cV9gWfar2WweRNk6l8tlbWhoeKFUKoHKFgIxNDR0fXJy8rVarf6Elbc3NTVxGE34sLREmzo7z0QikcTy8nJ9KBS6q1Kp3r2cnu4qLyvLERB0d3ePeL3ee/n5+SAIQuS8RvN9sKdHyOO4YqDp0oODA4amKDirUi1p9foYqNW3GYvF8gzv1kgkEsAoZSRXmqYBJavPaTRq4+4ugNsNgKTHSKcbsY/wmOOcDCpwYwGjWDgW/8vx2HKcOM//QOdiIZMh/c4R4JwQJQgPMzU1NUG+ULqkr69v5PDwEGQy2S9HimIB1yLLku8cAa6FZBIe2GzPs13A1pVarVYPXr5ZWFjowlyPXCkSTUQFfxnuI/KYlZUVSX9//1PMmxobG9PjJt/b2/s2kUhcxqgMINlpCsj+m4UFBR2LxS7gRF3D8b2PvU2gpex2+43KysqJ9P5+Ch8KiPE4iIlEznDN8DxEotErDPIx+Hg+trW1fTsK0NzcHHM6nXeC4fAlLMgwYzaT1pwYKwHe+3zKkN+/T2F0CAaDefg4WDJZ/4tVvx9koij9KcAAdtiwKOd2K98AAAAASUVORK5CYII%3D%27%3B%0A%09%09xdebug.disabled%20%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxMDc1OUYwQUYwQjhFMzExQkQ0N0U0RURENEE2OUZFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDOUM2RDMwMUI5MjQxMUUzOEIwNUYwMzNDNjhENjMxMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDOUM2RDMwMEI5MjQxMUUzOEIwNUYwMzNDNjhENjMxMyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjdFQTFFMEQzMjNCOUUzMTFCODlFQUIwODMyNzQ0MzY1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjEwNzU5RjBBRjBCOEUzMTFCRDQ3RTRFREQ0QTY5RkVDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+3SsfLQAAAwBJREFUeNqMU11ImmEUfr9PP3+yUphNZ4PKoBYGGSMQuojJ5jYJHFF5kVswiFgUXXQXdNFNEXSxIJAug8C66aZoDbxa4C5KzRvBlVqpuVozTC3Nvz2vzAaxwQ4c3vN95z0/z3POS4rFIvmbptNp0tPTY2hsbBxaX19X/eseSyDX19fE7/eTsmSzWTI1NdXm8/k6q6qq6ufn5187HA5h2Z9KpcjBwUHJLiWYnZ1tGxkZMVDH6ekpOzAw8GxjY+ONSCRieDxeNplM1o+Ojr5fWlpS0vtbW1sPu7u7zYeHh8JSgrOzM7HX620NhULE4/E82tvbey6RSPhwFaif47g8IDVsbm7qaRG73f6YJr28vCyWEphMpijDMJLz83MxWmUQQIOL5I8wYrGYnJycCI+Ojkgikahtb2//2dLScltKoNFovstksoTVan1pNBqjSqXySz6fT8PFg5Y6yWQyof7+fjuwy3d2drQdHR2eyspKwlAmqUxPT6uXl5ffqlSqMJj/qtPpcuFwmOzu7jK9vb1cNBpNw64NBoOdFRUVR2tra6tqtbpwl4AKyDO4XC4DyMuAvBhgpaCkUCiI4K7GdCTQ+OLi4ke9Xn9dwmaxWEw4FQggx8fH0ng8XsmybBGBAhAXAVleuVz+AoWyNADJ8k1NTT/AE62cYuEIwQjgxzcE+cujpYuk1WrDgOaGffu7SepLoJgXSu8G+SsrKy7qQevM2NjYq1wuxwkEgjxOAjLzXV1dLPakIBQKKaEslo5fV1fnn5mZCd8tEkZXPTg4+AFBT6RSqQ84OYod3wzdUmrTiWASyYaGhgiKDo2Pj+tol3yn08lMTEwYgZsFOVZczA8PD78DF63lAsDNxWIxBvvyaXJych8dPbXZbKaampoIe3Fx8QAbVd/X1/cZs01DswsLC7bm5mbHzc1NBt2wwBsB2atzc3P7CCKo7lQoFFFsroZsb28r0JbF7XbL7r9GPCbR1dUVh5O7/wrNZrOevhkG1UkgEOBjNDm6Wf8rSMpSbn4JMAD2UrKpGLdeUwAAAABJRU5ErkJggg%3D%3D%27%3B%0A%0A%09%09xdebug.set_id%28%29%3B%0A%09%09xdebug.update_icon%28%29%3B%0A%09%7D%2C%0A%09check_status%3A%20function%28%29%20%7B%0A%09%09return%20%21%21%28cookie_exists%20%3D%20new%20RegExp%28%27%28%5E%7C%3B%29%5C%5Cs*XDEBUG_SESSION%5C%5Cs*%3D%5C%5Cs*%28%5B%5E%5C%5Cs%3B%5D+%29%27%2C%20%27g%27%29.exec%28content.document.cookie%29%29%3B%0A%09%7D%2C%0A%09update_icon%3A%20function%28hide_notify%29%7B%0A%09%09var%20icon_image%20%3D%20xdebug.start%3B%0A%09%09var%20icon_title%20%3D%20%27Start%20Debug%27%3B%0A%09%09var%20notify_msg%20%3D%20%27Debug%20stopped%27%3B%0A%0A%09%09if%20%28%20%21content.window.location.protocol.startsWith%28%22http%22%29%20%29%20%7B%0A%09%09%09icon_image%20%3D%20xdebug.disabled%3B%0A%09%09%09icon_title%20%3D%20%27%27%3B%0A%09%09%7D%0A%09%09else%20if%20%28xdebug.check_status%28%29%29%20%7B%0A%09%09%09icon_image%20%3D%20xdebug.stop%3B%0A%09%09%09icon_title%20%3D%20%27Stop%20Debug%27%3B%0A%09%09%09notify_msg%20%3D%20%27Debug%20started%27%3B%0A%09%09%7D%0A%0A%09%09xdebug.button.image%20%20%20%20%20%20%20%3D%20icon_image%3B%0A%09%09xdebug.button.tooltipText%20%3D%20icon_title%3B%0A%0A%09%09if%20%28%21hide_notify%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%0A%09%09%09%09%09.showAlertNotification%28%22chrome%3A//global/skin/icons/information-16.png%22%2C%20%22Xdebug%22%2C%20notify_msg%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%09%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%09%09%7D%0A%09%7D%2C%0A%09change_status%3A%20function%28%29%20%7B%0A%09%09var%20status%20%3D%20%21xdebug.check_status%28%29%3B%0A%0A%09%09if%20%28status%29%20%7B%0A%09%09%09content.document.cookie%20%3D%20%5B%0A%09%09%09%09%27XDEBUG_SESSION%3D%27%20+%20escape%28custombuttons.getPrefs%28%27xdebug.session_id%27%29%29%2C%0A%09%09%09%09%27path%3D/%27%2C%0A%09%09%09%09%27domain%3D.%27+%20content.window.location.hostname%20+%27%3B%27%0A%09%09%09%5D.join%28%27%3B%20%27%29%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09content.document.cookie%20%3D%20%5B%0A%09%09%09%09%27XDEBUG_SESSION%3D%27%20+%20escape%28custombuttons.getPrefs%28%27xdebug.session_id%27%29%29%2C%0A%09%09%09%09%27expires%3DMon%2C%2005%20Jul%202000%2000%3A00%3A00%20GMT%27%2C%0A%09%09%09%09%27path%3D/%27%2C%0A%09%09%09%09%27domain%3D.%27+%20content.window.location.hostname%20+%27%3B%27%0A%09%09%09%5D.join%28%27%3B%20%27%29%3B%0A%09%09%7D%0A%0A%09%09xdebug.update_icon%28%29%3B%0A%09%7D%2C%0A%09set_id%3A%20function%28id%29%20%7B%0A%09%09id%20%3D%20trim%28id%29%3B%0A%09%09%0A%09%09if%20%28typeof%20id%20%21%3D%20%27string%27%20%7C%7C%20%21id%29%20%7B%0A%09%09%09id%20%3D%20%27PHPSTORM%27%3B%0A%09%09%7D%0A%09%09custombuttons.setPrefs%28%27xdebug.session_id%27%2C%20id%29%3B%0A%09%7D%0A%7D%0A%0Axdebug.init%28this%29%3B%0A%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09if%20%28e.button%20%3D%3D%200%29%20%7B%0A%09%09if%20%28%20content.window.location.protocol.startsWith%28%22http%22%29%20%29%20%7B%0A%09%09%09xdebug.change_status%28%29%3B%0A%09%09%7D%0A%09%7D%0A%09else%20if%20%28e.button%20%3D%3D%201%29%20%7B%0A%09%09var%20prompt_val%20%3D%20custombuttons.promptBox%28%27%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%27%2C%20%27%u041D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20IDE%20key%20%28session%20id%29%3A%27%2C%20custombuttons.getPrefs%28%27xdebug.session_id%27%29%29%3B%0A%0A%09%09xdebug.set_id%28prompt_val%5B1%5D%29%3B%0A%0A%09%09if%20%28%20content.window.location.protocol.startsWith%28%22http%22%29%20%29%20%7B%0A%09%09%09if%20%28%20xdebug.check_status%28%29%20%29%20%7B%0A%09%09%09%09content.document.cookie%20%3D%20%27XDEBUG_SESSION%3D%27%20+%20custombuttons.getPrefs%28%27xdebug.session_id%27%29%20+%20%27%3B%27%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09xdebug.update_icon%28true%29%3B%0A%09%7D%0A%7D%0A%0Avar%20main%20%3D%20%7B%0A%09onStateChange%3A%20function%28aWebProgress%2C%20aRequest%2C%20aFlag%29%20%7B%0A%09%09if%20%28%20aFlag%20%26%26%20Ci.nsIWebProgressListener.STATE_STOP%20%29%20%7B%0A%09%09%09xdebug.update_icon%28true%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09onLocationChange%3A%20function%28aWebProgress%2C%20aRequest%29%20%7B%0A%09%09if%20%28%20aRequest%20%29%20return%3B%0A%09%09if%20%28%20aWebProgress.DOMWindow.document.readyState%20%21%3D%3D%20%27complete%27%20%29%20return%3B%0A%0A%09%09xdebug.update_icon%28true%29%3B%0A%09%7D%0A%7D%3B%0A%0AgBrowser.addProgressListener%28%20main%20%29%3B%0AaddDestructor%28function%28%29%20%7B%20gBrowser.removeProgressListener%28%20main%20%29%20%7D%29%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%u0417%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%20%u043E%u0442%u043B%u0430%u0434%u043A%u0443%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

var trim = function(text){
    if (typeof text != 'string') {
        return text;
    }
    return text.replace(/^\s+|\s+$/g, '');
};

var xdebug = {
    init: function(button) {
        xdebug.button   = button;
        xdebug.start    = xdebug.button.image;
        xdebug.stop     = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjcyQ0RFRDBCOEYyMTFFMzg0Nzk4OTc2QUI3RkQ1MEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjcyQ0RFRDFCOEYyMTFFMzg0Nzk4OTc2QUI3RkQ1MEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNzJDREVDRUI4RjIxMUUzODQ3OTg5NzZBQjdGRDUwRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNzJDREVDRkI4RjIxMUUzODQ3OTg5NzZBQjdGRDUwRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqR9GwoAAALrSURBVHjajFNfSFNRGP/u3d10bagsBFlKzJFORNtSEVdCEfgggiVsCroGQfgQPplgtB4Me9IeFsJ8kMjwRSMfhlEP+lDLkTlXE7IxZRuKi9lgjs25e/Xe23dWOimDfvBt95zznd/3+/4cEEURTrNMJkN1dHSMarVa1+zsbP2//LI/e3t7sLGxcbzJcRwMDAxYqqurWb1eLxqNRvfi4mLB0XkqlYJAIJAjsNlst1paWkbJwfb2ttRkMj3S6XTpuro6kVhtba1oMBg+j4+PXyT+MzMzNRUVFa/W19cLaEBEo1HV2tpa19bWFvh8PoPH43moUCjk8BtSqZSkpJ+bmxsmaufn5xsx2NV4PC5kCdrb270URRXv7Oyo3G43TS78CblcDpubmwXhcBiSyWQjKgpUVVWlsgSY65eioqKIw+F40tra6i0pKXHwPB8/cV9gWfar2WweRNk6l8tlbWhoeKFUKoHKFgIxNDR0fXJy8rVarf6Elbc3NTVxGE34sLREmzo7z0QikcTy8nJ9KBS6q1Kp3r2cnu4qLyvLERB0d3ePeL3ee/n5+SAIQuS8RvN9sKdHyOO4YqDp0oODA4amKDirUi1p9foYqNW3GYvF8gzv1kgkEsAoZSRXmqYBJavPaTRq4+4ugNsNgKTHSKcbsY/wmOOcDCpwYwGjWDgW/8vx2HKcOM//QOdiIZMh/c4R4JwQJQgPMzU1NUG+ULqkr69v5PDwEGQy2S9HimIB1yLLku8cAa6FZBIe2GzPs13A1pVarVYPXr5ZWFjowlyPXCkSTUQFfxnuI/KYlZUVSX9//1PMmxobG9PjJt/b2/s2kUhcxqgMINlpCsj+m4UFBR2LxS7gRF3D8b2PvU2gpex2+43KysqJ9P5+Ch8KiPE4iIlEznDN8DxEotErDPIx+Hg+trW1fTsK0NzcHHM6nXeC4fAlLMgwYzaT1pwYKwHe+3zKkN+/T2F0CAaDefg4WDJZ/4tVvx9koij9KcAAdtiwKOd2K98AAAAASUVORK5CYII=';
        xdebug.disabled = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxMDc1OUYwQUYwQjhFMzExQkQ0N0U0RURENEE2OUZFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDOUM2RDMwMUI5MjQxMUUzOEIwNUYwMzNDNjhENjMxMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDOUM2RDMwMEI5MjQxMUUzOEIwNUYwMzNDNjhENjMxMyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjdFQTFFMEQzMjNCOUUzMTFCODlFQUIwODMyNzQ0MzY1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjEwNzU5RjBBRjBCOEUzMTFCRDQ3RTRFREQ0QTY5RkVDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+3SsfLQAAAwBJREFUeNqMU11ImmEUfr9PP3+yUphNZ4PKoBYGGSMQuojJ5jYJHFF5kVswiFgUXXQXdNFNEXSxIJAug8C66aZoDbxa4C5KzRvBlVqpuVozTC3Nvz2vzAaxwQ4c3vN95z0/z3POS4rFIvmbptNp0tPTY2hsbBxaX19X/eseSyDX19fE7/eTsmSzWTI1NdXm8/k6q6qq6ufn5187HA5h2Z9KpcjBwUHJLiWYnZ1tGxkZMVDH6ekpOzAw8GxjY+ONSCRieDxeNplM1o+Ojr5fWlpS0vtbW1sPu7u7zYeHh8JSgrOzM7HX620NhULE4/E82tvbey6RSPhwFaif47g8IDVsbm7qaRG73f6YJr28vCyWEphMpijDMJLz83MxWmUQQIOL5I8wYrGYnJycCI+Ojkgikahtb2//2dLScltKoNFovstksoTVan1pNBqjSqXySz6fT8PFg5Y6yWQyof7+fjuwy3d2drQdHR2eyspKwlAmqUxPT6uXl5ffqlSqMJj/qtPpcuFwmOzu7jK9vb1cNBpNw64NBoOdFRUVR2tra6tqtbpwl4AKyDO4XC4DyMuAvBhgpaCkUCiI4K7GdCTQ+OLi4ke9Xn9dwmaxWEw4FQggx8fH0ng8XsmybBGBAhAXAVleuVz+AoWyNADJ8k1NTT/AE62cYuEIwQjgxzcE+cujpYuk1WrDgOaGffu7SepLoJgXSu8G+SsrKy7qQevM2NjYq1wuxwkEgjxOAjLzXV1dLPakIBQKKaEslo5fV1fnn5mZCd8tEkZXPTg4+AFBT6RSqQ84OYod3wzdUmrTiWASyYaGhgiKDo2Pj+tol3yn08lMTEwYgZsFOVZczA8PD78DF63lAsDNxWIxBvvyaXJych8dPbXZbKaampoIe3Fx8QAbVd/X1/cZs01DswsLC7bm5mbHzc1NBt2wwBsB2atzc3P7CCKo7lQoFFFsroZsb28r0JbF7XbL7r9GPCbR1dUVh5O7/wrNZrOevhkG1UkgEOBjNDm6Wf8rSMpSbn4JMAD2UrKpGLdeUwAAAABJRU5ErkJggg==';

        xdebug.set_id();
        xdebug.update_icon();
    },
    check_status: function() {
        return !!(cookie_exists = new RegExp('(^|;)\\s*XDEBUG_SESSION\\s*=\\s*([^\\s;]+)', 'g').exec(content.document.cookie));
    },
    update_icon: function(hide_notify){
        var icon_image = xdebug.start;
        var icon_title = 'Start Debug';
        var notify_msg = 'Debug stopped';

        if ( !content.window.location.protocol.startsWith("http") ) {
            icon_image = xdebug.disabled;
            icon_title = '';
        }
        else if (xdebug.check_status()) {
            icon_image = xdebug.stop;
            icon_title = 'Stop Debug';
            notify_msg = 'Debug started';
        }

        xdebug.button.image       = icon_image;
        xdebug.button.tooltipText = icon_title;

        if (!hide_notify) {
            try {
                Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService)
                    .showAlertNotification("chrome://global/skin/icons/information-16.png", "Xdebug", notify_msg, false, "", null, "");
            } catch (e) {}
        }
    },
    change_status: function() {
        var status = !xdebug.check_status();

        if (status) {
            content.document.cookie = [
                'XDEBUG_SESSION=' + escape(custombuttons.getPrefs('xdebug.session_id')),
                'path=/',
                'domain=.'+ content.window.location.hostname +';'
            ].join('; ');
        }
        else {
            content.document.cookie = [
                'XDEBUG_SESSION=' + escape(custombuttons.getPrefs('xdebug.session_id')),
                'expires=Mon, 05 Jul 2000 00:00:00 GMT',
                'path=/',
                'domain=.'+ content.window.location.hostname +';'
            ].join('; ');
        }

        xdebug.update_icon();
    },
    set_id: function(id) {
        id = trim(id);
        
        if (typeof id != 'string' || !id) {
            id = 'PHPSTORM';
        }
        custombuttons.setPrefs('xdebug.session_id', id);
    }
}

xdebug.init(this);

this.onclick = function(e) {
    if (e.button == 0) {
        if ( content.window.location.protocol.startsWith("http") ) {
            xdebug.change_status();
        }
    }
    else if (e.button == 1) {
        var prompt_val = custombuttons.promptBox('Настройки', 'Название IDE key (session id):', custombuttons.getPrefs('xdebug.session_id'));

        xdebug.set_id(prompt_val[1]);

        if ( content.window.location.protocol.startsWith("http") ) {
            if ( xdebug.check_status() ) {
                content.document.cookie = 'XDEBUG_SESSION=' + custombuttons.getPrefs('xdebug.session_id') + ';';
            }
        }

        xdebug.update_icon(true);
    }
}

var main = {
    onStateChange: function(aWebProgress, aRequest, aFlag) {
        if ( aFlag && Ci.nsIWebProgressListener.STATE_STOP ) {
            xdebug.update_icon(true);
        }
    },
    onLocationChange: function(aWebProgress, aRequest) {
        if ( aRequest ) return;
        if ( aWebProgress.DOMWindow.document.readyState !== 'complete' ) return;

        xdebug.update_icon(true);
    }
};

gBrowser.addProgressListener( main );
addDestructor(function() { gBrowser.removeProgressListener( main ) });


Добавлено 03-04-2014 02:26:11
Короткая ссылка goo.gl  ( Firefox )
Копирует в буфер, короткую ссылку на текущую страницу.

скрытый текст
Код кнопки:

Выделить код

Код:

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%3E%u041A%u043E%u0440%u043E%u0442%u043A%u0430%u044F%20%u0441%u0441%u044B%u043B%u043A%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDgxQ0Y0RjBCQThCMTFFM0FCQzA5MUYzRjQyNTcyRjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDgxQ0Y0RjFCQThCMTFFM0FCQzA5MUYzRjQyNTcyRjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ODFDRjRFRUJBOEIxMUUzQUJDMDkxRjNGNDI1NzJGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0ODFDRjRFRkJBOEIxMUUzQUJDMDkxRjNGNDI1NzJGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PooqD4IAAAINSURBVHjajJPNaxpBGMZndTWLymoR6qHWXAJaKbnESgnBSyCnntpDKjSQHEKQBEJy8U8ISENKKfTQHkopGhSikWLbgD3kYkG8VXNIQC+BXIIY8Kt+5XmXWUmWLTjwY2ffmXnmnWfeEUajEZukRaNRls1m31it1j38PgTfwYaoTmg0GqzdbjODwaArgLFngiB8QlfioZdgNBaIxWIsl8sx7KAr0Ov1XlgsFkkTfjUW6HQ6rNls/u8ET5DZIjLQxv+NBcxms5K+0Wi8O2Ea7IIIMKlB8q3b7VJ3X0wkEtSRa7XaPERa6J8CJ9jmyKAO3oI8Focxz+X3+38go6+C1+udw8A3SZJ8JpOJ1P/g/xF4TCcDH8A7cMm9YG63m2UyGUbzRZvN9gVxn5oa2nNA+X0EB+Bcz5ThcKh8yYOnOuNFsEma2gHaZDAYKJ5Ro0v/qyOwwHfe4X4oDQsfOJ1OVygUYpVKRTmOngcn3LRlvu4KvAcWsI6bmsJN/RJFMZJKpepCPB5XbgFlOl8ul1tI7ZQvJOEtsALu3W2/32eyLH9OJpPrYjgcpthNqVT6WSgUGExV55XAGhUpRA+x86w6QAUFltCdGheSx+NhwWCQ4ShaP86q1epvVOms5p1cUzLCJK8RWc4Ui8U8xD3czI7dbn+dTqePxUmeciAQuHA4HCEcZRW/NtTAER5WgbK9FWAAa2WspyGuzhMAAAAASUVORK5CYII%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%28function%28location%29%7B%0A%09var%20icon%20%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzQxNEMxNjhCQkFFMzExQjBBMUQ4Qzc3OUM1QjM5QyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RUQ1MTc3NUJBQUYxMUUzQTcwOUY5Qzg3QkE3RDUwRSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RUQ1MTc3NEJBQUYxMUUzQTcwOUY5Qzg3QkE3RDUwRSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4NDE0QzE2OEJCQUUzMTFCMEExRDhDNzc5QzVCMzlDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA3NDE0QzE2OEJCQUUzMTFCMEExRDhDNzc5QzVCMzlDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+pwkIsgAAA5BJREFUeNq0l11IU2EYx9+zneFyynIFFUXDwmBkDNHYVaJhXVTYh4VUtIu+KIToQ/u4yoiWFBkkfVwUBHURZhRh3hSVN90oJESDunARBactE1KHm9P1f8ZzYm4785zDfODHznbec97nfd7n/T/PpGQyKQppvb29orW1VZSUlNDXleAs2AGWg5/gBbgGvtMAi5g/qwVvQQtPLvizhX+vnRcHZFmmjwpe6WqNYfT7c7BGzrwzPj4uIpGIkCTJlAOKogiLxXIRl2VzDHWB9iwH+vv7RVtbm3A4HGaDsLC4uHizzrGbshyYmZkRiURCTE9Pm5odkXMROocvlnO8gEKYwqQ5aR3AqmNsvJBJuBCcp5MIbDqf+SIXYGI7OAjOgFUGn+3KuQU6jUK8F5wDlSYcfwQeyJlKSEmow7aDC8Cncf8luA42gBNgqfruaDSq4PIOCNBPUlNTU/qDXujAlnA4XIEk/IvvH3hPo3x/I0/coDHxO3AVvE7PdLAep2qJ0+n8VVdXN4Ao//4f8crKVPRsrM8tVqvVxmqm2idwA2wFezQmHgQd4JlWyGKxmPB4PKK7u3u2chYVFdHnLXBM49l14KHGvSCH+jFIzLVvtAW05el5RkttzjO5ln0DN8H9tO0xVzvAaSNSD25zEv0pSPECVQbGnwJPClk9jSrhNhNik9p7SsKpqamcDnw08K79PP4uWKvnASpqLpdL1NTUCDpxmUInVVdXN5sM6yR4SnIKBjTGuLFyu8/nCzc2No6qSktAD1JtGzkgeEX5TkKMK9yCXItk5etiISI7Ao4CDyazI/TheDxO4nQFpf4rtEb09fWJ8vJyIdPesFxOagjRZ3aOsv4k2AccGTVhJ/OKnd2l3qRzj/ctA34SM+TDbszxXi33RqVY7feOA3rhIhMJqcCBqp6eHsXtdgsps/hQW00tGbfV+WwFOAwO8bXuEwEHLsGBdnLAoiaFioFO6Ac1lawj1AuEDASiIV2IZpmJPypU2TrBSJ6akdUL0vbTdFkOUEM6NjZmvC2y28M2m03vAsjpZM4I0NHw+/30QkMODA0NDYZCoVFke5mO4W80t8Dr9aYwaoFAIBIMBjtLS0sv6yho98zWAk0jnUcSd3BvoGUj3EcqmhEwa1A6MTExkcApOkB/sFgNPdw1R7hNC+AYppRQzRWpUH/PkQNieHhYUCKm1wJ2IAxG1VNGx72+vj6lNf8EGADGSCd20PLWBgAAAABJRU5ErkJggg%3D%3D%27%3B%0A%09if%20%28location.protocol.startsWith%28%27http%27%29%29%20%7B%0A%09%09var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%09%09var%20request%20%3D%20%7B%0A%09%09%09longUrl%20%3A%20location.toString%28%29%2C%0A%09%09%09key%20%20%20%20%20%3A%20%27%7BYOUR_API_KEY%7D%27%0A%09%09%7D%0A%09%09xhr.onload%20%3D%20function%28%29%7B%0A%09%09%09var%20link%20%3D%20JSON.parse%28xhr.response%29.id%3B%0A%0A%09%09%09const%20gClipboardHelper%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D.getService%28Components.interfaces.nsIClipboardHelper%29%3B%0A%09%09%09gClipboardHelper.copyString%28link%29%0A%09%09%09%0A%09%09%09try%20%7B%0A%09%09%09%09Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%0A%09%09%09%09%09.showAlertNotification%28icon%2C%20link%2C%20%27%u0421%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%09%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%09%09%7D%0A%09%09xhr.open%28%27POST%27%2C%20%27https%3A//www.googleapis.com/urlshortener/v1/url%27%2C%20true%29%3B%0A%09%09xhr.setRequestHeader%28%22Content-type%22%2C%20%22application/json%22%29%3B%0A%09%09xhr.send%28JSON.stringify%28request%29%29%3B%0A%09%7D%0A%7D%29%28content.window.location%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

(function(location){
    var icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzQxNEMxNjhCQkFFMzExQjBBMUQ4Qzc3OUM1QjM5QyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RUQ1MTc3NUJBQUYxMUUzQTcwOUY5Qzg3QkE3RDUwRSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RUQ1MTc3NEJBQUYxMUUzQTcwOUY5Qzg3QkE3RDUwRSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4NDE0QzE2OEJCQUUzMTFCMEExRDhDNzc5QzVCMzlDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA3NDE0QzE2OEJCQUUzMTFCMEExRDhDNzc5QzVCMzlDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+pwkIsgAAA5BJREFUeNq0l11IU2EYx9+zneFyynIFFUXDwmBkDNHYVaJhXVTYh4VUtIu+KIToQ/u4yoiWFBkkfVwUBHURZhRh3hSVN90oJESDunARBactE1KHm9P1f8ZzYm4785zDfODHznbec97nfd7n/T/PpGQyKQppvb29orW1VZSUlNDXleAs2AGWg5/gBbgGvtMAi5g/qwVvQQtPLvizhX+vnRcHZFmmjwpe6WqNYfT7c7BGzrwzPj4uIpGIkCTJlAOKogiLxXIRl2VzDHWB9iwH+vv7RVtbm3A4HGaDsLC4uHizzrGbshyYmZkRiURCTE9Pm5odkXMROocvlnO8gEKYwqQ5aR3AqmNsvJBJuBCcp5MIbDqf+SIXYGI7OAjOgFUGn+3KuQU6jUK8F5wDlSYcfwQeyJlKSEmow7aDC8Cncf8luA42gBNgqfruaDSq4PIOCNBPUlNTU/qDXujAlnA4XIEk/IvvH3hPo3x/I0/coDHxO3AVvE7PdLAep2qJ0+n8VVdXN4Ao//4f8crKVPRsrM8tVqvVxmqm2idwA2wFezQmHgQd4JlWyGKxmPB4PKK7u3u2chYVFdHnLXBM49l14KHGvSCH+jFIzLVvtAW05el5RkttzjO5ln0DN8H9tO0xVzvAaSNSD25zEv0pSPECVQbGnwJPClk9jSrhNhNik9p7SsKpqamcDnw08K79PP4uWKvnASpqLpdL1NTUCDpxmUInVVdXN5sM6yR4SnIKBjTGuLFyu8/nCzc2No6qSktAD1JtGzkgeEX5TkKMK9yCXItk5etiISI7Ao4CDyazI/TheDxO4nQFpf4rtEb09fWJ8vJyIdPesFxOagjRZ3aOsv4k2AccGTVhJ/OKnd2l3qRzj/ctA34SM+TDbszxXi33RqVY7feOA3rhIhMJqcCBqp6eHsXtdgsps/hQW00tGbfV+WwFOAwO8bXuEwEHLsGBdnLAoiaFioFO6Ac1lawj1AuEDASiIV2IZpmJPypU2TrBSJ6akdUL0vbTdFkOUEM6NjZmvC2y28M2m03vAsjpZM4I0NHw+/30QkMODA0NDYZCoVFke5mO4W80t8Dr9aYwaoFAIBIMBjtLS0sv6yho98zWAk0jnUcSd3BvoGUj3EcqmhEwa1A6MTExkcApOkB/sFgNPdw1R7hNC+AYppRQzRWpUH/PkQNieHhYUCKm1wJ2IAxG1VNGx72+vj6lNf8EGADGSCd20PLWBgAAAABJRU5ErkJggg==';
    if (location.protocol.startsWith('http')) {
        var xhr = new XMLHttpRequest();
        var request = {
            longUrl : location.toString(),
            key     : '{YOUR_API_KEY}'
        }
        xhr.onload = function(){
            var link = JSON.parse(xhr.response).id;

            const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
            gClipboardHelper.copyString(link)
            
            try {
                Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService)
                    .showAlertNotification(icon, link, 'Скопирован в буфер обмена', false, "", null, "");
            } catch (e) {}
        }
        xhr.open('POST', 'https://www.googleapis.com/urlshortener/v1/url', true);
        xhr.setRequestHeader("Content-type", "application/json");
        xhr.send(JSON.stringify(request));
    }
})(content.window.location);

Отредактировано lex0kz (03-04-2014 02:27:05)

Отсутствует

 

№12909-05-2014 09:32:36

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 29.0

Re: Готовые кнопки для Custom Buttons

Удалено         —  Вставка символа или Запуск таблицы символов Windows (Firefox)  от 10.05.2014
Заменено на   —  Insert special symbol(Firefox) All the versions

Left             — Вставка символа из списка
Middle         —  NONE
Right           — Запуск таблицы символов Windows
Shift+Right  — Редактировать кнопку

Отредактировано Indomito (11-06-2014 11:43:07)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№13018-05-2014 17:42:37

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 29.0

Re: Готовые кнопки для Custom Buttons

Page Navigation(Firefox) Работает в FF29 и выше  - это замена кнопки UpDownCenterPage

Left/Right                   ―   Вниз/Вверх по странице
DLeft                          ―   В начало/конец страницы
DRight                        ―   Центрирование страницы
Модификатор+Right ―   Меню настройки кнопки

скрытый текст
Код кнопки

Выделить код

Код:

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%3EPage%20Navigation%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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*/%0A%0A//this.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0412%u0432%u0435%u0440%u0445/%u0412%u043D%u0438%u0437%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%5CnDLeft%20%3D%3E%20%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%22%3B%0Athis.tooltipText%20%3D%20%0A%22Left/Right%20%20%20%20%u2015%20%20%20%u0412%u043D%u0438%u0437/%u0412%u0432%u0435%u0440%u0445%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%5Cn%22%20+%20%0A%22DLeft%20%20%20%20%20%20%20%20%20%20%20%20%u2015%20%20%20%u0412%20%u043D%u0430%u0447%u0430%u043B%u043E/%u043A%u043E%u043D%u0435%u0446%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%22%20+%0A%22DRight%20%20%20%20%20%20%20%20%20%u2015%20%20%20%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%22%3B%0A%0A%0Athis.__defineGetter__%28%22scroller%22%2C%20function%28%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20content.document%3B%0A%20%20%20%20var%20root%20%3D%20doc.documentElement%3B%0A%20%20%20%20var%20body%20%3D%20doc.body%20%7C%7C%20root%3B%0A%20%20%20%20return%20body.scrollHeight%20%3E%20root.scrollHeight%20%3F%20body%20%3A%20root%3B%0A%7D%29%3B%0A%0A//%u0412%u043D%u0438%u0437%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0Athis.leftclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20content.scrollByPages%281%29%20%20%20%0A%7D%3B%0A%0A%0A//%u0412%u0432%u0435%u0440%u0445%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0Athis.rightclick%20%3D%20function%28event%29%20%7B%0A%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20if%28%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%09event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20content.scrollByPages%28-1%29%3B%0A%20%20%20%20%09%7D%0A%7D%3B%0A%0A//%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Athis.rightDclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20content.scrollTo%280%2C%20%28scroller.scrollHeight%20-%20scroller.clientHeight%29/2%29%3B%0A%7D%3B%0A%0A//%u0412%20%u043D%u0430%u0447%u0430%u043B%u043E/%u043A%u043E%u043D%u0435%u0446%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Athis.leftDclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20if%28scroller.scrollTop%20%3E%20%28scroller.scrollHeight%20-%20scroller.clientHeight%29/2%29%0A%09%20%20content.scrollTo%28scroller.scrollHeight%2C%20%200%29%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20content.scrollTo%280%2C%20scroller.scrollHeight%29%3B%0A%7D%3B%0A%0Athis.setAttribute%28%27onclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%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

Инициализация

Выделить код

Код:

/*Initialization code*/

//this.tooltipText = "Left    => Вверх/Вниз по странице \nDLeft => Центрирование страницы";
this.tooltipText = 
"Left/Right    ―   Вниз/Вверх по странице\n" + 
"DLeft            ―   В начало/конец страницы\n" +
"DRight         ―   Центрирование страницы";


this.__defineGetter__("scroller", function() {
    var doc = content.document;
    var root = doc.documentElement;
    var body = doc.body || root;
    return body.scrollHeight > root.scrollHeight ? body : root;
});

//Вниз по странице
this.leftclick = function(event) {
    var scroller = this.scroller;
    content.scrollByPages(1)   
};


//Вверх по странице
this.rightclick = function(event) {
  var scroller = this.scroller;
  if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
    event.preventDefault();
        event.stopPropagation();
        content.scrollByPages(-1);
        }
};

//Центрирование страницы
this.rightDclick = function(event) {
    var scroller = this.scroller;
    content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight)/2);
};

//В начало/конец страницы
this.leftDclick = function(event) {
    var scroller = this.scroller;
    if(scroller.scrollTop > (scroller.scrollHeight - scroller.clientHeight)/2)
      content.scrollTo(scroller.scrollHeight,  0);
    else
        content.scrollTo(0, scroller.scrollHeight);
};

this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)');
this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');

Отредактировано Indomito (20-05-2014 12:52:14)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№13127-05-2014 07:09:45

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 29.0

Re: Готовые кнопки для Custom Buttons

Insert special symbol(Firefox) All the versions

Indomito  &  difabor - версия от 27.05.2014
За основу взят код  bunda1 - Вставка символа в текстовое поле(Firefox) от 11.05.2013

Left Short                               — Вставка символа из списка
Left Long Or Left+Shift          —  Редактирование списка символов
Middle or Left+Ctrl                 — Возврат к исходному списку символов
(Middle or Left+Ctrl)+Shift     — Мерять длительность клика
Right Short                            — Запуск таблицы символов Windows
Right Long or Right+Shift      — Стандартное Меню Кнопки

Short(быстрый клик ЛКМ‖ПКМ) и Long(Удержание ЛКМ‖ПКМ) определяются значением переменной delay в ms (по умолчанию delay=600)

Выделить код

Код:

var delay = 600, array = [], symbList, myID = _id, symbName = myID + ".symbols",mynum=0;

скрытый текст
Код кнопки:

Выделить код

Код:

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%3EInsert%20special%20symbol%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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*/%0A%0A//%20Indomito%20%u0438%20Difabor%20-%20%u0432%u0435%u0440%u0441%u0438%u044F%20%u043E%u0442%2027.05.2014%0A//%20%u0417%u0430%20%u043E%u0441%u043D%u043E%u0432%u0443%20%u0432%u0437%u044F%u0442%20%u043A%u043E%u0434%20-%20%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u0430%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0435%20%u043F%u043E%u043B%u0435%28%20Firefox%20%29%20%u043E%u0442%2011.05.2013%20%u0430%u0432%u0442%u043E%u0440%20bunda1%0A%0Avar%20delay%20%3D%20600%2C%20array%20%3D%20%5B%5D%2C%20symbList%2C%20myID%20%3D%20_id%2C%20symbName%20%3D%20myID%20+%20%22.symbols%22%2Cmynum%3D0%3B%0Avar%20symbListOrig%20%3D%20%22%A4%2C%A6%2C%A7%2C@%2C%A9%2C%AB%2C%BB%2C%AC%2C%AE%2C%B0%2C%B1%2C%B5%2C%B6%2C%u2014%2C%u2018%2C%u2019%2C%u201C%2C%u201D%2C%u2022%2C%u2030%2C%u2039%2C%u203A%2C%u2122%22%3B%20%0A%0Athis.onmousedown%20%3D%20function%28event%29%20%7Bthis._mouseDownTime%20%3D%20Date.now%28%29%3B%7D%3B%0A%20%20%20%20//if%28e.button%20%21%3D%200%29%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20//if%28event.button%20%3D%3D%202%29%20%20this._mouseDownTime%20%3D%20Date.now%28%29%3B%0A//%7D%3B%0A%0Athis.tooltipText%20%3D%20%0A%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0441%u043F%u0435%u0446%u0438%u0430%u043B%u044C%u043D%u044B%u0439%20%u0441%u0438%u043C%u0432%u043E%u043B%5Cn%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%5Cn%22%20+%0A%22Left%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u2014%20%20%20%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u0430%20%u0438%u0437%20%u0441%u043F%u0438%u0441%u043A%u0430%20%5Cn%22%20+%0A%22Left%20Long%20%20%20%20%20%u2014%20%20%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u043F%u0438%u0441%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%5Cn%22%20+%0A%22Middle%20%20%20%20%20%20%20%20%20%u2014%20%20%20%u0412%u043E%u0437%u0432%u0440%u0430%u0442%20%u043A%20%u0438%u0441%u0445%u043E%u0434%u043D%u043E%u043C%u0443%20%u0441%u043F%u0438%u0441%u043A%u0443%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%5Cn%22%20+%0A%22Right%20%20%20%20%20%20%20%20%20%20%20%20%u2014%20%20%20%u0417%u0430%u043F%u0443%u0441%u043A%20%u0442%u0430%u0431%u043B%u0438%u0446%u044B%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%20Windows%5Cn%22%20+%0A%22Right%20Long%20%20%u2014%20%20%20%u0421%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20%u041C%u0435%u043D%u044E%20%u041A%u043D%u043E%u043F%u043A%u0438%20%22%3B%0A%0A/*%0Athis.tooltipText%20%3D%20%0A%22Left%20Short%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%3D%3E%20%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u0430%20%u0438%u0437%20%u0441%u043F%u0438%u0441%u043A%u0430%5Cn%22%20+%20%0A%22Left%20Long%20Or%20Left+Shift%20%20%20%20%20%20%20%3D%3E%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u043F%u0438%u0441%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%5Cn%22%20+%0A%22Middle%20Or%20Left+Ctrl%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%3E%20%u0412%u043E%u0437%u0432%u0440%u0430%u0442%20%u043A%20%u0438%u0441%u0445%u043E%u0434%u043D%u043E%u043C%u0443%20%u0441%u043F%u0438%u0441%u043A%u0443%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%5Cn%22%20+%0A%22%28Middle%20Or%20Left+Ctrl%29+Shift%20%3D%3E%20%u041C%u0435%u0440%u044F%u0442%u044C%20%u0434%u043B%u0438%u0442%u0435%u043B%u044C%u043D%u043E%u0441%u0442%u044C%20%u043A%u043B%u0438%u043A%u0430%5Cn%22%20+%0A%22Right%20Short%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%3D%3E%20%u0417%u0430%u043F%u0443%u0441%u043A%20%u0442%u0430%u0431%u043B%u0438%u0446%u044B%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%20Windows%5Cn%22%20+%20%0A%22Right%20Long%20Or%20Right+Shift%20%3D%3E%20%u0421%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20%u041C%u0435%u043D%u044E%20%u041A%u043D%u043E%u043F%u043A%u0438%20%22%3B%0A*/%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20symbList%20%3D%20%28custombuttons.isPref%28symbName%29%29%3F%20unescape%28custombuttons.getPrefs%28symbName%29%29%3A%20symbListOrig%3B%0A%20%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3C%20delay%29%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%7B%0A%20%20%20%20%20%20array%20%3D%20symbList.split%28%22%2C%22%29%3B%0A%20%20%20%20%20%20var%20node%20%3D%20document.getElementById%28this.id%20+%20%22-menuPopup%22%29%3B%0A%20%20%20%20%20%20if%20%28%20node%20%26%26%20node.parentNode%20%29%20node.parentNode.removeChild%28node%29%3B%20//%20%u0431%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0434%u0443%u0431%u043B%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u043C%u0435%u043D%u044E%0A%0A%20%20%20%20%20%20var%20menuPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20%20%20%20%20menuPopup.id%20%3D%20this.id%20+%20%22-menuPopup%22%3B%0A%0A%20%20%20%20%20%20array.forEach%28function%28symbol%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20var%20menuItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20menuItem.setAttribute%28%22label%22%2C%20symbol%20%29%3B%0A%20%20%20%20%20%20%20%20%20menuItem.style.fontSize%20%3D%20%2212px%22%3B%20//%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%0A%20%20%20%20%20%20%20%20%20menuItem.addEventListener%28%22command%22%2C%20insertText%2C%20false%29%3B%20%0A%20%20%20%20%20%20%20%20%20menuPopup.appendChild%28menuItem%29%3B%0A%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%20%20%7D%20%20%0A%20%20%20%20else%20if%28event.button%20%3D%3D%200%20%26%26%20%28%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3E%3D%20delay%29%7C%7C%28%21event.ctrlKey%20%26%26%20event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%29%29%20%7B%0A%20%20%20%20%20%20var%20a%3Dprompt%28%22%u0420%u0440%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u044D%u0442%u0443%20%u0441%u0442%u0440%u043E%u043A%u0443%2C%20%u0432%u0441%u0442%u0430%u0432%u043B%u044F%u044F%20%u0441%u0438%u043C%u0432%u043E%u043B%u044B%20%u0438%u043B%u0438%20%u0433%u0440%u0443%u043F%u043F%u044B%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%20%u0447%u0435%u0440%u0435%u0437%20%u0437%u0430%u043F%u044F%u0442%u0443%u044E%3A%22%2CsymbList%29%3B%0A%20%20%20%20%20%20if%20%28a%29%20custombuttons.setPrefs%28symbName%2Cescape%28a%29%29%3B%20%20%20%20%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20%28%28event.button%20%3D%3D%201%20%7C%7C%20%28event.button%20%3D%3D%200%20%26%26%20event.ctrlKey%20%29%29%20%26%26%20%28%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20%0A%20%20%20%20%20%20%20%20//mbMouse%28%29%3B%0A%20%20%20%20%20%20%20%20custombuttons.clearPrefs%28symbName%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20%28%28event.button%20%3D%3D%201%20%7C%7C%20%28event.button%20%3D%3D%200%20%26%26%20event.ctrlKey%20%29%29%20%26%26%20%28event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%29%20%7B%0A%20%20%20%20%20alert%28%22%u0414%u043B%u0438%u0442%u0435%u043B%u044C%u043D%u043E%u0441%u0442%u044C%3A%20%22+%28Date.now%28%29%20-%20this._mouseDownTime%29+%20%22%u043C%u0441%20%22%20+%20mynum%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%20%26%26%20%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3C%20delay%29%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20//if%20%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3C%20delay%29%20startProcess%28%22C%3A%5C%5CWindows%5C%5Csystem32%5C%5Ccharmap.exe%22%2C%5B%5D%29%3B%0A%20%20%20%20%20%20%20%20startProcess%28%22C%3A%5C%5CWindows%5C%5Csystem32%5C%5Ccharmap.exe%22%2C%5B%5D%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3C%20delay%29%20%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20//%20%u0411%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Afunction%20startProcess%28path%2C%20args%29%20%7B%0A%20%20%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%20if%28file.exists%28%29%29%20%7B%0A%20%20%20%20%20%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20%20%20%20%20%20process.init%28file%29%3B%0A%20%20%20%20%20%20%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%20%20%20%20%20%20%7D%20else%20custombuttons.%20alertBox%20%28%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u043D%u0430%u0439%u0434%u0435%u043D%22%2C%20path%29%3B%20%0A%7D%3B%0A%0A//this.type%20%3D%20%22menu%22%3B%20%0A%0A//%20%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0435%20%u043F%u043E%u043B%u0435%20............%0Afunction%20insertText%28%29%20%7B%20%0A%20%20%20var%20text%20%3D%20this.label%3B%0A%20%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%20if%20%28%20controller%20%26%26%20controller.isCommandEnabled%28cmd%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.setStringValue%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%20%20%20%20%20%20%20%20%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

Код:

Инициализация:

Выделить код

Код:

/*Initialization Code*/

// Indomito и Difabor - версия от 27.05.2014
// За основу взят код - Вставка символа в текстовое поле( Firefox ) от 11.05.2013 автор bunda1

var delay = 600, array = [], symbList, myID = _id, symbName = myID + ".symbols",mynum=0;
var symbListOrig = "¤,¦,§,@,©,«,»,¬,®,°,±,µ,¶,—,‘,’,“,”,•,‰,‹,›,™"; 

this.onmousedown = function(event) {this._mouseDownTime = Date.now();};
    //if(e.button != 0)        return;
    //if(event.button == 2)  this._mouseDownTime = Date.now();
//};

this.tooltipText = 
"                    Вставить специальный символ\n—————————————————————————\n" +
"Left               —   Вставка символа из списка \n" +
"Left Long     —   Редактирование списка символов\n" +
"Middle         —   Возврат к исходному списку символов\n" +
"Right            —   Запуск таблицы символов Windows\n" +
"Right Long  —   Стандартное Меню Кнопки ";

/*
this.tooltipText = 
"Left Short                              => Вставка символа из списка\n" + 
"Left Long Or Left+Shift       => Редактирование списка символов\n" +
"Middle Or Left+Ctrl             => Возврат к исходному списку символов\n" +
"(Middle Or Left+Ctrl)+Shift => Мерять длительность клика\n" +
"Right Short                           => Запуск таблицы символов Windows\n" + 
"Right Long Or Right+Shift => Стандартное Меню Кнопки ";
*/

this.onclick = function(event) {
    symbList = (custombuttons.isPref(symbName))? unescape(custombuttons.getPrefs(symbName)): symbListOrig;
    if(event.button == 0 && ((Date.now() - this._mouseDownTime) < delay) && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey){
      array = symbList.split(",");
      var node = document.getElementById(this.id + "-menuPopup");
      if ( node && node.parentNode ) node.parentNode.removeChild(node); // блокировать дублирование меню

      var menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup"));
      menuPopup.id = this.id + "-menuPopup";

      array.forEach(function(symbol) { 
         var menuItem = document.createElement("menuitem");
         menuItem.setAttribute("label", symbol );
         menuItem.style.fontSize = "12px"; // размер шрифта
         menuItem.addEventListener("command", insertText, false); 
         menuPopup.appendChild(menuItem);
      });
      menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
    }  
    else if(event.button == 0 && (((Date.now() - this._mouseDownTime) >= delay)||(!event.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey))) {
      var a=prompt("Рредактировать эту строку, вставляя символы или группы символов через запятую:",symbList);
      if (a) custombuttons.setPrefs(symbName,escape(a));    
    }
    else if ((event.button == 1 || (event.button == 0 && event.ctrlKey )) && (!event.shiftKey && !event.altKey && !event.metaKey)) {
        // Действие при клике СКМ 
        //mbMouse();
        custombuttons.clearPrefs(symbName);
    }
    else if ((event.button == 1 || (event.button == 0 && event.ctrlKey )) && (event.shiftKey && !event.altKey && !event.metaKey)) {
     alert("Длительность: "+(Date.now() - this._mouseDownTime)+ "мс " + mynum);
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey && ((Date.now() - this._mouseDownTime) < delay)) {
        // Действие при клике ПКМ без модификаторов
        //if ((Date.now() - this._mouseDownTime) < delay) startProcess("C:\\Windows\\system32\\charmap.exe",[]);
        startProcess("C:\\Windows\\system32\\charmap.exe",[]);
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && ((Date.now() - this._mouseDownTime) < delay)  && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

function startProcess(path, args) {
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
     file.initWithPath(path);
    if(file.exists()) {
       var process = Components.classes["@mozilla.org/process/util;1"]
              .createInstance(Components.interfaces.nsIProcess);
       process.init(file);
        process.run(false, args, args.length);
      } else custombuttons. alertBox ("Файл не найден", path); 
};

//this.type = "menu"; 

// Вставить текст в текстовое поле ............
function insertText() { 
   var text = this.label;
   var cmd = "cmd_insertText";
   var controller = document.commandDispatcher.getControllerForCommand(cmd);
   if ( controller && controller.isCommandEnabled(cmd) ) {
        var controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"].createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", text);
        controller.doCommandWithParams(cmd, params);
        }
};

Отредактировано Indomito (27-05-2014 12:25:23)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№13211-06-2014 12:07:11

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 30.0

Re: Готовые кнопки для Custom Buttons

HideShowTunePanels(Firefox) All the versions

Left              ―   Панель дополнений
DLeft            ―   Панель Status Bar
Left Long      —  Вход в "Настроить..."
Right            ―   Панель меню (папки)
DRight          ―   Вертикальная панель
Right Long    —  Редактировать кнопку

Что бы всё корректно работало надо настроить ID-панелей

скрытый текст

Выделить код

Код:

//----------Описание индификаторов панелей------------
/*
Что найти ID-панели истользуйте готовую кнопку Attributes Inspector
Автор Infocatcher
https://github.com/Infocatcher/Custom_Buttons/tree/master/Attributes_Inspector
*/

//ID панелей связаных с действиями кликов мыши для корректной работы функции - HideShowPanel(ptId)
var idLeft = "GiT-addon-bar"; //ID для Left
var idDLeft = "status4evar-status-bar"; //ID для DLeft
//ID для Left Long - описание не требуется, без явной замены на другую функцию
var idRight = "toolbar-menubar"; //ID для Right - описание не требуется, без явной замены на другую функцию
var idDRight = "vertical-toolbar"; //ID для DRight
//ID для Right Long - описание не требуется, без явной замены на другую функцию
//----------------------------------------------------


Две переменные для настройки под себя

Выделить код

Код:

var delayLeft = 800; // Задержка для Long Left
var delayRight = 1200; // Задержка для Long Right

скрытый текст
Код кнопки:

Выделить код

Код:

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%3EHideShowTunePanels%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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*/%0A%0A//Indomito%20-%20%u0432%u0435%u0440%u0441%u0438%u044F%20%u043E%u0442%2011.06.2014%0A%0A//----------%u041E%u043F%u0438%u0441%u0430%u043D%u0438%u0435%20%u0438%u043D%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u043E%u0432%20%u043F%u0430%u043D%u0435%u043B%u0435%u0439------------%0A/*%0A%u0427%u0442%u043E%20%u043D%u0430%u0439%u0442%u0438%20ID-%u043F%u0430%u043D%u0435%u043B%u0438%20%u0438%u0441%u0442%u043E%u043B%u044C%u0437%u0443%u0439%u0442%u0435%20%u0433%u043E%u0442%u043E%u0432%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443%20Attributes%20Inspector%0A%u0410%u0432%u0442%u043E%u0440%20Infocatcher%0Ahttps%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Attributes_Inspector%0A*/%0A%0A//ID%20%u043F%u0430%u043D%u0435%u043B%u0435%u0439%20%u0441%u0432%u044F%u0437%u0430%u043D%u044B%u0445%20%u0441%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u044F%u043C%u0438%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043E%u0440%u0440%u0435%u043A%u0442%u043D%u043E%u0439%20%u0440%u0430%u0431%u043E%u0442%u044B%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20-%20HideShowPanel%28ptId%29%0Avar%20idLeft%20%3D%20%22GiT-addon-bar%22%3B%20//ID%20%u0434%u043B%u044F%20Left%0Avar%20idDLeft%20%3D%20%22status4evar-status-bar%22%3B%20//ID%20%u0434%u043B%u044F%20DLeft%0A//ID%20%u0434%u043B%u044F%20Left%20Long%20-%20%u043E%u043F%u0438%u0441%u0430%u043D%u0438%u0435%20%u043D%u0435%20%u0442%u0440%u0435%u0431%u0443%u0435%u0442%u0441%u044F%2C%20%u0431%u0435%u0437%20%u044F%u0432%u043D%u043E%u0439%20%u0437%u0430%u043C%u0435%u043D%u044B%20%u043D%u0430%20%u0434%u0440%u0443%u0433%u0443%u044E%20%u0444%u0443%u043D%u043A%u0446%u0438%u044E%0Avar%20idRight%20%3D%20%22toolbar-menubar%22%3B%20//ID%20%u0434%u043B%u044F%20Right%20-%20%u043E%u043F%u0438%u0441%u0430%u043D%u0438%u0435%20%u043D%u0435%20%u0442%u0440%u0435%u0431%u0443%u0435%u0442%u0441%u044F%2C%20%u0431%u0435%u0437%20%u044F%u0432%u043D%u043E%u0439%20%u0437%u0430%u043C%u0435%u043D%u044B%20%u043D%u0430%20%u0434%u0440%u0443%u0433%u0443%u044E%20%u0444%u0443%u043D%u043A%u0446%u0438%u044E%0Avar%20idDRight%20%3D%20%22vertical-toolbar%22%3B%20//ID%20%u0434%u043B%u044F%20DRight%0A//ID%20%u0434%u043B%u044F%20Right%20Long%20-%20%u043E%u043F%u0438%u0441%u0430%u043D%u0438%u0435%20%u043D%u0435%20%u0442%u0440%u0435%u0431%u0443%u0435%u0442%u0441%u044F%2C%20%u0431%u0435%u0437%20%u044F%u0432%u043D%u043E%u0439%20%u0437%u0430%u043C%u0435%u043D%u044B%20%u043D%u0430%20%u0434%u0440%u0443%u0433%u0443%u044E%20%u0444%u0443%u043D%u043A%u0446%u0438%u044E%0A%0A//----------------------------------------------------%0A%0Avar%20delayLeft%20%3D%20800%3B%20//%20%u0417%u0430%u0434%u0435%u0440%u0436%u043A%u0430%20%u0434%u043B%u044F%20Long%20Left%0Avar%20delayRight%20%3D%201200%3B%20//%20%u0417%u0430%u0434%u0435%u0440%u0436%u043A%u0430%20%u0434%u043B%u044F%20Long%20Right%0Athis.onmousedown%20%3D%20function%28event%29%20%7Bthis._mouseDownTime%20%3D%20Date.now%28%29%3B%7D%3B%0A%0Athis.tooltipText%20%3D%20%0A%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0421%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u0438%5Cn%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%5Cn%22+%0A%22Left%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u2015%20%20%u041F%u0430%u043D%u0435%u043B%u044C%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%5Cn%22%20+%0A%22DLeft%20%20%20%20%20%20%20%20%20%20%20%20%u2015%20%20%u041F%u0430%u043D%u0435%u043B%u044C%20Status%20Bar%5Cn%22%20+%0A%22Left%20Long%20%20%20%20%20%u2014%20%20%u0412%u0445%u043E%u0434%20%u0432%20%5C%22%u041D%u0430%u0441%u0442%u0440%u043E%u0438%u0442%u044C...%5C%22%5Cn%22%20+%0A%22Right%20%20%20%20%20%20%20%20%20%20%20%20%20%u2015%20%20%u041F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%28%u043F%u0430%u043F%u043A%u0438%29%5Cn%22%20+%0A%22DRight%20%20%20%20%20%20%20%20%20%20%u2015%20%20%u0412%u0435%u0440%u0442%u0438%u043A%u0430%u043B%u044C%u043D%u0430%u044F%20%u043F%u0430%u043D%u0435%u043B%u044C%5Cn%22%20+%0A%22Right%20Long%20%20%20%u2014%20%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%22%3B%0A%0A//%u041F%u0430%u043D%u0435%u043B%u044C%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%0Athis.leftclick%20%3D%20function%28event%29%20%7B%0A%20%20%09if%20%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3E%20delayLeft%29%0A%09%09BrowserCustomizeToolbar%28%29%3B%20//%u0412%u0445%u043E%u0434%20%u0432%20%22%u041D%u0430%u0441%u0442%u0440%u043E%u0438%u0442%u044C...%22%0A%09%0A%09else%20%0A%09%20%20HideShowPanel%28idLeft%29%3B%20//%u0410%u043B%u044C%u0442%u0435%u0440%u043D%u0430%u0442%u0438%u0432%u043D%u0430%u044F%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0441%u043D%u0438%u0437%u0443%20%28%u043D%u043E%u0440%u043C%u0430%u043B%u044C%u043D%u044B%u0435%20%u0437%u043D%u0430%u0447%u043A%u0438%29%0A%7D%3B%0A%0A//%u041F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%28%u043F%u0430%u043F%u043A%u0438%29%0Athis.leftDclick%20%3D%20function%28event%29%20%7B%0A%09HideShowPanel%28idDLeft%29%3B%0A%7D%3B%0A%0A%0A//%u041F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%28%u043F%u0430%u043F%u043A%u0438%29%0Athis.rightclick%20%3D%20function%28event%29%20%7B%0A%20%20if%20%28%28Date.now%28%29%20-%20this._mouseDownTime%29%20%3E%20delayRight%29%20//%u0420%u0435%u0434%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%20%20%20%20%20%20%20gShowPopup%28this%29%3B%0A%20%20%0A%20%20else%20if%28%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%20%29%20%7B%0A%09event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20HideShowPanel%28idRight%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%09%7D%0A%7D%3B%0A%0A//%u0412%u0435%u0440%u0442%u0438%u043A%u0430%u043B%u044C%u043D%u0430%u044F%20%u043F%u0430%u043D%u0435%u043B%u044C%0Athis.rightDclick%20%3D%20function%28event%29%20%7B%0A%09HideShowPanel%28idDRight%29%3B%0A%7D%3B%0A%0Afunction%20HideShowPanel%28ptId%29%7B%0A%09var%20pt%20%3D%20document.getElementById%28ptId%29%3B%0A%09var%20pt_hideAttr%20%3D%20pt.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0A%09pt.setAttribute%28pt_hideAttr%2C%20pt.getAttribute%28pt_hideAttr%29%20%21%3D%20%22true%22%29%3B%0A%09document.persist%28ptId%2C%20pt_hideAttr%29%3B%0A%7D%3B%0A%0Athis.setAttribute%28%27onclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%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

Код:

Инициализация:

Выделить код

Код:

/*Initialization code*/

//Indomito - версия от 11.06.2014

//----------Описание индификаторов панелей------------
/*
Что найти ID-панели истользуйте готовую кнопку Attributes Inspector
Автор Infocatcher
https://github.com/Infocatcher/Custom_Buttons/tree/master/Attributes_Inspector
*/

//ID панелей связаных с действиями кликов мыши для корректной работы функции - HideShowPanel(ptId)
var idLeft = "GiT-addon-bar"; //ID для Left
var idDLeft = "status4evar-status-bar"; //ID для DLeft
//ID для Left Long - описание не требуется, без явной замены на другую функцию
var idRight = "toolbar-menubar"; //ID для Right - описание не требуется, без явной замены на другую функцию
var idDRight = "vertical-toolbar"; //ID для DRight
//ID для Right Long - описание не требуется, без явной замены на другую функцию

//----------------------------------------------------

var delayLeft = 800; // Задержка для Long Left
var delayRight = 1200; // Задержка для Long Right
this.onmousedown = function(event) {this._mouseDownTime = Date.now();};

this.tooltipText = 
"                  Показать/Скрыть панели\n——————————————————————\n"+
"Left              ―  Панель дополнений\n" +
"DLeft            ―  Панель Status Bar\n" +
"Left Long     —  Вход в \"Настроить...\"\n" +
"Right             ―  Панель меню (папки)\n" +
"DRight          ―  Вертикальная панель\n" +
"Right Long   —  Редактировать кнопку";

//Панель дополнений
this.leftclick = function(event) {
      if ((Date.now() - this._mouseDownTime) > delayLeft)
        BrowserCustomizeToolbar(); //Вход в "Настроить..."
    
    else 
      HideShowPanel(idLeft); //Альтернативная панель снизу (нормальные значки)
};

//Панель меню (папки)
this.leftDclick = function(event) {
    HideShowPanel(idDLeft);
};


//Панель меню (папки)
this.rightclick = function(event) {
  if ((Date.now() - this._mouseDownTime) > delayRight) //Редктирование кнопки
       gShowPopup(this);
  
  else if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey ) {
    event.preventDefault();
        event.stopPropagation();
        HideShowPanel(idRight);        
        }
};

//Вертикальная панель
this.rightDclick = function(event) {
    HideShowPanel(idDRight);
};

function HideShowPanel(ptId){
    var pt = document.getElementById(ptId);
    var pt_hideAttr = pt.getAttribute("type") == "menubar" ? "autohide" : "collapsed";
    pt.setAttribute(pt_hideAttr, pt.getAttribute(pt_hideAttr) != "true");
    document.persist(ptId, pt_hideAttr);
};

this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)');
this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');


P.S. Надоело нажимать на панель...  кнопка написана из за лени, как и всё в этом мире ;)

Отредактировано Indomito (11-06-2014 17:04:04)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№13303-12-2015 20:36:54

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Ночной режим( Firefox 24+ ) от 11.06.16.
кнопка меняет фон страниц на чёрный, своеобразный ночной режим. Css стиль создающий чёрный стиль находится в вкладке Справка, его можно легко редактировать или полностью поменять. Кнопку можно использовать для быстрого запуска любых других Css стилей. В отличие от похожей кнопки Global dark style использует другой Css стиль и запоминает состояние включенности, можно создать много дубликатов кнопки с разными стилями. Цвета иконки кнопки легко можно изменить в инициализации кнопки строке: img.style.backgroundColor = run.value ? "#131d24" : "#ffeeaa";

ЛКМ => Переключить черный фон страниц.

Код кнопки и инициализации и справки:
Код кнопки:

Выделить код

Код:

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%3E%u041D%u043E%u0447%u043D%u043E%u0439%20%u0440%u0435%u0436%u0438%u043C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA014A7dNeAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNeAO3TXgDtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTXgDt014A7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA014A7dNeAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNeAO3TXgDtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTXgDt014A7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA014A7dNeAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNeAO3TXgDtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTXgDt014A7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA014A7dNeAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNeAO3TXgDtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTXgDt014A7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA014A7dNeAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDt014A7dNeAO3TXgDtAACsQX/+rEF//qxBf/6sQX/+rEF//qxBf/6sQX/+rEF//qxBf/6sQX/+rEF//qxBf/6sQX/+rEF//qxBAACsQQ%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//%20%u041B%u041A%u041C%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20%u0441%u0442%u0438%u043B%u044C%20..........%0Athis._handleClick%20%3D%28%29%3D%3E%20setStyleForPages%28%20void%28custombuttons.setPrefs%28s%2C%20%21custombuttons.getPrefs%28s%29%29%29%20%29%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0432%20about%3Aconfig%20%u0435%u0441%u043B%u0438%20%u043E%u043D%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%20%u0438%20%u043F%u043E%u043B%u0443%u0447%u0442%u044C%20..........%0Avar%20s%20%3D%20%22CB.%22%20+%20_id.slice%2820%29%20+%20%22.setStyleForPage%22%3B%0Acustombuttons.isPref%28s%2C%20false%29%3B%0A%20%20%20%20%0A%0A//%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0441%u0442%u0430%u0440%u0442%u0435%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0438%u043B%u0438%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u0445%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20%u043A%u043D%u043E%u043F%u043A%u0438%20..........%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20var%20%5Bimg%5D%20%3D%20document.getAnonymousNodes%28self%29%3B%0A%20%20%20img.style.backgroundColor%20%3D%20custombuttons.getPrefs%28s%29%20%3F%20%22%23131d24%22%20%3A%20%22%23ffeeaa%22%3B%20%20%0A%7D%3B%0AtoggleImage%28%29%3B%0AgPrefService.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28s%2C%20toggleImage%29%20%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20..........%0Afunction%20setStyleForPages%28reason%29%20%7B%0A%20%20%20if%20%28%20reason%20%3D%3D%20%22destructor%22%20%29%20return%3B%20%0A%0A%20%20%20var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%20%0A%20%20%20var%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28self.Help%29%29%3B%20%0A%20%20%20%0A%20%20%20try%20%7B%20sss.unregisterSheet%28Services%5B_id%20+%20%22previousUri%22%5D%20%7C%7C%20uri%2C%200%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20Services%5B_id%20+%20%22-previousUri%22%5D%20%3D%20uri%3B%0A%20%20%20%0A%20%20%20custombuttons.getPrefs%28s%29%20%26%26%20%21reason%20%26%26%20sss.loadAndRegisterSheet%28uri%2C%200%29%3B%0A%7D%3B%0AaddDestructor%28setStyleForPages%29%3B%0Acustombuttons.getPrefs%28s%29%20%26%26%20setStyleForPages%28%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..........%20%0Athis.tooltipText%20%3D%20self.label%20+%20%22%5Cn%u041B%3A%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0447%u0435%u0440%u043D%u044B%u0439%20%u0444%u043E%u043D%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%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@-moz-document%20url-prefix%28http%3A//%29%2C%20url-prefix%28https%3A//%29%2C%20url-prefix%28ftp%3A//%29%2C%20url-prefix%28file%3A//%29%2C%20url%28about%3Ablank%29%2C%20url-prefix%28%22about%3Aneterror%22%29%7B%0A%0A/*%20Firefox%20Scrollbars%20*/%0Ascrollbar%20%7Bopacity%3A%20.75%20%21important%3B%7D%0A%0A/*%20Base%20*/%0A*%2C%20%3A%3Abefore%2C%20%3A%3Aafter%20%7B%0A%20%20color%3A%20%23CCC%20%21important%3B%20%0A%20%20border-color%3A%20%23444%20%21important%3B%0A%20%20outline-color%3A%20%23444%20%21important%3B%0A%20%20text-shadow%3A%20none%20%21important%3B%0A%20%20box-shadow%3A%20none%20%21important%3B%0A%20%20box-shadow%3A%20none%20%21important%3B%0A%20%20background-color%3A%20transparent%20%21important%3B%0A%7D%0A%0Ahtml%20*%20%7B%0A%20%20color%3A%20%23CCC%20%21important%3B%0A%7D%0A%0Ap%3A%3Afirst-letter%2C%0Ah1%3A%3Afirst-letter%2C%0Ah2%3A%3Afirst-letter%2C%0Ap%3A%3Afirst-line%20%7B%0A%20%20color%3A%20inherit%20%21important%3B%20%0A%20%20background%3A%20none%20%21important%3B%0A%7D%0A%0A/*%20%3A%3A%20Give%20solid%20BG%20%3A%3A%20*/%0A/*%20element%20*/%0Ahtml%2Cbody%2C%0Ali%20ul%2C%20ul%20li%2C%0Atable%2C%20header%2C%0Aarticle%2C%20section%2C%0Anav%2C%20menu%2C%0Aaside%2C%0A%0A/*%20common%20*/%0A%5Bclass*%3D%22nav%22%5D%2C%0A%5Bclass*%3D%22open%22%5D%2C%0A%5Bid*%3D%22ropdown%22%5D%2C%20/*dropdown*/%0A%5Bclass*%3D%22ropdown%22%5D%2C%20%0Adiv%5Bclass*%3D%22menu%22%5D%2C%0A%5Bclass*%3D%22tooltip%22%5D%2C%0Adiv%5Bclass*%3D%22popup%22%5D%2C%20%0Adiv%5Bid*%3D%22popup%22%5D%2C%0A%0A/*%20Notes%2C%20details%2C%20etc.%20%20Maybe%20useful%20*/%0Adiv%5Bclass*%3D%22note%22%5D%2C%20span%5Bclass*%3D%22note%22%5D%2C%0Adiv%5Bid*%3D%22detail%22%5D%2Cdiv%5Bclass*%3D%22detail%22%5D%2C%0Adiv%5Bclass*%3D%22description%22%5D%2C%0A%0A/*%20Also%20common%20*/%0Adiv%5Bclass*%3D%22content%22%5D%2C%20div%5Bclass*%3D%22container%22%5D%2C%0A%0A/*%20Popup%20divs%20that%20use%20visibility%3A%20hidden%20and%20display%3A%20none%20*/%0Adiv%5Bstyle*%3D%22display%3A%20block%22%5D%2C%20%0Adiv%5Bstyle*%3D%22visibility%3A%20visible%22%5D%20%7B%0A%20%20background-color%3A%20%231a1a1a%20%21important%3B%0A%7D%0A%0A/*%3A%20No%20BG%20%3A*/%0A*%3Anot%28%3Aempty%29%3Anot%28span%29%3Anot%28%5Bclass%3D%22html5-volume-slider%20html5-draggable%22%5D%29%3Anot%28%5Bclass%3D%22html5-player-chrome%20html5-stop-propagation%22%5D%29%2C%20*%3A%3Abefore%2C%20*%3A%3Aafter%2C%0Atd%3Aempty%2C%20p%3Aempty%2C%20div%3Aempty%3Anot%28%5Brole%5D%29%3Anot%28%5Bstyle*%3D%22flashblock%22%5D%29%3Anot%28%5Bclass%5E%3D%22html5%22%5D%29%3Anot%28%5Bclass*%3D%22noscriptPlaceholder%22%5D%29%20%7B%0A%20%20background-image%3A%20none%20%21important%3B%0A%7D%0A%0A/*%3A%20Filter%20non-icons%20%3A*/%0Aspan%3Anot%28%3Aempty%29%3Anot%28%5Bclass*%3D%22icon%22%5D%29%3Anot%28%5Bid*%3D%22icon%22%5D%29%3Anot%28%5Bclass*%3D%22star%22%5D%29%3Anot%28%5Bid*%3D%22star%22%5D%29%3Anot%28%5Bid*%3D%22rating%22%5D%29%3Anot%28%5Bclass*%3D%22rating%22%5D%29%3Anot%28%5Bclass*%3D%22prite%22%5D%29%20%7B%0A%20%20background-image%3A%20none%20%21important%3B%0A%20%20text-indent%3A%200%20%21important%3B%0A%7D%0A%0A/*%3A%20Image%20opacity%20%3A*/%0Aimg%3Anot%28%5Bid%3D%22mpiv-preview%22%5D%29%2C%20svg%20%7B%20opacity%3A%20.75%20%21important%3B%20%7D%0Aimg%3Ahover%2C%20svg%3Ahover%20%7B%20opacity%3A%201%20%21important%3B%20%7D%0A%0A/*%20Highlight%20*/%0A%3A%3A-moz-selection%20%7B%0A%20%20background-color%3A%20%23626F61%20%21important%3B%0A%20%20color%3A%20%23F6F7B9%20%21important%3B%0A%7D%0A%0A/*%20%3A%3A%3A%20anchor/links%20%3A%3A%3A%20*/%0Aa%20%7B%0A%20%20color%3A%20%2371BAA5%20%21important%3B%20%0A%20%20background-color%3A%20%231a1a1a%20%21important%3B%0A%20%20opacity%3A%201%20%21important%3B%20%0A%20%20text-indent%3A%200%20%21important%3B%0A%7D%0A%0Aa%3Alink%20%7B%20color%3A%20%23ACC7F6%20%21important%3B%20%7D%20/*%20hyperlink%20*/%0Aa%3Avisited%20%7B%20color%3A%20%23CDB4E7%20%21important%3B%20%7D%0Aa%3Ahover%20%7B%20color%3A%20%23FFE900%20%21important%3B%20background-color%3A%20%23363037%20%21important%3B%20%7D%0Aa%3Aactive%20%7B%20color%3A%20%23FFAE00%20%21important%3B%20%7D%0A%0A/*%20%22Top%20level%22%20div%20*/%0Abody%20%3E%20div%20%7B%20background-color%3A%20inherit%20%21important%3B%20%7D%0A%0A/*%20%3A%3A%3A%3A%3A%3A%20Text%20Presentation%20%3A%3A%3A%3A%3A%3A%20*/%0Asummary%2C%20details%20%7B%20background-color%3A%20inherit%20%21important%3B%20%7D%0Akbd%2C%20time%2C%20label%2C%20.date%20%7B%20color%3A%20%23B6D2AC%20%21important%3B%20%7D%0Aacronym%2C%20abbr%20%7B%20border-bottom%3A%201px%20dotted%20%21important%3B%20cursor%3A%20help%20%21important%3B%20%7D%0Amark%2Ccode%2Cpre%2Csamp%2Cblockquote%20%7B%20background-color%3A%20%23282826%20%21important%20%7D%0A%0A/*%20%3A%3A%3A%3A%3A%3A%20Headings%20%3A%3A%3A%3A%3A%3A%20*/%0Ah1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%20%20%7B%20%0A%20%20background-image%3A%20none%20%21important%3B%0A%20%20border-radius%3A%205px%20%21important%3B%0A%20%20text-indent%3A%200%20%21important%3B%0A%7D%0A%0Ah1%2Ch2%20%7B%20background-color%3A%20%2328313E%20%21important%3B%20%7D%0Ah3%2Ch4%20%7B%20background-color%3A%20%232A3731%20%21important%3B%20%7D%0Ah5%2Ch6%20%7B%20background-color%3A%20%23372A2A%20%21important%3B%20%7D%0A%0A/*%20%3A%3A%3A%3A%3A%3A%20Tables%2C%20cells%20%3A%3A%3A%3A%3A%3A%20*/%0Atable%20table%20%7B%20background%3A%20%23212121%20%21important%3B%20%7D%0Ath%2C%20caption%20%7B%20background%3A%20%23313131%20%21important%3B%20%7D%0A%0A/*%20%3A%3A%3A%20Inputs%2C%20textareas%20%3A%3A%3A%20*/%0Ainput%2C%20textarea%2C%20button%2C%0Aselect%2C%20option%2C%20optgroup%20%7B%0A%20%20color%3A%20%23DDD%20%21important%3B%0A%20%20background%3A%20none%20%23404046%20%21important%3B%0A%20%20-moz-appearance%3A%20none%20%21important%3B%20%0A%7D%0A%0Ainput%2C%0Atextarea%2C%20%0Abutton%20%7B%0A%20%20border-color%3A%20%23000%20%21important%3B%20%0A%20%20border-width%3A%201px%20%21important%3B%0A%7D%0A%0A/*%20%3A%3A%3A%3A%3A%3A%20Button%20styling%20%3A%3A%3A%3A%3A%3A%20*/%0Ainput%5Btype%3D%22button%22%5D%2C%0Ainput%5Btype%3D%22submit%22%5D%2C%0Ainput%5Btype%3D%22reset%22%5D%2C%0Abutton%20%7B%0A%20%20background%3A%20%23343855%20%21important%3B%0A%7D%0A%0Ainput%5Btype%3D%22button%22%5D%3Ahover%2C%0Ainput%5Btype%3D%22submit%22%5D%3Ahover%2C%0Ainput%5Btype%3D%22reset%22%5D%3Ahover%2C%0Abutton%3Ahover%20%7B%0A%20%20color%3A%20%23FFF%20%21important%3B%0A%20%20background%3A%20%23435B6B%20%21important%3B%0A%7D%0A%0Ainput%5Btype%3D%22image%22%5D%20%7B%20opacity%3A%20.85%20%21important%3B%20%7D%0Ainput%5Btype%3D%22image%22%5D%3Ahover%20%7B%20opacity%3A%20.95%20%21important%3B%20%7D%0A%0A/*%20Lightbox%20fix%20*/%0Ahtml%20%5Bid*%3D%22lightbox%22%5D%20*%20%7B%20background-color%3A%20transparent%20%21important%3B%20%7D%0Ahtml%20%5Bid*%3D%22lightbox%22%5D%20img%20%7B%20opacity%3A%201%20%21important%3B%20%7D%0A%0A/*%20Youtube%20Annotation%20*/%0A%23movie_player-html5%20.annotation%20%7B%20background%3A%20%23333%20%21important%3B%20%7D%0A%0A/*%20Mozilla%20addons%20shrink/expand%20sections%20*/%0A.expando%20a%20%7B%20background%3A%20none%20transparent%20%21important%3B%20%7D%0A%7D%0A%0A@-moz-document%20url%28about%3Anewtab%29%20%7B%0Awindow%20%7B%0A%20%20background%3A%20%231a1a1a%20%21important%3B%0A%7D%0A%0A%23newtab-scrollbox%20%7B%0A%20%20background%3A%20transparent%20none%20%21important%3B%0A%7D%0A%0A.newtab-title%20%7B%0A%20%20background-color%3A%20rgba%280%2C0%2C0%2C.75%29%20%21important%3B%20%0A%20%20color%3A%20%23eee%20%21important%3B%0A%7D%0A%7D%0A%0A@-moz-document%20url%28chrome%3A//browser/content/browser.xul%29%20%7B%0A/*%20Browser%20Background%20*/%0Abrowser%5Btype%3D%22content-primary%22%5D%20%7B%0A%20%20background-color%3A%20%231a1a1a%20%21important%3B%0A%7D%20%0A%7D%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Инициализация:

Выделить код

Код:

// ЛКМ переключить настройки кнопки и стиль ..........
this._handleClick =()=> setStyleForPages( void(custombuttons.setPrefs(s, !custombuttons.getPrefs(s))) );


// Создать настройки кнопки в about:config если они не существует и получть ..........
var s = "CB." + _id.slice(20) + ".setStyleForPage";
custombuttons.isPref(s, false);
    

// Установить нужную иконку кнопки при старте браузера или при изменениях настроек кнопки ..........
function toggleImage() {
   var [img] = document.getAnonymousNodes(self);
   img.style.backgroundColor = custombuttons.getPrefs(s) ? "#131d24" : "#ffeeaa";  
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );


// Переключить css стиль для страницы ..........
function setStyleForPages(reason) {
   if ( reason == "destructor" ) return; 

   var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); 
   var uri = makeURI("data:text/css," + encodeURIComponent(self.getAttribute("Help"))); 
   
   try { sss.unregisterSheet(Services[_id + "previousUri"] || uri, 0) } catch(e) {};
   Services[_id + "-previousUri"] = uri;
   
   custombuttons.getPrefs(s) && !reason && sss.loadAndRegisterSheet(uri, 0);
};
addDestructor(setStyleForPages);
custombuttons.getPrefs(s) && setStyleForPages();


// Подсказка для кнопки .......... 
this.tooltipText = self.label + "\nЛ: Переключить черный фон страниц";

Отсутствует

 

№13403-12-2015 22:18:22

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Остановить - Перезагрузить( Firefox24+ ) от 17.01.2015.
кнопка даёт возможность остановить загрузку текущей страницы или всех страниц и перезагрузить текущую страницу и удалияет стандартные кнопки перегрузки и остановки из адресной строки. Иконка кнопки меняется в зависимости от состояния страницы по аналогии с стандартной кнопкой перегрузки в адресной строке.

ЛКМ => Остановить - Перезагрузить,
Длинный ЛКМ => Остановить все вкладки,
ПКМ => CB Меню.

Код кнопки для FF24-54:

Выделить код

Код:

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%3E%u041E%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20-%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAABFklEQVQ4jdWToW7DQBBEI4WUBJbnC8rLAssjc9OAssqZzWx9Q/0J+QHTULOQfEBwsLFRUEkK6ki2ZTsuqjrSktPuu73ZvdnsXypJkkX3LIqiuTFkD4uxUwyGI6gvc91AXY0q4HqLomgOKgdVjd5uVGGu21DAda7hwyDzcGgUXODS1tONMWSgqhZwCASm60ZSHsd6anoCKp8ICkdz3YwqH0EegHT9AbWncX9WN4wq+02ub9p6uhk0cYqGOvq17mMHVb2bPfflJEmy6FvQdkeuVcPMUxcGaGkMGVyCazUOY9g3pnIFlRtDZh4OcF2MKsCwN/t8HQXd/1DvRlMVXGcwXY9CmvrY6QUM+7qL0lwnY8gALSdD/lTfBU/9GCESstoAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u0438%20%u0434%u043B%u0438%u043D%u043D%u044B%u0445%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onmousedown%20%3De%3D%3E%20%7B%0A%20%20%20%20self.onclick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20self.onclick%20%3D%20%22%22%2C%20clearTimeout%28self.timer%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%21e.button%20%26%26%20stopButt.disabled%20%3F%20BrowserReload%28%29%20%3A%20BrowserStop%28%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20self.timer%20%3D%20setTimeout%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20self.onclick%20%3D%20%22%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20%28%21e.button%29%20for%20%28var%20br%20of%20gBrowser.browsers%29%20br.stop%28%29%3B%20%20%20%20%0A%20%20%20%20%7D%2C%20500%20%29%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u043A%u0438%20%u0438%20%u043E%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20%u0438%u0437%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%20..............%0Avar%20stopButt%20%3D%20document.getElementById%28%27urlbar-stop-button%27%29%3B%20%0Avar%20reloadButt%20%3D%20document.getElementById%28%27urlbar-reload-button%27%29%3B%20%0AstopButt.style.display%20%3D%20%27none%27%3B%20reloadButt.style.display%20%3D%20%27none%27%3B%0AaddDestructor%28%28%29%3D%3E%20%7B%20stopButt.style.display%20%3D%20%27%27%3B%20reloadButt.style.display%20%3D%20%27%27%3B%20%7D%29%3B%0A%0A%0A//%20%u0421%u043B%u0435%u0434%u0438%u043C%20%u0437%u0430%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u0435%u043C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%20%u043F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u043A%u0438%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0438%20%u0430%u043D%u0430%u043B%u043E%u0433%u0438%u0447%u043D%u043E%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Avar%20stopButtHandler%20%3D%20new%20MutationObserver%28%28%29%3D%3E%20%7B%0A%20%20%20document.getAnonymousNodes%28self%29%5B0%5D.src%20%3D%20stopButt.disabled%20%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAoklEQVQ4jc2TMQ7DIAxFkXJGHyJ7pICMYp8ma1Y2lt4rHapUkBpjptSSJ74eH3/s3N9XQF56mjVusyrwyHuIfHqk3NZQ/mh4bzoJkc9vIydBk0qN6AwApruwhN3PPFIGgEl01YINQVTYKKSCRTp+QMjJDLnqSrBuOoYg2tPMrqTBSgGoMC0dM2yN29xLx/QhnasG/GpZ765IcevSG6ZlsZ+vN6qE/1DgPtqbAAAAAElFTkSuQmCC%22%3B%0A%7D%29%3B%0AstopButtHandler.observe%28%20stopButt%2C%20%7Battributes%3A%20true%7D%20%29%3B%0AaddDestructor%28%28%29%3D%3E%20stopButtHandler.disconnect%28%29%20%29%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20-%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20%5Cn%u041B%u0434%3A%20%u041E%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%5Cn%u041F%3A%20CB%20%u041C%u0435%u043D%u044E%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%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


Код кнопки для FF55+:

Выделить код

Код:

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%3E%u041E%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20-%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAABFklEQVQ4jdWToW7DQBBEI4WUBJbnC8rLAssjc9OAssqZzWx9Q/0J+QHTULOQfEBwsLFRUEkK6ki2ZTsuqjrSktPuu73ZvdnsXypJkkX3LIqiuTFkD4uxUwyGI6gvc91AXY0q4HqLomgOKgdVjd5uVGGu21DAda7hwyDzcGgUXODS1tONMWSgqhZwCASm60ZSHsd6anoCKp8ICkdz3YwqH0EegHT9AbWncX9WN4wq+02ub9p6uhk0cYqGOvq17mMHVb2bPfflJEmy6FvQdkeuVcPMUxcGaGkMGVyCazUOY9g3pnIFlRtDZh4OcF2MKsCwN/t8HQXd/1DvRlMVXGcwXY9CmvrY6QUM+7qL0lwnY8gALSdD/lTfBU/9GCESstoAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u0438%20%u0434%u043B%u0438%u043D%u043D%u044B%u0445%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onmousedown%20%3De%3D%3E%20%7B%0A%20%20%20%20self.onclick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20self.onclick%20%3D%20%22%22%2C%20clearTimeout%28self.timer%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%21e.button%20%26%26%20stopButt.disabled%20%3F%20BrowserReload%28%29%20%3A%20BrowserStop%28%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20self.timer%20%3D%20setTimeout%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20self.onclick%20%3D%20%22%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20%28%21e.button%29%20for%20%28var%20br%20of%20gBrowser.browsers%29%20br.stop%28%29%3B%20%20%20%20%0A%20%20%20%20%7D%2C%20500%20%29%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u043A%u0438%20%u0438%20%u043E%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20%u0438%u0437%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%20..............%0Avar%20stopButt%20%3D%20document.getElementById%28%27stop-button%27%29%3B%20%0Avar%20reloadButt%20%3D%20document.getElementById%28%27reload-button%27%29%3B%20%0AstopButt.style.display%20%3D%20%27none%27%3B%20reloadButt.style.display%20%3D%20%27none%27%3B%0AaddDestructor%28%28%29%3D%3E%20%7B%20stopButt.style.display%20%3D%20%27%27%3B%20reloadButt.style.display%20%3D%20%27%27%3B%20%7D%29%3B%0A%0A%0A//%20%u0421%u043B%u0435%u0434%u0438%u043C%20%u0437%u0430%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u0435%u043C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%20%u043F%u0435%u0440%u0435%u0433%u0440%u0443%u0437%u043A%u0438%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0438%20%u0430%u043D%u0430%u043B%u043E%u0433%u0438%u0447%u043D%u043E%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Avar%20stopButtHandler%20%3D%20new%20MutationObserver%28%28%29%3D%3E%20%7B%0A%20%20%20document.getAnonymousNodes%28self%29%5B0%5D.src%20%3D%20stopButt.disabled%20%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAoklEQVQ4jc2TMQ7DIAxFkXJGHyJ7pICMYp8ma1Y2lt4rHapUkBpjptSSJ74eH3/s3N9XQF56mjVusyrwyHuIfHqk3NZQ/mh4bzoJkc9vIydBk0qN6AwApruwhN3PPFIGgEl01YINQVTYKKSCRTp+QMjJDLnqSrBuOoYg2tPMrqTBSgGoMC0dM2yN29xLx/QhnasG/GpZ765IcevSG6ZlsZ+vN6qE/1DgPtqbAAAAAElFTkSuQmCC%22%3B%0A%7D%29%3B%0AstopButtHandler.observe%28%20stopButt%2C%20%7Battributes%3A%20true%7D%20%29%3B%0AaddDestructor%28%28%29%3D%3E%20stopButtHandler.disconnect%28%29%20%29%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20-%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20%5Cn%u041B%u0434%3A%20%u041E%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%5Cn%u041F%3A%20CB%20%u041C%u0435%u043D%u044E%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%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

Отсутствует

 

№13507-12-2015 19:47:22

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Переключить стиль на странице( Firefox24+ ) от 07.12.2015.
кнопка выключает/включает стиль на текущей странице.

Код кнопки и вкладки код:
Код кнопки:

Выделить код

Код:

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%3E%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0441%u0442%u0438%u043B%u044C%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyhJREFUOMtdk11oW3UYh59zzj8nyUnz2TSmaWfT2lY3nWvRi7KBX3gxxBsHguKY84OyG9ErL7yQgdfFKYKI4gQvnKDI5kVRkNWqGyg6R9utpraNXWzztTRZ0pPk5Jz/8aJbaf3Be/e+Dw8v76twO2ff63uj0ejMBHziRZ9P/VEX6uvArCYCj0i5VbXcePr5yT/G+V80gOnpqx9n5+tv9QYap2rWSxNJY/G5n+ZPpwe6jUfrzvF0NNR/n99uJOPpl080LJlNpcfq3eGDzVLpmhQA5ZvtsSdPvIOz/Db37nsFf3sUbd8ghycmKOVWGThwjFuVAlkuhX6+EjsiPCKTCOmVhQVsASClVHtSAazUGVzHReNp9g+DL+xhqHsYAFuEmZuf8wmhJhXXjhCwjMmHJrcBruuqEoiHPQhgy7RxJSgKWLnz5ItVPp0u4JjrXe+/sHz0yoqSPXfZX92M5231zjIcYL3WIVux2GxJGpZEupD/5Qzh1iz3jw4imxuEjXwiHmoe99B5rGLKxA7gjkFvTCcV00lFFNT5N4mnoijqdlvHktRKdYYTq0NTp5iqNZ0hsdvg6pqJZUl8msLdMZ3fP/mMo8cO47SzjChfwoEStgVW1WXpekV37OCzewyWNlrMrZk0O5KFf5scfGYKUDC32vQaOcZHW3SnwnhDI3z9vafasTB2DGxgsNeHZUk0VSER0tjsPMyv776GHhzniadUfrvUplG0IWHLa6aRi6jOithtkIh6QIK0JfmyRfKuISInZ3ngwf18dbKfizdj9loleqtLc6qGRgbUi3sALQk4Ll26ynCfn6ihcU/yEB7g1QtF2h+ctRc//Gheuu5MROssK5Dds0QJuIBhCHyasgN2AAXQhGYHE31FT6d52WM3Mk67XtwDiNw+JHYN7S7TbJtC91Z0n1EM+nvKhzbXTAGQ+eufC4+3RsYMj8NW3WTp71U7v1G084WyvZhZaeVubDT+nLteFkKsj46kl1Upqj09mnX6m5ntZ/r2uy8+P//DuVq+UDjiujLk9epqOBS0DMNver16VVWV9fRA/416w1xstzp51+etpFIpC+A/x3JsuL3cxBcAAAAASUVORK5CYII%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%5BgetMarkupDocumentViewer%28%29.authorStyleDisabled%20%3F%20gPageStyleMenu.switchStyleSheet%28%27%27%29%20%3A%20gPageStyleMenu.disableStyle%28%29%3B%0A%0A%0A%0A%0A%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

Вкладка код:

Выделить код

Код:

getMarkupDocumentViewer().authorStyleDisabled ? gPageStyleMenu.switchStyleSheet('') : gPageStyleMenu.disableStyle();

Отсутствует

 

№13612-12-2015 02:08:14

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Palemoon 25.0

Re: Готовые кнопки для Custom Buttons

Открыть как ссылку
Постоянный пункт в меню при выделении. Если выделенна ссылка, то откроется ссылка. Если выделение не ссылка - будет поиск фразы.

скрытый текст
Init

Выделить код

Код:

// Открыть как ссылку.
(function() {
   if ( document.getElementById("go2link") ) return;
   var menuItem = document.createElement("menuitem");
   
   menuItem.id = "go2link";
   menuItem.setAttribute("label", "Перейти по ссылке");
   menuItem.setAttribute("class", "menuitem-iconic");
   menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACIUlEQVQ4jZ2STUtUYRSAn3vfj3tnnBybUdEKTZ2gJjDQ/AHt3PWhTNAmadsq2tUPadG2JGWwRZugRbSKSAqHmkUpVMagoo7a1Rnv3Pu+LdJQYYQ6u8N5znM4nOPQJPLj079c1/1ijLlTLhbmmnFuswKQwuGSK9xn+fHpgf8RcHGoVyTbTpx3hfsuPz6d+2fBZhDRf66TdEc6K5QsDd6aGT3KOJncXatbMqiWNNJPIbSP0AqhFReGB4hjQ+dJn6XlLb4vrBiL86r09NroIUH+6k2kcJBSoJWL1gJrQQqXza06rnDItHrUd0KWK1W2g93Z0uT1EQC5b6qUPuOl2tBJHy/p4adTaP2nLIVLUI/ozCTpP93Kh0+Vy8MTL9biRjQmwQKwXd0gjhWNyBBGlkgo/IRFKwGAVoLQwHotoqennW8Ly5lGLF66e/0AWCwH86NRq0dIx2GpUiXYDqOu3o6Bvyv0DA3iJRIIJdFKoH2JtRAE4b6dbKti/usKqytbi6dy3bnnD0ZCCZafs+/RyRTKb0F5HspTKE/R3deF6zokfUkqIZn7uEjYiGdKkzfGSnuDJXClVl0nCg3Ktwgd7Z1Rvs6eiWnPJnGsZfbtvMVx3pgonjj0B832zY9N2b7BszSCHSo/1izw2MTmYblYWD3IySb9AKxUqtQ2AmOMfYK198vFQnCUOVZQ2wh2TWzulYuFR82Y5gLHMSY2t8vFwtRxQ34DLk/NkLifJmMAAAAASUVORK5CYII=");
//   menuItem.setAttribute("oncommand", "gBrowser.addTab(document.commandDispatcher.focusedWindow.getSelection().toString())");
   menuItem.setAttribute("oncommand", "gBrowser.addTab(document.commandDispatcher.focusedWindow.getSelection().toString());gURLBar.handleCommand();");
   document.getElementById("context-copy").parentNode.insertBefore( menuItem, document.getElementById("context-sep-open") );
   document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function() {
     menuItem.hidden = !gContextMenu.isTextSelected;
     }, false);
})();


Автоскрытие панели поиска
Взято отсюда, продублирую шобы было и тут.
скрытый текст

Выделить код

Код:

//(auto-hide Findbar).................................
 (function(e) {    this.clickPage = function(event) {gBrowser.addEventListener('mousedown',on, false);   };
   function go() {   clickPage(event);    gFindBar.close();   }
   function on() {   gBrowser.removeEventListener('mousedown',on, false);     timeoutId = setTimeout(go, 1000)   }
   function off() {   clickPage(event);     clearTimeout(timeoutId)   }
   gFindBar.addEventListener('click',off, false);
     clickPage(event);
 })();


зы. Эти функции можно ложить в одну кнопку в Init и работают.

Отредактировано jars (12-12-2015 15:35:23)

Отсутствует

 

№13713-12-2015 00:32:33

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Free Download Manager(Firefox24 +), от 12.12.2015.
Кнопка для запуска портативного Free Download Manager из портативного Firefox, для этого создайте в папке в которой находится профиль вашего Firefox папку Soft и туда поместите папку портативного Free Download Manager, также можно просто в коде инициализации кнопки в строке file.initWithPath(file.path + "\\..\\Soft\\FreeDownloadManager\\fdm.exe"); указать путь к Free Download Manager, например: file.initWithPath("C:\\Program Files\\FreeDownloadManager\\fdm.exe"); путь должен быть с двумя \\.

Клики на кнопке:
ЛКМ => Запустить FDM,
СКМ => Запустить FDM с передачей адреса из буфера обмена,
Можно запустить FDM с передачей ссылки при перетаскивании ссылки на кнопку.

Код кнопки и инициализации:

Код кнопки:

Выделить код

Код:

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%3EFree%20Download%20Manager%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%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%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20e.button%20%3D%3D%200%20%26%26%20runFDM%28%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u041B%u041A%u041C%20%20%20%20%0A%20%20%20e.button%20%3D%3D%201%20%26%26%20runFDM%28%20gClipboard.read%28%29%20%29%3B%20%20//%20%u0421%u041A%u041C%20%0A%7D%3B%0A%0A%0A//%20%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20Free%20Download%20Manager%20%u0441%20%u043F%u0435%u0440%u0435%u0434%u0430%u0447%u0435%u0439%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u0441%u0441%u044B%u043B%u043A%u0438%20..............%0Afunction%20runFDM%28url%29%20%7B%0A%20%20%20var%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20file.initWithPath%28file.path%20+%20%22%5C%5C..%5C%5CSoft%5C%5CFreeDownloadManager%5C%5Cfdm.exe%22%29%3B%0A%20%20%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Burl%5D%2C%201%29%3B%0A%7D%3B%0A%0A%0A//%20%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20Free%20Download%20Manager%20%u0441%20%u043F%u0435%u0440%u0435%u0434%u0430%u0447%u0435%u0439%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u043F%u0440%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0438%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20..............%0Athis.ondrop%20%3De%3D%3E%20%7B%0A%20%20%20var%20url%20%3D%20e.dataTransfer.mozGetDataAt%28%22text/x-moz-url-data%22%2C%200%29%3B%0A%20%20%20if%20%28%20%21url%20%29%20%7B%0A%09var%20text%20%3D%20e.dataTransfer.mozGetDataAt%28%22text/plain%22%2C%200%29.trim%28%29%3B%0A%09%20%20%0A%20%20%20%20%20%20%20%20if%20%28%20/%5E%28%3F%3Ahttps%3F%29%3A/i.test%28text%29%20%29%20%7B%20try%20%7B%20url%20%3D%20makeURI%28text%29%20%7D%20catch%20%28e%29%20%7B%7D%20%7D%0A%20%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20/%5E%28%3F%3A%5Ba-z%5Cd-%5D+%5C.%29+%5Ba-z%5D+%24/i.test%28text%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20uriFixup%20%3D%20Cc%5B%22@mozilla.org/docshell/urifixup%3B1%22%5D.getService%28Ci.nsIURIFixup%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20url%20%3D%20uriFixup.createFixupURI%28text%2C%20uriFixup.FIXUP_FLAG_NONE%29%20%7D%20catch%20%28e%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28%20url%20%26%26%20url.host%20%29%20url%20%3D%20url.spec%3B%0A%09%7D%0A%20%20%20url%20%3D%20url%20%26%26%20url.substring%280%2C%204%29%20%3D%3D%20%22http%22%20%3F%20url%20%3A%20null%3B%0A%0A%20%20%20runFDM%28url%29%3B%20%0A%7D%3B%0Athis.ondragover%20%3De%3D%3E%20e.preventDefault%28%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.tooltipText%20%3D%20%22Free%20Download%20Manager%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041B%3A%20%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20FDM%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u0421%3A%20%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20FDM%20%u0441%20%u043F%u0435%u0440%u0435%u0434%u0430%u0447%u0435%u0439%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20FDM%20%u0441%20%u043F%u0435%u0440%u0435%u0434%u0430%u0447%u0435%u0439%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043F%u0440%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0438%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

Инициализация:

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..............
this.onclick =e=> {
   e.button == 0 && runFDM();                     // ЛКМ    
   e.button == 1 && runFDM( gClipboard.read() );  // СКМ 
};


// Запустить Free Download Manager с передачей адреса ссылки ..............
function runFDM(url) {
   var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
   file.initWithPath(file.path + "\\..\\Soft\\FreeDownloadManager\\fdm.exe");
  
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, [url], 1);
};


// Запустить Free Download Manager с передачей адреса при перетаскивании ссылки на кнопку ..............
this.ondrop =e=> {
   var url = e.dataTransfer.mozGetDataAt("text/x-moz-url-data", 0);
   if ( !url ) {
    var text = e.dataTransfer.mozGetDataAt("text/plain", 0).trim();
      
        if ( /^(?:https?):/i.test(text) ) { try { url = makeURI(text) } catch (e) {} }
        else 
           if ( /^(?:[a-z\d-]+\.)+[a-z]+$/i.test(text) ) {
                var uriFixup = Cc["@mozilla.org/docshell/urifixup;1"].getService(Ci.nsIURIFixup);
                try { url = uriFixup.createFixupURI(text, uriFixup.FIXUP_FLAG_NONE) } catch (e) {}
                }
        if ( url && url.host ) url = url.spec;
    }
   url = url && url.substring(0, 4) == "http" ? url : null;

   runFDM(url); 
};
this.ondragover =e=> e.preventDefault();


// Подсказка кнопки ..............
this.tooltipText = "Free Download Manager\
                   \nЛ: Запустить FDM\
                   \nС: Запустить FDM с передачей адреса из буфера\
                   \nЗапустить FDM с передачей ссылки при перетаскивании ссылки на кнопку";

Отсутствует

 

№13817-12-2015 21:10:51

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Открыть видео в PotPlayerMini( Firefox24+ ), от 05.10.2018.
Кнопка открывает видео из текущей страницы в PotPlayerMini или добавляет его в плейлист PotPlayerMini. Также кнопка добавляет в контекстное меню ссылок на странице пункт меню Открыть в PotPlayerMini который открывает ссылку ведущею на видео или добавляет такую ссылку в плейлист PotPlayerMini. В начале кода инициализации кнопки в строке: var path = "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe"; нужно указать путь к вашему PotPlayerMini с двумя \\, не обязательно использовать именно PotPlayerMini, можно указать путь и к другому плееру, например: MPC-BE
Кнопка берёт от плеера иконку и имя плеера в подсказке у кнопки и иконку и имя плеера для выше упомянутого пункта меню, если в коде инициализации правильно указан путь к плееру.

Клики на кнопке:
ЛКМ => Открыть видео из текущей страницы в PotPlayerMini,
СКМ => CB Меню,
ПКМ => Добавить видео из текущей страницы в плейлист PotPlayerMini.

Клики на пункте контекстного меню:
ЛКМ => Открыть видео на которое ведёт ссылка в PotPlayerMini,
ПКМ => Добавить видео на которое ведёт ссылка в плейлист PotPlayerMini.

Код кнопки и инициализации:

Код кнопки:

Выделить код

Код:

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%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20PotPlayerMini%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bmoz-icon%3A//file%3A//C%3A%5CProgram%20Files%5CDAUM%5CPotPlayer%5CPotPlayerMini.exe%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CDAUM%5C%5CPotPlayer%5C%5CPotPlayerMini.exe%22%3B%0A%0A%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20%20%20play%28gBrowser.currentURI.spec%2C%20%22%22%29%3B%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28self%29%3B%20%0A%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20play%28gBrowser.currentURI.spec%2C%20%22/add%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0A%0A%0Aself.image%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20path%3B%0Avar%20playerName%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%22%22%29%3B%0Aself.label%20%3D%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%3B%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%20%0Avar%20menuitem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20document.getElementById%28%22context-sep-open%22%29%29%3B%0Amenuitem.setAttribute%28%22label%22%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%22%20+%20playerName%29%3B%20%20%20%20%20%20%0Amenuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0Amenuitem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20path%29%3B%20%0Amenuitem.onclick%20%3De%3D%3E%20play%28%28%27getLinkURL%27%20in%20gContextMenu%20%3F%20gContextMenu.getLinkURL%28%29%20%3A%20gContextMenu.linkURL%29%2C%20e.button%20%3F%20%22/add%22%20%3A%20%22%22%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20menuitem.hidden%20%3D%20%21gContextMenu.onLink%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20menuitem.remove%28%29%20%29%3B%0A%0A%20%20%20%20%0Afunction%20play%28link%2C%20param%29%20%7B%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20%5Blink%2C%20param%5D%2C%202%29%3B%0A%7D%3B%0A%0A%0Aself.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%22%20+%20playerName%20+%20%22%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0432%20%u043F%u043B%u0435%u0439%u043B%u0438%u0441%u0442%20%22%20+%20playerName%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

Инициализация:

Выделить код

Код:

var path = "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe";


this.onclick =e=> {
   if ( e.button == 0 )
        play(gBrowser.currentURI.spec, "");

   if ( e.button == 1 ) gShowPopup(self); 
    
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
        e.preventDefault();  
        play(gBrowser.currentURI.spec, "/add");           
        }
};
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


self.image = "moz-icon://file://" + path;
var playerName = path.split("\\").pop().replace(".exe","");
self.label = "Открыть видео в " + playerName;


var contextMenu = document.getElementById("contentAreaContextMenu"); 
var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open"));
menuitem.setAttribute("label", "Открыть в " + playerName);      
menuitem.setAttribute("class", "menuitem-iconic");
menuitem.setAttribute("image", "moz-icon://file://" + path); 
menuitem.onclick =e=> play(('getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL), e.button ? "/add" : "");
addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onLink, false, contextMenu);
addDestructor(()=> menuitem.remove() );

    
function play(link, param) {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   file.initWithPath(path);
   process.init(file);
   process.run(false, [link, param], 2);
};


self.tooltipText = "Л: Открыть видео в " + playerName + "\nС: CB Меню \nП: Добавить видео в плейлист " + playerName;

Отсутствует

 

№13910-01-2016 19:27:13

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Добавлять новые СВ кнопки справа от этой кнопки( Firefox24+ ) от 13.02.2016.
кнопка заставляет новые кнопки добавляться рядом с собой на панели на котором сама находится и их уже не надо вытаскивать на панели вручную из настройки панелей инструментов(Customize). Также на Firefox43 и выше кнопка блокирует баг с дублированием кнопки при добавлении новой кнопки.

ЛКМ => Включить кнопку,
ПКМ => 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%3ENew%20Button%20at%20Right%20from%20current%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACDUlEQVR42nWT30sUURTHz91Zd9FkVBRrX0oScTMI8weSIYSU/QMFbb5oGAn+AQo9B/UH9BAF+lIr+OLrSETQQ4GhEVRrUFkP/SLRNcvUnXv8nrmz7XVcB86cy7nn+5kz556ryHrueKxIYcFkPMmbxXHgzA6NDyguatQewBzHkKMMQDnWPgDsIwYh8/hATP8HQCRJEFIc5iA1DpljZIGogJU/9WXp39DR1pj99QBwe45dZb6UhCXE2Hx6m4xtQZQ/8SDni+DdSNopVYtysUiFpVbDqp4vPL4uCWc6zt+H+wvbAOBrCBCRFgh0AtIA6BboBVADc6eeZLMCGOq/kkF8Hcs8AO8tgDwav5M0AI/bw87Xw9dml+bvSUamtfsGYmuIrQDwKgIoQirkF3pR9uCbz28vx+tTMWo6VRdsL79eLax80yePtc3MTlwYKwMIT8HTvYufFkc+bq4NOjWN9Kf6cIVsHNr4sePnf9LxytqH06Od1w6oICGA9uZGOnvEpb7tgkrefLl8UXZvdTV5CYe3vv9Wzy6dVnfL9KAKfkcALeihaSKT+yj3Imji1XRPBvFyTTSn4LHMi5Y5SCnrGFc3c5MCqKtMD5c5RnsOisfILlmD1NxA5yThwy96GhkkRtlxrP3oIO0d5ZKXfSSbUYaJ1/tGef9lovAyUeQyAaKCO4nLpPRBABWJlwCWt6vYBccZ9A793wmLAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20self.checked%20%3D%20%21self.checked%3B%0A%20%20%20document.persist%28self.id%2C%20%22checked%22%29%3B%0A%7D%3B%0A%0Avar%20observer%20%3D%20%7B%0A%20%20%20observe%3A%20button%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%20%21self.checked%20%29%20return%3B%0A%20%20%20%20%20%20var%20toolbar%20%3D%20self.parentNode%3B%0A%20%20%20%20%20%20toolbar.insertBefore%28button%2C%20self.nextSibling%29%3B%0A%20%20%20%20%20%20custombuttons.persistCurrentSets%28toolbar.id%2C%20_id%2C%20button.id%29%3B%0A%0A%20%20%20%20%20%20if%20%28%20parseInt%28Services.appinfo.version%29%20%3C%2043%20%29%20return%3B%0A%0A%20%20%20%20%20%20function%20observer%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20Services.ww.unregisterNotification%28observer%29%2C%20500%29%3B%0A%20%20%20%20%20%20%20%20%20subject.close%28%29%3B%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20Services.ww.registerNotification%28observer%29%3B%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%7D%3B%0Avar%20notificationPrefix%20%3D%20custombuttons.notificationPrefix%20+%20%22installButton%22%3B%0AServices.obs.addObserver%28observer%2C%20notificationPrefix%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.obs.removeObserver%28observer%2C%20notificationPrefix%29%20%29%3B%0A%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

Инициализация:

Выделить код

Код:

this._handleClick =()=> {
   self.checked = !self.checked;
   document.persist(self.id, "checked");
};

var observer = {
   observe: button=> {
      if ( !self.checked ) return;
      var toolbar = self.parentNode;
      toolbar.insertBefore(button, self.nextSibling);
      custombuttons.persistCurrentSets(toolbar.id, _id, button.id);

      if ( parseInt(Services.appinfo.version) < 43 ) return;

      function observer(subject, topic, data) {
         setTimeout(()=> Services.ww.unregisterNotification(observer), 500);
         subject.close();
      };
      Services.ww.registerNotification(observer);      
    }
};
var notificationPrefix = custombuttons.notificationPrefix + "installButton";
Services.obs.addObserver(observer, notificationPrefix, false);
addDestructor(()=> Services.obs.removeObserver(observer, notificationPrefix) );

Отсутствует

 

№14012-01-2016 19:53:44

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Объекты: перебор свойств( Firefox24+ ) от 29.01.2017.
Кнопка для разработчиков CB кнопок, открывает меню с полезными для создании CB кнопок объектами и при клике на нужный объект в меню даёт возможность просмотреть его свойства, в кнопку легко добавить другие объекты. Для работы кнопки нужно расширение DOM Inspector :: Add-ons for Firefox

Скриншот меню с объектами:
8302536.png

ЛКМ => Открыть меню с объектами.

Код кнопки:
Код кнопки:

Выделить код

Код:

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%3E%u041E%u0431%u044A%u0435%u043A%u0442%u044B%3A%20%u043F%u0435%u0440%u0435%u0431%u043E%u0440%20%u0441%u0432%u043E%u0439%u0441%u0442%u0432%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2WQD/dlkA/3ZZAP92WQD/dlkA/3ZZAP92WQD/dlkA/3BTAN92WQCfdlkAQAAAAAAAAAAAAAAAAAAAAAAAAAAAdlkA/4VxAP+FjgD/hY4A/4WOAP+FjgD/hXkA/5FwAP+IZwD/gmUA/4VoAP+FaACvhWgAEAAAAAAAAAAAAAAAAHZZAP+FjgD/qP8c/6j/HP+o/xz/qP8c/6j/HP+o/xz/qP8c/4WrAP+ObQD/hWgA/4VoAM+FaAAQAAAAAAAAAAB2WQD/hYoA/6j/HP+o/xz/qP8c/6j/HP+FcQD/qP8c/6j/HP+o/xz/qP8c/4WGAP+FaAD/hWgAzwAAAAAAAAAAdlkA/4WGAP+o/xz/qP8c/6j/HP+FcQD/hXEA/4VxAP+o/xz/qP8c/6j/HP+o/xz/hXEA/4VoAP+FaABgAAAAAHlcAP+FigD/qP8c/6j/HP+FcQD/hXEA/4VxAP+FcQD/hXEA/6j/HP+o/xz/qP8c/6j/HP+FaAD/hWgAvwAAAAB2WQD/hY4A/6j/HP+FcQD/hXEA/4VxAP+FcQD/hXEA/4VxAP+FcQD/qP8c/6j/HP+o/xz/hWQA/4VoAP8AAAAAdlkA/4WOAP+o/xz/qP8c/6j/HP+o/xz/qP8c/6j/HP+o/xz/qP8c/6j/HP+o/xz/qP8c/4VxAP+FaAD/AAAAAHZZAP+FjgD/qP8c/6j/HP+o/xz/qP8c/4VxAP+o/xz/qP8c/6j/HP+o/xz/qP8c/6j/HP+FeQD/hWgA/wAAAAB2WQD/hY4A/6j/HP+o/xz/qP8c/4VxAP+FcQD/hXEA/6j/HP+o/xz/qP8c/6j/HP+o/xz/hWQA/4VoAP8AAAAAdlkA/4WOAP+o/xz/qP8c/4VxAP+FcQD/hXEA/4VxAP+FcQD/qP8c/6j/HP+o/xz/qP8c/4VoAP+FaADPAAAAAHZZAP+FjgD/qP8c/4VxAP+FcQD/hXEA/4VxAP+FcQD/hXEA/4VxAP+o/xz/qP8c/451AP+FaAD/hWgAYAAAAAB2WQD/hY4A/6j/HP+o/xz/qP8c/6j/HP+o/xz/qP8c/6j/HP+o/xz/qP8c/4V9AP+FaAD/hWgAzwAAAAAAAAAAdlkA/4WOAP+o/xz/qP8c/6j/HP+o/xz/qP8c/6j/HP+o/xz/hasA/45tAP+FaAD/hWgAz4VoABAAAAAAAAAAAHZZAP+FcQD/hY4A/4WOAP+FjgD/hY4A/5GFAP+LfwD/l3oA/4tuAP+FaAD/hWgAv4VoABAAAAAAAAAAAAAAAAB2WQD/dlkA/3ZZAP92WQD/dlkA/3ZZAP92WQD/dlkA/3ZZAN92WQCfdlkAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+sQQAHrEEAA6xBAAOsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAOsQQADrEEAB6xBAB+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%5Bvar%20data%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%22Cc%22%2C%20Cc%2C%0A%20%20%20%20%20%20%20%20%22Ci%22%2C%20Ci%2C%0A%20%20%20%20%20%20%20%20%22Components.Constructor%22%2C%20Components.Constructor%2C%0A%20%20%20%20%20%20%20%20%22XPCOMUtils%22%2C%20XPCOMUtils%2C%0A%09%22window%22%2C%20window%2C%0A%09%22document%22%2C%20document%2C%0A%09%22documentElement%22%2C%20document.documentElement%2C%0A%09%22Services%22%2C%20Services%2C%0A%09%22gPrefService%22%2C%20gPrefService%2C%0A%09%22makeFilePicker%28%29%22%2C%20window.makeFilePicker%28%29%2C%0A%09%22XULBrowserWindow%22%2C%20XULBrowserWindow%2C%0A%09%22Components%22%2C%20Components%2C%0A%09%2C%2C%0A%09%22content%22%2C%20content%2C%0A%09%22content.document%22%2C%20content.document%2C%0A%09%22focusedWindow%22%2C%20document.commandDispatcher.focusedWindow%2C%0A%09%22focusedElement%22%2C%20document.commandDispatcher.focusedElement%2C%0A%20%20%20%20%20%20%20%20%22Services.focus.focusedElement%22%2C%20Services.focus.focusedElement%2C%0A%09%22selection%22%2C%20document.commandDispatcher.focusedWindow.getSelection%28%29%2C%0A%09%22selection%20in%20defaultView%22%2C%20gBrowser.contentDocument.defaultView.getSelection%28%29%2C%0A%09%22window.content%22%2C%20window.content%2C%0A%09%22location%22%2C%20content.document.location%2C%0A%09%2C%2C%0A%09%22new%20Date%28%29%22%2C%20new%20Date%28%29%2C%0A%09%22gURLBar%22%2C%20gURLBar%2C%0A%09%22gBrowser%22%2C%20gBrowser%2C%0A%09%22gCustomizeMode%22%2C%20gCustomizeMode%2C%0A%09%22gFindBar%22%2C%20gFindBar%2C%0A%09%22gClipboard%22%2C%20gClipboard%2C%0A%09%22gPageStyleMenu%22%2C%20gPageStyleMenu%2C%0A%09%22gBrowser.docShell%22%2C%20gBrowser.docShell%2C%0A%09%22nsIWebBrowserPersist%22%2C%20Cc%5B%27@mozilla.org/embedding/browser/nsWebBrowserPersist%3B1%27%5D.createInstance%28Ci.nsIWebBrowserPersist%29%2C%0A%20%20%20%20%20%20%20%20%22nsIStyleSheetService%22%2C%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%2C%0A%20%20%20%20%20%20%20%20%22nsIDownloadManager%22%2C%20Cc%5B%22@mozilla.org/download-manager%3B1%22%5D.getService%28Ci.nsIDownloadManager%29%2C%0A%09%22gNavigatorBundle%22%2C%20gNavigatorBundle%2C%0A%09%22PopupNotifications%22%2C%20PopupNotifications%2C%0A%09%22gBrowser.mCurrentTab%22%2C%20gBrowser.mCurrentTab%2C%0A%09%22gBrowser.tabContainer%22%2C%20gBrowser.tabContainer%2C%0A%09%22deck%22%2C%20document.getElementById%28%22content-deck%22%29%2C%0A%09%22browser%22%2C%20gBrowser.selectedBrowser%2C%0A%09%22gNavToolbox%22%2C%20gNavToolbox%2C%0A%09%22nav-bar%22%2C%20document.getElementById%28%22nav-bar%22%29%2C%0A%09%22searchBar%22%2C%20BrowserSearch.searchBar%2C%0A%09%22Scratchpad%22%2C%20Scratchpad%2C%0A%09%2C%2C%0A%09%22gFindBar%22%2C%20gFindBar%2C%0A%09%22gFindBar._findField%22%2C%20gFindBar._findField%2C%0A%09%22BrowserUtils%22%2C%20BrowserUtils%2C%0A%09%22BrowserUtils.getSelectionDetails%22%2C%20BrowserUtils.getSelectionDetails%28window%29%2C%20%0A%09%22BrowserSearch%22%2C%20BrowserSearch%2C%20%0A%09%2C%2C%0A%09%22cbu%22%2C%20cbu%2C%0A%09%22CB2const%22%2C%20CB2const%2C%0A%09%22custombutton%22%2C%20custombutton%2C%0A%09%22custombuttons%22%2C%20custombuttons%2C%0A%09%22custombuttonsUtils%22%2C%20custombuttonsUtils%2C%0A%09%2C%2C%0A%09%2C%2C%0A%09%22StarUI%22%2C%20StarUI%2C%0A%09%22PlacesUIUtils%22%2C%20PlacesUIUtils%2C%0A%09%22PlacesUtils%22%2C%20PlacesUtils%2C%0A%09%22placesContext%22%2C%20document.getElementById%28%22placesContext%22%29%2C%0A%09%22BookmarksService%22%2C%20Cc%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Ci.nsINavBookmarksService%29%2C%0A%09%22BookmarkingUI%22%2C%20BookmarkingUI%2C%0A%09%22PlacesCommandHook%22%2C%20PlacesCommandHook%2C%0A%09%22BookmarksEventHandler%22%2C%20BookmarksEventHandler%2C%0A%09%22window.content.SidebarUtils%22%2C%20document.getElementById%28%22sidebar%22%29.contentWindow.SidebarUtils%2C%0A%09%2C%2C%0A%09%2C%2C%0A%09%22new%20MouseEvent%22%2C%20new%20MouseEvent%28%22click%22%29%0A%5D%3B%0Athis.textContent%20%3D%20%22%22%3B%0A%0Avar%20popup%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Apopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%3B%20this.open%28event%29%3B%22%29%3B%0Apopup.setAttribute%28%22oncontextmenu%22%2C%20%22return%20false%22%29%3B%0Apopup.position%20%3D%20%22after_start%22%3B%0A%0Afor%28var%20ind%20%3D%200%3B%20ind%20%3C%20data.length%3B%20ind%20+%3D%202%29%20%7B%0A%09var%20lab%20%3D%20data%5Bind%5D%2C%20obj%20%3D%20data%5Bind%20+%201%5D%3B%0A%09if%20%28%21lab%20%26%26%20%21obj%29%20%7B%0A%09%09popup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%09%09continue%3B%0A%09%7D%0A%09var%20menuitem%20%3D%20popup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%09menuitem.setAttribute%28%22label%22%2C%20lab%29%3B%0A%09menuitem.obj%20%3D%20obj%3B%0A%7D%0A%0A%0A//%20Compact%20Style%0Avar%20style%20%3D%20self.getAttribute%28%27Help%27%29.replace%28/%25id%25/g%2C%20%22%23%22%20+%20_id%29.replace%28/%3B/g%2C%20%22%20%21important%3B%22%29%3B%0Avar%20pi%20%3D%20document.createProcessingInstruction%28%22xml-stylesheet%22%2C%27type%3D%22text/css%22%20href%3D%22data%3Atext/css%2C%27%20+%20encodeURIComponent%28style%29%20+%20%27%22%27%29%3B%0Apopup.pi%20%3D%20document.insertBefore%28pi%2C%20document.firstChild%29%3B%0AparseInt%28Services.appinfo.version%29%20%3C%2029%0A%3F%20popup.setAttribute%28%22onpopuphidden%22%2C%20%22document.removeChild%28this.pi%29%22%29%0A%3A%20popup.setAttribute%28%22onpopuphidden%22%2C%20%22this.pi.remove%28%29%22%29%3B%0A%0A%20%0Apopup.open%20%3D%20function%28e%29%20%7B%0A%09var%20node%20%3D%20e.target%3B%0A%09if%20%28%21node.hasOwnProperty%28%22obj%22%29%29%20return%3B%0A%09var%20obj%20%3D%20node.obj%3B%0A%09if%20%28obj%20instanceof%20Node%20%26%26%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%29%29%20%7B%20inspectDOMNode%28obj%29%3B%20return%3B%20%7D%0A%09var%20win%20%3D%20openDialog%28%0A%09%09%22chrome%3A//inspector/content/object.xul%22%2C%0A%09%09%22_blank%22%2C%20%22chrome%2Call%2Cdialog%3Dno%22%2C%20obj%0A%09%29%3B%0A%09win.addEventListener%28%22pageshow%22%2C%20function%20onPS%28e%29%20%7B%0A%09%09var%20vDoc%20%3D%20e.target%2C%20vHref%20%3D%20vDoc.location.href%3B%0A%09%09if%20%28vHref.indexOf%28%22viewers%22%29%20%3D%3D%20-1%29%20return%3B%0A%0A%09%09var%20doc%20%3D%20win.document%3B%0A%09%09if%20%28%21win.dFlag%29%20%7B%0A%09%09%09doc.querySelector%28%22domi-panel%22%29.switchViewer%288%29%3B%20//%20%22JavaScript%20Object%22%0A%09%09%09win.addEventListener%28%22unload%22%2C%20function%20onUnload%28e%29%20%7B%0A%09%09%09%09win.removeEventListener%28%22unload%22%2C%20onUnload%2C%20false%29%3B%0A%09%09%09%09win.removeEventListener%28%22pageshow%22%2C%20onPS%2C%20false%29%3B%0A%09%09%09%7D%29%3B%0A%09%09%09win.dFlag%20%3D%20true%3B%0A%09%09%7D%0A%09%09if%20%28vHref.indexOf%28%22jsObject%22%29%20%3D%3D%20-1%29%20return%3B%0A%0A%09%09var%20popup%20%3D%20vDoc.getElementById%28%22popupContext%22%29%3B%0A%09%09var%20point%20%3D%20popup.querySelector%28%27menuitem%5Bcommand%3D%22cmdCopyValue%22%5D%27%29%3B%0A%09%09var%20menuitem%20%3D%20popup.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20point.nextSibling%29%3B%0A%09%09menuitem.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0441%u0432%u043E%u0439%u0441%u0442%u0432%u043E%22%29%3B%0A%09%09menuitem.setAttribute%28%22oncommand%22%2C%20%22this.run%28%29%22%29%3B%0A%09%09menuitem.run%20%3D%20function%28%29%20%7B%0A%09%09%09var%20view%20%3D%20vDoc.defaultView.viewer.mView%3B%0A%09%09%09var%20inds%20%3D%20view.getSelectedIndices%28%29%3B%0A%09%09%09var%20keys%20%3D%20%5B%5D%3B%0A%09%09%09inds.forEach%28function%28ind%29%20keys.push%28view.mKeys%5Bind%5D%29%29%3B%0A%09%09%09gClipboard.write%28keys.join%28%22%5Cr%5Cn%22%29%29%3B%0A%09%09%7D%0A%09%7D%2C%20false%29%3B%0A%7D%0Apopup.openPopup%28this%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%25id%25%20*%20%7B%0A%09-moz-appearance%3A%20none%3B%0A%7D%0A%25id%25%20%3E%20menupopup%20%7B%0A%09border%3A%201px%20solid%20rgb%28151%2C151%2C151%29%3B%0A%09padding%3A%20.25em%200%3B%0A%7D%0A%25id%25%20%3E%20menupopup%20%3E%20menuitem%20%7B%0A%09height%3A%201.3em%3B%0A%7D%0A%25id%25%20%3E%20menupopup%20%3E%20menuitem%5B_moz-menuactive%3D%22true%22%5D%20%7B%0A%09background-color%3A%20rgb%28191%2C223%2C255%29%3B%0A%7D%0A%25id%25%20%3E%20menupopup%20%3E%20menuseparator%20%7B%0A%09padding%3A%200%3B%0A%09border-top%3A%201px%20solid%20rgb%28224%2C224%2C224%29%3B%0A%09margin%3A%202px%200%3B%0A%7D%0A%25id%25%20%3E%20menupopup%20%3E%20menuitem%20%3E%20.menu-text%20%7B%0A%09padding%3A%200%20.5em%3B%0A%7D%0A%25id%25%20%3E%20menupopup%20%3E%20menuitem%20%3E%20.menu-accel-container%20%7B%0A%09display%3A%20none%3B%0A%7D%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Автор кнопки: Dumby

Отсутствует

 

№14114-01-2016 13:09:23

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Callers( Firefox24+ ) от 14.01.2015.
Кнопка для разработчиков CB кнопок, даёт возможность узнать и просмотреть цепочку внутренних функций Firefox которые вызвали внутреннюю функцию Firefox которую вы укажете в вначале кода инициализации кнопки. Для работы кнопки нужно расширение DOM Inspector :: Add-ons for Firefox

ЛКМ => Включить кнопку,
ПКМ => 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%3Ecallers%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA////////////////////////////////////////////////////////////////////////////mTMA/5kzAP//////////////////////+PPv//jy7v/58/D/+fPw//jy7v/48+///////////////////////5kzAP+ZMwD/////////////////8eDZ/6ZOIv+dOwr/nTsK/5w6CP+cOQf/pUwg//Dg2f////////////////+ZMwD/mTMA////////////8eDZ/6ZPIv+TJgD/kyYA/505Cf+dPAv/nDcH/5ImAP+lSx7/8ODZ////////////mTMA/5kzAP//////+PPv/6ZOIv+TKAD/lSoA/6hTJ//y5N3/+/f1//Lk3P+mTSH/kCIA/6NIG//38ez//////5kzAP+ZMwD///////jy7v+ePQz/kygA/6A/EP/y5N3/////////////////8eDZ/6NIG/+lSBz/9/Dr//////+ZMwD/mTMA///////58/D/nz8P/5MnAP+gQBH/+vXz///////////////////////59PH/+PPv////////////mTMA/5kzAP//////+fPw/58/D/+TJwD/oEAR//r18///////////////////////+fTx//jz7////////////5kzAP+ZMwD///////jy7v+ePQz/kygA/6A/EP/y5N3/////////////////8eDZ/6NIG/+lSBz/9/Dr//////+ZMwD/mTMA///////48+//pk4i/5MoAP+VKgD/qFMn//Lk3f/79/X/8uTc/6ZNIf+QIgD/o0gb//fx7P//////mTMA/5kzAP////////////Hg2f+mTyL/kyYA/5MmAP+dOQn/nTwL/5w3B/+SJgD/pUse//Dg2f///////////5kzAP+ZMwD/////////////////8eDZ/6ZOIv+dOwr/nTsK/5w6CP+cOQf/pUwg//Dg2f////////////////+ZMwD/mTMA///////////////////////48+//+PLu//nz8P/58/D/+PLu//jz7///////////////////////mTMA/5kzAP///////////////////////////////////////////////////////////////////////////5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/mTMA/5kzAP+ZMwD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20obj%20%3D%20gBrowser%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0443%u043A%u0430%u0437%u0430%u0442%u044C%20%u043E%u0431%u044A%u0435%u043A%u0442%20%u0432%20%u0441%u0432%u043E%u0439%u0441%u0442%u0432%u0430%u0445%20%u043A%u043E%u0442%u043E%u0440%u043E%u0433%u043E%20%u0435%u0441%u0442%u044C%20%u0444%u0443%u043D%u043A%u0446%u0438%u044F%20Firefox%20%u043A%u043E%u0442%u043E%u0440%u0443%u044E%20%u043D%u0443%u0436%u043D%u043E%20%u043E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%0Avar%20funcName%20%3D%20%22loadURIWithFlags%22%3B%20//%20%u0443%u043A%u0430%u0437%u0430%u0442%u044C%20%u0432%u043D%u0443%u0442%u0440%u0435%u043D%u043D%u044E%u044E%20%u0444%u0443%u043D%u043A%u0446%u0438%u044E%20Firefox%20%u043A%u043E%u0442%u043E%u0440%u0443%u044E%20%u043D%u0443%u0436%u043D%u043E%20%u043E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%0A%0Avar%20originalFunc%20%3D%20obj%5BfuncName%5D%3B%0Afunction%20destr%28%29%20%7B%0A%09self.checked%20%3D%20false%3B%0A%09obj%5BfuncName%5D%20%3D%20originalFunc%3B%0A%7D%0AaddDestructor%28destr%29%3B%0A%0Avar%20ms%20%3D%200%3B%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09if%20%28e.button%29%20return%3B%0A%0A%09this.checked%20%3D%20%21this.checked%3B%0A%09if%20%28%21this.checked%29%20%7B%20destr%28%29%3B%20return%3B%20%7D%0A%0A%09obj%5BfuncName%5D%20%3D%20function%20%28%29%20%7B%0A%09%09originalFunc.apply%28obj%2C%20arguments%29%3B%0A%0A%09%09var%20now%20%3D%20Date.now%28%29%3B%0A%09%09var%20delta%20%3D%20now%20-%20ms%3B%0A%09%09ms%20%3D%20now%3B%0A%09%09if%20%28delta%20%3C%20500%29%20return%3B%0A%09%09%0A%09%09var%20data%20%3D%20%7B%7D%3B%0A%09%09Object.defineProperty%28data%2C%20%22toString%22%2C%20%7B%0A%09%09%09value%3A%20function%28%29%20%22CALLERS%20%3A%22%2C%0A%09%09%09configurable%3A%20true%2C%0A%09%09%09enumerable%3A%20false%0A%09%09%7D%29%3B%0A%09%09var%20count%20%3D%200%3B%0A%09%09for%28var%20f%20%3D%20arguments.callee.caller%3B%20f%3B%20f%20%3D%20f.caller%29%0A%09%09%09data%5B++count%20+%20%22.%20%22%20+%20%28f.name%20%7C%7C%20%22unnamed%22%29%5D%20%3D%20f%3B%0A%09%09inspectObject%28data%29%3B%0A%09%7D%0A%7D%3B%0A%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


Автор кнопки: Dumby

Отсутствует

 

№14201-02-2016 23:29:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

CustomPaste for CustomButtons( Firefox24+ ) от 11.06.2016.
Очень полезная кнопка для разработчиков CB кнопок, добавляет в редактор всех установленных CB кнопок кнопочку которая открывает меню с кодами которые можно вставить в поле текстового вода редактора нажатием на нужный пункт меню, коды вставляются в позицию курсора или заменяют выделенный текст в поле текстового вода редактора. Можно удалять не нужные коды или добавлять свои коды в вкладке Справка кнопки. Можно создать несколько кнопок CustomPaste for CustomButtons с разными коллекциями кодов, тогда в редакторы всех CB кнопок будут добавлены столько же кнопочек-меню с разными кодами. В начале кода инициализации кнопки можно менять настройки для кнопки.

Скриншот меню с кодами в редакторе CB:
a643acdf0f5ea8b0f95c30b6e86ede17.png

ЛКМ => Включить кнопку,
ПКМ => 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%3ECustomPaste%20for%20CustomButtons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%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//-----------------------%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438--------------------------------%0Aconst%20insertButtonBackgroundColor%20%3D%20%22rgb%28205%2C109%2C252%29%22%3B//%20%20%20%20%20%20%20%u0426%u0432%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0432%20%u043E%u043A%u043D%u0435%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u0430%0Aconst%20insertButtonTooltip%20%3D%20%22%u041F%u0440%u0438%u043C%u0435%u0440%22%3B//%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%u041D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%u0442%u043E%20%u0447%u0442%u043E%20%u0431%u0443%u0434%u0435%u0442%20%u0432%u043E%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0439%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0435.%0Aconst%20cursorIndex%20%3D%20%22%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%22%3B//%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%u041C%u0435%u0442%u043A%u0430%20%u043A%u0443%u0434%u0430%20%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043A%u0443%u0440%u0441%u043E%u0440%20%u043F%u043E%u0441%u043B%u0435%20%u0432%u0441%u0442%u0430%u0432%u043A%u0438%0Aconst%20allowSelection%20%3D%20true%3B//%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%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0440%u0435%u0436%u0438%u043C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20%u043F%u043E%u0441%u043B%u0435%20%u0432%u0441%u0442%u0430%u0432%u043A%u0438%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0443%u043A%u0430%u0437%u0430%u043D%u0430%20%u043F%u043E%u0437%u0438%u0446%u0438%u044F%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%0Athis.allowChecked%20%3D%20false%3B//%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%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0432%u043A%u043B%u044E%u0447%u0435%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0430%20%u0438%u043B%u0438%20%u043D%u0435%u0442%20%u043D%u0435%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0446%u0432%u0435%u0442%u043E%u043C%20%u043D%u043E%20%u0438%20%u043D%u0430%u0436%u0430%u0442%u0438%u0435%u043C%0A//-------------------------------------------------------%0A%0A%0Avar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B//%u0420%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%20%u043F%u0443%u043D%u043A%u0442%u043E%u0432%20%u043C%u0435%u043D%u044E%0Aconst%20insertButtonImage%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfV1dX/wAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAA/////////////////////wAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAAr//////////////////////////8AAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAK///////////AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACv//////////wAAAAAAAAAAAAAAAAAAAAD//////////////////////////wAAAAAAAAArV1dX/1dXV/8AAAAr//////////8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAP//////////AAAAK1dXV/9XV1f/AAAAK///////////AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAD//////////wAAACtXV1f/V1dX/wAAACv//////////////////////////wAAAAD//////////wAAAAAAAAAA//////////8AAAArV1dX/1dXV/8AAAArAAAAAP////////////////////8AAAAA//////////////////////////8AAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAK1dXV/8AAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfAACsQQAArEE//KxBP/ysQSE8rEEBPKxBDzysQQ8ErEEPMKxBDzCsQQEwrEEhBKxBP/ysQT/8rEEAAKxBAACsQQ%3D%3D%22%3B%0Aconst%20insertButtonImageOnSelf%20%20%20%20%20%20%20%20%3D%20%20%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfV1dX/wAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAA//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAP///////////////////////////////////////////////wAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAAAAAAD/////////////////////////////////////AAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAK1dXV/8AAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfAACsQQAArEE//KxBP/ysQSAcrEEgDKxBP8ysQTgMrEEwHKxBM/ysQTAMrEE4DKxBP/ysQT/8rEEAAKxBAACsQQ%3D%3D%22%3B%0Aconst%20editor%20%3D%20%22chrome%3A//custombuttons/content/editor.xul%22%3B%0Athis.tooltipText%20%3D%20%27%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u043A%u043E%u0434%u043E%u0432%20%22%27+insertButtonTooltip+%27%22%20%u0434%u043B%u044F%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u0430%20%u0421ustom%20buttons%27%3B%0A%0AtheSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0Avar%20items%20%3D%20self.getAttribute%28%22Help%22%29.split%28theSeparator%29%3B%0Avar%20thisCB%20%3D%20this%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////8nJ8P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D////////////o6Pr/5ub6////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P///////////+jo+v/m5vr///////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D////////////////////////////JyfD/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0Athis.image%20%3D%20this.imageOn%3B%20if%20%28this.allowChecked%29%20this.checked%20%3D%20true%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22custom-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Ci.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomPasteForCBEditor%5B%22%20+%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%20%20%20%20cbIdNumber%20+%20%22%5D.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20setButtonDesign%28aDoc%29%20%7B%0A%0A%20%20var%20button%20%3D%20aDoc.getElementById%28%22custom-paste-by-cb%22%20+%20cbIdNumber%29%3B%0A%20%20%20%20%20%20button.tooltipText%20%3D%20insertButtonTooltip%3B%0A%20%20%20%20%0A%20%20var%20image%20%3D%20aDoc.getAnonymousNodes%28button%29%5B1%5D%3B%0A%20%20%20%20%20%20image.style.backgroundColor%20%3D%20insertButtonBackgroundColor%3B%0A%20%20%20%20%20%20image.style.MozMarginEnd%20%3D%20%220px%22%3B%0A%20%20%20%20%0A%20%20var%20dropmarker%20%3D%20aDoc.getAnonymousNodes%28button%29%5B3%5D%3B%0A%20%20%20%20%20%20dropmarker.hidden%20%3D%20true%3B%20%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20var%20place%20%3D%20null%3B%0A%20%20var%20focusedElement%20%3D%20null%3B%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%0A%0Afunction%20createButton%28aDoc%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22toolbarbutton%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22image%22%2C%20insertButtonImage%29%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A//-------------------------------------------------------------%0A%0A%20%20%20%20%20button.onmouseover%20%3D%20function%28%29%20%7B%20place%20%3D%20aDoc.commandDispatcher.focusedElement%3B%20%7D%0A%20%20%20%20%20%0A//--------------------------------------------------------------%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%20onSelf%20%3D%20false%3B%0A%0Aif%20%28aDoc.location.href.split%28%22custombuttons-button%22%29%5B1%5D%20%3D%3D%20cbIdNumber%29%20%7B%0A%0A%20%20%20%20onSelf%20%3D%20true%3B%0A%20%20%20%20button.setAttribute%28%22image%22%2C%20insertButtonImageOnSelf%29%3B%0A%0A%20%20%20%20%20%20if%20%28items%5B0%5D%20%21%3D%20%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%20%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20items.unshift%28%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%2C%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%22%u0423%u043A%u0430%u0437%u0430%u0442%u0435%u043B%u044C%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%22%20+%20%22%5Cn%22%20+%20cursorIndex%20+%20cursorIndex%29%3B%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%0A%20%20var%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20%20%20%20%20menuitem.insertText%20%3D%20insertText%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20if%20%28insertText%20%3D%3D%20theSeparator.substring%281%2C%20theSeparator.length%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20insertText%20%3D%3D%20cursorIndex%20+%20cursorIndex%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%20menuitem.style.fontWeight%20%3D%20%20%20%22bold%22%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%20menuitem.style.color%20%20%20%20%20%20%3D%20%20%20%22rgb%28183%2C53%2C47%29%22%3B%20%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%20%20%20menuitem.inserter%20%3D%20function%20inserter%28aText%29%20%7B%0A%0A%20%20%20%20%20var%20firstPart%20%3D%20aText.split%28cursorIndex%29%5B0%5D%3B%0A%20%20%20%20%20var%20cursorPosition%20%3D%20place.selectionStart%20+%20firstPart.length%3B%0A%20%20%20%20%20var%20cursorIndexPresent%20%3D%20aText.length%20%21%3D%20firstPart.length%3B%0A%20%20%20%20%20aText%20%3D%20aText.replace%28cursorIndex%2C%20%22%22%29%3B%0A%20%20%20%20%20if%20%28aText%20%3D%3D%20cursorIndex%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursorPosition%20%3D%20place.selectionStart%20+%20cursorIndex.length%3B%0A%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%0A//http%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D450336%23p450336%0A%0A%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20var%20controller%20%3D%20aDoc.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%0A%20if%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20aText%29%3B%0A%20%20%20%20%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%7D%0A//------------------------------------------------------------------------------------%20%20%20%20%0A%0Aif%20%28allowSelection%20%26%26%20%21cursorIndexPresent%29%0A%20%20place.setSelectionRange%28place.selectionStart-aText.length%2C%20place.selectionStart%29%3B//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20%u0432%u0441%u0442%u0430%u0432%u043B%u0435%u043D%u043D%u043E%u0433%u043E%0A%0Aelse%20place.selectionStart%20%3D%20place.selectionEnd%20%3D%20cursorPosition%3B%0A%0A%20%20%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%20%20var%20%20commandString%20%3D%20%22inserter%28event.target.insertText%29%22%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%0A%20%7D%0A%20%0A%20if%20%28onSelf%29%20items%20%3D%20self.getAttribute%28%22Help%22%29.split%28theSeparator%29%3B%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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%0A%0Afunction%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%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%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%0A%20%20%20%20if%20%28doc.location.href.substring%280%2C%2041%29%20%21%3D%20editor%29%20return%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setButtonDesign%28doc%29%20%20%20%20%20%20%7D%7D%7D%3B%0A%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Avar%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.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20alsoForTab%28evt%29%20%7B%20var%20doc%20%3D%20evt.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%20if%20%28doc.location.href.substring%280%2C%2041%29%20%21%3D%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%22chrome%3A//custombuttons/content/editor.xul%22%29%20return%3B%0A%0A%20%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%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%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%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%20setButtonDesign%28doc%29%3B%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Athis.run%20%3D%20function%28%29%20%7B%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.addEventListener%28%22DOMContentLoaded%22%2C%20alsoForTab%2C%20false%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.removeEventListener%28%22DOMContentLoaded%22%2C%20alsoForTab%2C%20false%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%0A//------------------------------------------------------------------------------%0A%0A%20%20var%20tabContainer%20%3D%20gBrowser.mTabContainer%3B%0A%20%20var%20tabs%20%3D%20tabContainer.childNodes%3B%0A%0A%20%20for%20%28var%20t%20%3D%200%3B%20t%20%3C%20tabContainer.itemCount%3B%20t++%29%20%7B%20%0A%0A%20%20var%20pageDoc%20%3D%20tabs%5Bt%5D.linkedBrowser.contentDocument%3B%0A%20%20%0A%20%20if%20%28pageDoc.location.href.substring%280%2C%2041%29%20%21%3D%20editor%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28pageDoc%29%29%20%20continue%3B%20%0A%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%20var%20tbs%20%3D%20pageDoc.getElementsByTagName%28%22tabs%22%29%3B%20%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%20tbs%5B0%5D.appendChild%28createButton%28pageDoc%29%29%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%20setButtonDesign%28pageDoc%29%3B%20%7D%0A%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20pageDoc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20pageDoc.getElementById%28insertButtonId%29%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%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentNode.removeChild%28b%29%3B%20%7D%7D%7D%0A%20%20%7D%0A%0A//------------------------------------------------------------------------------%0A%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%0A%20%20%20%20%20%20%20if%20%28doc.location.href.substring%280%2C%2041%29%20%21%3D%20editor%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%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%20var%20tbs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%20%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%20tbs%5B0%5D.appendChild%28createButton%28doc%29%29%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%20setButtonDesign%28doc%29%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%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%29%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%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentNode.removeChild%28b%29%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%20%20%20%20%20%20%20%20%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20this.checked%20%3D%20false%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0AaddDestructor%28function%28%29%20%7B%0A%20%20%20var%20on%20%3D%20%21self.off%3B%0A%20%20%20%20if%28on%29%20self.off%20%3D%20true%3B%0A%20%20%20%20self.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20self.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%7D%29%3B%0A%0A%0A%0A%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20this.checked%20%3D%20false%3B%20%7D%0A%0Aif%20%28%21this.off%29%20%7B%20this.image%20%3D%20this.imageOn%3B%20if%20%28this.allowChecked%29%20this.checked%20%3D%20true%3B%20%7D%0A%0Athis.run%28%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%22%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%22%22%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%20+%20%22%20%22%20+%20%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%20+%20%22%5Cn%22%20+%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%26%26%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%7C%7C%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aif%20%28%20%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A.length%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Areturn%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aarguments.callee%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A.toString%28%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%28%28%29%3D%3E%20%7B%20%7D%29%28%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%28function%20%28%29%20%7B%20%7D%29%28%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Atry%20%7B%20%7D%20catch%28e%29%20%7B%20%20%7D%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AsetTimeout%28%28%29%3D%3E%20%7B%20%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%20%7D%2C%20500%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A.getAttribute%28%27%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%27%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Adocument.getElementById%28%27%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%27%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Adocument.getAnonymousElementByAttribute%28tab%2C%20%22class%22%2C%20%22tab-icon-image%22%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aalert%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aalert%28%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aalert%28%221%22%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0ALOG%28%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0ALOG%28%221%22%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Afor%20%28var%20key%20in%20o%29%20%7B%20LOG%28%20key%20+%27%3A%27+%20o%5Bkey%5D%20%29%20%7D%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%5B%27%27%2C%27%27%5D.indexOf%28str%29%20%21%3D%3D%20-1%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0ALOG%28content.location.href%20+%20%22%20%22%20+%20e.target.localName%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0ACu.reportError%28%27%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%27%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AServices.console.logStringMessage%28%27CBtab%20%3D%20%27%20+%20e.target.linkedBrowser.currentURI.spec%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AgBrowser.selectedTab%20%3D%20gBrowser.addTab%28%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AgBrowser.loadOneTab%28URL%2C%20null%2C%20null%2C%20null%2C%20background%2C%20false%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Acustombuttons.alertSlide%28%22alert%22%2C%20%22%22%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Athis.tooltipText%3D%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AgBrowser.currentURI%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Acontent.document.domain%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Acontent.window.location%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AgBrowser.mCurrentTab%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AgClipboard.read%28%29%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AgClipboard.write%28%20content.location.href%20%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A.localName%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AappendChild%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A.parentNode%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aself._handlers.length%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Ae.target%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Ae.originalTarget%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AaddDestructor%28%28%29%3D%3E%20menu.remove%28%29%20%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aelement.appendChild%28%u0437%u0434%u0435%u0441%u044C%3D%3E%3C%3D%u0437%u0434%u0435%u0441%u044C%29%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Ae.originalTarget.nodeName%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Adocument.popupNode%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Ae.target.triggerNode%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Ae.originalTarget.triggerNode%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№14310-02-2016 23:28:36

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Запуск VBScript( Firefox17+ ) от 29.01.2017.
простая кнопка для запуска VBScriptов в Windows, которые следует помещать в вкладку Справка. Данная кнопка запускает VBScript который сворачивает все открытие окна.

ЛКМ => Запуск VBScript.

Код кнопки и вкладки Код:
Код кнопки:

Выделить код

Код:

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%3E%u0417%u0430%u043F%u0443%u0441%u043A%20VBScript%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALZSURBVBgZBcFLiFVlAADg7zzuPLzjzDjOMINMitIie5gF+UAkIZSgRQuXLZIWrY021dYIggJdJURElJsoqlWRYA9GshGFCNQeOjoTk6bjeOd5zzn/f07flzRNA459ObcHJ3cM9+1fq2prVa2qa+uh7mAZ9xCxiAV8iu9zgDqEvU9ODOx//dkxALBa1kNrZT202I2TZcVyEd28t+Lb66uHcTwHqEMYH+xJwNyDqJUk8oQsp7eV2tqbytJUK+OpyX5bhtojH07Pv58CxKoabOeEmuUy0al4UNDp0umysM5/KxG8eWbW/u1tj4+2xnKAWFUjG3tSqwWr3ShNEzmyjDQjk8gSaiRxyYUbiy7PduZzgFiW40P9mc56sFY00rSRpaQxkaVkGlmGJnNnqXDq7N9LOJYDhLLcNj7Y0uk2AjRkMZE2iGQaeZOqG2IrCmXY/s1rB+6nALEstk0M9VotG0lKliRSpEjw+YUjPjq3RxkKoSjEsoiQwvMnvusXQ09vK1VGUg1qjVrUqDWKUJoc3emVj3dbWeuEUJZLkEMoyrF2u0+aUEPD19OHNXVQ1kEZgy2bHrZzYq/l7qr766/m3VC0ub+SQyyLDXm7R56SpYlYJ0JdOvzYy2JTi3VUa8x35jwxecBKue7S7E+dXW+nI/nB42dGcWLPI1vdXmrcvBO1++iGUmxqtxb+UtVBqCtVrCwVy3Y/dNBKtZb+OjO1kMeyfA4vXLo6Y3E9t1I0qtjo6goxGB/cKtRRbGr/dmaNDEy4PHfe+etTd8vgSB6r6ukXD+3qf+ulfQDg6OnCJ7+8p6xL3VDaMfqofTuOuHhryrk/fl4tokPz7zRX8lhVM7fvdXx29qrhgX7Dg32G271OHv3dxg09entSvXnqmXcHJGm/6Ru/ad89dmrm9AdXIK9D+GLq4rXJqYvXtmEzNmMTNmGor6fV6utr6YxWfvjzR0P/vDGTh7GvAP4H2uh1wse2x/0AAAAASUVORK5CYII%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%u0417%u0430%u043F%u0443%u0441%u043A%20VBScript%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20................%0Avar%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0Afile.append%28%22runVBScript.vbs%22%29%3B%0AcustombuttonsUtils.writeFile%28%20file.path%2C%20convertFromUnicode%28%22UTF-16%22%2C%20self.getAttribute%28%27Help%27%29%29%20%29%3B%0Afile.launch%28%29%3B%0A%0A//%20%u041A%u043E%u043D%u0432%u0435%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u044E%u043D%u0438%u043A%u043E%u0434%20................%0Afunction%20convertFromUnicode%28charset%2C%20str%29%20%7B%0A%20%20%20var%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20converter.charset%20%3D%20charset%3B%0A%20%20%20str%20%3D%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20return%20str%20+%20converter.Finish%28%29%3B%0A%7D%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%5BOption%20Explicit%0ADim%20objShell%0ASet%20objShell%20%3D%20CreateObject%28%22Shell.Application%22%29%0AobjShell.ToggleDesktop%0ASet%20objShell%20%3D%20Nothing%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Вкладка Код:

Выделить код

Код:

// Запуск VBScript из вкладки Справка ................
var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
file.append("runVBScript.vbs");
custombuttonsUtils.writeFile( file.path, convertFromUnicode("UTF-16", self.getAttribute('Help')) );
file.launch();

// Конвертировать текст в юникод ................
function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};

Отсутствует

 

№14421-02-2016 12:07:30

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Автоматически добавлять выделенный текст в SearchBar( Firefox24+ ) от 21.02.2016.
кнопка автоматически добавляет выделенный текст на странице в поле ввода панели поиска.

ЛКМ => Включить кнопку.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

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%3E%20%u0410%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20SearchBar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAYAAACt4nWrAAADQklEQVQ4ja3V/08adxzHcf+t/bT90HTLtmT7F5Ym/XUsy4Uu7mdKYiawudaq04DWjVoFxWgRrU5txDL5clKkIDVBVpE77j5wgPW45LkfTMgOf1gb98Pjt/fr+fntbkAIgdfrxel04nA4bszpdOL1ehFCMHDf7cbn81GtVrEs68aq1So+n4/7bjcDkiRRq9UwTZNms3ljpmlSq9WQJIkBh8OBZVnXjlRVJZFIMB9eZPr3IMG5efb399E07T8fsCwLh8NxFe92uzQajZ5qtcrCUoRYKkv8TGfzbZtQ7oyxyBaBQIBarWa779ftdu1xIQRCCBRFYSES4ZWic37Z5fTCJK29Y+20RfC14NHzQ6ZnHqPrem/T71pc13V0XSeZTLL0UqbSucToWpxemCS1dzwrGwRfCyZljeHAArlcrrfpZ4ubpkm9XqderxNaWiZaUik0LjluXpLSLtg+axE5aTKT05jMaDxYP2RlZaW36Weapj2uqiqqqvI4OEe4JNh+a7B71mLz7xbLJ02CeZ3fMnUmUnUebBUIh0K9Tb9rcUVRUBSFpwth/AenPC00WDhuMF8QzB5pTMp1Rv5S8Wc0RqJpVldXe5t+tnin06FUKlEqldjc3MQ7/5zxpMJEWmU8pTB6oOCNnzPyUuFRQmVoNEAymext+nU6HXu8WCxSLBbJ5/OMjY8zHM0wvHeOJ36OZ++chwmFX+M1PE/WGRwcZGpqio1YrLf7t2vxQqHQc3h4yMPRMYb8YX56JjO8cczPUZmhsRnu3XOSTqdZW5wl+90tTrbXbNtCoWCPt9tt8vm8zdHREbFYjIDfz9TkJIGAn52dHaanp4nMz/Bm6Q7WzJdc/vAJb/6M2rbtdtsez+Vy7yUWi7H/7ReYE59C/A4Ev8J0fkRpY7l3Y4u3Wi2y2ex7y+9s0HbegqnP4MU3MPc16o+3iS4tks1mabVa9rgsyx8k92KLzvcfw8RtrL27HKw/4Y9gEFmW7XHDMMhkMh/s1e4Wdefn7AZ/IRQKMTs7SyaTwTCMq7gkSZTLZVRVJZVK3ZiqqpTL5avvudvtxuPxUKlUMAzjxiqVCh6PB7fbzYAQApfLhSRJ/8s/VJIkXC4XQgj+AW9cSYbbZ7hEAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%3B%0A%0Avar%20s%20%3D%20%27CB.pasteIntoSearchBar%27%3B%0Acbu.isPref%28s%2C%20true%29%3B%0A%0AtoggleImage%28%29%3B%0Afunction%20toggleImage%28%29%20self.checked%20%3D%20cbu.getPrefs%28s%29%3B%20%20%20%20%20%20%20%20%20%20%20%0AgPrefService.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28s%2C%20toggleImage%29%20%29%3B%0A%0Afunction%20pasteIntoSearchBar%28e%29%20%7B%0A%20%20%20if%20%28%20e.button%20%7C%7C%20%21cbu.getPrefs%28s%29%20%29%20return%3B%0A%20%20%20%20%20%20%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%20%20%20%20%0A%20%20%20if%20%28%20%21sel.isCollapsed%20%29%20BrowserSearch.searchBar._textbox.value%20%3D%20sel%3B%0A%7D%3B%0AaddEventListener%28%27mouseup%27%2C%20pasteIntoSearchBar%2C%20false%2C%20gBrowser%29%3B%0A%0A%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

Инициализация:

Выделить код

Код:

this._handleClick =()=> cbu.setPrefs(s, !cbu.getPrefs(s));

var s = 'CB.pasteIntoSearchBar';
cbu.isPref(s, true);

toggleImage();
function toggleImage() self.checked = cbu.getPrefs(s);           
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );

function pasteIntoSearchBar(e) {
   if ( e.button || !cbu.getPrefs(s) ) return;
      
   var sel = document.commandDispatcher.focusedWindow.getSelection();    
   if ( !sel.isCollapsed ) BrowserSearch.searchBar._textbox.value = sel;
};
addEventListener('mouseup', pasteIntoSearchBar, false, gBrowser);


Дополнительно можно в инициализацию кнопки положить:
Код:

Выделить код

Код:

var box = BrowserSearch.searchBar._textbox;
box.onmouseleave =()=> box.mo = true;
box.onmouseover =()=> { box.mo = false; setTimeout(()=> !box.mo && box.childNodes[1].children[0].children[0].click(), 800); };
addDestructor(()=> box.onmouseover =()=> null );


тогда при удержании курсора на панели поиска будет автоматически открываться меню с поисковиками. Время удержания курсора на панели поиска => 800 можно менять как вам удобней.

Отсутствует

 

№14521-02-2016 16:21:34

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Запуск программы( Firefox24+ ) от 28.01.2017.
Кнопка запускает указанную программу(приложение), иконка кнопки будет как у запускаемой программы(.exe файла), в сплывающей подсказке у кнопке будет отображаться название запускаемой программы. Если для запуска программы нужны аргументы то их следует указать в строке var arg = [];. Можно быстро изменить запускаемую программу для кнопки или создать много кнопок для запуска разных программ.

ЛКМ => Запуск программы,
СКМ => Установить путь к программе.

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

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%3E%u0417%u0430%u043F%u0443%u0441%u043A%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20e.button%20%3D%3D%200%20%26%26%20runApp%28%29%3B%20%20%20//%20%u041B%u041A%u041C%20%20%20%20%0A%20%20%20e.button%20%3D%3D%201%20%26%26%20setPath%28%29%3B%20%20//%20%u0421%u041A%u041C%20%0A%7D%3B%0A%0Avar%20s%20%3D%20%22CB%22%20+%20_id.slice%2820%29%20+%20%22.pathForApp%22%3B%0A%0AtoggleButtonData%28%29%3B%0Afunction%20toggleButtonData%28%29%20%7B%0A%20%20%20var%20path%20%3D%20getPath%28%29%3B%0A%20%20%20document.getAnonymousNodes%28self%29%5B0%5D.src%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20path%3B%0A%20%20%20self.tooltipText%20%3D%20%22%u041B%3A%20%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%22%20+%20path.split%28%22%5C%5C%22%29.pop%28%29%20+%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5Cn%u0421%3A%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u043A%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%20%5Cn%u041F%3A%20CB%20%u041C%u0435%u043D%u044E%22%3B%0A%7D%3B%20%20%20%20%20%20%20%20%20%0AgPrefService.addObserver%28s%2C%20toggleButtonData%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28s%2C%20toggleButtonData%29%20%29%3B%0A%0Afunction%20runApp%28%29%20%7B%0A%20%20%20var%20arg%20%3D%20%5B%5D%3B%20//%20gClipboard.read%28%29%20%20content.location.href%20%20document.commandDispatcher.focusedWindow.getSelection%28%29%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28%20getPath%28%29%20%29%3B%0A%20%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20process.init%28file%29%3B%0A%20%20%20process.run%28false%2C%20arg%2C%20%28arg.length%29%29%3B%0A%7D%3B%0A%0Afunction%20setPath%28%29%20%7B%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.appendFilters%28%20fp.filterApps%20%29%3B%0A%20%20%20fp.init%28%20window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u043F%u0443%u0442%u044C%20%u043A%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%22%2C%20fp.modeOpen%20%29%3B%0A%20%20%20fp.open%28%20result%20%3D%3E%20result%20%3D%3D%20fp.returnOK%20%26%26%20cbu.setPrefs%28s%2C%20convertFromUnicode%28%22UTF-8%22%2C%20fp.file.path%29%29%20%29%3B%20%0A%7D%3B%0A%0Afunction%20getPath%28%29%20%7B%20%0A%20%20%20try%20%7B%20return%20gPrefService.getComplexValue%28s%2C%20Ci.nsISupportsString%29.data%3B%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20return%20%22%3F%3F%3F%3F%3F%3F%22%3B%20%7D%3B%0A%7D%3B%0A%0Afunction%20convertFromUnicode%28charset%2C%20str%29%20%7B%0A%20%20%20var%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20converter.charset%20%3D%20charset%3B%0A%20%20%20str%20%3D%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20return%20str%20+%20converter.Finish%28%29%3B%0A%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

Инициализация:

Выделить код

Код:

this.onclick =e=> {
   e.button == 0 && runApp();   // ЛКМ    
   e.button == 1 && setPath();  // СКМ 
};

var s = "CB" + _id.slice(20) + ".pathForApp";

toggleButtonData();
function toggleButtonData() {
   var path = getPath();
   document.getAnonymousNodes(self)[0].src = "moz-icon://file://" + path;
   self.tooltipText = "Л: Запустить " + path.split("\\").pop() + 
                      "\nС: Установить путь к программе \nП: CB Меню";
};         
gPrefService.addObserver(s, toggleButtonData, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleButtonData) );

function runApp() {
   var arg = []; // gClipboard.read()  content.location.href  document.commandDispatcher.focusedWindow.getSelection()
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath( getPath() );
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, arg, (arg.length));
};

function setPath() { 
   var fp = window.makeFilePicker();
   fp.appendFilters( fp.filterApps );
   fp.init( window, "Укажите путь к программе", fp.modeOpen );
   fp.open( result => result == fp.returnOK && cbu.setPrefs(s, convertFromUnicode("UTF-8", fp.file.path)) ); 
};

function getPath() { 
   try { return gPrefService.getComplexValue(s, Ci.nsISupportsString).data; } 
   catch(e) { return "??????"; };
};

function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};

Отсутствует

 

№14613-03-2016 20:39:19

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 207
UA: Firefox 45.0

Re: Готовые кнопки для Custom Buttons

NewTabFromUrlBar (Firefox38+), от 07.03.2017.

Автор кнопки: bunda1 >>> №9850.

Кнопочка позволяет всё, вводимое в адресной строке, открывать по умолчанию в новой вкладке: закладки, ссылки, поисковые запросы...
Т.е. можно всячески использовать UrlBar, не уходя с текущей вкладки.
Кнопка заменяет расширение New Tab from Location Bar.

Код кнопки и инициализации:

Код кнопки:

Выделить код

Код:

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%3ENewTabFromUrlBar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAR0lEQVQ4jWNgGDkgdrP/f4oNIGgITBE27L/G/r/3Kiv8hsRu9v8fvM4ZqwHB65z/+622JWwALgUkeQGXHF7NRNsyzA0YmgAA4kdZQXK1CCcAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u0437%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%2C%20%u043E%u0442%2007.03.2017.%20.................%0A%28%28%29%3D%3E%20%7B%0A%20%20%20var%20src%20%3D%20%22gURLBar.handleCommand%20%3D%20%22%20+%20gURLBar.handleCommand.toString%28%29%2C%0A%20%20%20%20%20%20%20res%20%3D%20src.replace%28%27altEnter%29%27%2C%20%27true%29%27%29.replace%28%27if%20%28isMouseEvent%29%27%2C%20%27if%20%28false%29%27%29.replace%28%27altEnter%20%3F%20%22tab%22%20%3A%20%22current%22%27%2C%20%27%22tab%22%27%29%3B%0A%20%20%20eval%28res%29%3B%0A%20%20%20addDestructor%28%28%29%3D%3E%20eval%28src%29%20%29%3B%0A%7D%29%28%29%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

Инициализация:

Выделить код

Код:

// Открывать адрес из адресной строки в новой вкладке, от 07.03.2017. .................
(()=> {
   var src = "gURLBar.handleCommand = " + gURLBar.handleCommand.toString(),
       res = src.replace('altEnter)', 'true)').replace('if (isMouseEvent)', 'if (false)').replace('altEnter ? "tab" : "current"', '"tab"');
   eval(res);
   addDestructor(()=> eval(src) );
})();

Отсутствует

 

№14719-03-2016 15:26:12

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

Переключить панель навигации( Firefox45+ ) от 19.03.2016.
Кнопка переключает панель навигации.

ЛКМ => переключить панель навигации,

Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

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%3E%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043D%u0430%u0432%u0438%u0433%u0430%u0446%u0438%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTMvBTUxKwozLicMKCMcDBoUDQwXEQoMFxEKDBcSCgwXEgsMGBILDBgSCwwcFg8MLykhDDcyKgw3Mi0JNTQyBAAAAAA2My0GNjIsMDgwJVs2LSFqLSQZaiAXDGseFQprHRUJax4WCmseFgtqHxYLaiAWC2okGg9qNSwgajkwI2k4MShYNjMwKzU0MgU6MSYQOzAhdD4sE8Q6Jw7cNCIM3C8eCdwuHQjcLh4I3C8fCNwwHwncMh8I3DMgCNw0IQncOiYN3D4qD9s+LhjAOTIoajcyLQ0+MiIUPzAckT4nC+g3IAb/NiQP/zorGP86Khn/OioZ/zsrGf83JA//Mh0G/zMdBv81Hgb/Nx8G/z0kBv9BLBDkOzIlhTkzKxJAMyMVQDEelD8oDek5Iw3/dGle/7izrv++urb/vrq1/767tv9yZ1v/OSYU/zEbBv80HAf/OB8H/z8kCP9ELRLmPDIliDkzKxJBNCMVQzIelEQrD+k/KBH/kYd///Hw7//5+fn/+fn5//n5+f+Sh3z/Ri8b/zshCP8+Iwj/QSQJ/0grDP9KMhXmPjQmiDo0KxJDNSMVRTQelEkvEOlELRT/lYuC//b19P///////v7+//7+/v+Wi3//TDQd/0ImC/9HKQz/SisN/1ExD/9ONRbmQDUmiDs0KxJENSMVSDUelE4yEelMMhb/mY6E//b19P///////v7+//7+/v+ajID/Uzkg/0wtD/9RMBH/VDIS/1k2Ef9TNxfmQjYniDw1LBJGNiMVSjcflFU2EulXOBn/oJOG//b29P///////v7+//7+/v+ekIP/Wz4l/1UyE/9aNhX/XjkV/2E6Ev9YOhfmRDcniD02LBJJOSMVTzoflGE9FOlkPRT/bk4v/3phSP91YEr/d2VT/5SIfP+UhHb/fGRN/2lHJv9mPhf/a0AW/2xAE/9fPhfmRjgniD42LBJKOSMVUjsflGlBFOlxQxT/bkIa/2lCHf9fPh7/aVA3/7asov/i3tr/vrCj/4NjRf9uQxr/ckMW/3REFP9kQBfmSDkniD83LRJMOiMVVT0flHFFFOl9SRX/ekcX/3NDFv9pPhf/clEz/8Cypf/v6+j/yr2w/4ppS/9zRhz/eUcX/3tIFP9oQhjmSjooiEA3LRJNOyMVVz4flHdIFOmIThb/iE4Y/4JLGP96Rxj/fVMs/66Vfv/Lu6z/spuG/4toSP+CWDH/hlMl/4JMFf9sRBjmSzsoiEA4LRJOOyIVWT8elH1LFOmTVBb/llYa/5FTGf+MUBn/hk4a/4RQIP9+TiH/g1gx/66Te//h1sz/vp6A/41VHP9wRhjmSzsoiEA4LRJKOSIUVTwekXhHE+iPURP/lVUW/5BUF/+NUhf/ilEY/4dQGP+ATBf/g1Qk/6OCYf/ItaD/sIpl/4hRGP9rQxbkSTknhT83LRJDNyYQSjgjdGE/GMRxRRbbdEcW3G9DE9xuQhTcbUIU3GxDFdtoQBTcZkAX3W5NKN15XDvdd1Ms3GtDF9tZPRvAQTcqajo1Lw06NS0GPDUsMEQ3KFtJOCVqQzIeajYkEGozIg5qMiIOajMjD2oxIQ9rLR4NayweDmwvIhFsPC0da0M0I2lBNihYODQwKzY0MgUAAAAAODUvBTw1LQo9NSoMMiofDCMaDwwhGA0MIBgNDCAYDQweFgwMGxQKDBoTCgwbFQwMKyQbDDgwJww6NC0JNjQyBAAAAACAAEBBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQYAAQEE%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20setToolbarVisibility%28bar%2C%20bar.collapsed%29%3B%0A%20%20%20cbu.setPrefs%28%27CB.navBar.hidden%27%2C%20bar.collapsed%29%3B%0A%7D%3B%0Avar%20bar%20%3D%20document.getElementById%28%22nav-bar%22%29%3B%0Abar.collapsed%20%3D%20cbu.getPrefs%28%27CB.navBar.hidden%27%29%3B%0A%0A%0A%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

Инициализация:

Выделить код

Код:

this._handleClick =()=> {
   setToolbarVisibility(bar, bar.collapsed);
   cbu.setPrefs('CB.navBar.hidden', bar.collapsed);
};
var bar = document.getElementById("nav-bar");
bar.collapsed = cbu.getPrefs('CB.navBar.hidden');

Отсутствует

 

№14822-04-2016 06:21:18

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

Re: Готовые кнопки для Custom Buttons

Быстрое переключение параметров about:config (Проверялось на Firefox 24, 45, 48 и SeaMonkey 2.38 (спасибо negodnik)), от 07.03.2017.

Позволяет быстро переключать параметры about:config через меню кнопки из заданного набора (для строковых(string) и целых(integer) параметров значение выбирается в подменю).
скриншот

С отображением текущих значений параметров.
Параметры, имеющие значения установленные пользователем, выделяются жирным текстом.
Для строковых и целых - устанавливается отображаемое название значения. При этом, текущее значение/заданные значения - выводятся во всплывающих подсказках у названия параметра и пунктов его подменю.
(Названия значений, отсутствующих в заданных, выводятся как "Default" - если параметр имеет значение по умолчанию или не существует и "Other" - для отличных от дефолтных, но существующих. Полные значения, в этом случае, также выводятся во всплывающих подсказках.)

Прим.: В строковых параметрах необходимо экранировать обратный слеш ("\"), т.е, вместо одного \ - записывать два \\.

Возможности:
В кнопку легко добавить новые параметры! В комментариях в коде имеется подробное описание.
Задать предпочитаемое пользователем значение параметра и, при отличии от текущего, пункт меню и иконка самой кнопки будут выделены красным цветом. Также имеется возможность установить таким пунктам предупреждающую иконку (см. стиль под спойлером с кнопкой). скриншот
Задать, для отдельных параметров, появление диалогового окна с подтверждением о перезапуске браузера (рестарт требуется для применения изменений некоторых параметров).
Задать, опционально, accesskey для каждого пункта меню/подменю/пунктов подменю (клавиши быстрой навигации).

ЛКМ / Enter по пункту меню с логическим(boolean) параметром - переключает его значение с true на false и наоборот.
Для строковых(string) и целых(integer) параметров - значения переключаются кликом любой кнопкой мыши (клавишей ввода) по пунктам в его подменю.
ПКМ / Спецклавиша вызова контекстного меню / Shift+Enter по пунктам меню/названию подменю - сбрасывает значение параметра в дефолтное значение.
Alt + M - вызов меню кнопки (без зависимости от текущей раскладки клавиатуры).

Изменения (24.07.2016):

24.07.2016
Исправлено: Проблема с обратным слешем в строковых параметрах. Параметр вида C:\Downloads\TEST1 необходимо прописывать как C:\\Downloads\\TEST1 (т.е., два слеша вместо одного).
Добавлено: Возможность задать accesskey - клавиши для быстрой навигации по меню.

05.05.2016
Исправлено: неработоспособность меню integer(целых) параметров (спасибо negodnik за нахождение проблемы).

02.05.2016
Исправлено: Вызов меню по сочетанию клавиш (спасибо Dumby за замечания).

01.05.2016
Добавлено: Сброс параметров меню с субменю по Shift + Enter (спасибо Dumby)
+ Вызов меню кнопки по сочетанию Alt + M (без зависимости от раскладки клавиатуры)
+ Индикация несоответствия пользовательскому предпочтению сменой иконки кнопки

28.04.2016
Добавлено: Поддержка работы с клавиатуры. (спасибо Dumby за помощь)

25.04.2016
Добавлено: Названия параметров, имеющих значения установленные пользователем, выделяются жирным стилем текста.
Изменено: Параметры со значениями не совпадающими с заданными пользовательскими предпочтениями - выделяются теперь только цветом.
+ Небольшое изменение: стили для текста пунктов меню устанавливаются с флагом important чтобы не перекрывались другими.
+ Мелкие исправления в коде.

24.04.2016
Исправлены ошибки при отсутствии параметра в about:config (спасибо bunda1 за нахождение ошибки).
+ Исправлена работа на SeaMonkey (спасибо Dumby и bunda1 за указание на ошибку и решение) и неточности в выводимых названиях для параметров (спасибо за указание на ошибку Dumby).
Добавлена поддержка Unicode для строковых параметров (спасибо bunda1 за помощь и Dumby за указание на проблему).

23.04.2016
Исправлены некоторые ошибки указанные Dumby: размер иконки кнопки при нахождении не на панели навигации и с листенерами.
+ Удалена/заменена излишняя часть кода (спасибо bunda1).
Добавлена возможность задать предпочитаемое пользователем значение параметра и при отличии от текущего, пункт будет выделен красным цветом. Также имеется возможность установить таким пунктам предупреждающую иконку (см. стиль под спойлером с кнопкой). (За идею спасибо negodnik)
+ мелкие правки стиля

22.04.2016
Добавлена возможность задать, для отдельных параметров, появление диалогового окна с подтверждением о перезапуске браузера (рестарт требуется для применения измений некоторых параметров).
Исправлена незначительная ошибка засоряющая консоль (спасибо negodnik за найденную причину ошибки).


Код кнопки, инициализации, иконка и стиль:


Код кнопки:

Выделить код

Код:

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%3EQuick%20toggle%20for%20about%3Aconfig%20preferences%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB6klEQVQ4jZWTv2tUQRDHv8ntd28GLLQQfwS5VkuDSgRF/wlRiIiCQQQhhZ1VII1/wDUWkkLTBAsbC0FJYZGQ3NuZRcHYW6UQEQzoeXkW791xXh5CptodZr8z85kd4BBWRJwDgB5wyoCjh3mLbfK8C/ddW11XJlduNgYaeTFpvJWA0+P+BBx3Cf2sLEy5m4WrS8A0AGANaBUSrgKAKzdcY5k0PF4HJGm47NK6nSUMXOIXAEgSrrnG0oU/AGDKNb6qHe9c+Ms1lqbxqws/uoTfWVp3ksRll/DTJM6bcMWEn1KbDysBCW+zsnSNpWssTbg3PNf3uw7MuHDgym8uoW8aX496SxKXs7J0iTsFObcGRBfey8rShP1EXthSnDHhShJ0vM0H1uYiAKBSHWZqLYyDc+H7sSpeNlMX9l1jWWebEAgjgSxcbRRYB46YhCcVxH9bqDP3nbyUBB0XPk+Cjgnvj1qoqohvJqDtTUBdcGAmSzgIEQBM2R0fY/U41GPkwNpcTBKfmnDPNN4w4TOX+NnbfAQAWAKmXcMVAMgaNqrM1UfqkbMmrXkT/nGJO1XF4Xod8/0Ak4KcKzTe3AROjPs/AMdM2M8atk25a8IXAKYawTZZj5jNEvZN2TVldg3Ny/RfkYizALAFnByu819tzvCRWXKqTwAAAABJRU5ErkJggg%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//%20%u0411%u044B%u0441%u0442%u0440%u043E%u0435%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432%20about%3Aconfig%20%u043E%u0442%2024.07.2016%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.openPopup%28this%2C%20%22after_start%22%29%3B%0A%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%0AmenuPopup.id%20%3D%20%27quick-aboutconfig-menupopup%27%3B%0A%0A//%20%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043F%u0440%u0438%20%u043D%u0435%u0441%u043E%u043E%u0442%u0432%u0435%u0442%u0441%u0442%u0432%u0438%u0435%20%u043B%u044E%u0431%u043E%u0433%u043E%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430%20%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u0442%u0435%u043B%u044C%u0441%u043A%u043E%u043C%u0443%20%u043F%u0440%u0435%u0434%u043F%u043E%u0447%u0442%u0435%u043D%u0438%u044E%20%28%u0441%u043C.%20%u043D%u0438%u0436%u0435%29.%0A//%20%u0418%u043A%u043E%u043D%u043A%u0430%20%u043C%u0435%u043D%u044F%u0435%u0442%u0441%u044F%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u0438%u0438%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432%20%u0447%u0435%u0440%u0435%u0437%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u043B%u0438%u0431%u043E%20%u043F%u043E%u0441%u043B%u0435%20%u0435%u0433%u043E%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u044F.%0Avar%20s%20%3D%20%27CB.hasNotUserChoice%27%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20var%20val%20%3D%20custombuttons.getPrefs%28s%29%3B%0A%20%20self.image%20%3D%20val%0A%20%20%20%20%3F%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB6klEQVQ4jZWTv2tUQRDHv8ntd28GLLQQfwS5VkuDSgRF/wlRiIiCQQQhhZ1VII1/wDUWkkLTBAsbC0FJYZGQ3NuZRcHYW6UQEQzoeXkW791xXh5CptodZr8z85kd4BBWRJwDgB5wyoCjh3mLbfK8C/ddW11XJlduNgYaeTFpvJWA0+P+BBx3Cf2sLEy5m4WrS8A0AGANaBUSrgKAKzdcY5k0PF4HJGm47NK6nSUMXOIXAEgSrrnG0oU/AGDKNb6qHe9c+Ms1lqbxqws/uoTfWVp3ksRll/DTJM6bcMWEn1KbDysBCW+zsnSNpWssTbg3PNf3uw7MuHDgym8uoW8aX496SxKXs7J0iTsFObcGRBfey8rShP1EXthSnDHhShJ0vM0H1uYiAKBSHWZqLYyDc+H7sSpeNlMX9l1jWWebEAgjgSxcbRRYB46YhCcVxH9bqDP3nbyUBB0XPk+Cjgnvj1qoqohvJqDtTUBdcGAmSzgIEQBM2R0fY/U41GPkwNpcTBKfmnDPNN4w4TOX+NnbfAQAWAKmXcMVAMgaNqrM1UfqkbMmrXkT/nGJO1XF4Xod8/0Ak4KcKzTe3AROjPs/AMdM2M8atk25a8IXAKYawTZZj5jNEvZN2TVldg3Ny/RfkYizALAFnByu819tzvCRWXKqTwAAAABJRU5ErkJggg%3D%3D%27%0A%20%20%20%20%3A%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAACXBIWXMAAABnAAAAZwHVKNQmAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBA3y7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BUMDVQYqg4jIKAX08EGIIUByaVEZhMXIwMDAoM2Qw7CDkY8xi/EskynTYmYR5i4WFpZGVibWNjYetmnsyuybOVw5bnIWcHFyLeV24n7E08KrwXuOr4xfnv+0QIWguuANoS5hO+EvIqtFU8TkxW6Jz5AIlxSXvCE1RzpBRk3mrexWuXp5LwUxhSeKm5SalENU1FR+qp5TW6JerRGsqaPFpvVIe5/ObN0qvSh9KwMZg3+Gj4yOG68xmWxaZZZs7mNhbqlkxWf12/qlzQ3bE3Y77Vc7zHWc6NTqXOVS4JruFuce7hHg6eXl6u3oY+dr7WfpbxFgEWgRZBlsHWIX6hTmFu4dERgZHhUfnR5TEFsZ1xzflzArcVnS5uSDKedT76W9S/+XKZClmG2S454bnZef31owq3Bj0YniByU/ygTLtStcKxOqaqpn1GytvVT3oYG/Ua/Jrzm/ZULrprYr7d87pbvsu5N7OnvX9V3t/zNRZZLP5JIp86aemPZphuxMz1mlsxfOOT/3z3ztBVELOxftXPxqqfQyn+V1KzaufLJaYo3P2sZ129a/2ai0KXLzxC0ntjFut9pRvHPtrhd7lPbG7Zu1/9pB4UOBh/uPnD3Gc9z7RPfJM6d5zvidnXDu0gXRixGX5lx+cFXlWtb19Te+3rK53Xzn1D2h+9EPljx8+9j8SePTM8/FXyS9XPfq9xuPt1PfPf5g+LHh0/kv8l/zv+3/IfAz6deWP2x/I/6t/v8fAATCIM0IpJTRAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAEOSURBVHjabJGtS0MBFMXPJojBMMPwC1nV6FCZoGj/ZVGYiIJDBOEFm3XFP2DFIAu6ZrAYBM0OREEUnN20ICI40OfbsTzYB48b7oF74J4PWUnDjMU4GSv5PEubCo/UuwjMs8FEjLOEPNCkRloWAyxb3GEOGWKRTSLeLFYwXyLFBeaGH8w7z/yyRZlvilR5YV+kuMYY04r3NpNEfBByaYksZUyDAoPsYELmmKJKjj0CS0QYU4rl3WLMeceRCBMItW7CMEd9LxbIcUqOXQJLFld9Iks9Ii0qPTYjAo5pscYJrxzIIs1SV1B5ivzRsFjFfHaiLrDOaIxHCLmnyRmp5LLytKnw1FNWH2XaYoyM9T8AOvnw3YUOg90AAAAASUVORK5CYII%3D%27%3B%0A%7D%3B%0AtoggleImage%28%29%3B%0AServices.prefs.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.prefs.removeObserver%28s%2C%20toggleImage%29%29%3B%0A%0A//%20nodeName%3A%20menuitem%20-%20%u0434%u043B%u044F%20%u043B%u043E%u0433%u0438%u0447%u0435%u0441%u043A%u0438%u0445%28boolean%29%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432%2C%20menu%20-%20%u0434%u043B%u044F%20%u0446%u0435%u043B%u044B%u0445%28integer%29%20%u0438%20%u0441%u0442%u0440%u043E%u043A%u043E%u0432%u044B%u0445%28string%29.%20menuseparator%20-%20%u0434%u043B%u044F%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044F.%0A//%20pref%20-%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%20about%3Aconfig.%0A//%20%u041F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u0438%u043C%u0435%u044E%u0449%u0438%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u044F%20%u043E%u0442%u043B%u0438%u0447%u043D%u044B%u0435%20%u043E%u0442%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u044B%u0445%20-%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u044B%20%u0436%u0438%u0440%u043D%u044B%u043C%20%u0441%u0442%u0438%u043B%u0435%u043C%20%u0442%u0435%u043A%u0441%u0442%u0430.%0A//%20restart%20%28%u0437%u0430%u0434%u0430%u0432%u0430%u0442%u044C%20%u0441%20%u043F%u0443%u0441%u0442%u044B%u043C%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%u043C.%20%u0442.%u0435.%2C%20restart%3A%20%22%22%29%20-%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u044C%20%u043F%u0435%u0440%u0435%u0437%u0430%u043F%u0443%u0441%u043A%u0430%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%0A//%20%28%u0441%20%u043F%u043E%u0434%u0442%u0432%u0435%u0440%u0436%u0434%u0435%u043D%u0438%u0435%u043C%20%u0432%20%u0434%u0438%u0430%u043B%u043E%u0433%u043E%u0432%u043E%u043C%20%u043E%u043A%u043D%u0435%29%20%u043F%u043E%u0441%u043B%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430.%0A//%20key%20-%20%u0437%u0430%u0434%u0430%u0435%u0442%20accesskey%20-%20%u043A%u043B%u0430%u0432%u0438%u0448%u0438%20%u0434%u043B%u044F%20%u0431%u044B%u0441%u0442%u0440%u043E%u0439%20%u043D%u0430%u0432%u0438%u0433%u0430%u0446%u0438%u0438%20%u043F%u043E%20%u043C%u0435%u043D%u044E.%0A//%20userChoice%20-%20%u0437%u0430%u0434%u0430%u0435%u0442%20%u043F%u0440%u0435%u0434%u043F%u043E%u0447%u0438%u0442%u0430%u0435%u043C%u043E%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20%u0438%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20%u0441%20%u043D%u0438%u043C%20%u043D%u0435%20%u0441%u043E%u0432%u043F%u0430%u0434%u0430%u0435%u0442%2C%20%u043F%u0443%u043D%u043A%u0442%20%u043C%u0435%u043D%u044E/%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043C%u0435%u043D%u044E%20%u043F%u043E%u043C%u0435%u0447%u0430%u044E%u0442%u0441%u044F%20%u043A%u0440%u0430%u0441%u043D%u044B%u043C%20%u0446%u0432%u0435%u0442%u043E%u043C.%0A//%20%u0422%u0430%u043A%u0436%u0435%20%u043C%u043E%u0436%u043D%u043E%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0440%u0435%u0434%u0443%u043F%u0440%u0435%u0436%u0434%u0430%u044E%u0449%u0443%u044E%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0434%u043B%u044F%20%u0442%u0430%u043A%u0438%u0445%20%u043F%u0443%u043D%u043A%u0442%u043E%u0432.%20%u0421%u043C.%20%u0441%u0442%u0438%u043B%u044C%20%u0432%20%u043F%u043E%u0441%u0442%u0435%20%u043A%u043A%u043D%u043E%u043F%u043A%u0438.%0A//%20%u0410%20%u0442%u0430%u043A%u0436%u0435%20%u043C%u0435%u043D%u044F%u0435%u0442%u0441%u044F%20%u0438%u043A%u043E%u043D%u043A%u0430%20%u0441%u0430%u043C%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%20%28%u0441%u043C.%20%u0432%u044B%u0448%u0435%29.%0A//%20strValues%20-%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u044F%20%u0438%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u043C%u043E%u0435%20%u0432%20%u043C%u0435%u043D%u044E%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u044F.%20%u0417%u0430%u0434%u0430%u0432%u0430%u0442%u044C%20%u0434%u043B%u044F%20%u0446%u0435%u043B%u044B%u0445%28integer%29%20%u0438%20%u0441%u0442%u0440%u043E%u043A%u043E%u0432%u044B%u0445%28string%29%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432.%0A//%20%u0417%u0430%u0434%u0430%u0435%u0442%u0441%u044F%20%u0432%20%u0432%u0438%u0434%u0435%3A%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%2C%2C%2C%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%2C%2C%2Caccesskey%7C%7C%7C%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u04352%2C%2C%2C%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u04352%2C%2C%2Caccesskey2%7C%7C%7C%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u04353%2C%2C%2C%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u04353%20%u0438%20%u0442.%u0434.%20%28accesskey%20-%20%u0437%u0430%u0434%u0430%u0435%u0442%u0441%u044F%20%u043E%u043F%u0446%u0438%u043E%u043D%u0430%u043B%u044C%u043D%u043E%29%0A//%20%u041F%u043E%u043B%u043D%u043E%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%u0441%u044F%20%u0432%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%u0445%2C%20%u043F%u0440%u0438%20%u043D%u0430%u0432%u0435%u0434%u0435%u043D%u0438%u0438%20%u043D%u0430%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E/%u043F%u0443%u043D%u043A%u0442%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E.%0A//%20%u0414%u043B%u044F%20%u043B%u043E%u0433%u0438%u0447%u0435%u0441%u043A%u0438%u0445%28boolean%29%20-%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%u0441%u044F%20%u0441%u0440%u0430%u0437%u0443%20%u043F%u043E%u0441%u043B%u0435%20%u0441%u0430%u043C%u043E%u0433%u043E%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430%20%28%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20true%20-%20%u0442%u0430%u043A%u0436%u0435%20%u0441%u0442%u0430%u0432%u0438%u0442%20%u0433%u0430%u043B%u043E%u0447%u043A%u0443%20%u0434%u043B%u044F%20%u043D%u0435%u0433%u043E%29.%0A//%20%u041B%u041A%u041C%20%u043F%u043E%20%u043F%u0443%u043D%u043A%u0442%u0430%u043C%20%u043C%u0435%u043D%u044E%20-%20%u043F%u0435%u0440%u043A%u043B%u044E%u0447%u0430%u0435%u0442%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u044F%20%u0434%u043B%u044F%20%u043B%u043E%u0433%u0438%u0447%u0435%u0441%u043A%u0438%u0445%28boolean%29%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432%2C%0A//%20%u043B%u044E%u0431%u0430%u044F%20%u043A%u043D%u043E%u043F%u043A%u0430%20%u043F%u043E%20%u043F%u0443%u043D%u043A%u0442%u0430%u043C%20%u0432%20%u0441%u0443%u0431%u043C%u0435%u043D%u044E%20-%20%u0437%u0430%u0434%u0430%u0435%u0442%20%u044D%u0442%u043E%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20%u0434%u043B%u044F%20%u0446%u0435%u043B%u044B%u0445%28integer%29%20%u0438%20%u0441%u0442%u0440%u043E%u043A%u043E%u0432%u044B%u0445%28string%29%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432.%0A//%20%u041F%u041A%u041C%20%u043F%u043E%20%u043F%u0443%u043D%u043A%u0442%u0430%u043C%20%u043C%u0435%u043D%u044E%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044E%20%u0441%u0443%u0431%u043C%u0435%u043D%u044E%20-%20%u0441%u0431%u0440%u0430%u0441%u044B%u0432%u0430%u0435%u0442%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430%20%u0432%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u043E%u0435.%0A//%20%u041A%u043B%u0430%u0432%u0438%u0430%u0442%u0443%u0440%u0430%3A%20Enter%20-%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430.%0A//%20%u0421%u043F%u0435%u0446%u043A%u043B%u0430%u0432%u0438%u0448%u0430%20%u0432%u044B%u0437%u043E%u0432%u0430%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%20/%20Shift+Enter%20-%20%u0441%u0431%u0440%u043E%u0441%20%u0432%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u043E%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435.%0A//%20Alt%20+%20M%20-%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438.%20%28%u0421%u043E%u0447%u0435%u0442%u0430%u043D%u0438%u0435%20%u043C%u043E%u0436%u043D%u043E%20%u0441%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0430%20%u0441%u0432%u043E%u0435.%20%u0421%u043C.%20%u0432%20%u043A%u043E%u043D%u0446%u0435%20%u043A%u043E%u0434%u0430%29%0A%5B%0A%20%20%7BnodeName%3A%20%22menuitem%22%2C%20pref%3A%20%22dom.workers.enabled%22%2C%20key%3A%20%27w%27%2C%20userChoice%3A%20%22false%22%7D%2C%0A%20%20%7BnodeName%3A%20%22menuitem%22%2C%20pref%3A%20%22dom.indexedDB.enabled%22%2C%20key%3A%20%27d%27%7D%2C%0A%20%20%7BnodeName%3A%20%22menuitem%22%2C%20pref%3A%20%22dom.storage.enabled%22%2C%20key%3A%20%27s%27%7D%2C%0A%20%20%7BnodeName%3A%20%22menuitem%22%2C%20pref%3A%20%22javascript.enabled%22%2C%20key%3A%20%27j%27%2C%20userChoice%3A%20%22true%22%7D%2C%0A%20%20%7BnodeName%3A%20%22menuseparator%22%7D%2C%0A%20%20%7BnodeName%3A%20%22menu%22%2C%20pref%3A%20%22general.useragent.override%22%2C%20key%3A%20%27u%27%2C%20userChoice%3A%20%22Mozilla/5.0%20%28X11%3B%20U%3B%20Linux%20x86_64%3B%20rv%3A48.0%29%20Gecko/20100101%20Firefox/48.0%22%2C%20strValues%3A%20%22Mozilla/5.0%20%28X11%3B%20U%3B%20Linux%20x86_64%3B%20rv%3A48.0%29%20Gecko/20100101%20Firefox/48.0%2C%2C%2CFirefox48/Linux%7C%7C%7CMozilla/5.0%20%28Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A45.0%29%20Gecko/20100101%20Firefox/45.0%2C%2C%2CFirefox45/Windows%7C%7C%7C%2C%2C%2C%u041F%u0443%u0441%u0442%u043E%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%22%7D%2C%0A%20%20%7BnodeName%3A%20%22menu%22%2C%20pref%3A%20%22general.useragent.locale%22%2C%20key%3A%20%27l%27%2C%20restart%3A%20%22%22%2C%20strValues%3A%20%22en-US%2C%2C%2CEnglish%2C%2C%2Ce%7C%7C%7Cru%2C%2C%2C%u0420%u0443%u0441%u0441%u043A%u0438%u0439%2C%2C%2Cr%22%7D%2C%0A%20%20%7BnodeName%3A%20%22menu%22%2C%20pref%3A%20%22browser.display.document_color_use%22%2C%20key%3A%20%27c%27%2C%20userChoice%3A%20%220%22%2C%20strValues%3A%20%220%2C%2C%2CAutomatic%2C%2C%2C0%7C%7C%7C1%2C%2C%2CAlways%2C%2C%2C1%7C%7C%7C2%2C%2C%2CNever%2C%2C%2C2%22%7D%2C%0A%20%20%7BnodeName%3A%20%22menu%22%2C%20pref%3A%20%22CB.TEST%22%2C%20key%3A%20%27t%27%2C%20userChoice%3A%20%22C%3A%5C%5CDownloads%5C%5CTEST1%22%2C%20strValues%3A%20%22C%3A%5C%5CDownloads%5C%5CTEST1%2C%2C%2CTEST1%2C%2C%2C1%7C%7C%7CC%3A%5C%5CDownloads%5C%5CTEST2%2C%2C%2CTEST2%2C%2C%2C2%22%7D%0A%5D.forEach%28function%28m%29%20%7B%0A%20%20var%20mItem%20%3D%20document.createElement%28m.nodeName%29%3B%0A%20%20var%20browserRestart%20%3D%20%27%27%3B%0A%0A%20%20if%20%28%22restart%22%20in%20m%29%20browserRestart%20%3D%20%27%20if%20%28custombuttons.confirmBox%28null%2C%20%22Restart%3F%22%2C%20%22Yes%22%2C%20%22Cancel%22%29%29%20Services.startup.quit%28Services.startup.eAttemptQuit%20%7C%20Services.startup.eRestart%29%3B%27%3B%0A%0A%20%20if%20%28%22pref%22%20in%20m%29%20%7B%0A%20%20%20%20mItem.setAttribute%28%27closemenu%27%2C%20%27none%27%29%3B%0A%20%20%20%20mItem.setAttribute%28%27oncontextmenu%27%2C%20%27event.preventDefault%28%29%3B%20custombuttons.clearPrefs%28%22%27%20+%20m.pref%20+%20%27%22%29%3B%27%20+%20browserRestart%29%3B%0A%20%20%7D%0A%0A%20%20if%20%28%22key%22%20in%20m%29%20mItem.setAttribute%28%27accesskey%27%2C%20m.key%29%3B%0A%0A%20%20if%20%28m.nodeName%20%3D%3D%3D%20%22menuitem%22%29%20%7B%0A%20%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20%20mItem.setAttribute%28%27oncommand%27%2C%20%27custombuttons.setPrefs%28%22%27%20+%20m.pref%20+%20%27%22%2C%20%21custombuttons.getPrefs%28%22%27%20+%20m.pref%20+%20%27%22%29%29%3B%20if%20%28event.shiftKey%20%26%26%20event.keyCode%20%3D%3D%20event.DOM_VK_RETURN%29%20%7Bevent.preventDefault%28%29%3B%20custombuttons.clearPrefs%28%22%27%20+%20m.pref%20+%20%27%22%29%7D%3B%27%20+%20browserRestart%29%3B%0A%20%20%7D%0A%0A%20%20if%20%28m.nodeName%20%3D%3D%3D%20%22menu%22%29%20%7B%0A%20%20%20%20mItem.setAttribute%28%27class%27%2C%20%27menu-iconic%27%29%3B%0A%0A%20%20%20%20var%20subMenu%20%3D%20mItem.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%0A%20%20%20%20for%20%28var%20value%20of%20m.strValues.split%28%27%7C%7C%7C%27%29%29%20%7B%0A%20%20%20%20%20%20var%20submItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20var%20smVal%20%3D%20value.split%28%27%2C%2C%2C%27%29%5B0%5D%3B%0A%20%20%20%20%20%20var%20smValConv%20%3D%20convertFromUnicode%28%22UTF-8%22%2C%20smVal%29%3B%0A%20%20%20%20%20%20var%20smName%20%3D%20value.split%28%27%2C%2C%2C%27%29%5B1%5D%3B%0A%20%20%20%20%20%20var%20key%20%3D%20value.split%28%27%2C%2C%2C%27%29%5B2%5D%3B%0A%0A%20%20%20%20%20%20key%20%26%26%20submItem.setAttribute%28%27accesskey%27%2C%20key%29%3B%0A%20%20%20%20%20%20submItem.setAttribute%28%27type%27%2C%20%27radio%27%29%3B%0A%20%20%20%20%20%20submItem.setAttribute%28%27label%27%2C%20smName%29%3B%0A%20%20%20%20%20%20submItem.setAttribute%28%27tooltiptext%27%2C%20smVal%29%3B%0A%20%20%20%20%20%20submItem.setAttribute%28%27closemenu%27%2C%20%27none%27%29%3B%0A%20%20%20%20%20%20submItem.setAttribute%28%27oncommand%27%2C%20%27try%7Bcustombuttons.setPrefs%28%22%27%20+%20m.pref%20+%20%27%22%2C%20%22%27%20+%20smValConv.replace%28/%5C%5C/g%2C%20%27%5C%5C%5C%5C%27%29%20+%20%27%22%29%7D%20catch%28e%29%20%7BServices.prefs.setIntPref%28%22%27%20+%20m.pref%20+%20%27%22%2C%20%22%27%20+%20smValConv%20+%20%27%22%29%7D%3B%27%20+%20browserRestart%29%3B%0A%0A%20%20%20%20%20%20subMenu.appendChild%28submItem%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20menuPopup.appendChild%28mItem%29%3B%0A%0A%20%20//%20%u041B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%u044B%20%u043E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u044E%u0449%u0438%u0435%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432%0A%20%20//%20%u0438%20%u0443%u0441%u0442%u0430%u043D%u0430%u0432%u043B%u0438%u0432%u0430%u044E%u0449%u0438%u0435%20%u0441%u043E%u043E%u0442%u0432%u0435%u0442%u0441%u0442%u0432%u0443%u044E%u0449%u0438%u0435%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044F%20%u0438%20%u0447%u0435%u043A%u0431%u043E%u043A%u0441%u044B%20%u0434%u043B%u044F%20%u043F%u0443%u043D%u043A%u0442%u043E%u0432%20%u043C%u0435%u043D%u044E%20%u043F%u0440%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0438%20%u043C%u0435%u043D%u044E%20%u0438%20%u043A%u043B%u0438%u043A%u0430%u0445%0A%20%20for%20%28var%20type%20of%20%5B%27command%27%2C%20%27popupshowing%27%2C%20%27contextmenu%27%5D%29%20%7B%0A%20%20%20%20addEventListener%28type%2C%20%28e%29%3D%3E%20%7B%0A%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%22pref%22%20in%20m%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20val%2C%20def%3B%0A%0A%20%20%20%20%20%20%20%20%20%20def%20%3D%20Services.prefs.prefHasUserValue%28m.pref%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20val%20%3D%20Services.prefs.getComplexValue%28m.pref%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28Services.prefs.getPrefType%28m.pref%29%20%3D%3D%2064%29%20val%20%3D%20custombuttons.getPrefs%28m.pref%29.toString%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20val%20%3D%20custombuttons.getPrefs%28m.pref%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20def%20%3F%20mItem.style.setProperty%28%27font-weight%27%2C%20%27bold%27%2C%20%27important%27%29%20%3A%20mItem.style.removeProperty%28%27font-weight%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28m.nodeName%20%3D%3D%3D%20%27menuitem%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20val%29%3B%0A%20%20%20%20%20%20%20%20%20%20mItem.label%20%3D%20m.pref%20+%20%27%3B%27%20+%20val%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28%22userChoice%22%20in%20m%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7Bvar%20usrChc%20%3D%20%28val.toString%28%29%20%3D%3D%3D%20m.userChoice%29%7D%20catch%28e%29%20%7BusrChc%20%3D%20false%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%27user-choice%27%2C%20usrChc%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20usrChc%20%3F%20mItem.style.removeProperty%28%27color%27%29%20%3A%20mItem.style.setProperty%28%27color%27%2C%20%27orangered%27%2C%20%27important%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28subMenu%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20for%20%28var%20smitem%20of%20subMenu.getElementsByTagName%28%27menuitem%27%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20smval%20%3D%20smitem.getAttribute%28%27tooltiptext%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20smitem.setAttribute%28%27checked%27%2C%20%28val%20%3D%3D%3D%20smval%29%20%3F%20true%20%3A%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28m.nodeName%20%3D%3D%3D%20%22menu%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20vname%3B%0A%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20vname%20%3D%20subMenu.getElementsByAttribute%28%27checked%27%2C%20%27true%27%29%5B0%5D.getAttribute%28%27label%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.prefHasUserValue%28m.pref%29%29%20vname%20%3D%20%27Default%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20vname%20%3D%20%27Other%27%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%27label%27%2C%20m.pref%20+%20%27%20-%20%27%20+%20vname%29%3B%0A%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%27tooltiptext%27%2C%20val%20%7C%7C%20%27This%20preferences%20has%20null%20value%20or%20does%20not%20exist.%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28%22userChoice%22%20in%20m%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20smUsrChc%20%3D%20%28val%20%3D%3D%3D%20m.userChoice.toString%28%29%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%27user-choice%27%2C%20smUsrChc%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20smUsrChc%20%3F%20mItem.style.removeProperty%28%27color%27%29%20%3A%20mItem.style.setProperty%28%27color%27%2C%20%27orangered%27%2C%20%27important%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28%22userChoice%22%20in%20m%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20hasNotUserChoice%20%3D%20menuPopup.getElementsByAttribute%28%27user-choice%27%2C%20%27false%27%29%5B0%5D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20custombuttons.setPrefs%28s%2C%20hasNotUserChoice%20%3F%20true%20%3A%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%2C%200%29%0A%20%20%20%20%7D%2C%20false%2C%20menuPopup%29%0A%20%20%7D%0A%7D%29%3B%0A%0A//%20%u041B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u043F%u043E%u0437%u0432%u043E%u043B%u044F%u044E%u0449%u0438%u0439%20%u0441%u0431%u0440%u043E%u0441%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u043E%u0432%20%u0441%20%u0441%u0443%u0431%u043C%u0435%u043D%u044E%20%u043F%u043E%20Shift%20+%20Enter%0A//%20%u0417%u0430%20%u043A%u043E%u0434%20%u0441%u043F%u0430%u0441%u0438%u0431%u043E%20Dumby%0AaddEventListener%28%22popupshown%22%2C%20%7B%0A%20%20handleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20this%5Be.type%5D%28e%29%3B%0A%20%20%7D%2C%0A%20%20popupshown%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.target%20%21%3D%20menuPopup%29%20return%3B%0A%20%20%20%20menuPopup.addEventListener%28%22popuphidden%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20window.addEventListener%28%22keydown%22%2C%20this%2C%20true%29%3B%0A%20%20%7D%2C%0A%20%20popuphidden%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.target%20%21%3D%20menuPopup%29%20return%3B%0A%20%20%20%20menuPopup.removeEventListener%28%22popuphidden%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20window.removeEventListener%28%22keydown%22%2C%20this%2C%20true%29%3B%0A%20%20%7D%2C%0A%20%20popupshowing%3A%20function%28e%29%20%7B%0A%20%20%20%20e.target.parentNode.removeEventListener%28%22popupshowing%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%7D%2C%0A%20%20get%20old%28%29%20%7B%0A%20%20%20%20delete%20this.old%3B%0A%20%20%20%20this.e%20%3D%20new%20MouseEvent%28%22contextmenu%22%2C%20%7B%7D%29%3B%0A%20%20%20%20return%20this.old%20%3D%20parseInt%28Services.appinfo.platformVersion%29%20%3C%2025%3B%0A%20%20%7D%2C%0A%20%20get%20prop%28%29%20%7B%0A%20%20%20%20delete%20this.prop%3B%0A%20%20%20%20if%20%28%22key%22%20in%20KeyboardEvent.prototype%29%20this.prop%20%3D%20%22key%22%2C%20this.val%20%3D%20%22Enter%22%3B%0A%20%20%20%20else%20this.prop%20%3D%20%22keyCode%22%2C%20this.val%20%3D%20KeyboardEvent.DOM_VK_RETURN%3B%0A%20%20%20%20return%20this.prop%3B%0A%20%20%7D%2C%0A%20%20keydown%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28%21e.shiftKey%20%7C%7C%20e.ctrlKey%20%7C%7C%20e.altKey%20%7C%7C%20e%5Bthis.prop%5D%20%21%3D%20this.val%29%20return%3B%0A%20%20%20%20var%20target%20%3D%20menuPopup.querySelector%28%22menu%5B_moz-menuactive%5D%3Anot%28%5Bopen%5D%29%22%29%3B%0A%20%20%20%20if%20%28%21target%29%20return%3B%0A%0A%20%20%20%20this.old%20%3F%20target.addEventListener%28%22popupshowing%22%2C%20this%2C%20false%29%20%3A%20e.stopPropagation%28%29%3B%0A%20%20%20%20target.dispatchEvent%28this.e%29%3B%0A%20%20%20%20menuPopup.dispatchEvent%28this.e%29%3B%0A%20%20%7D%0A%7D%2C%20false%2C%20menuPopup%29%3B%0A%0A//%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u043E%20%u0441%u043E%u0447%u0435%u0442%u0430%u043D%u0438%u044E%20%u043A%u043B%u0430%u0432%u0438%u0448%20Alt%20+%20M%20%28%u043D%u0435%20%u0437%u0430%u0432%u0438%u0441%u0438%u0442%20%u043E%u0442%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0440%u0430%u0441%u043A%u043B%u0430%u0434%u043A%u0438%20%u043A%u043B%u0430%u0432%u0438%u0430%u0442%u0443%u0440%u044B%29%0A//%20%u041F%u043E%u0441%u043C%u043E%u0442%u0440%u0435%u0442%u044C%20%u043A%u043E%u0434%u044B%20%u043A%u043B%u0430%u0432%u0438%u0448%20%u043C%u043E%u0436%u043D%u043E%20%u0437%u0434%u0435%u0441%u044C%3A%20https%3A//developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode%23Constants_for_keyCode_value%0AaddEventListener%28%27keyup%27%2C%20%28e%29%3D%3E%20%7B%0A%20%20if%20%28e.altKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20e.keyCode%20%3D%3D%2077%29%20%7B%0A%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%7D%0A%7D%2C%20false%2C%20window%29%3B%0A%0A//%20%u041A%u043E%u043D%u0432%u0435%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u044E%u043D%u0438%u043A%u043E%u0434%20.............%0Afunction%20convertFromUnicode%28charset%2C%20str%29%20%7B%0A%20%20%20var%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20converter.charset%20%3D%20charset%3B%0A%20%20%20str%20%3D%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20return%20str%20+%20converter.Finish%28%29%3B%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

Инициализация:

Выделить код

Код:

// Быстрое переключение параметров about:config от 24.07.2016
this._handleClick =()=> menuPopup.openPopup(this, "after_start");

var menuPopup = self.appendChild(document.createElement("menupopup"));

menuPopup.id = 'quick-aboutconfig-menupopup';

// Изменить иконку при несоответствие любого параметра пользовательскому предпочтению (см. ниже).
// Иконка меняется только при изменеии параметров через меню кнопки, либо после его открытия.
var s = 'CB.hasNotUserChoice';
function toggleImage() {
  var val = custombuttons.getPrefs(s);
  self.image = val
    ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB6klEQVQ4jZWTv2tUQRDHv8ntd28GLLQQfwS5VkuDSgRF/wlRiIiCQQQhhZ1VII1/wDUWkkLTBAsbC0FJYZGQ3NuZRcHYW6UQEQzoeXkW791xXh5CptodZr8z85kd4BBWRJwDgB5wyoCjh3mLbfK8C/ddW11XJlduNgYaeTFpvJWA0+P+BBx3Cf2sLEy5m4WrS8A0AGANaBUSrgKAKzdcY5k0PF4HJGm47NK6nSUMXOIXAEgSrrnG0oU/AGDKNb6qHe9c+Ms1lqbxqws/uoTfWVp3ksRll/DTJM6bcMWEn1KbDysBCW+zsnSNpWssTbg3PNf3uw7MuHDgym8uoW8aX496SxKXs7J0iTsFObcGRBfey8rShP1EXthSnDHhShJ0vM0H1uYiAKBSHWZqLYyDc+H7sSpeNlMX9l1jWWebEAgjgSxcbRRYB46YhCcVxH9bqDP3nbyUBB0XPk+Cjgnvj1qoqohvJqDtTUBdcGAmSzgIEQBM2R0fY/U41GPkwNpcTBKfmnDPNN4w4TOX+NnbfAQAWAKmXcMVAMgaNqrM1UfqkbMmrXkT/nGJO1XF4Xod8/0Ak4KcKzTe3AROjPs/AMdM2M8atk25a8IXAKYawTZZj5jNEvZN2TVldg3Ny/RfkYizALAFnByu819tzvCRWXKqTwAAAABJRU5ErkJggg=='
    : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAACXBIWXMAAABnAAAAZwHVKNQmAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBA3y7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BUMDVQYqg4jIKAX08EGIIUByaVEZhMXIwMDAoM2Qw7CDkY8xi/EskynTYmYR5i4WFpZGVibWNjYetmnsyuybOVw5bnIWcHFyLeV24n7E08KrwXuOr4xfnv+0QIWguuANoS5hO+EvIqtFU8TkxW6Jz5AIlxSXvCE1RzpBRk3mrexWuXp5LwUxhSeKm5SalENU1FR+qp5TW6JerRGsqaPFpvVIe5/ObN0qvSh9KwMZg3+Gj4yOG68xmWxaZZZs7mNhbqlkxWf12/qlzQ3bE3Y77Vc7zHWc6NTqXOVS4JruFuce7hHg6eXl6u3oY+dr7WfpbxFgEWgRZBlsHWIX6hTmFu4dERgZHhUfnR5TEFsZ1xzflzArcVnS5uSDKedT76W9S/+XKZClmG2S454bnZef31owq3Bj0YniByU/ygTLtStcKxOqaqpn1GytvVT3oYG/Ua/Jrzm/ZULrprYr7d87pbvsu5N7OnvX9V3t/zNRZZLP5JIp86aemPZphuxMz1mlsxfOOT/3z3ztBVELOxftXPxqqfQyn+V1KzaufLJaYo3P2sZ129a/2ai0KXLzxC0ntjFut9pRvHPtrhd7lPbG7Zu1/9pB4UOBh/uPnD3Gc9z7RPfJM6d5zvidnXDu0gXRixGX5lx+cFXlWtb19Te+3rK53Xzn1D2h+9EPljx8+9j8SePTM8/FXyS9XPfq9xuPt1PfPf5g+LHh0/kv8l/zv+3/IfAz6deWP2x/I/6t/v8fAATCIM0IpJTRAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAEOSURBVHjabJGtS0MBFMXPJojBMMPwC1nV6FCZoGj/ZVGYiIJDBOEFm3XFP2DFIAu6ZrAYBM0OREEUnN20ICI40OfbsTzYB48b7oF74J4PWUnDjMU4GSv5PEubCo/UuwjMs8FEjLOEPNCkRloWAyxb3GEOGWKRTSLeLFYwXyLFBeaGH8w7z/yyRZlvilR5YV+kuMYY04r3NpNEfBByaYksZUyDAoPsYELmmKJKjj0CS0QYU4rl3WLMeceRCBMItW7CMEd9LxbIcUqOXQJLFld9Iks9Ii0qPTYjAo5pscYJrxzIIs1SV1B5ivzRsFjFfHaiLrDOaIxHCLmnyRmp5LLytKnw1FNWH2XaYoyM9T8AOvnw3YUOg90AAAAASUVORK5CYII=';
};
toggleImage();
Services.prefs.addObserver(s, toggleImage, false);
addDestructor(()=> Services.prefs.removeObserver(s, toggleImage));

// nodeName: menuitem - для логических(boolean) параметров, menu - для целых(integer) и строковых(string). menuseparator - для разделителя.
// pref - параметр about:config.
// Параметры имеющие значения отличные от дефолтных - выделены жирным стилем текста.
// restart (задавать с пустым значением. т.е., restart: "") - добавляет возможность перезапуска браузера
// (с подтверждением в диалоговом окне) после изменения параметра.
// key - задает accesskey - клавиши для быстрой навигации по меню.
// userChoice - задает предпочитаемое значение и если текущее значение с ним не совпадает, пункт меню/название меню помечаются красным цветом.
// Также можно установить предупреждающую иконку для таких пунктов. См. стиль в посте ккнопки.
// А также меняется иконка самой кнопки (см. выше).
// strValues - значения и отображаемое в меню название значения. Задавать для целых(integer) и строковых(string) параметров.
// Задается в виде: значение,,,название,,,accesskey|||значение2,,,название2,,,accesskey2|||значение3,,,название3 и т.д. (accesskey - задается опционально)
// Полное значение отображается в подсказках, при наведении на название подменю/пункт подменю.
// Для логических(boolean) - отображается сразу после самого параметра (значение true - также ставит галочку для него).
// ЛКМ по пунктам меню - перключает значения для логических(boolean) параметров,
// любая кнопка по пунктам в субменю - задает это значение для целых(integer) и строковых(string) параметров.
// ПКМ по пунктам меню и названию субменю - сбрасывает значение параметра в дефолтное.
// Клавиатура: Enter - переключение параметра.
// Спецклавиша вызова контекстного меню / Shift+Enter - сброс в дефолтное значение.
// Alt + M - открыть меню кнопки. (Сочетание можно сменить на свое. См. в конце кода)
[
  {nodeName: "menuitem", pref: "dom.workers.enabled", key: 'w', userChoice: "false"},
  {nodeName: "menuitem", pref: "dom.indexedDB.enabled", key: 'd'},
  {nodeName: "menuitem", pref: "dom.storage.enabled", key: 's'},
  {nodeName: "menuitem", pref: "javascript.enabled", key: 'j', userChoice: "true"},
  {nodeName: "menuseparator"},
  {nodeName: "menu", pref: "general.useragent.override", key: 'u', userChoice: "Mozilla/5.0 (X11; U; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0", strValues: "Mozilla/5.0 (X11; U; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0,,,Firefox48/Linux|||Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,,,Firefox45/Windows|||,,,Пустое значение"},
  {nodeName: "menu", pref: "general.useragent.locale", key: 'l', restart: "", strValues: "en-US,,,English,,,e|||ru,,,Русский,,,r"},
  {nodeName: "menu", pref: "browser.display.document_color_use", key: 'c', userChoice: "0", strValues: "0,,,Automatic,,,0|||1,,,Always,,,1|||2,,,Never,,,2"},
  {nodeName: "menu", pref: "CB.TEST", key: 't', userChoice: "C:\\Downloads\\TEST1", strValues: "C:\\Downloads\\TEST1,,,TEST1,,,1|||C:\\Downloads\\TEST2,,,TEST2,,,2"}
].forEach(function(m) {
  var mItem = document.createElement(m.nodeName);
  var browserRestart = '';

  if ("restart" in m) browserRestart = ' if (custombuttons.confirmBox(null, "Restart?", "Yes", "Cancel")) Services.startup.quit(Services.startup.eAttemptQuit | Services.startup.eRestart);';

  if ("pref" in m) {
    mItem.setAttribute('closemenu', 'none');
    mItem.setAttribute('oncontextmenu', 'event.preventDefault(); custombuttons.clearPrefs("' + m.pref + '");' + browserRestart);
  }

  if ("key" in m) mItem.setAttribute('accesskey', m.key);

  if (m.nodeName === "menuitem") {
    mItem.setAttribute('type', 'checkbox');
    mItem.setAttribute('oncommand', 'custombuttons.setPrefs("' + m.pref + '", !custombuttons.getPrefs("' + m.pref + '")); if (event.shiftKey && event.keyCode == event.DOM_VK_RETURN) {event.preventDefault(); custombuttons.clearPrefs("' + m.pref + '")};' + browserRestart);
  }

  if (m.nodeName === "menu") {
    mItem.setAttribute('class', 'menu-iconic');

    var subMenu = mItem.appendChild(document.createElement("menupopup"));

    for (var value of m.strValues.split('|||')) {
      var submItem = document.createElement("menuitem");
      var smVal = value.split(',,,')[0];
      var smValConv = convertFromUnicode("UTF-8", smVal);
      var smName = value.split(',,,')[1];
      var key = value.split(',,,')[2];

      key && submItem.setAttribute('accesskey', key);
      submItem.setAttribute('type', 'radio');
      submItem.setAttribute('label', smName);
      submItem.setAttribute('tooltiptext', smVal);
      submItem.setAttribute('closemenu', 'none');
      submItem.setAttribute('oncommand', 'try{custombuttons.setPrefs("' + m.pref + '", "' + smValConv.replace(/\\/g, '\\\\') + '")} catch(e) {Services.prefs.setIntPref("' + m.pref + '", "' + smValConv + '")};' + browserRestart);

      subMenu.appendChild(submItem);
    }
  }

  menuPopup.appendChild(mItem);

  // Листенеры отслеживающие переключение параметров
  // и устанавливающие соответствующие названия и чекбоксы для пунктов меню при открытии меню и кликах
  for (var type of ['command', 'popupshowing', 'contextmenu']) {
    addEventListener(type, (e)=> {
      setTimeout(()=> {
        if ("pref" in m) {
          var val, def;

          def = Services.prefs.prefHasUserValue(m.pref);

          try {
            val = Services.prefs.getComplexValue(m.pref, Ci.nsISupportsString).data;
          } catch(e) {
            if (Services.prefs.getPrefType(m.pref) == 64) val = custombuttons.getPrefs(m.pref).toString();
            else val = custombuttons.getPrefs(m.pref);
          }

          def ? mItem.style.setProperty('font-weight', 'bold', 'important') : mItem.style.removeProperty('font-weight');
        }

        if (m.nodeName === 'menuitem') {
          mItem.setAttribute('checked', val);
          mItem.label = m.pref + ';' + val;

          if ("userChoice" in m) {
            try {var usrChc = (val.toString() === m.userChoice)} catch(e) {usrChc = false};

            mItem.setAttribute('user-choice', usrChc);
            usrChc ? mItem.style.removeProperty('color') : mItem.style.setProperty('color', 'orangered', 'important');
          }
        }

        if (subMenu) {
          for (var smitem of subMenu.getElementsByTagName('menuitem')) {
            var smval = smitem.getAttribute('tooltiptext');

            smitem.setAttribute('checked', (val === smval) ? true : false);
          }
        }

        if (m.nodeName === "menu") {
          var vname;

          try {
            vname = subMenu.getElementsByAttribute('checked', 'true')[0].getAttribute('label');
          } catch(e) {
            if (!Services.prefs.prefHasUserValue(m.pref)) vname = 'Default';
            else vname = 'Other';
          }

          mItem.setAttribute('label', m.pref + ' - ' + vname);
          mItem.setAttribute('tooltiptext', val || 'This preferences has null value or does not exist.');

          if ("userChoice" in m) {
            var smUsrChc = (val === m.userChoice.toString());

            mItem.setAttribute('user-choice', smUsrChc);
            smUsrChc ? mItem.style.removeProperty('color') : mItem.style.setProperty('color', 'orangered', 'important');
          }
        }

        if ("userChoice" in m) {
          var hasNotUserChoice = menuPopup.getElementsByAttribute('user-choice', 'false')[0];

          custombuttons.setPrefs(s, hasNotUserChoice ? true : false);
        }
      }, 0)
    }, false, menuPopup)
  }
});

// Листенер позволяющий сброс параметров с субменю по Shift + Enter
// За код спасибо Dumby
addEventListener("popupshown", {
  handleEvent: function(e) {
    this[e.type](e);
  },
  popupshown: function(e) {
    if (e.target != menuPopup) return;
    menuPopup.addEventListener("popuphidden", this, false);
    window.addEventListener("keydown", this, true);
  },
  popuphidden: function(e) {
    if (e.target != menuPopup) return;
    menuPopup.removeEventListener("popuphidden", this, false);
    window.removeEventListener("keydown", this, true);
  },
  popupshowing: function(e) {
    e.target.parentNode.removeEventListener("popupshowing", this, false);
    e.preventDefault();
  },
  get old() {
    delete this.old;
    this.e = new MouseEvent("contextmenu", {});
    return this.old = parseInt(Services.appinfo.platformVersion) < 25;
  },
  get prop() {
    delete this.prop;
    if ("key" in KeyboardEvent.prototype) this.prop = "key", this.val = "Enter";
    else this.prop = "keyCode", this.val = KeyboardEvent.DOM_VK_RETURN;
    return this.prop;
  },
  keydown: function(e) {
    if (!e.shiftKey || e.ctrlKey || e.altKey || e[this.prop] != this.val) return;
    var target = menuPopup.querySelector("menu[_moz-menuactive]:not([open])");
    if (!target) return;

    this.old ? target.addEventListener("popupshowing", this, false) : e.stopPropagation();
    target.dispatchEvent(this.e);
    menuPopup.dispatchEvent(this.e);
  }
}, false, menuPopup);

// Открыть меню кнопки по сочетанию клавиш Alt + M (не зависит от текущей раскладки клавиатуры)
// Посмотреть коды клавиш можно здесь: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value
addEventListener('keyup', (e)=> {
  if (e.altKey && !e.shiftKey && !e.ctrlKey && e.keyCode == 77) {
    e.preventDefault();
    e.stopPropagation();
    menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
  }
}, false, window);

// Конвертировать текст в юникод .............
function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};

Иконка (www.flaticon.com):

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAACXBIWXMAAABnAAAAZwHVKNQmAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBA3y7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BUMDVQYqg4jIKAX08EGIIUByaVEZhMXIwMDAoM2Qw7CDkY8xi/EskynTYmYR5i4WFpZGVibWNjYetmnsyuybOVw5bnIWcHFyLeV24n7E08KrwXuOr4xfnv+0QIWguuANoS5hO+EvIqtFU8TkxW6Jz5AIlxSXvCE1RzpBRk3mrexWuXp5LwUxhSeKm5SalENU1FR+qp5TW6JerRGsqaPFpvVIe5/ObN0qvSh9KwMZg3+Gj4yOG68xmWxaZZZs7mNhbqlkxWf12/qlzQ3bE3Y77Vc7zHWc6NTqXOVS4JruFuce7hHg6eXl6u3oY+dr7WfpbxFgEWgRZBlsHWIX6hTmFu4dERgZHhUfnR5TEFsZ1xzflzArcVnS5uSDKedT76W9S/+XKZClmG2S454bnZef31owq3Bj0YniByU/ygTLtStcKxOqaqpn1GytvVT3oYG/Ua/Jrzm/ZULrprYr7d87pbvsu5N7OnvX9V3t/zNRZZLP5JIp86aemPZphuxMz1mlsxfOOT/3z3ztBVELOxftXPxqqfQyn+V1KzaufLJaYo3P2sZ129a/2ai0KXLzxC0ntjFut9pRvHPtrhd7lPbG7Zu1/9pB4UOBh/uPnD3Gc9z7RPfJM6d5zvidnXDu0gXRixGX5lx+cFXlWtb19Te+3rK53Xzn1D2h+9EPljx8+9j8SePTM8/FXyS9XPfq9xuPt1PfPf5g+LHh0/kv8l/zv+3/IfAz6deWP2x/I/6t/v8fAATCIM0IpJTRAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAEOSURBVHjabJGtS0MBFMXPJojBMMPwC1nV6FCZoGj/ZVGYiIJDBOEFm3XFP2DFIAu6ZrAYBM0OREEUnN20ICI40OfbsTzYB48b7oF74J4PWUnDjMU4GSv5PEubCo/UuwjMs8FEjLOEPNCkRloWAyxb3GEOGWKRTSLeLFYwXyLFBeaGH8w7z/yyRZlvilR5YV+kuMYY04r3NpNEfBByaYksZUyDAoPsYELmmKJKjj0CS0QYU4rl3WLMeceRCBMItW7CMEd9LxbIcUqOXQJLFld9Iks9Ii0qPTYjAo5pscYJrxzIIs1SV1B5ivzRsFjFfHaiLrDOaIxHCLmnyRmp5LLytKnw1FNWH2XaYoyM9T8AOvnw3YUOg90AAAAASUVORK5CYII=

Стиль для Stylish или userChrome.css, устанавливающий предупреждающую иконку параметрам, чьи значения отличаются от предпочитаемых:

Выделить код

Код:

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
@namespace svg url(http://www.w3.org/2000/svg);

@-moz-document url("chrome://browser/content/browser.xul") {
  #quick-aboutconfig-menupopup > menuitem[user-choice='false'] > .menu-iconic-text {
    background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABPklEQVQ4jY1TPUtDQRBcUiiWgYAQFPEVNq8RI9YhYGOf1jRaSYqXC3dzs72/wNpGGytBLKwFq1jZ21iKgqQMfjXP8LzchSxcc8zMztzuiUSqKIoVkoWqPqnqI8kjEanFsDPlvT8g+ayqP9VDcgSglSQ653KStyExEPlW1UsA2ZRojGmo6rmqfoUE733Pe9+LCE1IngGoi6rupToCqAOoz3G0LyIiJEcxgLW2aa1tJsgf3W536U/gMOEgA5AlBC6m79Dv95dJvoYg51zunMsTEXb/TYHkacRBC0Ar0v1mZoyDwWCd5Gcg0AHQiQjsRHeB5FUAfif5FpCvk8tUuhhXZr1qjGmQnJR3Y2PMRlKgdHFSidAG0K4s1vFcclk1VX2I5L5bhCwiIt77rSD7i7V2bWGBMsp2+ZXvh8PhZgr3C7/OboxlgwFtAAAAAElFTkSuQmCC') 0 center/auto no-repeat !important;
    -moz-padding-start: 1.65em !important;
  }
  #quick-aboutconfig-menupopup > menu[user-choice='false'] > .menu-iconic-left {
    list-style-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABPklEQVQ4jY1TPUtDQRBcUiiWgYAQFPEVNq8RI9YhYGOf1jRaSYqXC3dzs72/wNpGGytBLKwFq1jZ21iKgqQMfjXP8LzchSxcc8zMztzuiUSqKIoVkoWqPqnqI8kjEanFsDPlvT8g+ayqP9VDcgSglSQ653KStyExEPlW1UsA2ZRojGmo6rmqfoUE733Pe9+LCE1IngGoi6rupToCqAOoz3G0LyIiJEcxgLW2aa1tJsgf3W536U/gMOEgA5AlBC6m79Dv95dJvoYg51zunMsTEXb/TYHkacRBC0Ar0v1mZoyDwWCd5Gcg0AHQiQjsRHeB5FUAfif5FpCvk8tUuhhXZr1qjGmQnJR3Y2PMRlKgdHFSidAG0K4s1vFcclk1VX2I5L5bhCwiIt77rSD7i7V2bWGBMsp2+ZXvh8PhZgr3C7/OboxlgwFtAAAAAElFTkSuQmCC') !important;
    -moz-image-region: auto!important;
  }
}


Код мой, с активным подглядыванием в кнопки (и помощью) bunda1, Dumby и okkamas_knife, которым большое от меня спасибо.

Отредактировано turbot (24-07-2016 19:21:24)

Отсутствует

 

№14924-04-2016 12:48:02

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Готовые кнопки для Custom Buttons

GrabScroll( Firefox24+ ) от 24.04.2016.
Кнопка дает возможность перетаскивать(прокручивать) страницу в вертикальном или горизонтальном направлении зажатой кнопкой мыши. В настройках кнопки можно установить кнопку мыши для перетаскивания, скорость и направление перетаскивания, отключить перетаскивание на ссылках и изображениях. Также в настройках можно включить автопрокрутку и тогда если будете быстро перетаскивать страницу то при отжатой кнопке мыши она временно будет прокручиваться сама.

ЛКМ => Включить / выключить перетаскивание страницы.
ПКМ => Открыть меню с настройками кнопки.
Двойной ПКМ => Открыть стандартное меню кнопки.

Скриншот меню с настройками кнопки
678b43928f176c7f5c4a281fa7dc7113.png

Код кнопки:
Код кнопки:

Выделить код

Код:

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%3EGrabScroll%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAawBrAGsept3cAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAeElEQVR42pVSWw7AIAwC4209T8/LPmq6xk1T+Wwh0AfHGPjAzAD8tvqXZGaSAJD0Vlb2YC8kRxRD01CGR+hhSlKSpMUkRyBZdfBs0yHGDZOFlME82Y70snOkMzV21TxJUTPXmjUlQQVxu5bvcOdw0Gxfo+Jz8UuOB3pnSTiV10R3AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20GrabScroll.toggle%28%29%3B%0A%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%0A%7D%3B%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20/%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%u043C%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%5Cn%u0414%u041F%3A%20%u0421%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20...............%u0418%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u0442%u044C%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0443%u044E%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0443%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%27%2C%20func%3A%20%27GrabScroll.button%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u043D%u0430%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0438%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%27%2C%20func%3A%20%27GrabScroll.moverate%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0432%u0440%u0435%u043C%u044F%20%u043E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u043F%u0440%u0438%20%u0431%u0435%u0437%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%27%2C%20func%3A%20%27GrabScroll.threshold%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0418%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u0442%u044C%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0443%u044E%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0443%20%u043F%u0440%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%27%2C%20pref%3A%20%27grabScroll.enableinertia%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0440%u0438%20%u043A%u043E%u0442%u043E%u0440%u043E%u0439%20%u043F%u043E%u044F%u0432%u043B%u044F%u0435%u0442%u0441%u044F%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0430%u044F%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%27%2C%20func%3A%20%27GrabScroll.inertiaThreshold%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0434%u043B%u0438%u043D%u0443%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u043E%u0439%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%27%2C%20func%3A%20%27GrabScroll.inertiarate%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0430%u0445%27%2C%20pref%3A%20%27grabScroll.clickable%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%u0445%27%2C%20pref%3A%20%27grabScroll.notimage%27%20%7D%2C%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20if%20%28%22separator%22%20in%20m%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20if%20%28%22pref%22%20in%20m%29%20%7B%20%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28m.pref%29%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28m.pref%2C%20%21cbu.getPrefs%28m.pref%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20else%20mItem.onclick%20%3D%28%29%3D%3E%20eval%28m.func%29%3B%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0Avar%20GrabScroll%20%3D%20%7B%0A%20%20TOLERANCE%20%20%20%20%20%20%20%20%20%3A3%2C%0A%20%20TOLERANCE_WHEN_NO_H_SCROLL%20%3A%205%2C%0A%20%20CANCEL_WHEN_SELECTION%3A%20%20%20%20%20%20%20true%2C%0A%20%20CURSOR%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22-moz-grab%22%2C%20//%20none%0A%20%20%0A%20%20MOUSEBUTTON%3A%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.button%22%29%20%7C%7C%200%2C%0A%20%20MOVERATE%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.moverate%22%29%20%7C%7C%20-1%2C%0A%20%20TIMER%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.timer%22%29%20%7C%7C%20500%2C%0A%20%20INERTIATHRESHOLD%3A%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.inertiathreshold%22%29%20%7C%7C%2080%2C%0A%20%20INERTIARATE%3A%20%20%20%20%20%20%20%20%20%20%20cbu.getPrefs%28%22grabScroll.inertiarate%22%29%20%7C%7C%2050%2C%0A%20%20IGNOREURL%3A%20%20%20%20%20%20%20%20%20%20%20%20%20self.getAttribute%28%27Help%27%29.split%28%27%5Cn%27%29.filter%28%28url%29%3D%3E%20/%5CS/.test%28url%29%29.map%28%28url%29%3D%3E%20url.trim%28%29%29%2C%20%20%20%20%20%20%20%0A%0A%20%20mStatus%3A%200%2C%20%0A%20%20mLastX%3A%200%2C%0A%20%20mLastY%3A%200%2C%0A%20%20mCursor%3A%20null%2C%0A%20%20mCursorElement%3A%20null%2C%0A%20%20_target%3A%20null%2C%0A%20%20_target2%3A%20null%2C%0A%20%20_isImage%3Afalse%2C%0A%20%20_timer%3A0%2C%0A%20%20_ctimer%3A0%2C%0A%20%20_mtimer%3A%20false%2C%0A%20%20cScroll%3Afalse%2C%0A%20%20cSpeedX%3A0%2C%0A%20%20cSpeedY%3A0%2C%0A%20%20_doc%3Anull%2C%0A%20%20_MOVERATEpZoom%3A1%2C%0A%20%20_window%3A%20null%2C%0A%20%20%20%20%20%20%0A%20%20initGrabScroll%3A%20function%28%29%20%7B%0A%20%20%20%20var%20curentBrowserVersion%20%3D%20Services.appinfo.platformVersion%3B%20//%2731.*%27%0A%20%20%20%20var%20compareResult%20%3D%20Services.vc.compare%28curentBrowserVersion%2C%20%2746.*%27%29%3B%0A%20%20%20%20this.Bug1209100%20%3D%20%28compareResult%20%3C%200%29%20%3F%2010%20%3A%201%3B%0A%20%20%20%20%0A%20%20%20%20if%20%28%20GrabScroll.activeBrowser%28%29.mPanelContainer%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20this._window%20%3D%20GrabScroll.activeBrowser%28%29.mPanelContainer%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20else%20this._window%20%3D%20document.getElementById%28%27content%27%29%3B%0A%0A%20%20%20%20for%28%20var%20aURL%20in%20this.IGNOREURL%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20if%20%28%20this.IGNOREURL%5BaURL%5D%20%3D%3D%3D%20%27%27%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20this.IGNOREURL%5BaURL%5D%20%3D%20this.convert2RegExp%28this.IGNOREURL%5BaURL%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20this._window.setCapture%28%29%3B%0A%20%20%20%20addEventListener%28%22mousedown%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%22click%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%22mouseup%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%27pagehide%27%2C%20this%2C%20false%2C%20gBrowser%29%3B%0A%20%20%20%20%0A%20%20%20%20this.setIcon%28%29%3B%0A%20%20%7D%2C%0A%0A%20%20activeBrowser%3A%20function%28%29%20%7B%0A%20%20%20%20return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%20gBrowser%3B%0A%20%20%7D%2C%0A%0A%20%20handleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20e%20%3D%20new%20XPCNativeWrapper%28e%29%3B%0A%20%20%20%20switch%28e.type%29%20%7B%0A%20%20%20%20%20%20case%20%22mousedown%22%3A%0A%20%20%20%20%20%20%20%20if%20%28%20this.cScroll%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20this.cSpeedY%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28%20cbu.getPrefs%28%22grabScroll.enable%22%29%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.grabStart%28e%29%3B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22mousemove%22%3A%0A%20%20%20%20%20%20%20%20this.mousemove%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%22click%22%3A%0A%20%20%20%20%20%20%20%20this.click%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%22mouseup%22%3A%0A%20%20%20%20%20%20%20%20this.mouseup%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%27pagehide%27%3A%0A%20%20%20%20%20%20%20%20this._doc%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this.mCursorElement%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._target%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._isImage%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this.NS%20%3D%20this.EW%20%3D%20this.NSEW%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20grabStart%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28this.mStatus%20%3D%3D%203%29%0A%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%0A%20%20%20%20if%20%28this.MOUSEBUTTON%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28Math.abs%28this.mLastX%20-%20e.screenX%29%20%3C%205%20%26%26%0A%20%20%20%20%20%20%20%20%20%20Math.abs%28this.mLastY%20-%20e.screenY%29%20%3C%205%20%29%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20doc%20%3D%20e.originalTarget.ownerDocument%3B%0A%20%20%20%20if%20%28%21doc%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20if%20%28doc.contentType%20%3D%3D%20%27application/vnd.mozilla.xul+xml%27%29%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20this._doc%20%3D%20doc%3B%0A%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28this.CANCEL_WHEN_SELECTION%20%26%26%20this.MOUSEBUTTON%20%3D%3D%200%20%26%26%20doc.defaultView.getSelection%28%29%20%21%3D%20%22%22%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20this._target%20%3D%20e.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28/%5E%28html%7Cbody%29%24/.test%28this._target.localName.toLowerCase%28%29%29%20%7C%7C%20this._target.clientHeight%20%3E%2030000%29%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20else%20if%20%28/div/.test%28this._target.localName.toLowerCase%28%29%29%20%26%26%20this._target.clientHeight%20%3E%201000%29%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20this._target%3B%0A%0A%20%20%20%20%20%20for%20%28aURL%20in%20this.IGNOREURL%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.IGNOREURL%5BaURL%5D%20%3D%3D%3D%20%27%27%29continue%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28doc.documentURI.match%28this.IGNOREURL%5BaURL%5D%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20LOG%28this.IGNOREURL%5BaURL%5D+%27%5Cn%27+ex%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this.isParentEditableNode%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isParentDraggableNode%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isIgnore%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isVideoControl%28e.target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isParentClickableNode%28this._target%29%29%7B%0A%20%20%20%20%20%20%20%20if%20%28cbu.getPrefs%28%22grabScroll.clickable%22%29%29%0A%09return%3B%0A%20%20%20%20%20%20%20%20if%20%28%21%28%27linkDragSelection%27%20in%20window%29%29%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20this._isImage%20%3D%20this.isImage%28e%29%3B%0A%20%20%20%20%20%20if%20%28this._isImage%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28cbu.getPrefs%28%22grabScroll.notimage%22%29%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20var%20target%20%3D%20this._target%3B%0A%20%20%20%20%20%20while%20%28target%29%7B%0A%20%20%20%20%20%20%20%20if%20%28%22getAttribute%22%20in%20target%20%26%26%20target.getAttribute%28%22draggable%22%29%20%3D%3D%20%22true%22%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20style%20%3D%20this._doc.defaultView.getComputedStyle%28target%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22cursor%22%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20else%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22auto%22%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20%20%20%20%20target%20%3D%20target.parentNode%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this.MOUSEBUTTON%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20this._timer%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%20%20%20%20%20%20this.mLastX%20%3D%20e.screenX%3B%0A%20%20%20%20%20%20this.mLastY%20%3D%20e.screenY%3B%0A%20%20%20%20%20%20this.mStatus%20%3D%201%3B%0A%20%20%20%20%20%20this._MOVERATEpZoom%20%3D%20%20this.MOVERATE%20/%20%28ZoomManager.useFullZoom%20%3F%20ZoomManager.zoom%20%3A%201%29%3B%0A%0A%20%20%20%20%20%20%5Bthis.NS%2C%20this.EW%2C%20this.NSEW%5D%20%3D%20this.getScrollView%28e%29%3B%0A%20%20%20%20%20%20this._window.addEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20%20%20this.setCursor%28this._target2%2C%20this.CURSOR%29%3B%0A%20%20%20%20%20%20this.resetCursorWithTimer%28this._target2%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20adjustedTimer%3A%20function%28%29%7B%0A%20%20%20%20var%20magTimer%20%3D%20this.TIMER%3B%0A%20%20%20%20return%20magTimer%3B%0A%20%20%7D%2C%0A%0A%20%20grabFinish%3A%20%20function%28%29%20%7B%0A%20%20%20%20this.resetCursorTimer%28%29%3B%0A%20%20%20%20this.resetCursor%28%29%3B%0A%0A%20%20%20%20this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%20%20%20%20if%20%28selCon%29%0A%20%20%20%20%20%20selCon.setDisplaySelection%28selCon.SELECTION_ON%29%3B%0A%20%20%7D%2C%0A%0A%20%20mousemove%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28this.mStatus%20%3D%3D%202%20%7C%7C%20this.mStatus%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20var%20x%20%3D%20e.screenX%3B%0A%20%20%20%20%20%20var%20y%20%3D%20e.screenY%3B%0A%20%20%20%20%20%20var%20doc%20%3D%20e.originalTarget.ownerDocument%3B%0A%0A%20%20%20%20%20%20if%20%28this.mStatus%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21this._isImage%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%28new%20Date%28%29.getTime%28%29%20-%20this._timer%29%20%3E%20this.adjustedTimer%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28Math.abs%28x-this.mLastX%29%20%3C%20this.TOLERANCE_WHEN_NO_H_SCROLL%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20movingh%20%3D%20Math.abs%28x-this.mLastX%29%20%3E%20Math.abs%28y-this.mLastY%29%20*%2050%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21this._isImage%20%26%26%20this.MOUSEBUTTON%20%3D%3D%200%20%20%26%26%20this.isText%28e%29%20%20%26%26%20movingh%20%26%26%20%21this.EW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%28Math.abs%28x%20-%20this.mLastX%29%20+%20Math.abs%28y%20-%20this.mLastY%29%20%3C%20this.TOLERANCE%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28this.MOUSEBUTTON%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28selCon%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selCon.getSelection%28selCon.SELECTION_NORMAL%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selection.removeAllRanges%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selCon.setDisplaySelection%28selCon.SELECTION_OFF%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%22ucjsMouseGestures%22%20in%20window%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ucjsMouseGestures._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20this.mLastX%20%3D%20x%20-%20%28x%20-%20this.mLastX%29%20/%2010%3B%0A%20%20%20%20%20%20%20%20this.mLastY%20%3D%20y%20-%20%28y%20-%20this.mLastY%29%20/%2010%3B%0A%20%20%20%20%20%20%20%20this.mStatus%20%3D%202%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this._ctimer%29%0A%20%20%20%20%20%20%20%20this.resetCursorTimer%28%29%3B%0A%0A%20%20%20%20%20%20if%20%28this._mtimer%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20this.cSpeedX%20%3D%20this._MOVERATEpZoom%20*%20%28x%20-%20this.mLastX%29%3B%0A%20%20%20%20%20%20this.cSpeedY%20%3D%20this._MOVERATEpZoom%20*%20%28y%20-%20this.mLastY%29%3B%0A%0A%20%20%20%20%20%20if%20%28this.scroll%28e%29%29%20%7B%0A%20%20%20%20%20%20%20%20this.mLastX%20%3D%20x%3B%0A%20%20%20%20%20%20%20%20this.mLastY%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20getSelconForDoc%3A%20function%20getSelconForDoc%28doc%29%7B%0A%20%20%20%20if%20%28%21doc%29%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20aFrame%20%3D%20doc.defaultView%3B%0A%20%20%20%20if%20%28%21aFrame%29%0A%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20docShell%20%3D%20this.getDocShellForFrame%28aFrame%29%3B%0A%20%20%20%20var%20selCon%20%3D%20docShell.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsISelectionDisplay%29.QueryInterface%28Ci.nsISelectionController%29%3B%0A%20%20%20%20return%20selCon%3B%0A%20%20%7D%2C%0A%0A%20%20getDocShellForFrame%3A%20function%20getDocShellForFrame%28aFrame%29%7B%0A%20%20%20%20return%20aFrame.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsIWebNavigation%29.QueryInterface%28Ci.nsIDocShell%29%3B%0A%20%20%7D%2C%0A%0A%20%20click%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%202%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28e.button%20%3D%3D%200%20%26%26%20this.mStatus%20%3E%3D%202%20%26%26%20this._doc%20instanceof%20Ci.nsIImageDocument%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%7D%2C%0A%0A%20%20mouseup%3A%20%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3E%201%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%0A%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20if%20%28this.mStatus%20%3D%3D%202%29%0A%20%20%20%20%20%20%20%20this.mStatus%20%3D%203%3B%0A%0A%20%20%20%20%20%20if%20%28cbu.getPrefs%28%22grabScroll.enableinertia%22%29%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%28Math.abs%28this.cSpeedX%29%20%3E%20this.INERTIATHRESHOLD%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20this.INERTIATHRESHOLD%20%29%29%7B%0A%20%20%20%20%20%20%20%20if%20%28this.cScroll%29%0A%20%20%20%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20%20var%20v%20%3D%20this.INERTIARATE%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cSpeedX%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20Math.min%28this.cSpeedX%2C%20v%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20Math.max%28this.cSpeedX%2C%20-v%29%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cSpeedY%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedY%20%3D%20Math.min%28this.cSpeedY%2C%20v%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedY%20%3D%20Math.max%28this.cSpeedY%2C%20-v%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20Start%3B%0A%20%20%20%20%20%20%20%20function%20scrolling%28e%2C%20self%29%7B%0A%20%20%20%20%20%20%20%20%20%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20self.scroll2%28e%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20self.cScroll%20%3D%20setTimeout%28arguments.callee%2C%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%20Math.max%2825%20-%20%28%28new%20Date%28%29%29.getTime%28%29-Start%29%2C%200%29%2C%20e%2C%20self%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this.scroll2%28e%29%3B%0A%20%20%20%20%20%20%20%20scrolling%28e%2C%20this%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%201%29%7B%0A%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20scroll2%3A%20function%28e%29%7B%0A%20%20%20%20var%20ay%20%3D%20Math.abs%28this.cSpeedY%29%3B%0A%20%20%20%20var%20ax%20%3D%20Math.abs%28this.cSpeedX%29%3B%0A%20%20%20%20if%20%28ay%20%3C%2010%20%26%26%20ax%20%20%3C%2010%29%7B%0A%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.scroll%28e%29%3B%0A%20%20%20%20if%20%20%20%20%20%20%28ax%20%3E%3D%20100%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%20100%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%2020%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%2010%29%20%20this.cSpeedX%20%3D%200%3B%0A%0A%20%20%20%20if%20%20%20%20%20%20%28ay%20%3E%3D%20100%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%20100%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%2020%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%2010%29%20this.cSpeedY%20%3D%200%3B%0A%20%20%7D%2C%0A%0A%20%20scroll%3A%20function%28e%29%7B%0A%20%20%20%20var%20minScroll%20%3D%20this.Bug1209100%3B%20//%20prevent%20Bug%201209100%2C%2010px%20%3Cfx46.%201px%20%3E%3Dfx46%0A%20%20%20%20this._mtimer%20%3D%20true%3B%0A%20%20%20%20var%20flg%20%3D%20false%3B%0A%20%20%20%20if%20%28this.NS%20%26%26%20this.NS%20%3D%3D%20this.EW%20%26%26%0A%20%20%20%20%20%20%20%20%28Math.abs%28this.cSpeedX%29%20%3E%20minScroll%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20minScroll%29%29%20%7B%0A%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%20%20%20%20%20%20%20%20this.NS.scrollBy%28this.cSpeedX%2C%20this.cSpeedY%29%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this.NS.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%20%20%20%20%20%20%20%20this.NS.scrollTop%20%20+%3D%20this.cSpeedY%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20if%20%28this.NS%20%26%26%20Math.abs%28this.cSpeedY%29%20%3E%20minScroll%29%20%7B%0A%20%20%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.NS.scrollBy%280%2C%20this.cSpeedY%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28this.EW%20%26%26%20Math.abs%28this.cSpeedX%29%20%3E%20minScroll%29%7B%0A%20%20%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.EW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.EW.scrollBy%28this.cSpeedX%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.EW.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20setTimeout%28function%28self%29%7B%0A%20%20%20%20%20%20self._mtimer%20%3D%20false%3B%0A%20%20%20%20%7D%2C%2020%2C%20this%29%3B%0A%20%20%20%20return%20flg%3B%0A%20%20%7D%2C%0A%0A%20%20isText%3A%20function%28e%29%20%7B%0A%20%20%20%20return%20e.explicitOriginalTarget.nodeType%20%3D%3D%20document.TEXT_NODE%3B%0A%20%20%7D%2C%0A%0A%20%20isImage%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.target%20instanceof%20Ci.nsIImageLoadingContent%29%0A%20%20%20%20%20%20return%20e.target%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isIgnore%3A%20function%28aNode%29%7B%0A%20%20%20%20%20while%20%28aNode%29%7B%0A%20%20%20%20%20%20var%20name%20%3D%20aNode.nodeName.toLowerCase%28%29%3B%0A%20%20%20%20%20%20if%20%28name%20%3D%3D%20%22html%22%29%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20if%20%28/%28scrollbar%7Cselect%7Coption%7Cembed%7Cobject%7Ctree%7Capplet%7Cstatusbar%29/.test%28name%29%29%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20aNode%20%3D%20aNode.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%2C%0A%0A%20%20isParentClickableNode%20%3A%20function%28aNode%29%20%7B%0A%20%20%20%20if%20%28%21aNode%29%20return%20null%3B%0A%20%20%20%20var%20d%20%3D%20aNode.ownerDocument%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20var%20xpathResult%20%3D%20d.evaluate%28%0A%20%20%20%20%20%20%20%20%20%20%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C%0A%20%20%20%20%20%20%20%20%20%20aNode%2C%0A%20%20%20%20%20%20%20%20%20%20this.NSResolver%2C%0A%20%20%20%20%20%20%20%20%20%20XPathResult.FIRST_ORDERED_NODE_TYPE%2C%0A%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20xpathResult.singleNodeValue%3B%0A%20%20%7D%2C%0A%0A%20%20NSResolver%20%3A%20%7B%0A%20%20%20%20lookupNamespaceURI%20%3A%20function%28aPrefix%29%20%7B%0A%20%20%20%20%20%20switch%20%28aPrefix%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27xul%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%27%3B%0A%20%20%20%20%20%20%20%20case%20%27html%27%3A%0A%20%20%20%20%20%20%20%20case%20%27xhtml%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.w3.org/1999/xhtml%27%3B%0A%20%20%20%20%20%20%20%20case%20%27xlink%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.w3.org/1999/xlink%27%3B%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27%27%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20isParentEditableNode%20%3A%20function%28node%29%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20if%20%28node.ownerDocument.designMode%20%3D%3D%20%27on%27%29%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21%28node%20instanceof%20Ci.nsIDOMNSEditableElement%29%29%0A%20%20%20%20%20%20%20%20%20%20throw%200%3B%0A%20%20%20%20%20%20%20%20node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isParentDraggableNode%20%3A%20function%28node%29%7B%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20if%20%28node.getAttribute%28%27draggable%27%29%20%3D%3D%20%27true%27%29%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isVideoControl%3A%20function%28node%29%20%7B%0A%20%20%20%20if%20%28/%5E%28audio%7Cvideo%29%24/i.test%28node.localName%29%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20var%20i%20%3D%200%3B%0A%20%20%20%20%20%20while%20%28i%20%3C%20node.childNodes.length%29%20%7B%0A%20%20%20%20%20%20%20%20var%20child%20%3Dnode.childNodes%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20%28child.hasAttribute%28%27controls%27%29%20%26%26%20child.getAttribute%28%27controls%27%29%20%3D%3D%20%27controls%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20i++%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%2C%0A%0A%20%20setCursor%3A%20function%28element%2C%20cursor%29%20%7B%0A%20%20%20%20if%20%28%21%21element%20%26%26%20element.style%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20this.mCursor%20%3D%20element.style.cursor%3B%0A%20%20%20%20%20%20%20%20this.mCursorElement%20%20%3D%20element%3B%0A%20%20%20%20%20%20%20%20element.style.cursor%20%3D%20cursor%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%0A%20%20resetCursor%3A%20function%28%29%20%7B%0A%20%20%20%20var%20element%20%3D%20this.mCursorElement%3B%0A%20%20%20%20if%20%28%21%21element%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20element.style.cursor%20%3D%20this.mCursor%3B%0A%20%20%20%20%20%20%20%20%20%20this.mCursor%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20this.mCursorElement%20%3D%20null%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20resetCursorWithTimer%3A%20function%28%29%20%7B%0A%20%20%20%20if%20%28this._ctimer%29%0A%20%20%20%20%20%20clearTimeout%28this._ctimer%29%3B%0A%20%20%20%20this._ctimer%20%3D%20setTimeout%28function%28self%29%7B%0A%20%20%20%20%20%20self.resetCursor%28%29%3B%0A%20%20%20%20%7D%2C%20this.adjustedTimer%28%29%2C%20this%29%3B%0A%20%20%7D%2C%0A%0A%20%20resetCursorTimer%3A%20function%28%29%20%7B%0A%20%20%20%20if%20%28this._ctimer%29%20%7B%0A%20%20%20%20%20%20clearTimeout%28this._ctimer%29%3B%0A%20%20%20%20%20%20this._ctimer%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20convert2RegExp%3A%20function%28%20pattern%20%29%20%7B%0A%20%20%20%20var%20s%20%3D%20new%20String%28pattern%29%3B%0A%20%20%20%20var%20res%20%3D%20new%20String%28%22%5E%22%29%3B%0A%0A%20%20%20%20for%20%28var%20k%20%3D%200%20%3B%20k%20%3C%20s.length%20%3B%20k++%29%20%7B%0A%20%20%20%20%20%20switch%28s%5Bk%5D%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27*%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22.*%22%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27.%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%3F%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5E%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%24%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27+%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%7B%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5B%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%7C%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%28%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%29%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5D%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22%5C%5C%22%20+%20s%5Bk%5D%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27%5C%5C%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22%5C%5C%5C%5C%22%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27%20%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20//%20Remove%20spaces%20from%20URLs.%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20default%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20s%5Bk%5D%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20new%20RegExp%28res%20+%20%27%24%27%2C%20%22i%22%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20toggle%3A%20function%28%29%7B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.enable%22%2C%20%21cbu.getPrefs%28%22grabScroll.enable%22%29%29%3B%0A%20%20%20%20this.setIcon%28%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20button%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20%u043A%u043D%u043E%u043F%u043A%u0443%3A%20L-%u043B%u0435%u0432%u0430%u044F%2C%20M-%u0441%u0440%u0435%u0434%u043D%u044F%u044F%2C%20R-%u043F%u0440%u0430%u0432%u0430%u044F%22%2C%20%22LMR%22.substr%28this.MOUSEBUTTON%2C1%29%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20switch%28value.toUpperCase%28%29%29%7B%0A%20%20%20%20%20%20case%20%22M%22%3A%20value%20%3D1%3B%20break%3B%0A%20%20%20%20%20%20case%20%22R%22%3A%20value%20%3D2%3B%20break%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20case%20%22L%22%3A%20value%20%3D0%3B%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.MOUSEBUTTON%20%3D%20value%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.button%22%2C%20value%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20threshold%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%u0432%u0440%u0435%u043C%u044F%20%u0432%20ms%281000%u043C%u0441%20%3D%201%u0441%u0435%u043A%29%22%2Cthis.TIMER%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.TIMER%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20this.TIMER%20%3C%3D0%20%7C%7C%20%21this.TIMER%20%29%20this.TIMER%20%3D%201000%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.timer%22%2C%20this.TIMER%29%3B%0A%20%20%7D%2C%0A%0A%20%20moverate%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%5B+-%5D%u0432%u0435%u043B%u0438%u0447%u0438%u043D%u0443%5Cn%20%u0415%u0441%u043B%u0438%20%5B+%5D%20c%u0442%u0440%u0430%u043D%u0438%u0446%u0430%20%u0431%u0443%u0434%u0435%u0442%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u0442%u0441%u044F%20%u043F%u0440%u043E%u0442%u0438%u0432%u043E%u043F%u043E%u043B%u043E%u0436%u043D%u043E%20%u0434%u0432%u0438%u0436%u0435%u043D%u0438%u044E%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20%20%22%2Cthis.MOVERATE%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.MOVERATE%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.MOVERATE%20%29%20this.MOVERATE%20%3D%20-1%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.moverate%22%2C%20this.MOVERATE%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20inertiaThreshold%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u043F%u0440%u0438%20%u043A%u043E%u0442%u043E%u0440%u043E%u0439%20%u043F%u043E%u044F%u0432%u043B%u044F%u0435%u0442%u0441%u044F%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%22%2Cthis.INERTIATHRESHOLD%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.INERTIATHRESHOLD%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.INERTIATHRESHOLD%20%29%20this.INERTIATHRESHOLD%20%3D%2020%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.inertiathreshold%22%2C%20this.INERTIATHRESHOLD%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20inertiarate%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442e%20%u0434%u043B%u0438%u043D%u0443%20%u0430%u0432%u0442%u043E%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%22%2Cthis.INERTIARATE%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.INERTIARATE%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.INERTIARATE%20%29%20this.INERTIARATE%20%3D%2020%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.inertiarate%22%2C%20this.INERTIARATE%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20setIcon%3A%20function%28%29%7B%0A%20%20%20%20document.getAnonymousNodes%28self%29%5B1%5D.src%20%3D%20%21cbu.getPrefs%28%22grabScroll.enable%22%29%0A%20%20%20%20%3F%20self.image%0A%20%20%20%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4AQXCg4QbH3A+AAAAZpJREFUOMuNk79qVUEQxn+zf06MCFZ2YnURBMHi+hp5ARtJY7PFhTRiY2ETkNuId5vbhLSmCeQtLAQhhTEpLeILaHL27K7FOXvYe+SiHwwzsMw33zfMinMOAO+9ooJzLnnv81ALWyBAaVRAGGoLhNPLNVose7P9mniDTA1hgHByseLkYkVFRMx9eXZ1xNnVEUVVTWCGIKSWkNrxMaSWLnUbRAWFqBA0wIMXTw646X5xfH4IQJc6Mukv3977XNSUZltUdKklDmvpKjVTO7UFC1wDP4DHr5694zb+Zv31LSG1xBz49O3jaGUKA1yvvrwm5shivvzeT4q08RZBEUUTJSLSL//0cs10icQciTnw/rMbpcYcyaQxT7E328c5Jwp4tJgvx4dC8r9QQAJmB88/YJTBKIMWixaNoMa8DQbogBZAi6XPmkbvoJXpoyIpl1kuspxvCzxczJfsmrvs6F2MarCqQYtFRDDKbP0L96prVMDP4/PDYbLFKIOgRmv19KKgWLgZ4v7Lp29o1J2N5n/tQFW/smcWvdFY9jPFH7MJpWpDanM5AAAAAElFTkSuQmCC%22%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20getScrollView%3A%20function%20%28e%29%20%7B%0A%20%20%20%20var%20NS%2CEW%2CNSEW%3B%0A%20%20%20%20NS%20%3D%20EW%20%3D%20NSEW%20%3D%20null%3B%0A%20%20%20%20var%20_scrollingView%20%3D%20null%3B%0A%20%20%20%20var%20overflowx%2C%20overflowy%2C%20ox%2C%20oy%3B%0A%20%20%20%20var%20scw%2C%20sch%2C%20horz%2C%20vert%3B%0A%20%20%20%20var%20doc%2C%20style%3B%0A%20%20%20%20var%20borderTop%3B%0A%20%20%20%20var%20borderBottom%3B%0A%20%20%20%20var%20borderLeft%3B%0A%20%20%20%20var%20borderRight%3B%0A%0A%20%20%20%20if%20%28e.originalTarget.ownerDocument.contentType%20%3D%3D%20%22application/xml%22%29%20%7B%0A%20%20%20%20%20%20_scrollingView%20%3D%20e.originalTarget.ownerDocument.defaultView%3B%0A%0A%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%21%3D%20_scrollingView.scrollMinX%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%20%20NS%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%20%20EW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20EW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20NS%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20for%20%28_scrollingView%20%3D%20e.originalTarget%3B%20_scrollingView%3B%20_scrollingView%20%3D%20_scrollingView.parentNode%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView%20instanceof%20HTMLElement%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.localName.toUpperCase%28%29%20%3D%3D%20%22HTML%22%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.localName.toUpperCase%28%29%20%3D%3D%20%22BODY%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView%20%3D%20_scrollingView.ownerDocument.defaultView%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%21%3D%20_scrollingView.scrollMinX%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.frameElement%20%26%26%20%21NS%20%26%26%20%21EW%20%26%26%20%21NSEW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.getScrollView%28%7BoriginalTarget%20%3A%20_scrollingView.frameElement%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.localName.toLowerCase%28%29%20%3D%3D%20%22select%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.parentNode.focus%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20overflowx%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20overflowy%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20ox%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20oy%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc%20%3D%20_scrollingView.ownerDocument%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overflowx%20%3D%20style.getPropertyValue%28%22overflow-x%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ox%20%3D%20overflowx%20%21%3D%20%22hidden%22%20%26%26%20overflowx%20%21%3D%20%22visible%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overflowy%20%3D%20style.getPropertyValue%28%22overflow-y%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20oy%20%3D%20overflowy%20%21%3D%20%22hidden%22%20%26%26%20overflowy%20%21%3D%20%22visible%22%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20borderTop%20%20%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderBottom%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderLeft%20%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderRight%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28/%5E%28table%7Ctd%7Cth%29%24/i.test%28_scrollingView.localName%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc%20%3D%20_scrollingView.ownerDocument%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderTop%20%20%20%20%3D%20style.getPropertyValue%28%22border-top-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderBottom%20%3D%20style.getPropertyValue%28%22border-bottom-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderLeft%20%20%20%3D%20style.getPropertyValue%28%22border-left-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderRight%20%20%3D%20style.getPropertyValue%28%22border-right-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20scw%20%3D%20_scrollingView.clientWidth%3B%0A%20%20%20%20%20%20%20%20%20%20horz%20%3D%20ox%20%26%26%20scw%20%21%3D%3D%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scw%20+%20borderLeft%20+%20borderRight%20%3C%20_scrollingView.scrollWidth%3B%0A%20%20%20%20%20%20%20%20%20%20sch%20%3D%20_scrollingView.clientHeight%3B%0A%20%20%20%20%20%20%20%20%20%20vert%20%3D%20oy%20%26%26%20sch%20%21%3D%3D%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sch%20+%20borderTop%20+%20borderBottom%20%3C%20_scrollingView.scrollHeight%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28horz%20%26%26%20vert%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28horz%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28vert%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%7D%0A%7D%3B%0AgBrowser.currentURI%20%3D%3D%20%22about%3Acustomizing%22%20%7C%7C%20GrabScroll.initGrabScroll%28%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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%5Bhttp%3A//maps.google.*/*%0Ahttp%3A//maps.yahoo.co.jp/pl*%0Ahttp%3A//map.yahoo.co.jp/pl*%0Ahttp%3A//map.goo.ne.jp/*%0Ahttp%3A//www.mapion.co.jp/c/f*%0Ahttp%3A//books.google.co.jp/books%3Fid%3D*%0Ahttp%3A//books.google.co.jp/books%3Fid%3D*%0Ahttps%3A//realtimeboard.com/%3F*%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Автор кнопки: Alice0775 - userChrome.js/GrabScroll_Fx29.uc.xul at master · alice0775/userChrome.js · GitHub.

Отсутствует

 

№15023-07-2016 16:17:47

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Готовые кнопки для Custom Buttons

Раскукоживатель коротких ссылок(Firefox 24+), от 28.08.2016.
Добавляет пункт контекстного меню ссылок и текстовых ссылок, сокращенных с помощью сервисов сокращения ссылок, позволяющий получить полный адрес без перехода по ним.
ЛКМ по самой кнопке - "раскукожит" ссылку из буфера обмена.

(Прим.: Выполняется фоновый асинхронный xmlhttprequest к сервису коротких ссылок. Без передачи кукисов, реферера и реального юзерагента)

Возможности:
Добавлять свои сервисы сокращения ссылок
Заменять адрес короткой ссылки на странице "раскукоженной"
Показывать всплывающие уведомления с открытием "раскукоженной" ссылки в новой вкладке по клику
Показывать пункт контекстного меню на выделенных текстовых ссылках
Показывать диалоговое окно с результатом для текстовых ссылок
Копировать "раскукоженную" ссылку в буфер обмена
Индикация цветом ссылки ожидания ответа и результата
Возвращать цвет ссылок к исходному, после паузы
Задать цвет для "раскукоженных" ссылок

Все вышеописанные поведения можно задать с помощью опций (см. комментарии в коде)

Изменения (28.08.2016):

28.08.2016
Незначительные оптимизации

26.07.2016
Исправлена и переделана проверка текстовых ссылок


Код кнопки, вкладки инициализации и иконки в svg и png 16х16 (замените svg-шную, если есть проблемы):

Код кнопки:

Выделить код

Код:

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%3E%u0420%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0438%u0432%u0430%u0442%u0435%u043B%u044C%20%u043A%u043E%u0440%u043E%u0442%u043A%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/svg+xml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MjUuNDY2cHgiIGhlaWdodD0iNDI1LjQ2N3B4IiB2aWV3Qm94PSIwIDAgNDI1LjQ2NiA0MjUuNDY3Ij4KPGcgaWQ9Imc3IiBzdHlsZT0iZmlsbDojNzk3YzgwO2ZpbGwtb3BhY2l0eToxIj4KPHBhdGggZD0iTTMxOC4xNSwyMzAuMTk1bDc3LjkzNC03Ny45MzdjMzEuODk0LTMxLjg5MiwzMS44OTQtODMuNzgyLTAuMDA0LTExNS42NzRsLTEyLjY2LTEyLjY2ICAgICBjLTMxLjg5My0zMS44OTYtODMuNzgtMzEuODk2LTExNS42NzQtMC4wMDRsLTc3LjkzNyw3Ny45MzRjLTE3LjU4OCwxNy41ODgtMjUuNDU3LDQxLjI2NC0yMy42NDYsNjQuMzExICAgICBjLTIzLjA0NS0xLjgxMy00Ni43MjIsNi4wNTYtNjQuMzA4LDIzLjY0N0wyMy45MiwyNjcuNzQ4Yy0zMS44OTQsMzEuODg5LTMxLjg5NCw4My43NzksMCwxMTUuNjc0bDEyLjY2NCwxMi42NjIgICAgIGMzMS44OTMsMzEuODkzLDgzLjc4MywzMS44OTMsMTE1LjY3NCwwbDc3LjkzNS03Ny45MzZjMTcuNTkyLTE3LjU5LDI1LjQ1OS00MS4yNjYsMjMuNjQ3LTY0LjMwOSAgICAgQzI3Ni44ODQsMjU1LjY1NCwzMDAuNTYsMjQ3Ljc4MywzMTguMTUsMjMwLjE5NXogTTIwMi42NTMsMjkwLjYwNWwtNzcuOTM2LDc3LjkzOGMtMTYuNzA1LDE2LjcwMy00My44ODksMTYuNzAzLTYwLjU5LDAgICAgIGwtMTIuNjY2LTEyLjY2NmMtMTYuNzA1LTE2LjcwMS0xNi43MDMtNDMuODg1LDAtNjAuNTk0bDc3LjkzNi03Ny45MzJjMTQuMTQtMTQuMTQxLDM1Ljc3OS0xNi4zMDYsNTIuMjI2LTYuNTE2bC0zMi4zMDIsMzIuMzA3ICAgICBjLTcuNjA2LDcuNjA0LTcuNjA2LDE5LjkzOCwwLDI3LjU0MWM3LjYwNSw3LjYwNywxOS45MzcsNy42MDcsMjcuNTQxLDBsMzIuMzA2LTMyLjMwMyAgICAgQzIxOC45NTksMjU0LjgyOCwyMTYuNzk1LDI3Ni40NjksMjAyLjY1MywyOTAuNjA1eiBNMjM4LjM4MiwyMDkuMTY5bDMyLjI5OS0zMi4zMDZjNy42MDgtNy42MDIsNy42MDgtMTkuOTM1LDAtMjcuNTM4ICAgICBjLTcuNjA0LTcuNjEtMTkuOTM2LTcuNjEtMjcuNTQxLTAuMDA0bC0zMi4zMDMsMzIuMzAzYy05Ljc5MS0xNi40NDYtNy42MjctMzguMDg3LDYuNTE0LTUyLjIyNmw3Ny45MzUtNzcuOTM1ICAgICBjMTYuNzA3LTE2LjcwNyw0My44OS0xNi43MDcsNjAuNTk0LDBsMTIuNjY0LDEyLjY2NGMxNi43MDUsMTYuNzA1LDE2LjcwNSw0My44ODYsMCw2MC41OTFsLTc3LjkzNiw3Ny45MzcgICAgIEMyNzYuNDY4LDIxNi43OTcsMjU0LjgyOCwyMTguOTU5LDIzOC4zODIsMjA5LjE2OXoiCmlkPSJwYXRoOSIgc3R5bGU9ImZpbGw6Izc5N2M4MCIgLz4KPHBhdGggZD0iTTM0My40NjYsMjYxLjQ2NWMtNDUuMjg3LDAtODIsMzYuNzEzLTgyLDgyczM2LjcxMyw4Miw4Miw4MmM0NS4yODYsMCw4Mi0zNi43MTMsODItODJTMzg4Ljc1MywyNjEuNDY1LDM0My40NjYsMjYxLjQ2NXogICAgICBNMzcyLjUwNSwzMzMuNTY0bC01Ni4wNDYsNTYuMTA0Yy0wLjIzOSwwLjIzOC0wLjUzNiwwLjQxLTAuODYyLDAuNDk2bC0yMi4zMTUsNS44NWMtMC42NDksMC4xNjgtMS4zNDctMC4wMi0xLjgyMi0wLjQ5NCAgICAgYy0wLjQ3Ny0wLjQ3OS0wLjY2Ni0xLjE3Mi0wLjQ5Ni0xLjgyNGw1LjgyNi0yMi4zMThjMC4wODQtMC4zMjYsMC4yNTYtMC42MjcsMC40OTQtMC44NjNsNTYuMDQ3LTU2LjEwNCAgICAgYzAuNzQyLTAuNzQyLDEuOTQ1LTAuNzQ0LDIuNjg4LTAuMDAybDQuNTQ4LDQuNTQxYzAuNzM5LDAuNzQsMC43NDEsMS45NDMsMCwyLjY4OGwtMzcuNDMzLDM3LjQ3MWw0LjcwOSw0LjcwM2wzNy40MzUtMzcuNDcxICAgICBjMC43MzktMC43NDIsMS45NC0wLjc0MiwyLjY4Mi0wLjAwMmw0LjU1LDQuNTQxQzM3My4yNSwzMzEuNjE3LDM3My4yNSwzMzIuODIyLDM3Mi41MDUsMzMzLjU2NHogTTM5NS40NzIsMzEwLjU3NGwtMTcsMTcuMDE4ICAgICBjLTAuNzM5LDAuNzQ0LTEuOTQyLDAuNzQ0LTIuNjg1LDAuMDAybC0xNi40ODktMTYuNDc1Yy0wLjc0NC0wLjc0LTAuNzQ0LTEuOTQzLTAuMDAyLTIuNjg4bDE3LTE3LjAyICAgICBjMC43NDEtMC43NCwxLjk0NC0wLjc0LDIuNjg4LTAuMDAybDE2LjQ4NywxNi40NzdDMzk2LjIxNiwzMDguNjI5LDM5Ni4yMTYsMzA5LjgzMiwzOTUuNDcyLDMxMC41NzR6IgppZD0icGF0aDExIiBzdHlsZT0iZmlsbDojNzk3YzgwIiAvPjwvZz4KPC9zdmc+%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0420%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0438%u0432%u0430%u0442%u0435%u043B%u044C%20%u043A%u043E%u0440%u043E%u0442%u043A%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%2C%20%u043E%u0442%2028.08.2016%0A%28%28cntxtMenu%2C%20elm%2C%20mItem%29%20%3D%3E%20%7B%0A%20%20mItem.id%20%3D%20%22cb-unshorten-url%22%3B%0A%20%20mItem.setAttribute%28%22label%22%2C%20%22%u0420%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0438%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%22%29%3B%0A%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20mItem.setAttribute%28%22image%22%2C%20self.image%29%3B%0A%20%20elm.parentNode.insertBefore%28mItem%2C%20elm%29%3B%0A%0A%20%20const%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%0A%20%20var%20url%2C%20link%2C%20isUnshortened%2C%0A%20%20%20%20%20%20//%20%u0421%u0435%u0440%u0432%u0438%u0441%u044B%20%u0441%u043E%u043A%u0440%u0430%u0449%u0435%u043D%u0438%u044F%20%u0441%u0441%u044B%u043B%u043E%u043A.%20%u041C%u043E%u0436%u043D%u043E%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20%u0441%u0432%u043E%u0438.%20%u0420%u0430%u0431%u043E%u0442%u0430%u0442%u044C%2C%20%u0432%20%u0442%u0435%u043E%u0440%u0438%u0438%2C%20%u0434%u043E%u043B%u0436%u043D%u043E%20%u0441%20%u043B%u044E%u0431%u044B%u043C%u0438%0A%20%20%20%20%20%20shortenerServices%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%22tinyurl.com%22%2C%0A%20%20%20%20%20%20%20%20%22po.st%22%2C%0A%20%20%20%20%20%20%20%20%22img.ly%22%2C%0A%20%20%20%20%20%20%20%20%22bit.ly%22%2C%0A%20%20%20%20%20%20%20%20%22goo.gl%22%2C%0A%20%20%20%20%20%20%20%20%22youtu.be%22%2C%0A%20%20%20%20%20%20%20%20%22t.co%22%2C%0A%20%20%20%20%20%20%20%20%22db.tt%22%2C%0A%20%20%20%20%20%20%20%20%22u.to%22%2C%0A%20%20%20%20%20%20%20%20%22shortlinks.de%22%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20//%20%u041E%u043F%u0446%u0438%u0438%3A%0A%20%20%20%20%20%20options%20%3D%20%7B%0A%20%20%20%20%20%20%20%20replaceShortenedLinks%3A%20true%2C%20//%20%u0417%u0430%u043C%u0435%u043D%u044F%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u043D%u043E%u0439%0A%20%20%20%20%20%20%20%20showAlert%3A%20true%2C%20//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0438%u0435%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u044F%0A%20%20%20%20%20%20%20%20clickAlertToOpen%3A%20true%2C%20//%20%u041A%u043B%u0438%u043A%20%u043F%u043E%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u044E%20%u0441%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u043D%u043E%u0439%20%u0441%u0441%u044B%u043B%u043A%u043E%u0439%20-%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%20%u0435%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%0A%20%20%20%20%20%20%20%20showOnShortenedTextLinks%3A%20true%2C%20//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%20%u043D%u0430%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0445%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0445%20%u0441%u0441%u044B%u043B%u043A%u0430%u0445%0A%20%20%20%20%20%20%20%20promptDialogForTextLinks%3A%20true%2C%20//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u0441%20%u0440%u0435%u0437%u0443%u043B%u044C%u0442%u0430%u0442%u043E%u043C%20%u0434%u043B%u044F%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%0A%20%20%20%20%20%20%20%20copyToClipboard%3A%20true%2C%20//%20%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u043D%u0443%u044E%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%20%20%20%20%20%20%20%20changeColorForUnshortenedLinks%3A%20true%2C%20//%20%u0418%u043D%u0434%u0438%u043A%u0430%u0446%u0438%u044F%20%u0446%u0432%u0435%u0442%u043E%u043C%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u043E%u0436%u0438%u0434%u0430%u043D%u0438%u044F%20%u043E%u0442%u0432%u0435%u0442%u0430%20%u0438%20%u0440%u0435%u0437%u0443%u043B%u044C%u0442%u0430%u0442%u0430%0A%20%20%20%20%20%20%20%20changeColorBackAfterTimeout%3A%20false%2C%20//%20%u0412%u043E%u0437%u0432%u0440%u0430%u0449%u0430%u0442%u044C%20%u0446%u0432%u0435%u0442%20%u0441%u0441%u044B%u043B%u043E%u043A%20%u043A%20%u0438%u0441%u0445%u043E%u0434%u043D%u043E%u043C%u0443%2C%20%u043F%u043E%u0441%u043B%u0435%20%u043F%u0430%u0443%u0437%u044B%0A%20%20%20%20%20%20%20%20unshortenedLinksColor%3A%20%22lightgreen%22%20//%20%u0426%u0432%u0435%u0442%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u043D%u044B%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%0A%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20isFF32%20%3D%20%28parseFloat%28Services.appinfo.platformVersion%29%20%3E%3D%2032%29%3B%0A%0A%20%20function%20isShortenedURL%28aURL%29%20%7B%0A%20%20%20%20if%20%28aURL%20%26%26%20%28gContextMenu%20%26%26%20%28gContextMenu.onLink%20%26%26%20%21gContextMenu.isTextSelected%20%7C%7C%20gContextMenu.onPlainTextLink%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%21aURL.match%28/%5Cs/%29%20%26%26%20%21%21aURL.match%28/%5C//%29%29%29%20%7B%0A%0A%20%20%20%20%20%20if%20%28%21aURL.startsWith%28%27http%27%29%29%20aURL%20%3D%20%27http%3A//%27%20+%20aURL.split%28/%5E%28%28%5Cw+%29%3F%3A%5C/%5C/%29%3F%28.+%29/%29%5B3%5D%3B%0A%0A%20%20%20%20%20%20var%20host%20%3D%20aURL.split%28/http%28s%29%3F%3A%5C/%5C/%28%5B%5Cw%5C.-%5D+%29/%29%5B2%5D%3B%0A%0A%20%20%20%20%20%20if%20%28shortenerServices.indexOf%28host%29%20%21%3D%3D%20-1%29%20%7B%0A%20%20%20%20%20%20%20%20url%20%3D%20aURL%3B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%3B%0A%0A%20%20function%20promptDialog%28aURL%29%20%7B%0A%20%20%20%20var%20input%20%3D%20%7Bvalue%3A%20aURL%7D%3B%0A%20%20%20%20var%20prompt%20%3D%20Services.prompt.prompt%28null%2C%20options.copyToClipboard%20%3F%20%22%u0420%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u043D%u0430%u044F%20%u0441%u0441%u044B%u043B%u043A%u0430%20%u0441%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0430%21%22%20%3A%20%22%u0421%u0441%u044B%u043B%u043A%u0430%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u0430%21%22%2C%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%22%u041E%u0442%u0440%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%3F%22%2C%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%20input%2C%20null%2C%20%7Bvalue%3A%20false%7D%29%3B%0A%20%20%20%20if%20%28prompt%29%0A%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28input.value%29%3B%0A%20%20%7D%3B%0A%0A%20%20function%20xhr%28aURL%2C%20cb%29%20%7B%0A%20%20%20%20let%20reURL%20%3D%20null%3B%0A%20%20%20%20let%20xhr%20%3D%20Cc%5B%22@mozilla.org/xmlextras/xmlhttprequest%3B1%22%5D.createInstance%28Ci.nsIXMLHttpRequest%29%3B%0A%20%20%20%20let%20alertListener%20%3D%20%7B%0A%20%20%20%20%20%20observe%3A%20function%28aSubject%2C%20aTopic%2C%20aData%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28aTopic%20%21%3D%20%27alertclickcallback%27%29%20return%3B%0A%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28aData%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20let%20handler%20%3D%20ev%20%3D%3E%20%7B%0A%20%20%20%20%20%20evf%28m%20%3D%3E%20xhr.removeEventListener%28m%2C%20handler%2C%20%211%29%29%3B%0A%20%20%20%20%20%20switch%20%28ev.type%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27load%27%3A%0A%20%20%20%20%20%20%20%20%20%20if%20%28xhr.status%20%3D%3D%20200%20%7C%7C%20%28isFF32%20%3F%20xhr.responseURL%20%3A%20xhr.channel.URI.spec%29%20%21%3D%20aURL%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20reURL%20%3D%20isFF32%20%3F%20xhr.responseURL%20%3A%20xhr.channel.URI.spec%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20cb%28reURL%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20options.showAlert%20%26%26%20%28options.clickAlertToOpen%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%3F%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%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%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%27%u0421%u0441%u044B%u043B%u043A%u0430%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u0430%21%5Cn%u041D%u0430%u0436%u043C%u0438%u0442%u0435%2C%20%u0447%u0442%u043E%u0431%u044B%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%3A%5Cn%27%20+%20%28reURL.length%20%3E%20100%20%3F%20%28%5BreURL.slice%280%2C45%29%2C%20reURL.slice%28-45%29%5D%29.join%28%27...%27%29%20%3A%20reURL%29%2C%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%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%20true%2C%20reURL%2C%20alertListener%2C%20%22%22%29%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%3A%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%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%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%27%u0421%u0441%u044B%u043B%u043A%u0430%20%u0440%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0435%u043D%u0430%3A%5Cn%27%20+%20%28reURL.length%20%3E%20100%20%3F%20%28%5BreURL.slice%280%2C45%29%2C%20reURL.slice%28-45%29%5D%29.join%28%27...%27%29%20%3A%20reURL%29%2C%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%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%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20cb%28reURL%29%3B%0A%20%20%20%20%20%20%20%20%20%20options.showAlert%20%26%26%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u041E%u0448%u0438%u0431%u043A%u0430%20%u043F%u0440%u0438%20%u043F%u043E%u043F%u044B%u0442%u043A%u0435%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%3A%20%27%20+%20xhr.statusText%20+%20%27%20%5B%27%20+%20ev.type%20+%20%27%3A%27%20+%20xhr.status%20+%20%27%5D%27%2C%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20let%20evf%20%3D%20f%20%3D%3E%20%5B%27load%27%2C%20%27error%27%2C%20%27abort%27%5D.forEach%28f%29%3B%0A%20%20%20%20evf%28m%20%3D%3E%20xhr.addEventListener%28m%2C%20handler%2C%20false%29%29%3B%0A%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20xhr.mozBackgroundRequest%20%3D%20true%3B%0A%20%20%20%20%20%20xhr.open%28%27HEAD%27%2C%20aURL%2C%20true%29%3B%0A%20%20%20%20%20%20xhr.channel.loadFlags%20%7C%3D%20Ci.nsIRequest.LOAD_ANONYMOUS%20%7C%20Ci.nsIRequest.LOAD_BYPASS_CACHE%20%7C%20Ci.nsIRequest.INHIBIT_CACHING%3B%0A%20%20%20%20%20%20xhr.setRequestHeader%28%22User-Agent%22%2C%20%22Mozilla/5.0%20%28compatible%3B%20Googlebot/2.1%3B%20+http%3A//www.google.com/bot.html%29%22%2C%20false%29%3B%0A%20%20%20%20%20%20xhr.setRequestHeader%28%22Accept%22%2C%20%22text/html%2Ctext/xml%22%2C%20false%29%3B%0A%20%20%20%20%20%20xhr.send%28null%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%20%28ex%29%20%7B%0A%20%20%20%20%20%20cb%28reURL%29%3B%0A%20%20%20%20%20%20options.showAlert%20%26%26%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u041D%u0435%u043F%u0440%u0430%u0432%u0438%u043B%u044C%u043D%u0430%u044F%20%u0441%u0441%u044B%u043B%u043A%u0430%3A%20%27%20+%20%28ex.toString%28%29.length%20%3E%20100%20%3F%20%28%5Bex.toString%28%29.slice%280%2C45%29%2C%20ex.toString%28%29.slice%28-45%29%5D%29.join%28%27...%27%29%20%3A%20ex.toString%28%29%29%2C%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20function%20shouldDisplay%28%29%20%7B%0A%20%20%20%20mItem.label%20%3D%20%22%u0420%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0438%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%22%3B%0A%0A%20%20%20%20if%20%28gContextMenu.onLink%20%26%26%20%21gContextMenu.isTextSelected%29%20%7B%0A%20%20%20%20%20%20url%20%3D%20gContextMenu.getLinkURL%28%29%3B%0A%20%20%20%20%20%20link%20%3D%20gContextMenu.link%3B%0A%20%20%20%20%20%20isUnshortened%20%3D%20link.getAttribute%28%22cb-short-url%22%29%3B%0A%20%20%20%20%20%20if%20%28isUnshortened%29%20mItem.label%20%3D%20%22%u0421%u043A%u0443%u043A%u043E%u0436%u0438%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%22%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28gContextMenu.onPlainTextLink%29%20%7B%0A%20%20%20%20%20%20url%20%3D%20gContextMenu.linkURL%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28%21gContextMenu.onPlainTextLink%20%26%26%20gContextMenu.isTextSelected%29%20%7B%0A%20%20%20%20%20%20url%20%3D%20document.commandDispatcher.focusedWindow.content.document.getSelection%28%29.toString%28%29.trim%28%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20mItem.hidden%20%3D%20%21%28%28gContextMenu.onLink%20%7C%7C%20%28gContextMenu.onPlainTextLink%20%7C%7C%20gContextMenu.isTextSelected%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26%26%20options.showOnShortenedTextLinks%29%20%26%26%20isShortenedURL%28url%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20gContextMenu.onLink%20%26%26%20isUnshortened%29%3B%0A%20%20%7D%3B%0A%20%20cntxtMenu.addEventListener%28%22popupshowing%22%2C%20shouldDisplay%2C%20false%29%3B%0A%20%20addDestructor%28%28%29%3D%3E%20%7B%0A%20%20%20%20cntxtMenu.removeEventListener%28%22popupshowing%22%2C%20shouldDisplay%2C%20false%29%3B%0A%20%20%20%20cntxtMenu.removeChild%28mItem%29%3B%0A%20%20%7D%29%3B%0A%0A%20%20mItem.onclick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20if%20%28gContextMenu.onLink%20%26%26%20%21gContextMenu.isTextSelected%29%20%7B%0A%20%20%20%20%20%20if%20%28%21isUnshortened%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28options.changeColorForUnshortenedLinks%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20linkClr%20%3D%20link.style.getPropertyValue%28%27color%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20linkClr%20%26%26%20link.style.setProperty%28%27-cb-old-color%27%2C%20linkClr%2C%20link.style.getPropertyPriority%28%27color%27%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20oldClr%20%3D%20link.style.getPropertyValue%28%27-cb-old-color%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20oldClrPrrt%20%3D%20link.style.getPropertyPriority%28%27-cb-old-color%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20link.style.setProperty%28%22color%22%2C%20%22orangered%22%2C%20%22important%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20xhr%28url%2C%20reURL%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21reURL%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20options.changeColorForUnshortenedLinks%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26%26%20%28oldClr%20%3F%20%28link.style.setProperty%28%22color%22%2C%20oldClr%2C%20oldClrPrrt%29%2C%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%20link.removeProperty%28%27-cb-old-color%27%29%29%20%3A%20link.style.removeProperty%28%22color%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28options.changeColorForUnshortenedLinks%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20link.style.setProperty%28%22color%22%2C%20options.unshortenedLinksColor%2C%20%22important%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20options.changeColorBackAfterTimeout%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26%26%20setTimeout%28%28%29%3D%3E%20oldClr%20%3F%20%28link.style.setProperty%28%22color%22%2C%20oldClr%2C%20oldClrPrrt%29%2C%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%20link.removeProperty%28%27-cb-old-color%27%29%29%20%3A%20link.style.removeProperty%28%22color%22%29%2C%201000%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20options.copyToClipboard%20%26%26%20gClipboard.write%28reURL%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20options.replaceShortenedLinks%20%26%26%20%28link.setAttribute%28%22cb-short-url%22%2C%20link.href%29%2C%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%20link.setAttribute%28%22href%22%2C%20reURL%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20oldClr%20%3F%20%28link.style.setProperty%28%22color%22%2C%20oldClr%2C%20oldClrPrrt%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link.removeProperty%28%27-cb-old-color%27%29%29%20%3A%20link.style.removeProperty%28%22color%22%29%3B%0A%0A%20%20%20%20%20%20%20%20link.setAttribute%28%22href%22%2C%20isUnshortened%29%3B%0A%20%20%20%20%20%20%20%20link.removeAttribute%28%22cb-short-url%22%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20else%20%7B%0A%20%20%20%20%20%20xhr%28url%2C%20reURL%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21reURL%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20options.copyToClipboard%20%26%26%20gClipboard.write%28reURL%29%3B%0A%20%20%20%20%20%20%20%20options.promptDialogForTextLinks%20%26%26%20promptDialog%28reURL%29%3B%0A%20%20%20%20%20%20%7D%29%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20this._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20url%20%3D%20gClipboard.read%28%29%3B%0A%0A%20%20%20%20if%20%28%21url%20%7C%7C%20%21isShortenedURL%28url%29%29%20%7B%0A%20%20%20%20%20%20options.showAlert%20%26%26%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u041D%u0435%u043F%u0440%u0430%u0432%u0438%u043B%u044C%u043D%u0430%u044F%20%u0441%u0441%u044B%u043B%u043A%u0430%21%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20xhr%28url%2C%20reURL%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%21reURL%29%20return%3B%0A%0A%20%20%20%20%20%20options.copyToClipboard%20%26%26%20gClipboard.write%28reURL%29%3B%0A%20%20%20%20%20%20promptDialog%28reURL%29%3B%0A%20%20%20%20%7D%29%0A%20%20%7D%3B%0A%20%20this.tooltipText%20%3D%20%22%u041F%u041A%u041C%3A%20%u0420%u0430%u0441%u043A%u0443%u043A%u043E%u0436%u0438%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u0432%20%u0431%u0443%u0444%u0435%u0440%u0435%20%u043E%u0431%u043C%u0435%u043D%u0430%22%3B%0A%7D%29%28document.getElementById%28%22contentAreaContextMenu%22%29%2C%20document.getElementById%28%22context-sep-open%22%29%2C%20document.createElement%28%22menuitem%22%29%29%3B%0A%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

Инициализация:

Выделить код

Код:

// Раскукоживатель коротких ссылок, от 28.08.2016
((cntxtMenu, elm, mItem) => {
  mItem.id = "cb-unshorten-url";
  mItem.setAttribute("label", "Раскукожить ссылку");
  mItem.setAttribute("class", "menuitem-iconic");
  mItem.setAttribute("image", self.image);
  elm.parentNode.insertBefore(mItem, elm);

  const alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);

  var url, link, isUnshortened,
      // Сервисы сокращения ссылок. Можно добавлять свои. Работать, в теории, должно с любыми
      shortenerServices = [
        "tinyurl.com",
        "po.st",
        "img.ly",
        "bit.ly",
        "goo.gl",
        "youtu.be",
        "t.co",
        "db.tt",
        "u.to",
        "shortlinks.de"
      ],
      // Опции:
      options = {
        replaceShortenedLinks: true, // Заменять адрес ссылки на странице раскукоженной
        showAlert: true, // Показывать всплывающие уведомления
        clickAlertToOpen: true, // Клик по уведомлению с раскукоженной ссылкой - откроет ее в новой вкладке
        showOnShortenedTextLinks: true, // Показывать пункт контекстного меню на выделенных текстовых ссылках
        promptDialogForTextLinks: true, // Показывать диалог с результатом для текстовых ссылок
        copyToClipboard: true, // Копировать раскукоженную ссылку в буфер обмена
        changeColorForUnshortenedLinks: true, // Индикация цветом ссылки ожидания ответа и результата
        changeColorBackAfterTimeout: false, // Возвращать цвет ссылок к исходному, после паузы
        unshortenedLinksColor: "lightgreen" // Цвет раскукоженных ссылок
      },
      isFF32 = (parseFloat(Services.appinfo.platformVersion) >= 32);

  function isShortenedURL(aURL) {
    if (aURL && (gContextMenu && (gContextMenu.onLink && !gContextMenu.isTextSelected || gContextMenu.onPlainTextLink)
                 || !aURL.match(/\s/) && !!aURL.match(/\//))) {

      if (!aURL.startsWith('http')) aURL = 'http://' + aURL.split(/^((\w+)?:\/\/)?(.+)/)[3];

      var host = aURL.split(/http(s)?:\/\/([\w\.-]+)/)[2];

      if (shortenerServices.indexOf(host) !== -1) {
        url = aURL;
        return true;
      }
    }
    return false;
  };

  function promptDialog(aURL) {
    var input = {value: aURL};
    var prompt = Services.prompt.prompt(null, options.copyToClipboard ? "Раскукоженная ссылка скопирована!" : "Ссылка раскукожена!",
                                        "Отредактировать и открыть в новой вкладке?",
                                        input, null, {value: false});
    if (prompt)
      gBrowser.selectedTab = gBrowser.addTab(input.value);
  };

  function xhr(aURL, cb) {
    let reURL = null;
    let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
    let alertListener = {
      observe: function(aSubject, aTopic, aData) {
        if (aTopic != 'alertclickcallback') return;
        gBrowser.selectedTab = gBrowser.addTab(aData);
      }
    }

    let handler = ev => {
      evf(m => xhr.removeEventListener(m, handler, !1));
      switch (ev.type) {
        case 'load':
          if (xhr.status == 200 || (isFF32 ? xhr.responseURL : xhr.channel.URI.spec) != aURL) {
            reURL = isFF32 ? xhr.responseURL : xhr.channel.URI.spec;
            cb(reURL);
            options.showAlert && (options.clickAlertToOpen
                                  ? alertsService.showAlertNotification(self.image, self.label,
                                                                        'Ссылка раскукожена!\nНажмите, чтобы открыть в новой вкладке:\n' + (reURL.length > 100 ? ([reURL.slice(0,45), reURL.slice(-45)]).join('...') : reURL),
                                                                        true, reURL, alertListener, "")
                                  : alertsService.showAlertNotification(self.image, self.label,
                                                                        'Ссылка раскукожена:\n' + (reURL.length > 100 ? ([reURL.slice(0,45), reURL.slice(-45)]).join('...') : reURL),
                                                                        false, "", null, ""));
            break;
          }

        default:
          cb(reURL);
          options.showAlert && alertsService.showAlertNotification(self.image, self.label,
                                                                   'Ошибка при попытке получить ссылку: ' + xhr.statusText + ' [' + ev.type + ':' + xhr.status + ']',
                                                                   false, "", null, "");
          break;
      }
    };

    let evf = f => ['load', 'error', 'abort'].forEach(f);
    evf(m => xhr.addEventListener(m, handler, false));

    try {
      xhr.mozBackgroundRequest = true;
      xhr.open('HEAD', aURL, true);
      xhr.channel.loadFlags |= Ci.nsIRequest.LOAD_ANONYMOUS | Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsIRequest.INHIBIT_CACHING;
      xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", false);
      xhr.setRequestHeader("Accept", "text/html,text/xml", false);
      xhr.send(null);
    }
    catch (ex) {
      cb(reURL);
      options.showAlert && alertsService.showAlertNotification(self.image, self.label,
                                                               'Неправильная ссылка: ' + (ex.toString().length > 100 ? ([ex.toString().slice(0,45), ex.toString().slice(-45)]).join('...') : ex.toString()),
                                                               false, "", null, "");
    }
  };

  function shouldDisplay() {
    mItem.label = "Раскукожить ссылку";

    if (gContextMenu.onLink && !gContextMenu.isTextSelected) {
      url = gContextMenu.getLinkURL();
      link = gContextMenu.link;
      isUnshortened = link.getAttribute("cb-short-url");
      if (isUnshortened) mItem.label = "Скукожить ссылку";
    }

    if (gContextMenu.onPlainTextLink) {
      url = gContextMenu.linkURL;
    }

    if (!gContextMenu.onPlainTextLink && gContextMenu.isTextSelected) {
      url = document.commandDispatcher.focusedWindow.content.document.getSelection().toString().trim();
    }

    mItem.hidden = !((gContextMenu.onLink || (gContextMenu.onPlainTextLink || gContextMenu.isTextSelected)
                      && options.showOnShortenedTextLinks) && isShortenedURL(url)
                     || gContextMenu.onLink && isUnshortened);
  };
  cntxtMenu.addEventListener("popupshowing", shouldDisplay, false);
  addDestructor(()=> {
    cntxtMenu.removeEventListener("popupshowing", shouldDisplay, false);
    cntxtMenu.removeChild(mItem);
  });

  mItem.onclick =()=> {
    if (gContextMenu.onLink && !gContextMenu.isTextSelected) {
      if (!isUnshortened) {
        if (options.changeColorForUnshortenedLinks) {
          var linkClr = link.style.getPropertyValue('color');
          linkClr && link.style.setProperty('-cb-old-color', linkClr, link.style.getPropertyPriority('color'));
          var oldClr = link.style.getPropertyValue('-cb-old-color');
          var oldClrPrrt = link.style.getPropertyPriority('-cb-old-color');
          link.style.setProperty("color", "orangered", "important");
        }

        xhr(url, reURL => {
          if (!reURL) {
            options.changeColorForUnshortenedLinks
              && (oldClr ? (link.style.setProperty("color", oldClr, oldClrPrrt),
                            link.removeProperty('-cb-old-color')) : link.style.removeProperty("color"));
            return;
          }

          if (options.changeColorForUnshortenedLinks) {
            link.style.setProperty("color", options.unshortenedLinksColor, "important");
            options.changeColorBackAfterTimeout
              && setTimeout(()=> oldClr ? (link.style.setProperty("color", oldClr, oldClrPrrt),
                                           link.removeProperty('-cb-old-color')) : link.style.removeProperty("color"), 1000);
          }

          options.copyToClipboard && gClipboard.write(reURL);

          options.replaceShortenedLinks && (link.setAttribute("cb-short-url", link.href),
                                            link.setAttribute("href", reURL));
        })
      }
      else {
        oldClr ? (link.style.setProperty("color", oldClr, oldClrPrrt),
                  link.removeProperty('-cb-old-color')) : link.style.removeProperty("color");

        link.setAttribute("href", isUnshortened);
        link.removeAttribute("cb-short-url");
      }
    }
    else {
      xhr(url, reURL => {
        if (!reURL) return;

        options.copyToClipboard && gClipboard.write(reURL);
        options.promptDialogForTextLinks && promptDialog(reURL);
      })
    }
  };

  this._handleClick =()=> {
    url = gClipboard.read();

    if (!url || !isShortenedURL(url)) {
      options.showAlert && alertsService.showAlertNotification(self.image, self.label,
                                                               'Неправильная ссылка!', false, "", null, "");
      return;
    }

    xhr(url, reURL => {
      if (!reURL) return;

      options.copyToClipboard && gClipboard.write(reURL);
      promptDialog(reURL);
    })
  };
  this.tooltipText = "ПКМ: Раскукожить ссылку в буфере обмена";
})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-open"), document.createElement("menuitem"));

Иконка svg (www.flaticon.com):

Выделить код

Код:

data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MjUuNDY2cHgiIGhlaWdodD0iNDI1LjQ2N3B4IiB2aWV3Qm94PSIwIDAgNDI1LjQ2NiA0MjUuNDY3Ij4KPGcgaWQ9Imc3IiBzdHlsZT0iZmlsbDojNzk3YzgwO2ZpbGwtb3BhY2l0eToxIj4KPHBhdGggZD0iTTMxOC4xNSwyMzAuMTk1bDc3LjkzNC03Ny45MzdjMzEuODk0LTMxLjg5MiwzMS44OTQtODMuNzgyLTAuMDA0LTExNS42NzRsLTEyLjY2LTEyLjY2ICAgICBjLTMxLjg5My0zMS44OTYtODMuNzgtMzEuODk2LTExNS42NzQtMC4wMDRsLTc3LjkzNyw3Ny45MzRjLTE3LjU4OCwxNy41ODgtMjUuNDU3LDQxLjI2NC0yMy42NDYsNjQuMzExICAgICBjLTIzLjA0NS0xLjgxMy00Ni43MjIsNi4wNTYtNjQuMzA4LDIzLjY0N0wyMy45MiwyNjcuNzQ4Yy0zMS44OTQsMzEuODg5LTMxLjg5NCw4My43NzksMCwxMTUuNjc0bDEyLjY2NCwxMi42NjIgICAgIGMzMS44OTMsMzEuODkzLDgzLjc4MywzMS44OTMsMTE1LjY3NCwwbDc3LjkzNS03Ny45MzZjMTcuNTkyLTE3LjU5LDI1LjQ1OS00MS4yNjYsMjMuNjQ3LTY0LjMwOSAgICAgQzI3Ni44ODQsMjU1LjY1NCwzMDAuNTYsMjQ3Ljc4MywzMTguMTUsMjMwLjE5NXogTTIwMi42NTMsMjkwLjYwNWwtNzcuOTM2LDc3LjkzOGMtMTYuNzA1LDE2LjcwMy00My44ODksMTYuNzAzLTYwLjU5LDAgICAgIGwtMTIuNjY2LTEyLjY2NmMtMTYuNzA1LTE2LjcwMS0xNi43MDMtNDMuODg1LDAtNjAuNTk0bDc3LjkzNi03Ny45MzJjMTQuMTQtMTQuMTQxLDM1Ljc3OS0xNi4zMDYsNTIuMjI2LTYuNTE2bC0zMi4zMDIsMzIuMzA3ICAgICBjLTcuNjA2LDcuNjA0LTcuNjA2LDE5LjkzOCwwLDI3LjU0MWM3LjYwNSw3LjYwNywxOS45MzcsNy42MDcsMjcuNTQxLDBsMzIuMzA2LTMyLjMwMyAgICAgQzIxOC45NTksMjU0LjgyOCwyMTYuNzk1LDI3Ni40NjksMjAyLjY1MywyOTAuNjA1eiBNMjM4LjM4MiwyMDkuMTY5bDMyLjI5OS0zMi4zMDZjNy42MDgtNy42MDIsNy42MDgtMTkuOTM1LDAtMjcuNTM4ICAgICBjLTcuNjA0LTcuNjEtMTkuOTM2LTcuNjEtMjcuNTQxLTAuMDA0bC0zMi4zMDMsMzIuMzAzYy05Ljc5MS0xNi40NDYtNy42MjctMzguMDg3LDYuNTE0LTUyLjIyNmw3Ny45MzUtNzcuOTM1ICAgICBjMTYuNzA3LTE2LjcwNyw0My44OS0xNi43MDcsNjAuNTk0LDBsMTIuNjY0LDEyLjY2NGMxNi43MDUsMTYuNzA1LDE2LjcwNSw0My44ODYsMCw2MC41OTFsLTc3LjkzNiw3Ny45MzcgICAgIEMyNzYuNDY4LDIxNi43OTcsMjU0LjgyOCwyMTguOTU5LDIzOC4zODIsMjA5LjE2OXoiCmlkPSJwYXRoOSIgc3R5bGU9ImZpbGw6Izc5N2M4MCIgLz4KPHBhdGggZD0iTTM0My40NjYsMjYxLjQ2NWMtNDUuMjg3LDAtODIsMzYuNzEzLTgyLDgyczM2LjcxMyw4Miw4Miw4MmM0NS4yODYsMCw4Mi0zNi43MTMsODItODJTMzg4Ljc1MywyNjEuNDY1LDM0My40NjYsMjYxLjQ2NXogICAgICBNMzcyLjUwNSwzMzMuNTY0bC01Ni4wNDYsNTYuMTA0Yy0wLjIzOSwwLjIzOC0wLjUzNiwwLjQxLTAuODYyLDAuNDk2bC0yMi4zMTUsNS44NWMtMC42NDksMC4xNjgtMS4zNDctMC4wMi0xLjgyMi0wLjQ5NCAgICAgYy0wLjQ3Ny0wLjQ3OS0wLjY2Ni0xLjE3Mi0wLjQ5Ni0xLjgyNGw1LjgyNi0yMi4zMThjMC4wODQtMC4zMjYsMC4yNTYtMC42MjcsMC40OTQtMC44NjNsNTYuMDQ3LTU2LjEwNCAgICAgYzAuNzQyLTAuNzQyLDEuOTQ1LTAuNzQ0LDIuNjg4LTAuMDAybDQuNTQ4LDQuNTQxYzAuNzM5LDAuNzQsMC43NDEsMS45NDMsMCwyLjY4OGwtMzcuNDMzLDM3LjQ3MWw0LjcwOSw0LjcwM2wzNy40MzUtMzcuNDcxICAgICBjMC43MzktMC43NDIsMS45NC0wLjc0MiwyLjY4Mi0wLjAwMmw0LjU1LDQuNTQxQzM3My4yNSwzMzEuNjE3LDM3My4yNSwzMzIuODIyLDM3Mi41MDUsMzMzLjU2NHogTTM5NS40NzIsMzEwLjU3NGwtMTcsMTcuMDE4ICAgICBjLTAuNzM5LDAuNzQ0LTEuOTQyLDAuNzQ0LTIuNjg1LDAuMDAybC0xNi40ODktMTYuNDc1Yy0wLjc0NC0wLjc0LTAuNzQ0LTEuOTQzLTAuMDAyLTIuNjg4bDE3LTE3LjAyICAgICBjMC43NDEtMC43NCwxLjk0NC0wLjc0LDIuNjg4LTAuMDAybDE2LjQ4NywxNi40NzdDMzk2LjIxNiwzMDguNjI5LDM5Ni4yMTYsMzA5LjgzMiwzOTUuNDcyLDMxMC41NzR6IgppZD0icGF0aDExIiBzdHlsZT0iZmlsbDojNzk3YzgwIiAvPjwvZz4KPC9zdmc+

Иконка  png 16x16 (www.flaticon.com):

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAACFAAAAhQHi7P/BAAABNmlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarY6xSsNQFEDPi6LiUCsEcXB4kygotupgxqQtRRCs1SHJ1qShSmkSXl7VfoSjWwcXd7/AyVFwUPwC/0Bx6uAQIYODCJ7p3MPlcsGo2HWnYZRhEGvVbjrS9Xw5+8QMUwDQCbPUbrUOAOIkjvjB5ysC4HnTrjsN/sZ8mCoNTIDtbpSFICpA/0KnGsQYMIN+qkHcAaY6addAPAClXu4vQCnI/Q0oKdfzQXwAZs/1fDDmADPIfQUwdXSpAWpJOlJnvVMtq5ZlSbubBJE8HmU6GmRyPw4TlSaqo6MukP8HwGK+2G46cq1qWXvr/DOu58vc3o8QgFh6LFpBOFTn3yqMnd/n4sZ4GQ5vYXpStN0ruNmAheuirVahvAX34y/Axk/96FpPYgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAUggAARVYAAA6lwAAF2/XWh+QAAABj0lEQVR42pSTz0qWYRDFX0gQRRAUwmrRxkVQK28haNM23OguEG+gM3SmfssiEHQrdAHfIiEvwQhvwIX9AQ2yXYi1icx824wfb19fZovZPMM5c+aceZq2bZuLlMwdmZcyezIPZabbtm0uBI7kqUwrsx3JuswXmQ8yo/8DftZRcyOSHzIL/5L9RKaNZGVI75XMxnnguwVeHdK7JvNNZuk8gp7Mvsy4zKLMVL3PRLIr81lm4m+TezKHkezLbEZyIjMrMyOzK3MoM/dHCpH9nfdrelt1X+bmIPg3go7bqyV7M7JPcBzJqcynLrhP0AGv1BqLMic1+VhmS2ZZZrLIR/oEdWGDOU9FMluyTwt8OZI1maNIDmQeRzLW1HluDzmgKzJvSvakzFrHkxelcrmp214fSOJqJG/PDItkXOaoDO7JPJD5GMlOUx/jq8ytAl+Xed91W2ZE5kDmeST3ZN6Vkq0mkun6GD9lXst8ryOZG1jpUSS3a622Epo/a47KLMhsRLIkMzHEk7Eyc6dSmY/k0q8BAFXPYK4TxOuUAAAAAElFTkSuQmCC


Спасибо за помощь Dumby и всем в чьи кнопки подглядывал при создании.

Отредактировано turbot (28-08-2016 16:12:04)

Отсутствует

 

№15102-09-2016 00:35:49

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 51.0

Re: Готовые кнопки для Custom Buttons

Сайты в боковой панели(Firefox 38+), от 02.09.2016
Позволяет открывать сайты в боковой панели из контекстного меню ссылок, кликами на кнопке и из сохраненного списка добавляемых в меню кнопки сайтов.
Предотвращает открытие ссылок, со страниц в боковой панели, в обычных вкладках (для открытия в обычной вкладке/окне - используйте контекстное меню ссылки/клик СКМ/Ctrl или Shift + клик).
Также частично восстанавливает контекстную навигацию и добавляет кнопки навигации в заголовок боковой панели.
До некоторой степени может служить заменой аддону All-in-One Sidebar.

(Прим.: Пользователям [firefox] 48+ следует обратить внимание на имеющийся баг в Custom Buttons, который делает нерабочими все кнопки берущие код с вкладки "Справка". Подробнее, как можно исправить, тут.)

Клики на кнопке:
ЛКМ:  Открыть меню со списком сохраненных адресов (ЛКМ по которым - откроет их в боковой панели, ПКМ - удалит из списка) и пунктом добавляющим в этот список адрес активной вкладки.
(Название сайта, адрес и иконка сохраняются во вкладке справки кнопки и записываются с новой строки. Сохраненные сайты разделяются пустой строкой. Для сайтов без фавиконки устанавливается дефолтная: chrome://mozapps/skin/places/defaultFavicon.png.)
СКМ: Открыть адрес из буфера
ПКМ (без клавиш модификаторов): Открыть в боковой панели адрес активной вкладки

Код кнопки, вкладки инициализации и иконка:

Код кнопки:

Выделить код

Код:

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%3E%u0421%u0430%u0439%u0442%u044B%20%u0432%20%u0431%u043E%u043A%u043E%u0432%u043E%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAiEAAAIhAENVwL6AAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAHqSURBVHjarJM9aBVBFIW/s2wkgmDnDxoUgoJWokXERlEbf5pY2AhCCkWUgCaNvs3b2Z335lmZoETRINhKLPxD0CZgI0GtLFQUG8FGmxSBmBRzbSYSJE2IB4b5u/cMc+65MjOWYsT57cAVM9sL7AIi8EnSuxjjWKdV/Vgar0WCRrPqknQDuAB0AR+BsbS+DOwEfku6GWNsdFpV/EvQaFa5pElJ+8xsFlhrZn2dVvUrkW+R9Bb4CWyW9CrGONBpVTEHkDQK9JvZHNADzEv6WpQ16R6gG9gELJjZ2SzLvgNNXRtx2yR9AS5JOmJmfcAQy+Me8Bz4AFw3s95cUi8wHLy7X5T1LPA4ePdkueyirNcDM8G7p0VZr5G0Q41mdTB497oo6/3Bu+mirA+b2beUEwGyLMuTXj0p9kDw7k1R1kfVaFYvgUfA3VSBfqANXAUMyNPsgQ7wEJgAzgOnMuA2MJ4O7gCjwbtpYKOkBUDAuuDd+/TIOHBxMTYzsxfAieDdA+BY8G4qKT8QYxyWNCjpHICZPQOOB+8mgJPBu6lc0iFgNzAFbCjK+nTwbrJdl5//FVHSGWAmbfcUZT2/6jLKzCjK+hYwCMwlw8ynsRTdydYLQLekdrsum3n625CkrSuw8mSM0f2/ZlpNO/8ZAGBFAEu2Gqq+AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0421%u0430%u0439%u0442%u044B%20%u0432%20%u0431%u043E%u043A%u043E%u0432%u043E%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%20%u043E%u0442%2002.09.2016%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20if%20%28e.target%20%21%3D%20this%29%20return%3B%0A%20%20let%20clipboard%20%3D%20gClipboard.read%28%29%3B%0A%20%20if%20%28e.button%20%3D%3D%200%29%0A%20%20%20%20menuPopup.openPopup%28this%2C%20%27after_start%27%29%3B%0A%20%20if%20%28e.button%20%3D%3D%201%29%0A%20%20%20%20openWebPanel%28clipboard%2C%20clipboard%29%3B%0A%20%20if%20%28e.button%20%3D%3D%202%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%29%20%7B%0A%20%20%20%20e.preventDefault%28%29%3B%20e.stopPropagation%28%29%3B%0A%20%20%20%20openWebPanel%28window.content.document.title%2C%20window.content.document.location%29%0A%20%20%7D%0A%7D%0Athis.tooltipText%20%3D%20%27%u041B%u041A%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%u043E%20%u0441%u043F%u0438%u0441%u043A%u043E%u043C%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u043D%u044B%u0445%20%u0430%u0434%u0440%u0435%u0441%u043E%u0432%5Cn%5C%u0421%u041A%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%5Cn%5C%u041F%u041A%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%27%3B%0A%0Avar%20menuPopup%20%3D%20createNode%28%22menupopup%22%2C%20self%2C%20false%2C%20%7Bcontext%3A%20%22%22%7D%29%2C%0A%20%20%20%20sbBox%20%3D%20SidebarUI._box%2C%0A%20%20%20%20sbClsBtn%20%3D%20sbBox.querySelector%28%22.close-icon.tabbable%22%29%2C%0A%20%20%20%20wps%20%3D%20%22SidebarUI.browser.contentDocument.querySelector%28%27browser%23web-panels-browser%27%29.%22%2C%0A%20%20%20%20sep%20%3D%20%22%5Cn%5Cn%22%2C%0A%20%20%20%20//%20%u0417%u0430%u043C%u0435%u043D%u0438%u0442%u044C%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u043D%u0438%u0436%u0435%20%u043D%u0430%3A%20help%20%3D%20custombutton.buttonGetHelp%28self%29.trim%28%29%2C%0A%20%20%20%20//%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0445%u043E%u0442%u0438%u0442%u0435%20%u0432%u043E%u0437%u0438%u0442%u044C%u0441%u044F%20%u0441%20%u043E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%u043C%20%u043F%u0440%u043E%u0432%u0435%u0440%u043A%u0438%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0439%0A%20%20%20%20//%20%u0438%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u043E%u0439%20%u043F%u043E%u0444%u0438%u043A%u0448%u0435%u043D%u043D%u043E%u0433%u043E%20CB%20%u0432%20%u0444%u044448+%0A%20%20%20%20help%20%3D%20self.Help.trim%28%29%2C%0A%20%20%20%20items%20%3D%20help%0A%20%20%20%20%20%20%3F%20help.split%28sep%29%0A%20%20%20%20%20%20%3A%20%5B%22About%20Config%5Cnabout%3Aconfig%5Cnchrome%3A//mozapps/skin/places/defaultFavicon.png%22%5D%2C%0A%20%20%20%20menugroup%20%3D%20createNode%28%22menugroup%22%2C%20menuPopup%2C%20false%2C%20%7B%0A%20%20%20%20%20%20orient%3A%20%22vertical%22%2C%0A%20%20%20%20%20%20oncommand%3A%20%22openPage%28event.target%29%3B%22%2C%0A%20%20%20%20%20%20oncontextmenu%3A%20%22removePage%28event.target%29%3B%22%0A%20%20%20%20%7D%29%2C%0A%20%20%20%20cnMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%2C%0A%20%20%20%20cnOpen%20%3D%20document.getElementById%28%22context-sep-open%22%29%2C%0A%20%20%20%20cnItem%20%3D%20createNode%28%22menuitem%22%2C%20cnOpen%2C%20true%2C%20%7B%0A%20%20%20%20%20%20id%3A%20%22open-in-sidebar%22%2C%0A%20%20%20%20%20%20label%3A%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u0411%u043E%u043A%u043E%u0432%u043E%u0439%20%u041F%u0430%u043D%u0435%u043B%u0438%22%2C%0A%20%20%20%20%20%20oncommand%3A%20%22openWebPanel%28gContextMenu.getLinkURL%28%29%2C%20gContextMenu.getLinkURL%28%29%29%3B%20document.getElementById%28%27verticaltoolbar-button%27%29.click%28%29%3B%22%0A%20%20%20%20%7D%29%2C%0A%20%20%20%20cnListener%20%3D%20cnMenu.addEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20cnItem.hidden%20%3D%20%21gContextMenu.onLink%29%2C%0A%20%20%20%20cnDestructor%20%3D%20addDestructor%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20cnMenu.removeEventListener%28%22popupshowing%22%2C%20cnListener%29%3B%0A%20%20%20%20%20%20cnMenu.removeChild%28cnItem%29%0A%20%20%20%20%7D%29%2C%0A%20%20%20%20sbNav%20%3D%20%5B%0A%20%20%20%20%20%20%5B%22back%22%2C%20%22goBack%28%29%3B%22%2C%20%22back-button-tooltip%22%5D%2C%0A%20%20%20%20%20%20%5B%22forward%22%2C%20%22goForward%28%29%3B%22%2C%20%22forward-button-tooltip%22%5D%2C%0A%20%20%20%20%20%20%5B%22reload%22%2C%20%22reload%28%29%3B%22%2C%2C%20%22Reload%20current%20page%22%5D%2C%0A%20%20%20%20%20%20%5B%22stop%22%2C%20%22stop%28%29%3B%22%2C%2C%20%22Stop%20loading%20this%20page%22%5D%0A%20%20%20%20%5D%3B%0A%0Aitems.forEach%28%28item%2C%20index%29%20%3D%3E%20%7B%0A%20%20var%20%5Btitle%2C%20url%2C%20icon%5D%20%3D%20item.split%28%22%5Cn%22%29%3B%0A%20%20icon%20%3D%20%28icon.startsWith%28%27chrome%3A%27%29%20%7C%7C%20icon.startsWith%28%27file%3A%27%29%20%7C%7C%20icon.startsWith%28%27data%3A%27%29%29%20%3F%20icon%20%3A%20%27moz-anno%3Afavicon%3A%27%20+%20icon%3B%0A%20%20createNode%28%22menuitem%22%2C%20menugroup%2C%20false%2C%20%7B%0A%20%20%20%20tooltiptext%3A%20url%2C%0A%20%20%20%20class%3A%20%22menuitem-iconic%22%2C%0A%20%20%20%20label%3A%20title%2C%0A%20%20%20%20image%3A%20icon%0A%20%20%7D%29.index%20%3D%20index%3B%0A%7D%29%3B%0Amenugroup.openPage%20%3D%20%28%7Bindex%7D%29%20%3D%3E%20openWebPanel%28...items%5Bindex%5D.split%28%22%5Cn%22%29%29%3B%0Amenugroup.removePage%20%3D%20%28%7Bindex%7D%29%20%3D%3E%20items.splice%28index%2C%201%29%20%26%26%20installButton%28items.join%28sep%29%29%3B%0A%0A%5B%0A%20%20%5B%27menuseparator%27%5D%2C%0A%20%20%5B%27menuitem%27%2C%20%27%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%27%2C%20%27custombuttons.editButton%28this.parentNode.parentNode%29%3B%27%5D%2C%0A%20%20%5B%27menuitem%27%2C%20%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%27%2C%20%27openWebPanel%28gClipboard.read%28%29%2C%20gClipboard.read%28%29%29%3B%27%5D%2C%0A%20%20%5B%27menuitem%27%2C%20%27%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0441%u0430%u0439%u0442%27%2C%20%27this.parentNode.parentNode.addPage%28window.content.document.title%2C%20window.content.document.location.href%2C%20gBrowser.mCurrentTab.image%29%3B%27%5D%0A%5D.forEach%28%28%5Btype%2C%20lbl%2C%20cmd%5D%29%20%3D%3E%20%0A%20%20%20%20%20%20%20%20%20%20createNode%28type%2C%20menuPopup%2C%20false%2C%20%7Blabel%3A%20lbl%2C%20oncommand%3A%20cmd%7D%29%29%3B%0A%0Aif%20%28%21sbBox.hasAttribute%28%22navbuttons%22%29%29%20%7B%0A%20%20sbNav.forEach%28%28%5Bid%2C%20cmd%2C%20tltp%2C%20ttxt%5D%29%20%3D%3E%20%7B%0A%20%20%20%20var%20icon%20%3D%20%22chrome%3A//browser/skin/content-contextmenu.svg%23%22%20+%20id%3B%0A%20%20%20%20id%20%3D%20%27sb-%27%20+%20id%20+%20%27-button%27%3B%0A%20%20%20%20createNode%28%22toolbarbutton%22%2C%20sbClsBtn%2C%20true%2C%20%7B%0A%20%20%20%20%20%20id%3A%20id%2C%0A%20%20%20%20%20%20oncommand%3A%20wps%20+%20cmd%2C%0A%20%20%20%20%20%20tooltip%3A%20tltp%2C%0A%20%20%20%20%20%20tooltiptext%3A%20ttxt%2C%0A%20%20%20%20%20%20style%3A%20%27list-style-image%3A%20url%28%22%27%20+%20icon%20+%20%27%22%29%3B%20-moz-image-region%3A%20rect%280%2011px%2011px%200%29%3B%27%0A%20%20%20%20%7D%29%0A%20%20%7D%29%0A%20%20sbBox.setAttribute%28%27navbuttons%27%2C%20%27true%27%29%3B%0A%7D%0A%0Afunction%20installButton%28help%29%20%7B%0A%20%20%20%20var%20link%20%3D%20custombuttons.makeButtonLink%28%22edit%22%2C%20_id%29%3B%0A%20%20%20%20var%20param%20%3D%20custombuttons.cbService.getButtonParameters%28link%29%3B%0A%20%20%20%20param%20%3D%20param.wrappedJSObject%20%7C%7C%20param%3B%0A%20%20%20%20param.help%20%3D%20help%3B%0A%20%20%20%20custombuttons.cbService.installButton%28param%29%3B%0A%7D%0A%0Afunction%20createNode%28type%2C%20elm%2C%20before%2C%20attrs%29%20%7B%0A%20%20var%20node%20%3D%20before%0A%20%20%3F%20elm.parentNode.insertBefore%28document.createElement%28type%29%2C%20elm%29%0A%20%20%3A%20elm.appendChild%28document.createElement%28type%29%29%3B%0A%20%20for%28var%20name%20in%20attrs%29%20%7B%0A%20%20%20%20if%20%28attrs%5Bname%5D%29%0A%20%20%20%20%20%20node.setAttribute%28name%2C%20attrs%5Bname%5D%29%3B%0A%20%20%7D%0A%20%20return%20node%3B%0A%7D%0A%0Athis.addPage%20%3D%28title%2C%20url%2C%20icon%29%3D%3E%20%7B%0A%20%20title%20%3D%20%21title%20%3F%20url%20%3A%20title%3B%0A%20%20icon%20%3D%20%21icon%20%3F%20%27chrome%3A//mozapps/skin/places/defaultFavicon.png%27%20%3A%20icon%3B%0A%20%20var%20newItem%20%3D%20%5Btitle%2C%20url%2C%20icon%5D.join%28%27%5Cn%27%29%3B%0A%20%20installButton%28%5Bhelp%2C%20newItem%5D.join%28sep%29%29%3B%0A%7D%0A%0A%28%28browser%2C%20listener%2C%20br%29%20%3D%3E%20%7B%20if%20%28browser%29%20%7B%0A%20%20addEventListener%28%22DOMFrameContentLoaded%22%2C%20listener%2C%20true%2C%20browser%29%3B%0A%20%20var%20getBr%20%3D%20%28%29%20%3D%3E%20browser.contentDocument.querySelector%28listener.selector%29%3B%0A%20%20if%20%28%28br%20%3D%20getBr%28%29%29%29%20br.window%20%3D%20%7Bparent%3A%20listener.parent%7D%3B%0A%20%20addDestructor%28%28%29%20%3D%3E%20%7B%0A%20%20%20%20if%20%28%28br%20%3D%20getBr%28%29%29%29%20delete%20br.window%3B%0A%20%20%7D%29%3B%0A%7D%7D%29%28SidebarUI.browser%2C%20%7B%0A%20%20selector%3A%20%22browser%23web-panels-browser%22%2C%0A%20%20handleEvent%28e%29%20%7B%0A%20%20%20%20if%20%28e.target.matches%28this.selector%29%20%26%26%20%21e.target.hasAttribute%28%22disableglobalhistory%22%29%29%20%7B%0A%20%20%20%20%20%20sbNav.forEach%28%28%5Bid%2C%20cmd%5D%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20id%20%3D%20%27%23context-%27%20+%20id%3B%0A%20%20%20%20%20%20%20%20var%20mItem%20%3D%20SidebarUI.browser.contentDocument.querySelector%28id%29%3B%0A%20%20%20%20%20%20%20%20if%20%28id%20%3D%3D%20%22%23context-reload%22%29%0A%20%20%20%20%20%20%20%20%20%20mItem.style.setProperty%28%27display%27%2C%20%27-moz-box%27%2C%20%27important%27%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20eval%28wps%20+%20cmd%29%3B%0A%20%20%20%20%20%20%7D%29%0A%20%20%20%20%20%20e.target.setAttribute%28%22disableglobalhistory%22%2C%20%27false%27%29%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28e.target.matches%28this.selector%29%20%26%26%20%21%28%22window%22%20in%20e.target%29%29%0A%20%20%20%20%20%20e.target.window%20%3D%20%7Bparent%3A%20this.parent%7D%3B%0A%20%20%7D%2C%0A%20%20get%20parent%28%29%20%7B%0A%20%20%20%20delete%20this.parent%3B%0A%20%20%20%20var%20parent%20%3D%20%7B%7D%3B%0A%20%20%20%20parent.contentAreaClick%20%3D%20eval%28%60%28%24%7B%0A%20%20%20%20%20%20contentAreaClick.toString%28%29.replace%28%0A%20%20%20%20%20%20%20%20%27linkNode.getAttribute%28%22onclick%22%29%27%2C%0A%20%20%20%20%20%20%20%20%22%21target%20%26%26%20this.shouldLoadInPanelBrowser%28linkNode%29%20%7C%7C%20%24%26%22%0A%20%20%20%20%20%20%29%0A%20%20%20%20%7D%29%60%29%3B%0A%20%20%20%20parent.shouldLoadInPanelBrowser%20%3D%20link%20%3D%3E%20%7B%0A//%20%u0417%u0434%u0435%u0441%u044C%20%u043C%u043E%u0436%u043D%u043E%20%u0437%u0430%u0434%u0430%u0442%u044C%20%u0438%u0441%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%2C%20%u043A%u0430%u043A%u0438%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0441%u043B%u0435%u0434%u0443%u0435%u0442%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0432%20%u043E%u0431%u044B%u0447%u043D%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3A%0A//%20%20%20%20%20%20%20if%20%28%21%28link.ownerDocument.location.protocol%20%3D%3D%20%22file%3A%22%0A//%20%20%20%20%20%20%20%20%20%20%20%20%20%26%26%20link.className%20%3D%3D%20%27file%27%29%29%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20this.parent%20%3D%20parent%3B%0A%20%20%7D%0A%7D%29%3B%0A%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28%0A%20%20%5B%0A%20%20%20%20%27@namespace%20xul%20url%28%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%29%3B%27%2C%0A%20%20%20%20%27@namespace%20html%20url%28%22http%3A//www.w3.org/1999/xhtml%22%29%3B%27%2C%0A%20%20%20%20%27@namespace%20svg%20url%28http%3A//www.w3.org/2000/svg%29%3B%27%2C%0A%20%20%20%20%27%27%2C%0A%20%20%20%20%27@-moz-document%20url%28%22chrome%3A//browser/content/browser.xul%22%29%20%7B%27%2C%0A%20%20%20%20%27%20%20%23sidebar-throbber%5Bloading%5D%20%7E%20%23sb-reload-button%20%7B%27%2C%0A%20%20%20%20%27%20%20%20%20display%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%7D%27%2C%0A%20%20%20%20%27%20%20%23sidebar-throbber%3Anot%28%5Bloading%5D%29%20%7E%20%23sb-stop-button%20%7B%27%2C%0A%20%20%20%20%27%20%20%20%20display%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%7D%27%2C%0A%20%20%20%20%27%20%20%23sidebar-box%20toolbarbutton%5Bid%5E%3D%22sb-%22%5D%20%7B%27%2C%0A%20%20%20%20%27%20%20%20%20-moz-appearance%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20padding%3A%203.5px%206px%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20margin%3A%20.5px%200%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20background%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20background-clip%3A%20border-box%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20border%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20border-radius%3A%200%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20box-shadow%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%7D%27%2C%0A%20%20%20%20%27%20%20%23sidebar-box%3Anot%28%5Bsidebarcommand%3D%22viewWebPanelsSidebar%22%5D%29%20toolbarbutton%5Bid%5E%3D%22sb-%22%5D%20%7B%27%2C%0A%20%20%20%20%27%20%20%20%20display%3A%20none%21important%3B%27%2C%0A%20%20%20%20%27%20%20%7D%27%2C%0A%20%20%20%20%27%20%20%23sidebar-box%20toolbarbutton%5Bid%5E%3D%22sb-%22%5D%20.toolbarbutton-icon%20%7B%27%2C%0A//%20%20%20%u0420%u0430%u0441%u043A%u043E%u043C%u043C%u0435%u043D%u0442%u0438%u0440%u0443%u0439%u0442%u0435%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u043D%u0438%u0436%u0435%2C%20%u0435%u0441%u043B%u0438%20%u0443%20%u0432%u0430%u0441%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%u0430%20%u0441%u0430%u0439%u0434%u0431%u0430%u0440%u0430%20%u0438%u043C%u0435%u0435%u0442%20%u0442%u0435%u043C%u043D%u044B%u0439%20%u0444%u043E%u043D%3A%0A//%20%20%20%20%20%27%20%20%20%20filter%3A%20invert%28.9%29%20%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20opacity%3A%200.5%20%21important%3B%27%2C%0A%20%20%20%20%27%20%20%20%20transition%3A%20opacity%20ease%20200ms%20%21important%3B%27%2C%0A%20%20%20%20%27%20%20%7D%27%2C%0A%20%20%20%20%27%20%20%23sidebar-box%20toolbarbutton%5Bid%5E%3D%22sb-%22%5D%3Ahover%20.toolbarbutton-icon%20%7B%27%2C%0A%20%20%20%20%27%20%20%20%20opacity%3A%200.9%20%21important%3B%27%2C%0A%20%20%20%20%27%20%20%7D%27%2C%0A%20%20%20%20%27%7D%27%0A%20%20%5D.join%28%27%5Cn%27%29%29%29%3B%0AaddDestructor%28%28%29%3D%3E%20sss.unregisterSheet%28this.uri%2C%200%20%7C%7C%20uri%2C%200%29%29%3B%0Athis.uri%20%3D%20uri%3B%0Asss.loadAndRegisterSheet%28uri%2C%200%29%3B%0A%0A%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

Инициализация:

Выделить код

Код:

// Сайты в боковой панели от 02.09.2016
this.onclick =e=> {
  if (e.target != this) return;
  let clipboard = gClipboard.read();
  if (e.button == 0)
    menuPopup.openPopup(this, 'after_start');
  if (e.button == 1)
    openWebPanel(clipboard, clipboard);
  if (e.button == 2 && !e.shiftKey && !e.ctrlKey && !e.altKey) {
    e.preventDefault(); e.stopPropagation();
    openWebPanel(window.content.document.title, window.content.document.location)
  }
}
this.tooltipText = 'ЛКМ: Открыть меню со списком сохраненных адресов\n\СКМ: Открыть адрес из буфера\n\ПКМ: Открыть адрес активной вкладки';

var menuPopup = createNode("menupopup", self, false, {context: ""}),
    sbBox = SidebarUI._box,
    sbClsBtn = sbBox.querySelector(".close-icon.tabbable"),
    wps = "SidebarUI.browser.contentDocument.querySelector('browser#web-panels-browser').",
    sep = "\n\n",
    // Заменить строку ниже на: help = custombutton.buttonGetHelp(self).trim(),
    // если не хотите возиться с отключением проверки расширений
    // и установкой пофикшенного CB в фф48+
    help = self.Help.trim(),
    items = help
      ? help.split(sep)
      : ["About Config\nabout:config\nchrome://mozapps/skin/places/defaultFavicon.png"],
    menugroup = createNode("menugroup", menuPopup, false, {
      orient: "vertical",
      oncommand: "openPage(event.target);",
      oncontextmenu: "removePage(event.target);"
    }),
    cnMenu = document.getElementById("contentAreaContextMenu"),
    cnOpen = document.getElementById("context-sep-open"),
    cnItem = createNode("menuitem", cnOpen, true, {
      id: "open-in-sidebar",
      label: "Открыть в Боковой Панели",
      oncommand: "openWebPanel(gContextMenu.getLinkURL(), gContextMenu.getLinkURL()); document.getElementById('verticaltoolbar-button').click();"
    }),
    cnListener = cnMenu.addEventListener("popupshowing", ()=> cnItem.hidden = !gContextMenu.onLink),
    cnDestructor = addDestructor(()=> {
      cnMenu.removeEventListener("popupshowing", cnListener);
      cnMenu.removeChild(cnItem)
    }),
    sbNav = [
      ["back", "goBack();", "back-button-tooltip"],
      ["forward", "goForward();", "forward-button-tooltip"],
      ["reload", "reload();",, "Reload current page"],
      ["stop", "stop();",, "Stop loading this page"]
    ];

items.forEach((item, index) => {
  var [title, url, icon] = item.split("\n");
  icon = (icon.startsWith('chrome:') || icon.startsWith('file:') || icon.startsWith('data:')) ? icon : 'moz-anno:favicon:' + icon;
  createNode("menuitem", menugroup, false, {
    tooltiptext: url,
    class: "menuitem-iconic",
    label: title,
    image: icon
  }).index = index;
});
menugroup.openPage = ({index}) => openWebPanel(...items[index].split("\n"));
menugroup.removePage = ({index}) => items.splice(index, 1) && installButton(items.join(sep));

[
  ['menuseparator'],
  ['menuitem', 'Редактировать кнопку', 'custombuttons.editButton(this.parentNode.parentNode);'],
  ['menuitem', 'Открыть адрес из буфера обмена', 'openWebPanel(gClipboard.read(), gClipboard.read());'],
  ['menuitem', 'Добавить текущий сайт', 'this.parentNode.parentNode.addPage(window.content.document.title, window.content.document.location.href, gBrowser.mCurrentTab.image);']
].forEach(([type, lbl, cmd]) => 
          createNode(type, menuPopup, false, {label: lbl, oncommand: cmd}));

if (!sbBox.hasAttribute("navbuttons")) {
  sbNav.forEach(([id, cmd, tltp, ttxt]) => {
    var icon = "chrome://browser/skin/content-contextmenu.svg#" + id;
    id = 'sb-' + id + '-button';
    createNode("toolbarbutton", sbClsBtn, true, {
      id: id,
      oncommand: wps + cmd,
      tooltip: tltp,
      tooltiptext: ttxt,
      style: 'list-style-image: url("' + icon + '"); -moz-image-region: rect(0 11px 11px 0);'
    })
  })
  sbBox.setAttribute('navbuttons', 'true');
}

function installButton(help) {
    var link = custombuttons.makeButtonLink("edit", _id);
    var param = custombuttons.cbService.getButtonParameters(link);
    param = param.wrappedJSObject || param;
    param.help = help;
    custombuttons.cbService.installButton(param);
}

function createNode(type, elm, before, attrs) {
  var node = before
  ? elm.parentNode.insertBefore(document.createElement(type), elm)
  : elm.appendChild(document.createElement(type));
  for(var name in attrs) {
    if (attrs[name])
      node.setAttribute(name, attrs[name]);
  }
  return node;
}

this.addPage =(title, url, icon)=> {
  title = !title ? url : title;
  icon = !icon ? 'chrome://mozapps/skin/places/defaultFavicon.png' : icon;
  var newItem = [title, url, icon].join('\n');
  installButton([help, newItem].join(sep));
}

((browser, listener, br) => { if (browser) {
  addEventListener("DOMFrameContentLoaded", listener, true, browser);
  var getBr = () => browser.contentDocument.querySelector(listener.selector);
  if ((br = getBr())) br.window = {parent: listener.parent};
  addDestructor(() => {
    if ((br = getBr())) delete br.window;
  });
}})(SidebarUI.browser, {
  selector: "browser#web-panels-browser",
  handleEvent(e) {
    if (e.target.matches(this.selector) && !e.target.hasAttribute("disableglobalhistory")) {
      sbNav.forEach(([id, cmd]) => {
        id = '#context-' + id;
        var mItem = SidebarUI.browser.contentDocument.querySelector(id);
        if (id == "#context-reload")
          mItem.style.setProperty('display', '-moz-box', 'important');
        mItem.onclick =()=> eval(wps + cmd);
      })
      e.target.setAttribute("disableglobalhistory", 'false')
    }

    if (e.target.matches(this.selector) && !("window" in e.target))
      e.target.window = {parent: this.parent};
  },
  get parent() {
    delete this.parent;
    var parent = {};
    parent.contentAreaClick = eval(`(${
      contentAreaClick.toString().replace(
        'linkNode.getAttribute("onclick")',
        "!target && this.shouldLoadInPanelBrowser(linkNode) || $&"
      )
    })`);
    parent.shouldLoadInPanelBrowser = link => {
// Здесь можно задать исключения, какие ссылки следует открывать в обычных вкладках:
//       if (!(link.ownerDocument.location.protocol == "file:"
//             && link.className == 'file')) return true;
    }
    return this.parent = parent;
  }
});

var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
var uri = makeURI("data:text/css," + encodeURIComponent(
  [
    '@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");',
    '@namespace html url("http://www.w3.org/1999/xhtml");',
    '@namespace svg url(http://www.w3.org/2000/svg);',
    '',
    '@-moz-document url("chrome://browser/content/browser.xul") {',
    '  #sidebar-throbber[loading] ~ #sb-reload-button {',
    '    display: none!important;',
    '  }',
    '  #sidebar-throbber:not([loading]) ~ #sb-stop-button {',
    '    display: none!important;',
    '  }',
    '  #sidebar-box toolbarbutton[id^="sb-"] {',
    '    -moz-appearance: none!important;',
    '    padding: 3.5px 6px!important;',
    '    margin: .5px 0!important;',
    '    background: none!important;',
    '    background-clip: border-box!important;',
    '    border: none!important;',
    '    border-radius: 0!important;',
    '    box-shadow: none!important;',
    '  }',
    '  #sidebar-box:not([sidebarcommand="viewWebPanelsSidebar"]) toolbarbutton[id^="sb-"] {',
    '    display: none!important;',
    '  }',
    '  #sidebar-box toolbarbutton[id^="sb-"] .toolbarbutton-icon {',
//   Раскомментируйте строку ниже, если у вас заголовок сайдбара имеет темный фон:
//     '    filter: invert(.9) !important;',
    '    opacity: 0.5 !important;',
    '    transition: opacity ease 200ms !important;',
    '  }',
    '  #sidebar-box toolbarbutton[id^="sb-"]:hover .toolbarbutton-icon {',
    '    opacity: 0.9 !important;',
    '  }',
    '}'
  ].join('\n')));
addDestructor(()=> sss.unregisterSheet(this.uri, 0 || uri, 0));
this.uri = uri;
sss.loadAndRegisterSheet(uri, 0);

Иконка (www.flaticon.com):

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAiEAAAIhAENVwL6AAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAHqSURBVHjarJM9aBVBFIW/s2wkgmDnDxoUgoJWokXERlEbf5pY2AhCCkWUgCaNvs3b2Z335lmZoETRINhKLPxD0CZgI0GtLFQUG8FGmxSBmBRzbSYSJE2IB4b5u/cMc+65MjOWYsT57cAVM9sL7AIi8EnSuxjjWKdV/Vgar0WCRrPqknQDuAB0AR+BsbS+DOwEfku6GWNsdFpV/EvQaFa5pElJ+8xsFlhrZn2dVvUrkW+R9Bb4CWyW9CrGONBpVTEHkDQK9JvZHNADzEv6WpQ16R6gG9gELJjZ2SzLvgNNXRtx2yR9AS5JOmJmfcAQy+Me8Bz4AFw3s95cUi8wHLy7X5T1LPA4ePdkueyirNcDM8G7p0VZr5G0Q41mdTB497oo6/3Bu+mirA+b2beUEwGyLMuTXj0p9kDw7k1R1kfVaFYvgUfA3VSBfqANXAUMyNPsgQ7wEJgAzgOnMuA2MJ4O7gCjwbtpYKOkBUDAuuDd+/TIOHBxMTYzsxfAieDdA+BY8G4qKT8QYxyWNCjpHICZPQOOB+8mgJPBu6lc0iFgNzAFbCjK+nTwbrJdl5//FVHSGWAmbfcUZT2/6jLKzCjK+hYwCMwlw8ynsRTdydYLQLekdrsum3n625CkrSuw8mSM0f2/ZlpNO/8ZAGBFAEu2Gqq+AAAAAElFTkSuQmCC


Спасибо Dumby за помощь и код и Stakhovsky - за идею кнопки.

Отсутствует

 

Board footer

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